diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 554e2ba13..c3410366a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -142,18 +142,9 @@ jobs: with: node-version-file: '.nvmrc' - - name: Setup pnpm - run: npm install -g pnpm - - - name: Get pnpm store directory - id: pnpm-cache - shell: bash - run: | - echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT - - name: Install dependencies run: | - pnpm install + npm install - name: Setup Surfer run: | @@ -162,12 +153,12 @@ jobs: - name: Bump version if: ${{ inputs.update_version && inputs.update_branch == 'release' }} run: | - pnpm surfer ci --brand ${{ inputs.update_branch }} --bump prerelease + npm run surfer -- ci --brand ${{ inputs.update_branch }} --bump prerelease - name: Bump version without new version if: ${{ !inputs.update_version || inputs.update_branch == 'twilight' }} run: | - pnpm surfer ci --brand ${{ inputs.update_branch }} + npm run surfer -- ci --brand ${{ inputs.update_branch }} - name: Debug run: | @@ -211,18 +202,9 @@ jobs: with: node-version-file: '.nvmrc' - - name: Setup pnpm - run: npm install -g pnpm - - - name: Get pnpm store directory - id: pnpm-cache - shell: bash - run: | - echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT - - name: Install dependencies run: | - pnpm install + npm install - name: Setup Surfer run: | @@ -230,15 +212,14 @@ jobs: - name: Activate Surfer CLI run: | - echo "There's a bug in the Surfer CLI, we run this so that Surfer sets everything up correctly" - pnpm surfer ci --brand ${{ inputs.update_branch }} --display-version ${{ needs.build-data.outputs.version }} + npm run surfer -- ci --brand ${{ inputs.update_branch }} --display-version ${{ needs.build-data.outputs.version }} - name: Check version run: | echo "$(pwd)" - ls . - echo "version=$(pnpm surfer get version | xargs)" >> $GITHUB_OUTPUT - if [[ $(pnpm surfer get version | xargs) == ${{ needs.build-data.outputs.version }} ]]; then + echo $(npm run --silent surfer -- get version | xargs) + echo "version=$(npm run --silent surfer -- get version | xargs)" >> $GITHUB_OUTPUT + if [[ $(npm run --silent surfer -- get version | xargs) == ${{ needs.build-data.outputs.version }} ]]; then echo ">>> Version matches" else echo ">>> Version mismatch" @@ -268,27 +249,18 @@ jobs: git config --global user.email "mauro-balades@users.noreply.github.com" git config --global user.name "mauro-balades" - - name: Setup pnpm - run: npm install -g pnpm - - - name: Get pnpm store directory - id: pnpm-cache - shell: bash - run: | - echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT - - name: Install dependencies run: | - pnpm install + npm install - name: Load Surfer CI setup - run: pnpm surfer ci --brand ${{ inputs.update_branch }} --display-version ${{ needs.build-data.outputs.version }} + run: npm run surfer -- ci --brand ${{ inputs.update_branch }} --display-version ${{ needs.build-data.outputs.version }} - name: Download Firefox source and dependencies - run: pnpm surfer download --verbose + run: npm run download --verbose - name: Import - run: pnpm surfer import --verbose + run: npm run import -- --verbose - name: Compress run: | @@ -400,14 +372,14 @@ jobs: - name: Install dependencies run: | - npm install -g pnpm + npm install sudo apt-get update sudo apt-get -y install libfuse2 desktop-file-utils appstream - name: Download Linux build uses: actions/download-artifact@v4 with: - name: zen.linux-${{ matrix.arch }}.tar.bz2 + name: zen.linux-${{ matrix.arch }}.tar.xz - name: Execute AppImage build run: | @@ -547,8 +519,8 @@ jobs: with: files: | zen.source.tar.zst - zen.linux-x86_64.tar.bz2 - zen.linux-aarch64.tar.bz2 + zen.linux-x86_64.tar.xz + zen.linux-aarch64.tar.xz zen-x86_64.AppImage zen-x86_64.AppImage.zsync zen-aarch64.AppImage @@ -581,8 +553,8 @@ jobs: title: 'Release build - ${{ needs.build-data.outputs.version }} (${{ needs.build-data.outputs.build_date }})' files: | zen.source.tar.zst - zen.linux-x86_64.tar.bz2 - zen.linux-aarch64.tar.bz2 + zen.linux-x86_64.tar.xz + zen.linux-aarch64.tar.xz zen-x86_64.AppImage zen-x86_64.AppImage.zsync zen-aarch64.AppImage @@ -674,12 +646,12 @@ jobs: - name: Download Linux x86_64 build uses: actions/download-artifact@v4 with: - name: zen.linux-x86_64.tar.bz2 + name: zen.linux-x86_64.tar.xz - name: Download Linux aarch64 build uses: actions/download-artifact@v4 with: - name: zen.linux-aarch64.tar.bz2 + name: zen.linux-aarch64.tar.xz - name: Update repository uses: actions/checkout@v4 @@ -701,8 +673,8 @@ jobs: python3 ./zen-browser/scripts/prepare-flatpak-release.py \ --flatpak-archive archive.tar \ --version ${{ needs.build-data.outputs.version }} \ - --linux-archive zen.linux-x86_64.tar.bz2 \ - --linux-aarch64-archive zen.linux-aarch64.tar.bz2 \ + --linux-archive zen.linux-x86_64.tar.xz \ + --linux-aarch64-archive zen.linux-aarch64.tar.xz \ --output app.zen_browser.zen.yml \ --template-root ./zen-browser/flatpak @@ -715,7 +687,7 @@ jobs: run: | rm -rf zen-browser rm -rf archive.tar - rm -rf zen.linux-x86_64.tar.bz2 + rm -rf zen.linux-x86_64.tar.xz - name: Upload Flatpak manifest uses: actions/upload-artifact@v4 diff --git a/.github/workflows/code-linter.yml b/.github/workflows/code-linter.yml index 9928b2cfb..d9cd6db7c 100644 --- a/.github/workflows/code-linter.yml +++ b/.github/workflows/code-linter.yml @@ -27,11 +27,8 @@ jobs: - name: Setup autopep8 run: sudo apt install python3-autopep8 - - name: Setup pnpm - run: npm install -g pnpm - - name: Install dependencies - run: pnpm install + run: npm install - name: Lint - run: pnpm lint + run: npm run lint diff --git a/.github/workflows/linux-release-build.yml b/.github/workflows/linux-release-build.yml index db4aa4667..2b18b6976 100644 --- a/.github/workflows/linux-release-build.yml +++ b/.github/workflows/linux-release-build.yml @@ -81,24 +81,15 @@ jobs: path: /home/runner/.cache/sccache key: ${{ runner.os }}-sccache - - name: Setup pnpm - run: npm install -g pnpm - - - name: Get pnpm store directory - id: pnpm-cache - shell: bash - run: | - echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT - - name: Install dependencies run: | - pnpm install + npm install - name: Load Surfer CI setup - run: pnpm surfer ci --brand ${{ inputs.release-branch }} --display-version ${{ inputs.build-version }} + run: npm run surfer -- ci --brand ${{ inputs.release-branch }} --display-version ${{ inputs.build-version }} - name: Download Firefox source and dependencies - run: pnpm surfer download + run: npm run download - name: Fix Rust version run: | @@ -115,7 +106,7 @@ jobs: - name: Import env: SURFER_COMPAT: ${{ matrix.arch }} - run: pnpm surfer import + run: npm run import - name: Build language packs run: sh scripts/download-language-packs.sh @@ -146,19 +137,19 @@ jobs: run: | export SURFER_PLATFORM="linux" export ZEN_RELEASE=1 - pnpm package + npm run package - name: Rename artifacts run: | - mv dist/zen-*.tar.bz2 "zen.linux-${{ matrix.arch }}.tar.bz2" + mv dist/zen-*.tar.xz "zen.linux-${{ matrix.arch }}.tar.xz" mv dist/output.mar linux${{ matrix.arch == 'aarch64' && '-aarch64' || '' }}.mar - name: Upload build artifact (binary) uses: actions/upload-artifact@v4 with: retention-days: 5 - name: zen.linux-${{ matrix.arch }}.tar.bz2 - path: ./zen.linux-${{ matrix.arch }}.tar.bz2 + name: zen.linux-${{ matrix.arch }}.tar.xz + path: ./zen.linux-${{ matrix.arch }}.tar.xz - name: Upload build artifact (.mar) uses: actions/upload-artifact@v4 diff --git a/.github/workflows/macos-release-build.yml b/.github/workflows/macos-release-build.yml index a5a143217..b3f5c51c0 100644 --- a/.github/workflows/macos-release-build.yml +++ b/.github/workflows/macos-release-build.yml @@ -81,24 +81,15 @@ jobs: echo 'export PATH="/usr/local/opt/gnu-tar/libexec/gnubin:$PATH"' >> ~/.zsh source ~/.bash_profile - - name: Setup pnpm - run: npm install -g pnpm - - - name: Get pnpm store directory - id: pnpm-cache - shell: bash - run: | - echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT - - name: Install dependencies run: | - pnpm install + npm install - name: Load surfer CI setup - run: pnpm surfer ci --brand ${{ inputs.release-branch }} --display-version ${{ inputs.build-version }} + run: npm run surfer -- ci --brand ${{ inputs.release-branch }} --display-version ${{ inputs.build-version }} - name: Download Firefox source and dependencies - run: pnpm surfer download + run: npm run download - name: Bootstrap run: | @@ -111,7 +102,7 @@ jobs: - name: Import env: SURFER_COMPAT: ${{ matrix.arch }} - run: pnpm surfer import --verbose + run: npm run import -- --verbose - name: Build language packs run: sh scripts/download-language-packs.sh @@ -134,7 +125,7 @@ jobs: run: | export SURFER_PLATFORM="darwin" export ZEN_RELEASE=1 - pnpm package + npm run package - name: Rename artifacts run: | diff --git a/.github/workflows/macos-universal-release-build.yml b/.github/workflows/macos-universal-release-build.yml index cbabcb77d..32301719c 100644 --- a/.github/workflows/macos-universal-release-build.yml +++ b/.github/workflows/macos-universal-release-build.yml @@ -68,24 +68,15 @@ jobs: echo 'export PATH="/usr/local/opt/gnu-tar/libexec/gnubin:$PATH"' >> ~/.zsh source ~/.bash_profile - - name: Setup pnpm - run: npm install -g pnpm - - - name: Get pnpm store directory - id: pnpm-cache - shell: bash - run: | - echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT - - name: Install dependencies run: | - pnpm install + npm install - name: Load surfer CI setup - run: pnpm surfer ci --brand ${{ inputs.release-branch }} --display-version ${{ inputs.build-version }} + run: npm run surfer -- ci --brand ${{ inputs.release-branch }} --display-version ${{ inputs.build-version }} - name: Download Firefox source and dependencies - run: pnpm surfer download + run: npm run download - name: Bootstrap run: | @@ -96,13 +87,13 @@ jobs: cd .. - name: Import - run: pnpm surfer import + run: npm run import - name: Populate mozconfig env: SURFER_MOZCONFIG_ONLY: true run: | - pnpm build + npm run build cd engine ./mach configure @@ -252,7 +243,7 @@ jobs: export MAR=$(pwd)/zen-macos-host-mar chmod +x $MAR echo "MAR=$MAR" - pnpm package --verbose + npm run package -- --verbose mv ./dist/output.mar ./macos.mar - name: Upload build artifact (.mar) diff --git a/.github/workflows/pr-test.yml b/.github/workflows/pr-test.yml index 385cb2fb4..2d18f0dcc 100644 --- a/.github/workflows/pr-test.yml +++ b/.github/workflows/pr-test.yml @@ -19,14 +19,11 @@ jobs: with: node-version-file: '.nvmrc' - - name: Setup pnpm - run: npm install -g pnpm - - name: Install Surfer run: npm i -g @zen-browser/surfer - name: Install dependencies - run: pnpm install + run: npm install - name: Download Firefox and dependencies run: surfer download diff --git a/.github/workflows/src/release-build.sh b/.github/workflows/src/release-build.sh index 29f1f4d32..be7119a2d 100644 --- a/.github/workflows/src/release-build.sh +++ b/.github/workflows/src/release-build.sh @@ -17,12 +17,12 @@ if command -v Xvfb &> /dev/null; then export DISPLAY=:2 fi export ZEN_RELEASE=1 - pnpm build + npm run build else echo "Xvfb could not be found, running without it" echo "ASSUMING YOU ARE RUNNING THIS ON MACOS" set -v export ZEN_RELEASE=1 - pnpm build + npm run build fi diff --git a/.github/workflows/windows-profile-build.yml b/.github/workflows/windows-profile-build.yml index 97a18017c..4076fcec3 100644 --- a/.github/workflows/windows-profile-build.yml +++ b/.github/workflows/windows-profile-build.yml @@ -41,14 +41,11 @@ jobs: git config --global user.email "mauro-balades@users.noreply.github.com" git config --global user.name "mauro-balades" - - name: Setup pnpm - run: npm install -g pnpm - - name: Install Surfer run: npm i -g @zen-browser/surfer - name: Load Surfer CI setup - run: pnpm surfer ci --brand ${{ inputs.release-branch }} --display-version ${{ inputs.build-version }} + run: npm run surfer -- ci --brand ${{ inputs.release-branch }} --display-version ${{ inputs.build-version }} - name: Download artifact if: ${{ matrix.arch == 'x86_64' }} @@ -74,13 +71,13 @@ jobs: if: ${{ matrix.arch == 'x86_64' }} run: | git config --global core.safecrlf false - pnpm surfer download + npm run download - name: Import patches if: ${{ matrix.arch == 'x86_64' }} env: SURFER_NO_BRANDING_PATCH: true - run: pnpm surfer import + run: npm run import - name: Generate if: ${{ matrix.arch == 'x86_64' }} diff --git a/.github/workflows/windows-release-build.yml b/.github/workflows/windows-release-build.yml index 799db21f9..ff49f48f3 100644 --- a/.github/workflows/windows-release-build.yml +++ b/.github/workflows/windows-release-build.yml @@ -52,9 +52,6 @@ jobs: with: node-version-file: '.nvmrc' - - name: Setup pnpm - run: npm install -g pnpm - - name: Setup Git run: | git config --global user.email "mauro-balades@users.noreply.github.com" @@ -62,16 +59,16 @@ jobs: - name: Install dependencies run: | - pnpm install + npm install sudo apt-get update sudo apt-get install -y python3 python3-pip dos2unix yasm nasm build-essential libgtk2.0-dev libpython3-dev m4 uuid libasound2-dev libcurl4-openssl-dev libdbus-1-dev libdrm-dev libdbus-glib-1-dev libgtk-3-dev libpulse-dev libx11-xcb-dev libxt-dev xvfb lld llvm --fix-missing - name: Load Surfer CI setup - run: pnpm surfer ci --brand ${{ inputs.release-branch }} --display-version ${{ inputs.build-version }} + run: npm run surfer -- ci --brand ${{ inputs.release-branch }} --display-version ${{ inputs.build-version }} - name: Download Firefox and dependencies if: ${{ !(inputs.generate-gpo && matrix.arch == 'aarch64') }} - run: pnpm surfer download + run: npm run download - name: win-cross Cache env: @@ -152,9 +149,8 @@ jobs: cd engine/ chmod -R +x "$(echo ~)/win-cross/vs2022" || true cd .. - npm install -g pnpm export SURFER_PLATFORM="win32" - pnpm surfer bootstrap + npm run bootstrap cd engine/ ls ~/.mozbuild/clang/lib/clang/ echo "export LIB=\"$(cd ~/.mozbuild/clang/lib/clang/* && cd lib/windows && pwd)\"" >> ../configs/common/mozconfig @@ -185,7 +181,7 @@ jobs: if: ${{ !(inputs.generate-gpo && matrix.arch == 'aarch64') }} env: SURFER_COMPAT: ${{ matrix.arch }} - run: pnpm surfer import --verbose + run: npm run import -- --verbose - name: Build language packs if: ${{ !(inputs.generate-gpo && matrix.arch == 'aarch64') }} @@ -235,8 +231,8 @@ jobs: export SURFER_PLATFORM="win32" export ZEN_CROSS_COMPILING=1 export ZEN_RELEASE=1 - pnpm package - mv ./dist/zen-$(pnpm surfer get version | xargs).en-US.win64${{ matrix.arch == 'aarch64' && '-aarch64' || '' }}.zip zen.win64.zip + npm run package + mv ./dist/zen-$(npm run --silent surfer -- get version | xargs).en-US.win64${{ matrix.arch == 'aarch64' && '-aarch64' || '' }}.zip zen.win64.zip ls ./dist ls . diff --git a/README.md b/README.md index 3cbf46c84..8387bb050 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ ## 🖥️ Compatibility -Zen is currently built using firefox version `134.0.2`! 🚀 +Zen is currently built using firefox version `135.0`! 🚀 - [`Zen Twilight`](https://zen-browser.app/download?twilight) - Is currently built using firefox version `RC 135.0`! - Check out the latest [release notes](https://zen-browser.app/release-notes)! @@ -117,7 +117,7 @@ Some components used by @zen-browser as an attempt to make firefox forks a bette #### `Run Locally` -In order to download and run zen locally, please follow [these instructions](https://docs.zen-browser.app/contribute/desktop). +In order to download and run zen locally, please follow [these instructions](https://docs.zen-browser.app/building). #### `Special Thanks` diff --git a/build/winsign/sign.ps1 b/build/winsign/sign.ps1 index 89e7b6514..c5cba97c5 100644 --- a/build/winsign/sign.ps1 +++ b/build/winsign/sign.ps1 @@ -29,7 +29,7 @@ echo "Downloaded x86_64 artifacts" mkdir engine\obj-x86_64-pc-windows-msvc\ -ErrorAction SilentlyContinue -pnpm surfer ci --brand release +npm run surfer -- ci --brand release function SignAndPackage($name) { echo "Executing on $name" @@ -53,7 +53,7 @@ function SignAndPackage($name) { } echo "Compat Mode? $env:SURFER_COMPAT" - pnpm surfer package --verbose + npm run package -- --verbose # In the release script, we do the following: # tar -xvf .github/workflows/object/windows-x64-signed-x86_64.tar.gz -C windows-x64-signed-x86_64 diff --git a/docs/issue-metrics/2025_2025-01-01..2025-01-31.md b/docs/issue-metrics/2025_2025-01-01..2025-01-31.md new file mode 100644 index 000000000..0eed99eba --- /dev/null +++ b/docs/issue-metrics/2025_2025-01-01..2025-01-31.md @@ -0,0 +1,522 @@ +# Issue Metrics + +| Metric | Average | Median | 90th percentile | +| --- | --- | --- | ---: | +| Time to first response | 1 day, 2:25:19 | 4:38:40 | 2 days, 20:40:51 | +| Time to close | 1 day, 21:15:55 | 8:22:21 | 5 days, 17:16:45 | + +| Metric | Count | +| --- | ---: | +| Number of items that remain open | 274 | +| Number of items closed | 230 | +| Total number of items created | 504 | + +| Title | URL | Time to first response | Time to close | +| --- | --- | --- | --- | +| Screen Sharing Issues when using Google Meet in Zen Browser | https://github.com/zen-browser/desktop/issues/4798 | 0:20:41 | 0:20:40 | +| All tabs are gone after I close Zen | https://github.com/zen-browser/desktop/issues/4797 | 1:59:48 | None | +| Setting the "Zen URL Bar" behavior to "Always floating" works the same as "Floating only when typing". | https://github.com/zen-browser/desktop/issues/4796 | None | None | +| Toggle Compact Mode Not Responsive | https://github.com/zen-browser/desktop/issues/4795 | 1:25:51 | 1:25:51 | +| Closing the last tab doesn't close the browser (again) | https://github.com/zen-browser/desktop/issues/4794 | 3:26:40 | None | +| flickering images | https://github.com/zen-browser/desktop/issues/4791 | None | None | +| Zen incorrectly assumes background color to be dark on some websites, making text unreadable | https://github.com/zen-browser/desktop/issues/4789 | 0:09:17 | 0:09:17 | +| Ctrl-tab should not cycle through essential tabs | https://github.com/zen-browser/desktop/issues/4787 | 4:08:36 | None | +| Erroneous conflicting shortcut (and maybe missing shortcut options) | https://github.com/zen-browser/desktop/issues/4785 | None | None | +| Touchpad space switching issue | https://github.com/zen-browser/desktop/issues/4783 | None | 0:02:16 | +| Closing 'new tab' or last opened tab opens last pinned tab or pinned essential if there is no pinned tab | https://github.com/zen-browser/desktop/issues/4779 | 0:41:29 | 1:03:21 | +| Scrolling bar UI issue: ugly white background | https://github.com/zen-browser/desktop/issues/4778 | 1:05:49 | 4:13:36 | +| Extensions become "big" after switching mode | https://github.com/zen-browser/desktop/issues/4777 | 1:36:21 | 1:36:21 | +| Missing "New Tab" option at the bottom of tab column | https://github.com/zen-browser/desktop/issues/4776 | 1:27:47 | 1:27:47 | +| PDF tab becomes unusable after unloading with unsaved edits | https://github.com/zen-browser/desktop/issues/4772 | None | 2:02:14 | +| Cloudflare ZeroTrust (Warp) VPN unable to connect if Zen is default browser | https://github.com/zen-browser/desktop/issues/4771 | None | None | +| Default Wayland Icon shows up in some places in KDE when installing from AppImage | https://github.com/zen-browser/desktop/issues/4770 | 2:51:55 | 2:54:44 | +| If i close a tab in the sidebar it reloads the entire window and also goes to the starting tabs again which i dont need | https://github.com/zen-browser/desktop/issues/4769 | 1:30:05 | 4:24:03 | +| Font doesnt load properly !! | https://github.com/zen-browser/desktop/issues/4767 | 1:27:56 | 3:58:48 | +| Tab Creation | https://github.com/zen-browser/desktop/issues/4766 | None | 0:01:11 | +| Open application menu button missing in Single toolbar mode | https://github.com/zen-browser/desktop/issues/4765 | 4:28:00 | 4:28:00 | +| moving through workspaces by trackpad swipe tracks the movement but not the direction | https://github.com/zen-browser/desktop/issues/4764 | None | None | +| Netflix does not work in zen | https://github.com/zen-browser/desktop/issues/4762 | 0:07:51 | 1:51:17 | +| Unable to remove duplicate workspaces buttons. | https://github.com/zen-browser/desktop/issues/4761 | 5:03:40 | 5:03:40 | +| Zen Identifies as Firefox in Powertoys run search plugin | https://github.com/zen-browser/desktop/issues/4759 | None | None | +| Close Window Keyboard Shortcut does nothing | https://github.com/zen-browser/desktop/issues/4758 | None | None | +| Scrolling on the tabs on a touch screen does nothing | https://github.com/zen-browser/desktop/issues/4757 | None | None | +| Glance stops working after closing with an unfinished form | https://github.com/zen-browser/desktop/issues/4756 | None | None | +| Dragging tabs scrollbar grabs window | https://github.com/zen-browser/desktop/issues/4755 | 7:07:32 | 7:07:31 | +| Pinned Tabs - URL does not reset when tab is closed, only when returning to the tab | https://github.com/zen-browser/desktop/issues/4754 | None | None | +| "empty space ontop of the vertical tabs" NOT fixed | https://github.com/zen-browser/desktop/issues/4753 | None | None | +| Passkeys using mac touchID is not working | https://github.com/zen-browser/desktop/issues/4752 | None | 8:03:39 | +| Out of order or hidden extensions on launch. Single Toolbar Mode | https://github.com/zen-browser/desktop/issues/4747 | None | None | +| Show in compact view not working | https://github.com/zen-browser/desktop/issues/4745 | 12:20:42 | 12:20:42 | +| Closing tab at the bottom of the tabs list puts you back on the top even if the tab isn't selected. | https://github.com/zen-browser/desktop/issues/4744 | 4:59:52 | 12:43:27 | +| Customizing toolbar spits the app | https://github.com/zen-browser/desktop/issues/4737 | 17:20:17 | 1 day, 0:31:32 | +| Zen URL bar settings doesn't work properly | https://github.com/zen-browser/desktop/issues/4736 | 12:52:11 | None | +| BUG: Bookmarks toolbar items shows 'Show more' arrow even though there are no more bookmarked items | https://github.com/zen-browser/desktop/issues/4735 | None | None | +| Scrolling after closing tab | https://github.com/zen-browser/desktop/issues/4733 | 15:39:10 | 1 day, 1:22:37 | +| BUG: Whole browser broken on Windows | https://github.com/zen-browser/desktop/issues/4732 | 0:08:04 | None | +| BUG: CTRL+SHIFT+B causes UI glitch by trying to show Bookmarks Toolbar in Single Toolbar Mode | https://github.com/zen-browser/desktop/issues/4731 | None | None | +| BUG:Abnormal printing of web articles | https://github.com/zen-browser/desktop/issues/4730 | 20:28:04 | 20:28:04 | +| JS close() calls constantly close the entire browser when a website calling it is the only tab left | https://github.com/zen-browser/desktop/issues/4729 | None | None | +| Dragging empty space on sidebar tabs undocks and moves the program | https://github.com/zen-browser/desktop/issues/4728 | 21:01:43 | 21:01:43 | +| The tab bar and top bar overlap and make it annoying to close the browser. | https://github.com/zen-browser/desktop/issues/4726 | None | None | +| Tab switching to recent tab (Ctrl-Tab) doesn't work across workspaces | https://github.com/zen-browser/desktop/issues/4725 | None | None | +| Top and side bars do not disappear in fullscreen mode | https://github.com/zen-browser/desktop/issues/4723 | 13:46:56 | 22:02:10 | +| Toggling "Display workspaces as an icon strip" twice doesn't return to correctly rendered strip | https://github.com/zen-browser/desktop/issues/4722 | None | None | +| Separate window cannot be closed | https://github.com/zen-browser/desktop/issues/4719 | 1 day, 1:32:05 | None | +| Customize the toolbar without the toggle sidebar icon | https://github.com/zen-browser/desktop/issues/4717 | 1 day, 1:07:42 | None | +| No option to translate to Vietnamese | https://github.com/zen-browser/desktop/issues/4716 | None | None | +| When opening a site with prompt credentials form, the site cannot be opened | https://github.com/zen-browser/desktop/issues/4715 | None | None | +| Links that are not from same domain are opened in Glance when clicked within essential tab, even when Glance is disabled and browser restarted. | https://github.com/zen-browser/desktop/issues/4714 | None | None | +| Selected audio output device (speaker) is not being used | https://github.com/zen-browser/desktop/issues/4713 | None | None | +| ZEN BROWSER crash when open "more tools" menu twice | https://github.com/zen-browser/desktop/issues/4712 | 0:02:34 | None | +| Infinity loading | https://github.com/zen-browser/desktop/issues/4711 | None | 6:24:50 | +| Duplicate entry in Settings > Keyboard Shortcuts | https://github.com/zen-browser/desktop/issues/4709 | None | None | +| [BUG] Extension icons becomes huge after folding tabbar | https://github.com/zen-browser/desktop/issues/4707 | 9:14:59 | None | +| Duplicate entries in settings page | https://github.com/zen-browser/desktop/issues/4706 | None | None | +| Jitter / Stutter on macbook pro with apple silicon | https://github.com/zen-browser/desktop/issues/4705 | 0:21:08 | None | +| Wallpaper settings subsections don't take full width | https://github.com/zen-browser/desktop/issues/4704 | None | None | +| Zen Rice sharing is broken | https://github.com/zen-browser/desktop/issues/4701 | 2:38:42 | 11:21:17 | +| Preedit text misplacement in search box under Wayland with Fcitx5 input method | https://github.com/zen-browser/desktop/issues/4699 | None | None | +| permanently disable browser.tabs.allow_transparent_browser | https://github.com/zen-browser/desktop/issues/4698 | 1 day, 15:39:09 | None | +| Bookmarks Duplicated & Out of Sync | https://github.com/zen-browser/desktop/issues/4697 | None | None | +| Twitch freeze when alt-tabbing | https://github.com/zen-browser/desktop/issues/4696 | 2 days, 3:55:36 | None | +| Popup for TST extension that should occur once, occurs every time Zen is launched (Windows build issue, not Mac) | https://github.com/zen-browser/desktop/issues/4695 | 0:17:58 | None | +| overflow menu. | https://github.com/zen-browser/desktop/issues/4694 | None | None | +| Close tab X button hitbox is different between hover hitbox and click hitbox | https://github.com/zen-browser/desktop/issues/4692 | None | None | +| Menu Alignment Issues | https://github.com/zen-browser/desktop/issues/4691 | None | None | +| Zen freezes several times a day | https://github.com/zen-browser/desktop/issues/4690 | 2 days, 1:37:06 | 2 days, 5:28:59 | +| Scroll issue | https://github.com/zen-browser/desktop/issues/4689 | None | None | +| Issue with Zen Browser Getting Uninstalled Automatically | https://github.com/zen-browser/desktop/issues/4688 | None | None | +| Glance and Keyboard Focus | https://github.com/zen-browser/desktop/issues/4687 | 15:14:37 | None | +| Opening a new Tab when currently in an Essential tab, opens the news tab in Glance Mode | https://github.com/zen-browser/desktop/issues/4686 | 2 days, 4:20:37 | None | +| Empty Space on Tab bar above Workspace when aligned to right | https://github.com/zen-browser/desktop/issues/4683 | 1 day, 23:36:21 | None | +| [BUG] Native sidebar and Zen sidepanel splitters are positioned too close to each other | https://github.com/zen-browser/desktop/issues/4680 | None | None | +| Terminology (and icons) for Sidebars and Side Web Panels too similar and ambiguous | https://github.com/zen-browser/desktop/issues/4679 | 0:11:52 | 2 days, 15:30:38 | +| Customize toolbar in single toolbar mode looks like multiple toolbars | https://github.com/zen-browser/desktop/issues/4678 | None | None | +| Elements in top toolbar overlap when it is resized too small | https://github.com/zen-browser/desktop/issues/4676 | None | None | +| Empty space on the top of compact mode small sidebar | https://github.com/zen-browser/desktop/issues/4674 | 0:14:45 | 0:14:45 | +| Headset is not recognized in google meet | https://github.com/zen-browser/desktop/issues/4671 | None | None | +| Popup is cut in compact mode | https://github.com/zen-browser/desktop/issues/4670 | None | None | +| Combining windows causes tabs in other workspaces to become inaccessible | https://github.com/zen-browser/desktop/issues/4668 | None | None | +| Adjust search text and icon size when searching on a new tab. | https://github.com/zen-browser/desktop/issues/4667 | None | None | +| Tabs freezes while my RAM/VRAM utlizing | https://github.com/zen-browser/desktop/issues/4666 | None | None | +| Workspace Icons are overlayed with the theme color | https://github.com/zen-browser/desktop/issues/4665 | 15:18:13 | 15:18:13 | +| Unable to assign Cmd+Z for undo | https://github.com/zen-browser/desktop/issues/4664 | None | None | +| Black Screen on Windows after opening the Zen Browser | https://github.com/zen-browser/desktop/issues/4663 | None | None | +| Forward button icon slightly offcenter | https://github.com/zen-browser/desktop/issues/4662 | None | None | +| Everything opens in Glance | https://github.com/zen-browser/desktop/issues/4661 | 13:00:08 | 13:00:08 | +| Wrong location of title bar buttons when opening external links from VS Code | https://github.com/zen-browser/desktop/issues/4660 | None | None | +| Web Page print would not render preview | https://github.com/zen-browser/desktop/issues/4659 | 0:18:04 | 0:18:04 | +| Issue with Youtube playback in 4K quality | https://github.com/zen-browser/desktop/issues/4652 | None | None | +| when searching on the address bar, a new tab open instead of the origion tab | https://github.com/zen-browser/desktop/issues/4651 | None | None | +| Compact mode won't disable after changing which toolbars are hidden | https://github.com/zen-browser/desktop/issues/4649 | 16:26:34 | None | +| Problem with tab bar and top bar | https://github.com/zen-browser/desktop/issues/4648 | 7:28:57 | None | +| Excessive margin between bookmark sidebar and center pane | https://github.com/zen-browser/desktop/issues/4647 | 7:37:12 | None | +| I am not able to save my bookmarks of zen with the autoExportHTML flag, this works fine on firefox though. | https://github.com/zen-browser/desktop/issues/4646 | None | None | +| Dropdown input is not selected | https://github.com/zen-browser/desktop/issues/4645 | None | None | +| Toolbar becomes big after customizing the bookmarks placement | https://github.com/zen-browser/desktop/issues/4641 | None | None | +| Zen Mods are not properly installing | https://github.com/zen-browser/desktop/issues/4640 | None | None | +| HDR video plays in SDR | https://github.com/zen-browser/desktop/issues/4639 | None | 3 days, 3:56:44 | +| The rounded corner to the bottom right of the web viewport needs a bigger border radius on linux GTK | https://github.com/zen-browser/desktop/issues/4638 | 3:57:05 | 3:57:05 | +| Tab bar title not aligned properly | https://github.com/zen-browser/desktop/issues/4636 | None | None | +| Window Control Buttons Missing on Linux | https://github.com/zen-browser/desktop/issues/4635 | None | None | +| System freezes while using zen browser | https://github.com/zen-browser/desktop/issues/4634 | 4 days, 17:38:33 | None | +| keymaps issue | https://github.com/zen-browser/desktop/issues/4631 | 0:42:05 | None | +| tool bar stucked | https://github.com/zen-browser/desktop/issues/4630 | 7:29:01 | 1 day, 2:03:18 | +| side bar bug | https://github.com/zen-browser/desktop/issues/4628 | None | None | +| System Crashes (Blue Screen) While Using Zen Browser | https://github.com/zen-browser/desktop/issues/4627 | 10:07:14 | None | +| Macos fullscreen url bar overlaps with bookmark | https://github.com/zen-browser/desktop/issues/4625 | None | None | +| pdf will not load to print | https://github.com/zen-browser/desktop/issues/4623 | 1:48:06 | 1 day, 21:47:12 | +| The sidebar loses it's colour when in compact mode and revealed using the mouse cursor | https://github.com/zen-browser/desktop/issues/4621 | None | None | +| Printer Menu Perpetually Loads; cannot print anything from the browser | https://github.com/zen-browser/desktop/issues/4620 | 0:17:13 | 0:17:13 | +| Extension install dialog is over the tab-bar | https://github.com/zen-browser/desktop/issues/4617 | None | None | +| Light and Dark Mode from Firefox UI Bug | https://github.com/zen-browser/desktop/issues/4616 | None | None | +| Starting 1.7.1b, colourful dark theme doesn't work on browser frame | https://github.com/zen-browser/desktop/issues/4615 | None | None | +| Installing mods overwrites all currently installed ones | https://github.com/zen-browser/desktop/issues/4614 | None | None | +| text pops out of the buttons in Russian | https://github.com/zen-browser/desktop/issues/4613 | None | None | +| Can't do sidebar smaller | https://github.com/zen-browser/desktop/issues/4612 | 0:54:29 | 1 day, 14:32:22 | +| Customized toolbar icons aren't showing | https://github.com/zen-browser/desktop/issues/4610 | 5 days, 0:37:36 | None | +| Web view rounded corners disappear when `backdrop-filter` is used in the page | https://github.com/zen-browser/desktop/issues/4609 | None | None | +| Links don't open in browser | https://github.com/zen-browser/desktop/issues/4608 | None | 6 days, 11:27:06 | +| Issues with tab bar padding and workspaces | https://github.com/zen-browser/desktop/issues/4607 | None | 6 days, 11:37:23 | +| New Windows do not focus the address bar automatically | https://github.com/zen-browser/desktop/issues/4606 | None | None | +| Keybinding Conflict in Zen Browser | https://github.com/zen-browser/desktop/issues/4605 | 2 days, 17:44:23 | None | +| Zen browser URL bar flickering | https://github.com/zen-browser/desktop/issues/4604 | 23:56:25 | None | +| Workspace icon does not get set on creation | https://github.com/zen-browser/desktop/issues/4603 | None | None | +| Browser crashed when clicking expand toolbar button | https://github.com/zen-browser/desktop/issues/4600 | None | None | +| Close Pinned tabs in right click menu ignores "close tab shortcut behaviour" in prefs | https://github.com/zen-browser/desktop/issues/4599 | None | None | +| Weird color highlight (again) & thin border on right side | https://github.com/zen-browser/desktop/issues/4598 | None | None | +| Window control buttons disappear on MacOS | https://github.com/zen-browser/desktop/issues/4597 | None | None | +| Zen is not showing up in the default web browser selection on Elementary OS 8 settings | https://github.com/zen-browser/desktop/issues/4594 | 3:27:41 | 23:09:00 | +| My accounts keep signing out after a while. (Google, Github) | https://github.com/zen-browser/desktop/issues/4593 | 6 days, 0:59:05 | None | +| Arrows are Backwards | https://github.com/zen-browser/desktop/issues/4592 | 7:58:01 | 19:33:43 | +| Bookmarks Toolbar automatically hides in "Single toolbar" layout even though "Alway Show" is enabled | https://github.com/zen-browser/desktop/issues/4591 | None | None | +| Zen couldn’t find any programs that contain bookmark, history or password data. | https://github.com/zen-browser/desktop/issues/4589 | 0:12:09 | 0:12:09 | +| Cannot remove Workspace switch from side bar/toolbar | https://github.com/zen-browser/desktop/issues/4588 | 0:10:50 | 0:18:19 | +| Window size of [Shows tabs from other devices] | https://github.com/zen-browser/desktop/issues/4586 | None | None | +| Bug, tabs getting "stuck" randomly, unclickable | https://github.com/zen-browser/desktop/issues/4583 | 11:25:21 | None | +| Sort Mods Store by popularity | https://github.com/zen-browser/desktop/issues/4582 | 6:36:38 | 6:36:38 | +| Significant FPS drop when playing 4k/1440p youtube video | https://github.com/zen-browser/desktop/issues/4580 | 0:12:21 | None | +| Adressbar only showing on hover if sidebar width is collabsed | https://github.com/zen-browser/desktop/issues/4579 | 0:07:48 | 0:13:21 | +| Can't find on github search | https://github.com/zen-browser/desktop/issues/4576 | 4:34:29 | 4:34:29 | +| URL is shifted to the right when a permission is granted to a website | https://github.com/zen-browser/desktop/issues/4574 | 4:46:44 | 15:13:36 | +| can't change font for different languages | https://github.com/zen-browser/desktop/issues/4573 | 13:11:54 | 2 days, 19:07:15 | +| Extention storage full or | https://github.com/zen-browser/desktop/issues/4572 | None | None | +| Sidebar layout issues | https://github.com/zen-browser/desktop/issues/4570 | None | None | +| codeiq.vex.com unsupported since 1.7.2b | https://github.com/zen-browser/desktop/issues/4569 | 0:56:16 | 17:32:41 | +| Zen not showing any webpage when out of compact mode | https://github.com/zen-browser/desktop/issues/4566 | None | None | +| Discord Web App Forces Links to Open in Glance Window, Overriding User Preferences | https://github.com/zen-browser/desktop/issues/4564 | 2:42:18 | 3:30:19 | +| Some Firefox settings wiped after signing into sync | https://github.com/zen-browser/desktop/issues/4562 | 0:39:56 | None | +| Empty space on top of sidebar in compact mode | https://github.com/zen-browser/desktop/issues/4561 | 0:05:34 | 0:05:34 | +| Cannot Click to Place Cursor in Address-Bar on Linux and Windows | https://github.com/zen-browser/desktop/issues/4560 | 4 days, 18:49:29 | None | +| Prezo.ai : site broken, not loading properly on Zen Browser. | https://github.com/zen-browser/desktop/issues/4557 | 1 day, 20:29:16 | None | +| Printing preview loads indefinitely | https://github.com/zen-browser/desktop/issues/4555 | 2:59:17 | 2 days, 9:39:10 | +| Neither swipe gestures nor mouse forward/backward buttons work to switch workspaces | https://github.com/zen-browser/desktop/issues/4554 | 1:04:38 | None | +| Expand Sidebar Icon missing when sidebar is folded | https://github.com/zen-browser/desktop/issues/4553 | 5:31:28 | None | +| Windows' button shadows, bleed into the website space | https://github.com/zen-browser/desktop/issues/4551 | None | None | +| MacOS pointer not hiding when entering fullscreen | https://github.com/zen-browser/desktop/issues/4550 | None | None | +| Private browsing Profile Icon is missing | https://github.com/zen-browser/desktop/issues/4549 | None | None | +| When customizing toolbar allows the browser window to be dragged but not maximized. | https://github.com/zen-browser/desktop/issues/4548 | None | None | +| Workspace icons moved from top to side bar | https://github.com/zen-browser/desktop/issues/4547 | 3:50:50 | 3:50:50 | +| macOS: 'All Desktops' option in dock icon context menu not functioning | https://github.com/zen-browser/desktop/issues/4546 | None | None | +| OPTIONS preflight request uses HTTPS while GET request is HTTP in Angular | https://github.com/zen-browser/desktop/issues/4545 | None | None | +| Cannot adjust horizontal split width when zen web panels are pinned | https://github.com/zen-browser/desktop/issues/4544 | None | None | +| Searchbar widget doesn't iconify in collapsed mode Sidebar | https://github.com/zen-browser/desktop/issues/4543 | None | None | +| Rightmost icon in multiple toolbars disappears on launch | https://github.com/zen-browser/desktop/issues/4542 | None | None | +| Essentials disappear when switching container with PiP playing | https://github.com/zen-browser/desktop/issues/4541 | None | None | +| Workspace switchers over vertical tabs misplaced after 1.7.2b | https://github.com/zen-browser/desktop/issues/4540 | 9:53:46 | 11:31:54 | +| Compact mode works once per window | https://github.com/zen-browser/desktop/issues/4539 | 0:15:28 | 18:44:40 | +| 1Password integrations | https://github.com/zen-browser/desktop/issues/4538 | 12:10:26 | 15:09:30 | +| Extra white space at the top of the sidebar | https://github.com/zen-browser/desktop/issues/4537 | 4:37:10 | 3 days, 6:44:37 | +| Windows - Can't hide any Bars | https://github.com/zen-browser/desktop/issues/4536 | 12:20:24 | 12:20:24 | +| Typo | https://github.com/zen-browser/desktop/issues/4534 | 13:55:02 | 13:55:02 | +| Viewport rounded corners flicker & sharpness | https://github.com/zen-browser/desktop/issues/4533 | None | 0:05:25 | +| Reloading Unloaded PDF tabs creates duplicates | https://github.com/zen-browser/desktop/issues/4532 | 9:22:02 | None | +| Browser shows extra animation every time user switches to a split | https://github.com/zen-browser/desktop/issues/4531 | 16:36:14 | None | +| Screenshot icon disappeads from toolbar after each time my MAC is shutdown | https://github.com/zen-browser/desktop/issues/4530 | None | 1 day, 8:23:32 | +| I want to close my WINDOW with Ctrl + W | https://github.com/zen-browser/desktop/issues/4529 | 0:21:41 | 1 day, 2:07:59 | +| Browser Closes when All Tabs in Default Workspace are Closed Even with Other Tabs | https://github.com/zen-browser/desktop/issues/4528 | None | None | +| IDN address show punny code in URL | https://github.com/zen-browser/desktop/issues/4527 | None | None | +| Text is garbled in google docs | https://github.com/zen-browser/desktop/issues/4522 | 1 day, 2:06:08 | 2 days, 6:20:50 | +| Sidebar issues | https://github.com/zen-browser/desktop/issues/4520 | None | None | +| Sidebar wallpaper blur Macos | https://github.com/zen-browser/desktop/issues/4519 | None | None | +| Zen crashes on macOS when expanding and collapsing tab bar | https://github.com/zen-browser/desktop/issues/4518 | 8:01:33 | 8:05:17 | +| Hide and unhide sidebar impacts the Extensions icons size | https://github.com/zen-browser/desktop/issues/4517 | 4 days, 11:55:27 | None | +| Overflow menu gone in single toolbar mode | https://github.com/zen-browser/desktop/issues/4516 | None | None | +| light theme page container looks like outset | https://github.com/zen-browser/desktop/issues/4515 | 6:33:55 | 6:33:55 | +| marvinpinto/action-automatic-releases should be updated to Node20 | https://github.com/zen-browser/desktop/issues/4514 | None | None | +| Searching using the new tab search box shows the name of the engine in the address bar | https://github.com/zen-browser/desktop/issues/4512 | None | None | +| Icons in collapsible top bar don't line up with other single toolbar icons | https://github.com/zen-browser/desktop/issues/4511 | None | None | +| Top button wrap feature hides buttons when there is space | https://github.com/zen-browser/desktop/issues/4510 | None | None | +| Hide bars doesn't work after last update | https://github.com/zen-browser/desktop/issues/4509 | 0:53:56 | 4:12:00 | +| artifacts/lines across screen on some websites. | https://github.com/zen-browser/desktop/issues/4508 | None | None | +| Browser freezes and CPU usage spikes after opening/closing "More tools" twice | https://github.com/zen-browser/desktop/issues/4507 | 1:22:50 | None | +| flood to Google by fast open/close broser. request support base64 favicon | https://github.com/zen-browser/desktop/issues/4506 | None | None | +| "Pin Tab" missing in keyboard shortcut settings | https://github.com/zen-browser/desktop/issues/4504 | None | None | +| Container tab opens the old signed in page | https://github.com/zen-browser/desktop/issues/4503 | None | None | +| Container Indicator Still Showing With New Window | https://github.com/zen-browser/desktop/issues/4502 | 8:13:52 | 8:13:52 | +| Text on PDFs/Powerpoints is completely unreadable | https://github.com/zen-browser/desktop/issues/4501 | 0:09:15 | 0:09:18 | +| Bookmarks in toolbar and ability to add bookmarks dissapppeared with release 1.7.1b | https://github.com/zen-browser/desktop/issues/4499 | 4 days, 3:23:33 | 3 days, 7:20:47 | +| Theme Selection Issue After Browser Update version 1.7.1b Windows | https://github.com/zen-browser/desktop/issues/4498 | 0:28:37 | 0:28:37 | +| Browser Freeze on image copy | https://github.com/zen-browser/desktop/issues/4497 | None | None | +| Fcitx5 doesn't load skins / themes / settings on KDE 6 wayland | https://github.com/zen-browser/desktop/issues/4495 | 1:42:18 | None | +| When starting zen browser it takes a long time starting up | https://github.com/zen-browser/desktop/issues/4494 | None | None | +| Scrolling between the workspaces is very slow.. | https://github.com/zen-browser/desktop/issues/4493 | None | 9 days, 9:07:24 | +| Theme colour interfering with webpage | https://github.com/zen-browser/desktop/issues/4492 | 1:24:45 | 1:24:45 | +| Essentials turning into pinned tab in new window | https://github.com/zen-browser/desktop/issues/4491 | None | None | +| All add-ons have been disabled by safe mode on version 1.7.1b Windows | https://github.com/zen-browser/desktop/issues/4490 | None | 23:06:20 | +| Opening the overflow menu twice freezes the browser window on MacOs | https://github.com/zen-browser/desktop/issues/4489 | 1 day, 10:02:01 | 5 days, 8:07:24 | +| After updating to 1.7.1 Zen "broke" | https://github.com/zen-browser/desktop/issues/4488 | 0:28:58 | 3:10:29 | +| After highlighting search toolbar the background blur breaks out. | https://github.com/zen-browser/desktop/issues/4487 | 3:22:32 | None | +| Compact Mode No Longer Hides Sidebar and Top Toolbar | https://github.com/zen-browser/desktop/issues/4486 | 0:13:16 | 0:20:02 | +| mailto dialog breaks when compact mode is enabled | https://github.com/zen-browser/desktop/issues/4485 | None | None | +| Toolbar is not hiding after hide both top bar and tab bar | https://github.com/zen-browser/desktop/issues/4484 | 0:46:49 | 0:54:21 | +| After last update, ZEN browser just disappered! | https://github.com/zen-browser/desktop/issues/4482 | 2:13:47 | 1 day, 19:31:19 | +| browser.tabs.closeWindowWithLastTab does not work when there are essentials or pinned tabs | https://github.com/zen-browser/desktop/issues/4481 | None | None | +| Address Bar Slides Down Unexpectedly When Hovering for Toolbar in Full-Screen Mode | https://github.com/zen-browser/desktop/issues/4480 | None | None | +| Web panel icon in the sidebar is missing | https://github.com/zen-browser/desktop/issues/4479 | 4:50:13 | None | +| Broken scrollbar on the sidebar | https://github.com/zen-browser/desktop/issues/4478 | 4:38:40 | 4:38:40 | +| Tab Toolbar No Longer Collapsing | https://github.com/zen-browser/desktop/issues/4477 | 2:05:12 | 4:17:18 | +| Tab group collapsing seems to not work | https://github.com/zen-browser/desktop/issues/4476 | 0:13:43 | 9:07:00 | +| No button to enable compact mode in settings page | https://github.com/zen-browser/desktop/issues/4473 | 5:51:29 | 6:25:51 | +| Can't click out of submenus or right-click context menu. | https://github.com/zen-browser/desktop/issues/4471 | None | 0:14:04 | +| "Some of Zen's security features may offer less protection on your current operating system" | https://github.com/zen-browser/desktop/issues/4470 | 0:42:44 | 0:42:47 | +| Dragging out the last tab from the tab list opens up another window | https://github.com/zen-browser/desktop/issues/4469 | 1:50:02 | None | +| Wrong location of input content directly after creating a new tab page | https://github.com/zen-browser/desktop/issues/4468 | 14:53:17 | 14:53:17 | +| active Essentials tab - url changed is opening in the active Essentials tab instead of new tab | https://github.com/zen-browser/desktop/issues/4467 | 0:04:56 | 0:04:56 | +| The Current Workspace Indicator is no longer clickable. | https://github.com/zen-browser/desktop/issues/4466 | 0:41:38 | None | +| My browser addons do not show up or have any effect in the Web panel tabs? | https://github.com/zen-browser/desktop/issues/4465 | None | None | +| Profile switcher not showing in collapsed sidebar | https://github.com/zen-browser/desktop/issues/4464 | None | None | +| Facebook does not work | https://github.com/zen-browser/desktop/issues/4463 | None | 0:08:40 | +| Latest Twilight Release breaks UI on MacOS | https://github.com/zen-browser/desktop/issues/4462 | 0:38:30 | 19:02:04 | +| Zen Compact mode doesn't work at all | https://github.com/zen-browser/desktop/issues/4461 | 0:33:07 | 1:45:21 | +| Extension permissions window shifted | https://github.com/zen-browser/desktop/issues/4460 | 1:45:17 | None | +| Browser Extensions Display Incorrectly When Changing Sidebar Width in Single Toolbar Mode | https://github.com/zen-browser/desktop/issues/4459 | None | None | +| Missing "Change theme colors" | https://github.com/zen-browser/desktop/issues/4458 | 3:34:32 | None | +| Zen getting closed immediately when I open it after screen is locked for some time | https://github.com/zen-browser/desktop/issues/4457 | 1 day, 3:23:38 | 6 days, 4:08:52 | +| Tab sidebar does not sliding properly with touchpad (IT FIXED WHEN UPDATE 1.7B) | https://github.com/zen-browser/desktop/issues/4456 | 4:03:13 | 4:04:23 | +| Massive Visual Glitch | https://github.com/zen-browser/desktop/issues/4455 | 4:28:14 | 4:38:13 | +| Tab and top bars not collapsing when upgrading from 1.7b to 1.7.1b | https://github.com/zen-browser/desktop/issues/4454 | 1:36:02 | 5:22:48 | +| Workspace Emoji not updating choice | https://github.com/zen-browser/desktop/issues/4453 | None | None | +| Synchronizing Duplicates Default Workspace | https://github.com/zen-browser/desktop/issues/4452 | 1 day, 7:42:33 | None | +| Tabs freeze when opening new ones | https://github.com/zen-browser/desktop/issues/4451 | 8:44:35 | None | +| Severe memory leak | https://github.com/zen-browser/desktop/issues/4450 | 3:35:43 | None | +| Tab Retitle Not Working For All Workspaces | https://github.com/zen-browser/desktop/issues/4448 | None | None | +| Scrolling horizontally on the sidebar animates even when current workspace is the only workspace | https://github.com/zen-browser/desktop/issues/4447 | None | None | +| Essentials Loading In Wrong Workspace When Using Firefox Multi-Acccount Containers | https://github.com/zen-browser/desktop/issues/4446 | 1 day, 13:29:49 | 1 day, 22:44:12 | +| Link to Firefox app in about:protections | https://github.com/zen-browser/desktop/issues/4445 | 17:52:50 | None | +| The name of the application displayed in the notification | https://github.com/zen-browser/desktop/issues/4444 | None | None | +| Bookmarks duplicate on new window (sometimes) | https://github.com/zen-browser/desktop/issues/4443 | None | 9 days, 4:00:20 | +| "Undo Close Window" action does not work correctly | https://github.com/zen-browser/desktop/issues/4442 | None | None | +| Zen Browser very slow to load all websites | https://github.com/zen-browser/desktop/issues/4441 | None | 8:28:11 | +| Close Browser issue | https://github.com/zen-browser/desktop/issues/4440 | None | None | +| 1password-extension connection failure on ZEN browser | https://github.com/zen-browser/desktop/issues/4438 | 0:13:02 | None | +| Container indicators always show on tabs dragged out of window, even if they are opened in their containers' default workspaces | https://github.com/zen-browser/desktop/issues/4437 | None | None | +| Essentials in new windows open in container of last used workspace instead of their actual containers | https://github.com/zen-browser/desktop/issues/4436 | None | None | +| Forced compact mode on multiple toolbars view, right of screen cut off | https://github.com/zen-browser/desktop/issues/4434 | 2:00:41 | 10:00:34 | +| Forced compact mode on multiple toolbars view, right of screen cut off | https://github.com/zen-browser/desktop/issues/4433 | 10:03:04 | 10:03:04 | +| problem moving icons | https://github.com/zen-browser/desktop/issues/4432 | None | 1 day, 22:26:39 | +| (Regression?) Tab moving is buggy after switching workspaces | https://github.com/zen-browser/desktop/issues/4431 | None | 13 days, 3:51:45 | +| Changing theme to light does not work | https://github.com/zen-browser/desktop/issues/4430 | None | 1:26:30 | +| Bottom Corners are not Rounded | https://github.com/zen-browser/desktop/issues/4428 | 0:09:07 | 0:09:07 | +| Moving bookmark items to sidebar makes it stuck | https://github.com/zen-browser/desktop/issues/4427 | None | None | +| Actual Window Width of Zen Twilight 1.7t (2025-01-18 at 00:37:45) | https://github.com/zen-browser/desktop/issues/4426 | 4:16:49 | None | +| Text in modals are blank | https://github.com/zen-browser/desktop/issues/4425 | None | None | +| Problem customizing the toolbar | https://github.com/zen-browser/desktop/issues/4424 | None | None | +| REGRESSION: Non-workspace users are seeing an useless button. | https://github.com/zen-browser/desktop/issues/4423 | 1:27:08 | 1:27:08 | +| Homepage and new tabs are clashing/reseting between two extensions after restarting the browser | https://github.com/zen-browser/desktop/issues/4420 | 9:59:30 | None | +| Zen browser (flatpak Linux) too slow to load the first website on first start | https://github.com/zen-browser/desktop/issues/4418 | None | None | +| Buggy Youtube entering and exiting full screen mode | https://github.com/zen-browser/desktop/issues/4417 | 1:28:01 | None | +| Unexpected UI for essential's active tabs | https://github.com/zen-browser/desktop/issues/4416 | None | None | +| old tab is not opening again. | https://github.com/zen-browser/desktop/issues/4412 | 13:38:37 | 13:57:44 | +| All gone on update | https://github.com/zen-browser/desktop/issues/4411 | 0:16:47 | 0:18:50 | +| https://discord.com requires login every refresh and is irresponsive when using Ctrl+Shift+I | https://github.com/zen-browser/desktop/issues/4408 | None | None | +| Required to double-click non tab elements in vertical tab bar | https://github.com/zen-browser/desktop/issues/4406 | None | 15 days, 1:43:06 | +| New tab opened with link click does not scroll into view, or have any indication that a new tab is been created | https://github.com/zen-browser/desktop/issues/4405 | None | None | +| Uneven padding in the window border | https://github.com/zen-browser/desktop/issues/4404 | None | None | +| editing problem in the url bar | https://github.com/zen-browser/desktop/issues/4403 | None | None | +| CMD+W closes the browser. | https://github.com/zen-browser/desktop/issues/4402 | 0:13:23 | 0:13:23 | +| Toolbar blinks when in compact mode and while hovering over it with a mouse | https://github.com/zen-browser/desktop/issues/4401 | 0:36:52 | 0:36:52 | +| When two windows of Zen are opened, they have slightly different color scheme | https://github.com/zen-browser/desktop/issues/4400 | 1 day, 4:29:58 | 2 days, 2:33:55 | +| Browser freezes after abruptly closing essential before loading them | https://github.com/zen-browser/desktop/issues/4399 | None | None | +| Collapsible Sidebar Not Functioning Correctly | https://github.com/zen-browser/desktop/issues/4398 | 2:47:32 | 2:47:32 | +| Failed to find update in twilight | https://github.com/zen-browser/desktop/issues/4397 | 2:49:14 | 3:02:05 | +| keepassxc addon not working on garuda linux | https://github.com/zen-browser/desktop/issues/4396 | None | 0:01:02 | +| (MacOS) Audio on browser not app-adjustable in utilities that allow individual app volume control. | https://github.com/zen-browser/desktop/issues/4395 | None | None | +| When enabling and disabling compact mode, depending on the web page you are viewing, the page jitters | https://github.com/zen-browser/desktop/issues/4394 | 3:26:06 | 3:26:06 | +| No dialog to give an "escape full screen" button when in full screen video, i.e on YouTube | https://github.com/zen-browser/desktop/issues/4392 | 4:01:26 | 4:01:26 | +| Pinned tabs are looking like regular tabs with a separator | https://github.com/zen-browser/desktop/issues/4391 | 0:48:28 | 21:14:22 | +| Added a new container and workspace, changed the icon and color, which caused in the search bar indicator to disappear. | https://github.com/zen-browser/desktop/issues/4390 | None | None | +| toolbar doesnt pop up when opening tabs with middle mouse click | https://github.com/zen-browser/desktop/issues/4389 | None | None | +| tabs are unloaded too quickly | https://github.com/zen-browser/desktop/issues/4388 | 0:27:37 | None | +| 1.7b When browser closes when the last tab is closed, it creates a new tab, and then quits | https://github.com/zen-browser/desktop/issues/4387 | None | None | +| 1.7b Active Tab Design | https://github.com/zen-browser/desktop/issues/4386 | 1:19:07 | None | +| Visual glitches with fonts on some websites | https://github.com/zen-browser/desktop/issues/4385 | 1:13:45 | 1:13:45 | +| 1.7b laggy in general compared to 1.6b | https://github.com/zen-browser/desktop/issues/4384 | 2:20:31 | 6 days, 23:13:36 | +| Tab unloader does not work; does not reduce resource consumption | https://github.com/zen-browser/desktop/issues/4383 | 6:47:30 | None | +| ZIP download button does nothing | https://github.com/zen-browser/desktop/issues/4382 | 0:26:46 | 0:26:46 | +| The history button is broken on the side bar | https://github.com/zen-browser/desktop/issues/4381 | 1:36:08 | None | +| Pixelated Text | https://github.com/zen-browser/desktop/issues/4380 | 1:34:11 | 1:34:11 | +| Allow workspaces have their own pinned tabs not working 1.7b | https://github.com/zen-browser/desktop/issues/4379 | 5:21:45 | 5:21:45 | +| Full LTO causes crash with flatpak | https://github.com/zen-browser/desktop/issues/4378 | 7:38:51 | None | +| Lost all pins and essentials on update 1.7b | https://github.com/zen-browser/desktop/issues/4377 | 6:01:05 | None | +| 1.7b tab bar choppy animation and interaction issue | https://github.com/zen-browser/desktop/issues/4376 | 22:56:24 | None | +| Workspace switching by touchpad swipe doesn't work with too many tabs open. | https://github.com/zen-browser/desktop/issues/4375 | 0:05:39 | None | +| Synced tabs pop-up layout messed up | https://github.com/zen-browser/desktop/issues/4371 | None | None | +| Keyboard shortcuts keep being reset | https://github.com/zen-browser/desktop/issues/4370 | 17:21:42 | 2 days, 1:32:20 | +| Zen doesn't respond quickly (~2 min) to discord attempting to download .deb file for update | https://github.com/zen-browser/desktop/issues/4369 | 0:32:40 | None | +| Compact tab bar isn't going to hide at last Twilight build (1.7t (2025-01-15)) | https://github.com/zen-browser/desktop/issues/4368 | 0:33:05 | 0:33:05 | +| Sidebar does't change width properly. | https://github.com/zen-browser/desktop/issues/4367 | 1:29:43 | 1:29:43 | +| Dialog box appearing in wrong direction | https://github.com/zen-browser/desktop/issues/4366 | 1:59:09 | 4:33:28 | +| 1Password says there's a Firefox update available | https://github.com/zen-browser/desktop/issues/4365 | 5:09:12 | None | +| Sometimes tabs stuck and not clickable | https://github.com/zen-browser/desktop/issues/4362 | 0:19:25 | None | +| Side Web Panel icon shows after start when deactivated | https://github.com/zen-browser/desktop/issues/4361 | 19:20:10 | None | +| Tab bar scrolls slow and buggy | https://github.com/zen-browser/desktop/issues/4359 | 0:09:28 | 0:23:50 | +| Zen Browser opens zen-beta? | https://github.com/zen-browser/desktop/issues/4358 | 11:38:19 | 1 day, 0:36:24 | +| Tab bar is blue | https://github.com/zen-browser/desktop/issues/4357 | 1:27:20 | 1:28:24 | +| Require Device Sign-in to fill passwords does not work | https://github.com/zen-browser/desktop/issues/4356 | 1 day, 13:54:07 | None | +| Quicktime browser plugin not displaying | https://github.com/zen-browser/desktop/issues/4355 | 0:02:21 | 1 day, 3:43:36 | +| Html Date (Month) Input is not working. | https://github.com/zen-browser/desktop/issues/4354 | 1 day, 4:02:04 | None | +| Proxies cannot be used to access google, YouTube, and more | https://github.com/zen-browser/desktop/issues/4352 | 1:35:57 | 1 day, 0:46:50 | +| Round edging not functional on some sites | https://github.com/zen-browser/desktop/issues/4351 | 2:37:01 | 1 day, 5:36:14 | +| Sign pop up windows not using container assigned to workspace. | https://github.com/zen-browser/desktop/issues/4350 | None | None | +| Browser bug , not work correctly | https://github.com/zen-browser/desktop/issues/4348 | 2:26:52 | 17 days, 7:42:31 | +| Opening settings causes sidebar to go ultra wide | https://github.com/zen-browser/desktop/issues/4347 | None | None | +| Notification for 'new tab' does not work | https://github.com/zen-browser/desktop/issues/4346 | 3:25:57 | 21:01:52 | +| New tab created with link click OR ctrl+T is obscured by empty/unused toolbar space | https://github.com/zen-browser/desktop/issues/4345 | None | None | +| Jittering in tab groups | https://github.com/zen-browser/desktop/issues/4343 | 3:11:54 | 3:32:43 | +| Sidebar Jittering While In compact mode | https://github.com/zen-browser/desktop/issues/4342 | None | None | +| [Windows] Videos crash in the second view | https://github.com/zen-browser/desktop/issues/4341 | 6:12:02 | None | +| Page refresh | https://github.com/zen-browser/desktop/issues/4338 | 11:57:25 | None | +| Expand Side's bar changes position of forward and backward buttons | https://github.com/zen-browser/desktop/issues/4336 | 12:19:39 | None | +| breaks after using rectify11 and mica for everyone | https://github.com/zen-browser/desktop/issues/4335 | None | 3:03:08 | +| Link "Zen support site" redirects to firefox support site | https://github.com/zen-browser/desktop/issues/4333 | 16:39:30 | 16:39:30 | +| Opening discord keeps crashing the tab | https://github.com/zen-browser/desktop/issues/4332 | 0:24:48 | 0:24:48 | +| space between essentials/tabs and the workspace title is different for default vs others | https://github.com/zen-browser/desktop/issues/4329 | None | 1 day, 0:42:55 | +| Essential disappears, but it's still there | https://github.com/zen-browser/desktop/issues/4328 | 17:21:42 | 2 days, 3:52:35 | +| Text in PDF is (still) distorted | https://github.com/zen-browser/desktop/issues/4327 | 1 day, 0:20:39 | 1 day, 0:20:39 | +| Waiting since very long for Hold click to preview link | https://github.com/zen-browser/desktop/issues/4326 | 1 day, 1:18:24 | 1 day, 1:18:24 | +| Can't close window by closing the last tab | https://github.com/zen-browser/desktop/issues/4325 | 0:50:23 | 1 day, 3:13:18 | +| Zen Browser on MacOS is not restoring tabs after closing window | https://github.com/zen-browser/desktop/issues/4324 | 1 day, 3:29:13 | None | +| Some videos can't play in Zen Browser | https://github.com/zen-browser/desktop/issues/4323 | 2 days, 14:26:03 | None | +| Web panel pin button has wrong icon when clicking for the first time | https://github.com/zen-browser/desktop/issues/4322 | None | None | +| Slow scrolling speed on the vertical tab bar in 1.6b | https://github.com/zen-browser/desktop/issues/4321 | 1:18:21 | 1 day, 5:19:47 | +| browser.urlbar.suggest.topsites set to false make url cannot be edited | https://github.com/zen-browser/desktop/issues/4319 | 1 day, 3:38:03 | 2 days, 9:54:46 | +| Tab volume icon not showing in collapsed toolbar unless tab is active | https://github.com/zen-browser/desktop/issues/4316 | None | 0:08:41 | +| Profile avatar picture flashes and is overridden by firefox account avatar | https://github.com/zen-browser/desktop/issues/4315 | 8:16:31 | 8:16:31 | +| Zen Browser Turn Light At Lost Focus | https://github.com/zen-browser/desktop/issues/4314 | 2 days, 4:11:22 | 5 days, 16:04:18 | +| "Log-in to this network" modal & button not interactible | https://github.com/zen-browser/desktop/issues/4313 | None | None | +| Sudden Crashes on Arch Linux with Multiple Tabs Opened | https://github.com/zen-browser/desktop/issues/4309 | 2:56:11 | None | +| Since 1.6b, tab bar scrolls slowly and unpredictably when using a touchpad | https://github.com/zen-browser/desktop/issues/4307 | 2:14:54 | 13:01:41 | +| Breaking Keyboard Shortcuts | https://github.com/zen-browser/desktop/issues/4306 | 2:00:54 | 4 days, 2:12:32 | +| [TWILIGHT] New update has some bugs I've found so far | https://github.com/zen-browser/desktop/issues/4304 | 4:56:10 | 19 days, 5:12:42 | +| blurry fonts on 32:9 aspect ratio | https://github.com/zen-browser/desktop/issues/4303 | 6:21:35 | None | +| Checked Radio button UI issue | https://github.com/zen-browser/desktop/issues/4302 | 0:51:38 | None | +| Firefox Home shortcut is turned off. | https://github.com/zen-browser/desktop/issues/4300 | 10:54:39 | None | +| Unable to edit URL in address bar | https://github.com/zen-browser/desktop/issues/4299 | 9:46:51 | 23:24:13 | +| Private Window New Tab is not showing blank page. | https://github.com/zen-browser/desktop/issues/4297 | None | None | +| Essential Tabs URLs Disappear After Brew Update and Browser Restart | https://github.com/zen-browser/desktop/issues/4296 | 2 days, 12:54:19 | None | +| Floating URL bar misplaced after opening Customize Toolbar | https://github.com/zen-browser/desktop/issues/4295 | 17:27:44 | None | +| Unfocusing the browser with "widget.gtk.rounded-bottom-corners.enabled" causes the bottom corners to stop being rounded | https://github.com/zen-browser/desktop/issues/4294 | None | 12:46:25 | +| Pin to toolbar text out of place on Mac | https://github.com/zen-browser/desktop/issues/4293 | None | None | +| the slider on the home screen looks just like a dot when turned on | https://github.com/zen-browser/desktop/issues/4291 | None | None | +| Closing the last tab in the only workspace should close the browser | https://github.com/zen-browser/desktop/issues/4289 | 2:29:09 | 19:14:35 | +| Scrolling on touchpad broken | https://github.com/zen-browser/desktop/issues/4288 | None | 0:07:44 | +| Sidebar behaving weird when compact mode is in "hide toolbar only" mode | https://github.com/zen-browser/desktop/issues/4287 | 1 day, 5:36:16 | 1 day, 23:15:29 | +| Zen Beta (any version) is completely broken for me | https://github.com/zen-browser/desktop/issues/4286 | 0:28:01 | 21:07:29 | +| Previous and Next page buttons switched | https://github.com/zen-browser/desktop/issues/4285 | 0:34:35 | 0:34:35 | +| Random crash after using the browser for some time. | https://github.com/zen-browser/desktop/issues/4284 | None | None | +| Even if you have recent activity turned on in the settings, it will be turned off the next time you start Zen Browser. | https://github.com/zen-browser/desktop/issues/4283 | 0:04:23 | None | +| [windows only] wired orange-ish background in new version | https://github.com/zen-browser/desktop/issues/4281 | 0:01:44 | 0:01:44 | +| Blurred fonts on Webpages | https://github.com/zen-browser/desktop/issues/4280 | 0:55:49 | 0:55:49 | +| Customize Toolbar breaks the browser layout | https://github.com/zen-browser/desktop/issues/4279 | 1:37:10 | None | +| When second window is opened, Essential tabs are not visible for this window | https://github.com/zen-browser/desktop/issues/4278 | None | None | +| Frame color is grey instead of light or dark themed | https://github.com/zen-browser/desktop/issues/4277 | 13:26:52 | 9 days, 19:55:41 | +| Tab styling bug | https://github.com/zen-browser/desktop/issues/4276 | None | 4:32:10 | +| Vertical Toolbar Resizing | https://github.com/zen-browser/desktop/issues/4275 | 1:10:26 | 5:40:14 | +| Scoll Bar has lower scroll factor. | https://github.com/zen-browser/desktop/issues/4274 | 8:35:00 | 8:35:00 | +| Closing last tab does not close browser | https://github.com/zen-browser/desktop/issues/4273 | 9:04:24 | 12:10:08 | +| I can't disable workspaces anymore | https://github.com/zen-browser/desktop/issues/4272 | 0:10:05 | 13:14:51 | +| Why there is strange styling / background color on some of the pages? | https://github.com/zen-browser/desktop/issues/4271 | None | 0:12:17 | +| Customize Toolbar not saving changes upon relaunch. | https://github.com/zen-browser/desktop/issues/4270 | 2 days, 0:05:19 | None | +| White line at the bottom | https://github.com/zen-browser/desktop/issues/4269 | None | None | +| History / recently visited pages list contains only icons, no names or adresses | https://github.com/zen-browser/desktop/issues/4265 | 2 days, 21:24:58 | None | +| Weird color highlight when window is in focus | https://github.com/zen-browser/desktop/issues/4264 | 1 day, 4:13:23 | 1 day, 20:39:36 | +| Workspaces | https://github.com/zen-browser/desktop/issues/4263 | None | 2:26:35 | +| Audio indicator not showing for sites playing audio when not chosen | https://github.com/zen-browser/desktop/issues/4262 | None | None | +| Theme color | https://github.com/zen-browser/desktop/issues/4261 | 0:11:52 | 3 days, 0:13:33 | +| Performance lag/FPS drops on HP Spectre laptop only | https://github.com/zen-browser/desktop/issues/4260 | None | None | +| Browser window colors change when window is inactive/unfocused | https://github.com/zen-browser/desktop/issues/4258 | 1 day, 7:13:53 | 0:08:23 | +| Each update requires the binary to be re-downloaded. | https://github.com/zen-browser/desktop/issues/4257 | None | None | +| Workspaces button (above tabs) does not hide even tho I have only one workspace. | https://github.com/zen-browser/desktop/issues/4256 | 0:39:33 | 2 days, 0:19:16 | +| Keyboard Shortcuts reset everytime I open the browser | https://github.com/zen-browser/desktop/issues/4255 | 8:48:29 | 2 days, 3:25:34 | +| When opening a new window, inned tabs are also reopen in the new window (tho some become "New Tab"). | https://github.com/zen-browser/desktop/issues/4254 | None | None | +| Back and Forward buttons moved to the right and flipped | https://github.com/zen-browser/desktop/issues/4253 | 12:03:43 | 0:11:45 | +| Web Developer Tools missing labels in collapsed toolbar. | https://github.com/zen-browser/desktop/issues/4252 | None | None | +| Can't change location in the weather widget | https://github.com/zen-browser/desktop/issues/4250 | 3 days, 18:40:41 | None | +| Tabs crashing randomlly | https://github.com/zen-browser/desktop/issues/4249 | 3 days, 11:21:20 | None | +| Freesync broken in fullscreen | https://github.com/zen-browser/desktop/issues/4248 | None | None | +| Floating URL touchpad switch workspace | https://github.com/zen-browser/desktop/issues/4246 | None | None | +| Page open. No Tab in tab bar. | https://github.com/zen-browser/desktop/issues/4244 | None | 12 days, 20:38:18 | +| Sidebar not working properly. | https://github.com/zen-browser/desktop/issues/4242 | 10:58:19 | 1 day, 6:06:30 | +| Why are the tabs on the right? | https://github.com/zen-browser/desktop/issues/4241 | 3:53:16 | 9 days, 21:54:56 | +| Shortcuts for cycling workspaces are not working on non-English keyboard layout | https://github.com/zen-browser/desktop/issues/4240 | 14:14:25 | None | +| Unsetting some keyboard shortcuts causes the application to get stuck in the splash screen. | https://github.com/zen-browser/desktop/issues/4238 | 4 days, 17:04:39 | 4 days, 17:04:38 | +| Google's access speed is very slow, other browsers open at the same time, no problem! | https://github.com/zen-browser/desktop/issues/4237 | None | None | +| Bookmark cannot deleted/edit when the the name starts with "?..." | https://github.com/zen-browser/desktop/issues/4236 | None | None | +| I set the startup page to be a blank page; browser never responds. | https://github.com/zen-browser/desktop/issues/4235 | 19 days, 4:19:18 | None | +| bug: In `compact mode` the `user account` icon in top bar is broken after first click - 1.0.2-b.5 (Firefox 133.0.3) | https://github.com/zen-browser/desktop/issues/4232 | 1 day, 11:10:39 | 2 days, 6:06:01 | +| screencast is not working underwayland | https://github.com/zen-browser/desktop/issues/4231 | 16 days, 20:54:10 | None | +| gradient theme color disappears | https://github.com/zen-browser/desktop/issues/4230 | 4 days, 12:17:20 | None | +| Autofilling not working in some webpages | https://github.com/zen-browser/desktop/issues/4229 | None | 2 days, 14:08:32 | +| Not possible to use CTRL + F on a web panel | https://github.com/zen-browser/desktop/issues/4228 | None | None | +| Switch workspace animation without workspaces | https://github.com/zen-browser/desktop/issues/4227 | None | None | +| Command Option L always opens inspector despite keyboard shortcut setting | https://github.com/zen-browser/desktop/issues/4224 | 2 days, 13:08:20 | 4 days, 12:27:38 | +| Webgl applications not working. | https://github.com/zen-browser/desktop/issues/4223 | 1:45:58 | None | +| Pins syncing across windows | https://github.com/zen-browser/desktop/issues/4222 | 2 days, 23:53:53 | 15 days, 21:21:10 | +| URL/Title bar can be scrolled up on Windows | https://github.com/zen-browser/desktop/issues/4220 | 5 days, 1:26:35 | None | +| [Linux][tarball] Twilight - Can't update/wrong notification | https://github.com/zen-browser/desktop/issues/4219 | 0:15:28 | 0:15:28 | +| [Linux][Flatpak] Light/Dark Theme settings not respected | https://github.com/zen-browser/desktop/issues/4217 | 0:49:02 | 1:47:37 | +| cant close side menu and back and forward buttons swapped. | https://github.com/zen-browser/desktop/issues/4216 | 12:38:36 | None | +| MacOS CMD+Shift+L opens Dev Tools | https://github.com/zen-browser/desktop/issues/4215 | 1:48:05 | 1:48:05 | +| Dark mode problem | https://github.com/zen-browser/desktop/issues/4214 | 2:02:31 | 2:02:35 | +| Unwanted separation in zen | https://github.com/zen-browser/desktop/issues/4213 | 2:48:23 | 2:48:23 | +| ctrl+shift+c not working | https://github.com/zen-browser/desktop/issues/4212 | 1:02:17 | 2:59:00 | +| Black screen on launch | https://github.com/zen-browser/desktop/issues/4211 | 2:12:26 | 5:25:52 | +| When adding 2500 Tabs to the essentials section the browser becomes unresponsive | https://github.com/zen-browser/desktop/issues/4210 | 3:34:59 | None | +| [Bug] Minimize & Maximize buttons are not visible in Title bar | https://github.com/zen-browser/desktop/issues/4209 | 22:13:45 | None | +| Vertical tab bar isn't working as expected | https://github.com/zen-browser/desktop/issues/4208 | 7:06:10 | None | +| thinks that there is an update available / failed | https://github.com/zen-browser/desktop/issues/4207 | 0:12:57 | 0:12:57 | +| Compact Bar Doesn't Fully Close | https://github.com/zen-browser/desktop/issues/4205 | 3:18:39 | 3:18:39 | +| twilight: release note link does not go to the right page | https://github.com/zen-browser/desktop/issues/4203 | 13:07:36 | 13:07:36 | +| Update pop up failed on twilight | https://github.com/zen-browser/desktop/issues/4202 | 0:12:04 | 0:25:02 | +| Auto-filling passwords is broken for any website on MacOS | https://github.com/zen-browser/desktop/issues/4201 | 1 day, 10:59:13 | 0:13:22 | +| Test | https://github.com/zen-browser/desktop/issues/4199 | None | 0:00:13 | +| If site opens tab using JS, and you switch workspace, it opens in wrong workspace | https://github.com/zen-browser/desktop/issues/4197 | None | None | +| Resetting keyboard shortcuts not reflected in the UI | https://github.com/zen-browser/desktop/issues/4194 | None | None | +| Fetch requests not showing in the Network panel | https://github.com/zen-browser/desktop/issues/4192 | 4 days, 12:19:17 | None | +| Search bar overlapping essentials area bug | https://github.com/zen-browser/desktop/issues/4191 | 20:07:09 | 20:07:09 | +| url bar is sized wrong when not in compact mode | https://github.com/zen-browser/desktop/issues/4190 | 10:45:50 | 10:45:50 | +| Compact mode sidebar trigger area is too wide (macOS) | https://github.com/zen-browser/desktop/issues/4189 | 15:13:53 | 15:13:53 | +| Install Add-on From File... | https://github.com/zen-browser/desktop/issues/4186 | None | None | +| Arrangement of back & forward arrows changes after toggling the sidebar's width | https://github.com/zen-browser/desktop/issues/4185 | None | None | +| Workspaces bar problems on toolbar | https://github.com/zen-browser/desktop/issues/4183 | 10 days, 6:32:09 | None | +| "Breakpoint A breakpoint has been reached." | https://github.com/zen-browser/desktop/issues/4181 | 3 days, 2:30:20 | None | +| (Detailed Report) Using Ctrl+Tab to switch from splitted tabs to other tabs only works for tabs adjacent to the last split if "change tabs on hover" is turned on | https://github.com/zen-browser/desktop/issues/4180 | None | None | +| unloaded tabs with unsaved changes cannot be opened | https://github.com/zen-browser/desktop/issues/4179 | 15 days, 8:16:21 | None | +| broken page background on some sites | https://github.com/zen-browser/desktop/issues/4178 | 1 day, 0:42:21 | 7 days, 5:35:11 | +| Deleting certain keyboard shortcuts crashes the file on restart | https://github.com/zen-browser/desktop/issues/4177 | 3 days, 13:52:28 | 7 days, 12:06:28 | +| Disabeling forward/backward mouse buttons for switching workspaces und trigger back/forward of current website. | https://github.com/zen-browser/desktop/issues/4176 | 10 days, 2:11:24 | None | +| A Silly White Line Appears At The Top Of The Browser Window In Windows | https://github.com/zen-browser/desktop/issues/4175 | 1 day, 23:59:40 | 1 day, 23:59:40 | +| Zooming in PDF viewer is not working when using scrollwheel click to scroll throught PDF | https://github.com/zen-browser/desktop/issues/4173 | 3 days, 2:26:50 | None | +| compact mode tabs flickers when cursor is on window border | https://github.com/zen-browser/desktop/issues/4172 | None | None | +| Since the app is no longer in beta, the app shouldn't use strings with 'beta' in it and replace those with a normal string such as "Zen Browser". | https://github.com/zen-browser/desktop/issues/4171 | 0:12:14 | 0:19:44 | +| Linux version doesn't use the system proxy | https://github.com/zen-browser/desktop/issues/4170 | 10 days, 23:13:16 | None | +| Reordering Essentials is weird | https://github.com/zen-browser/desktop/issues/4169 | 3 days, 8:53:15 | 8 days, 3:19:28 | +| Duplicate preferences for "Use themed...." | https://github.com/zen-browser/desktop/issues/4166 | None | 0:02:33 | +| Entering compact mode on one window engages compact mode on all windows | https://github.com/zen-browser/desktop/issues/4165 | 17 days, 6:17:00 | 17 days, 6:17:00 | +| Bug: Unable to perform a search, tab stuck on loading | https://github.com/zen-browser/desktop/issues/4160 | None | 1:30:36 | +| Windows 11 - Compact Mode - Hide Tab Bar - Doesn't hide if using touch | https://github.com/zen-browser/desktop/issues/4157 | None | None | +| just goes blank when i decide to open new tab | https://github.com/zen-browser/desktop/issues/4156 | None | None | +| decoding problem "i think" | https://github.com/zen-browser/desktop/issues/4155 | None | None | +| Performance And Black Squares Issue | https://github.com/zen-browser/desktop/issues/4154 | None | None | +| the design of the "new tab" button does not allow it to be distinguished properly | https://github.com/zen-browser/desktop/issues/4153 | 0:20:19 | None | +| Pinned tabs do not Refresh Automatically after browser restart | https://github.com/zen-browser/desktop/issues/4152 | 3 days, 4:53:05 | None | +| Startup load broken | https://github.com/zen-browser/desktop/issues/4151 | None | 0:06:12 | +| An intuitive problem with the automatic theme (light/dark) | https://github.com/zen-browser/desktop/issues/4150 | None | None | +| Zen keeps resetting Home page every so often | https://github.com/zen-browser/desktop/issues/4148 | 12 days, 1:40:29 | None | +| Bookmarks toolbar blank on single toolbar layout | https://github.com/zen-browser/desktop/issues/4146 | 1:28:06 | 1 day, 20:15:55 | +| UI Bug: Wrong aspect ratio in tab switcher on ultra wide screens (32:9) | https://github.com/zen-browser/desktop/issues/4144 | None | None | +| pdf.js jumps across pages when activating annonation tools | https://github.com/zen-browser/desktop/issues/4143 | None | None | +| A black bar appeared at the top of the browser. | https://github.com/zen-browser/desktop/issues/4137 | 1:08:53 | 1:08:53 | +| --zen-primary-color affecting Zen about pages | https://github.com/zen-browser/desktop/issues/4135 | 0:34:32 | 0:34:32 | +| Essentials load in wrong container when opening new window with different workspace | https://github.com/zen-browser/desktop/issues/4134 | 1 day, 4:39:10 | 9 days, 21:24:46 | +| Container Indicator Issue | https://github.com/zen-browser/desktop/issues/4132 | 0:15:50 | 1:36:18 | +| Bookmarks Separator Issue | https://github.com/zen-browser/desktop/issues/4131 | 6:20:17 | None | +| Bookmarks Modal Issue | https://github.com/zen-browser/desktop/issues/4130 | 0:19:20 | 1:37:35 | +| Bookmarks Random Appearing Issue | https://github.com/zen-browser/desktop/issues/4129 | 6:25:12 | 28 days, 23:29:22 | +| Bookmarks FOUC Type Issue | https://github.com/zen-browser/desktop/issues/4128 | 6:28:48 | None | +| Shortcuts Issue When Second Window Is Used: | https://github.com/zen-browser/desktop/issues/4127 | 4 days, 0:15:45 | 4 days, 0:15:45 | +| Essentials & Pinned Disappear With Second Window | https://github.com/zen-browser/desktop/issues/4126 | 3:18:35 | None | +| Can't install themes with nightly | https://github.com/zen-browser/desktop/issues/4124 | 9 days, 23:09:45 | 9 days, 23:11:39 | +| pid changes on boot | https://github.com/zen-browser/desktop/issues/4122 | 0:50:20 | 0:50:20 | +| Download fails if you delete a random file while downloading | https://github.com/zen-browser/desktop/issues/4120 | 7:44:40 | 7:59:19 | +| Zen asks to be the default browser every time after recent update. | https://github.com/zen-browser/desktop/issues/4118 | 7:20:20 | 2 days, 14:22:58 | +| Popups partially hidden when on sidebar | https://github.com/zen-browser/desktop/issues/4117 | 12:56:59 | 12:56:59 | +| [Twilight] Not seeing search for emojis for workspaces like mentioned in release notes | https://github.com/zen-browser/desktop/issues/4114 | 8:04:36 | 8:04:35 | +| Themes installed from Firefox store don't do anything | https://github.com/zen-browser/desktop/issues/4113 | 5 days, 19:00:45 | None | +| Misplaced Footer on Websites | https://github.com/zen-browser/desktop/issues/4112 | 0:01:36 | 0:34:51 | +| A weird bar appears randomly stopping the user from switching tabs | https://github.com/zen-browser/desktop/issues/4111 | 0:07:57 | None | +| Sidebar tries to handle event when trying to dismiss toast message | https://github.com/zen-browser/desktop/issues/4110 | 4:08:06 | None | +| pages are not saving | https://github.com/zen-browser/desktop/issues/4109 | 14:28:07 | 14:28:07 | +| Issue with Toolbar Pinning/Unpinning Affecting Sidebar Width in Zen Browser | https://github.com/zen-browser/desktop/issues/4108 | 19 days, 11:38:38 | 19 days, 11:38:38 | +| Doesn't download video after "save video as" button | https://github.com/zen-browser/desktop/issues/4106 | 0:24:18 | 1 day, 8:44:52 | +| Random bar when moving mouse to the top | https://github.com/zen-browser/desktop/issues/4105 | 0:28:07 | 19 days, 14:14:16 | +| Overflow menu is permanently shown with only Customize Toolbar | https://github.com/zen-browser/desktop/issues/4104 | None | 0:02:52 | +| Opens a weird tab after closing all tabs | https://github.com/zen-browser/desktop/issues/4103 | 1 day, 0:01:43 | 1 day, 0:01:43 | +| Horizontal tab layout when supposed to be vertical | https://github.com/zen-browser/desktop/issues/4102 | None | 0:09:22 | +| Unable to click on back button due to overlapping of the tab sidebar under `Multiple Toolbars` layout | https://github.com/zen-browser/desktop/issues/4100 | 4:11:09 | None | +| Toolbar rendering issue while browser is in Foreground | https://github.com/zen-browser/desktop/issues/4099 | 1:56:07 | 1:56:07 | +| Video playback stops when toggling mono audio | https://github.com/zen-browser/desktop/issues/4098 | None | None | + +_This report was generated with the [Issue Metrics Action](https://github.com/github/issue-metrics)_ +Search query used to find these items: `repo:zen-browser/desktop is:issue created:2025-01-01..2025-01-31` diff --git a/firefox-cache/l10n-last-commit-hash b/firefox-cache/l10n-last-commit-hash index dd4812842..3fd61f125 100644 --- a/firefox-cache/l10n-last-commit-hash +++ b/firefox-cache/l10n-last-commit-hash @@ -1 +1 @@ -1e9d5c766342b027f104f5071ec8e343abb1088b +7d861618502fc97ac8da8a1a78ec09b226c55dd5 diff --git a/flatpak/app.zen_browser.zen.yml.template b/flatpak/app.zen_browser.zen.yml.template index 8c76a831c..a8f5adeac 100644 --- a/flatpak/app.zen_browser.zen.yml.template +++ b/flatpak/app.zen_browser.zen.yml.template @@ -44,14 +44,14 @@ modules: sources: - type: archive - url: https://github.com/zen-browser/desktop/releases/download/{version}/zen.linux-x86_64.tar.bz2 + url: https://github.com/zen-browser/desktop/releases/download/{version}/zen.linux-x86_64.tar.xz sha256: {linux_sha256} strip-components: 0 only-arches: - x86_64 - type: archive - url: https://github.com/zen-browser/desktop/releases/download/{version}/zen.linux-aarch64.tar.bz2 + url: https://github.com/zen-browser/desktop/releases/download/{version}/zen.linux-aarch64.tar.xz sha256: {linux_aarch64_sha256} strip-components: 0 only-arches: diff --git a/l10n b/l10n index cb32b48cb..fb2f27225 160000 --- a/l10n +++ b/l10n @@ -1 +1 @@ -Subproject commit cb32b48cb58a807012e082a41190108463d25683 +Subproject commit fb2f27225e6ec810354ce4c95913d6a2105e200b diff --git a/l10n-last-commit-hash b/l10n-last-commit-hash deleted file mode 100644 index e69de29bb..000000000 diff --git a/package.json b/package.json index 613cc3d61..807440b18 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,8 @@ "pretty": "prettier . --write && autopep8 -r --in-place scripts/ src/", "lint": "npx prettier . --check && autopep8 --diff scripts/ src/", "prepare": "husky", - "reset-ff": "surfer reset" + "reset-ff": "surfer reset", + "surfer": "surfer" }, "repository": { "type": "git", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 000000000..a05c0dac3 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,1916 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@zen-browser/surfer': + specifier: ^1.9.16 + version: 1.9.16(glob@7.2.3) + devDependencies: + husky: + specifier: ^9.1.7 + version: 9.1.7 + lint-staged: + specifier: ^15.3.0 + version: 15.3.0 + prettier: + specifier: ^3.4.2 + version: 3.4.2 + prettier-plugin-sh: + specifier: ^0.14.0 + version: 0.14.0(prettier@3.4.2) + +packages: + + '@oozcitak/dom@1.15.10': + resolution: {integrity: sha512-0JT29/LaxVgRcGKvHmSrUTEvZ8BXvZhGl2LASRUgHqDTC1M5g1pLmVv56IYNyt3bG2CUjDkc67wnyZC14pbQrQ==} + engines: {node: '>=8.0'} + + '@oozcitak/infra@1.0.8': + resolution: {integrity: sha512-JRAUc9VR6IGHOL7OGF+yrvs0LO8SlqGnPAMqyzOuFZPSZSXI7Xf2O9+awQPSMXgIWGtgUf/dA6Hs6X6ySEaWTg==} + engines: {node: '>=6.0'} + + '@oozcitak/url@1.0.4': + resolution: {integrity: sha512-kDcD8y+y3FCSOvnBI6HJgl00viO/nGbQoCINmQ0h98OhnGITrWR3bOGfwYCthgcrV8AnTJz8MzslTQbC3SOAmw==} + engines: {node: '>=8.0'} + + '@oozcitak/util@8.3.8': + resolution: {integrity: sha512-T8TbSnGsxo6TDBJx/Sgv/BlVJL3tshxZP7Aq5R1mSnM5OcHY2dQaxLMu2+E8u3gN0MLOzdjurqN4ZRVuzQycOQ==} + engines: {node: '>=8.0'} + + '@resvg/resvg-js-android-arm-eabi@1.4.0': + resolution: {integrity: sha512-8C7P2dYNeL5mghCgJ+2IqNwv5V50d5pZQYIvGYlbP7d3OB/T8uVEcmuflYgWq+/vEn1gZE+Q2A0tFJOHqIvH9A==} + engines: {node: '>= 10'} + cpu: [arm] + os: [android] + + '@resvg/resvg-js-android-arm64@1.4.0': + resolution: {integrity: sha512-BQp3zo+/8Ns9u2NCh7YeII2KflsiXfJDrwahXk21PuDp0l1KcMjdQ2o4dTWTskF5Dba/rcuDa94T5GD9Pgap7g==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + + '@resvg/resvg-js-darwin-arm64@1.4.0': + resolution: {integrity: sha512-IuvUOIpdxk5fEqr8EXgdCfugRWS88HlXwSeHPDVNCh/9kQ7exRoVi5CDOipkngUPYKxbKTekJWTxQHRUtf8oNQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@resvg/resvg-js-darwin-x64@1.4.0': + resolution: {integrity: sha512-XFao3tkBBPHubVvXDX/ViYf2509tgqcfUc6bDtVYHCUOecK10ppbtdMRRnXjesi3towPQj2peiRUEavTIBbfGg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@resvg/resvg-js-linux-arm-gnueabihf@1.4.0': + resolution: {integrity: sha512-RAjGdBJKGO5tSE1PsTl2WpG/TkgJGqsHIFtaQAUWNG4/LQ+0MNAptBOGrvNZvmRu+hVIk1t8m9rKme2RMdmlLQ==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + + '@resvg/resvg-js-linux-arm64-gnu@1.4.0': + resolution: {integrity: sha512-mT0UWGyzSaTu48sJGQno9zaZqk7j9ZjZppNu/TkLqObYu0xSeTnxnU73/Xy+byZh9RvLY/994bEaOP50jpDW/g==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@resvg/resvg-js-linux-arm64-musl@1.4.0': + resolution: {integrity: sha512-wfl0dk9pNExJeFxRoAO0P0ywVkqW80FqsCH6KCtTbB1f2P2NY0paAKPho1LJ2z1YSzq3ngganyAKPl2PoBqn4g==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@resvg/resvg-js-linux-x64-gnu@1.4.0': + resolution: {integrity: sha512-XDebImgHmQMIjxISZ4UsV9iHcO2IJnkKrT9/F5SWF3MgqRLro2pIY1JsgW70sEjkHlcyF7dbTa/M7TAgSz0uvg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@resvg/resvg-js-linux-x64-musl@1.4.0': + resolution: {integrity: sha512-cvq7pPQECLyP5SoI5ECZL0RhKcgz7sQTjYWQdZjFdF6riN40uWSo1Le31+oLLCwSoSOo8Z60xmU95ChbZjSY5Q==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@resvg/resvg-js-win32-arm64-msvc@1.4.0': + resolution: {integrity: sha512-4waye03doDRsQmtibxiTQ7alAmvT2D7gt5n3gmIMsAP8fF+szRQ+cD/ClPZdBIMonhAUbe3nLMduocOe2Jp59Q==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@resvg/resvg-js-win32-ia32-msvc@1.4.0': + resolution: {integrity: sha512-9Ld/Hv8nXslvodPv9wL3wec8Tf9kFAO4t9632Y66aAcGZBNW/xAwzbgDOSv32N763tsLphleu1DhJ7nXKZIz9A==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + + '@resvg/resvg-js-win32-x64-msvc@1.4.0': + resolution: {integrity: sha512-sMGQdOIop6a/s+cmFodnQNNykvr/MavgBXCzVt9jp1Rq4PXWtn8uwSsUupsn3SHPJCZ83kee6m4JCnak6Rec9A==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@resvg/resvg-js@1.4.0': + resolution: {integrity: sha512-AcsRqAPFMIOxlMZCHxSxTG5vZTbW95xFDrQDTmsX/VEwc3tgLL9E4Be2nIJjWrdvIQxsTlaWYJsn2pxkki9Ltg==} + engines: {node: '>= 10'} + + '@types/node@17.0.45': + resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} + + '@zen-browser/surfer@1.9.16': + resolution: {integrity: sha512-6/Vcp1Ox9mt53hoBUuxFvpnRMnlvjFb3GBOcRhpqoYW/yi9mlV3G48icE717wGCoR2TThfuS6SYVfiT/G1kkrw==} + hasBin: true + + ansi-escapes@7.0.0: + resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} + engines: {node: '>=18'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + + asap@2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + + async-compat@1.6.8: + resolution: {integrity: sha512-MVKdync5q2FgE+x/AErx0mtJSZgQxWBGIx7vOcQbXmTh04OAF41N2zQX5XhAb0Mq/sMSFqzZSSFwzZ3rrROsSg==} + engines: {node: '>=0.8'} + + async-icns@1.0.2: + resolution: {integrity: sha512-d2P/f3aAWdOE3+tEqTW4HLj9Ob7/t54/NH2nRFK9Q7ZhJJXK7TlF1G3vgB6UP/ILHjI3Akjv+d8sFXyAZxCIFQ==} + hasBin: true + + axios@0.21.4: + resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base64-js@0.0.2: + resolution: {integrity: sha512-Pj9L87dCdGcKlSqPVUjD+q96pbIx1zQQLb2CUiWURfjiBELv84YX+0nGnKmyT/9KkC7PQk7UN1w+Al8bBozaxQ==} + engines: {node: '>= 0.4'} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + bl@2.2.1: + resolution: {integrity: sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==} + + bl@3.0.1: + resolution: {integrity: sha512-jrCW5ZhfQ/Vt07WX1Ngs+yn9BDqPL/gw28S7s9H6QK/gupnizNzJAss5akW20ISgOrbLTlXOOCTJeNUQqruAWQ==} + + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + + bops@0.1.1: + resolution: {integrity: sha512-Cx1zStcMp+YoFan8OgudNPMih82eJZE+27feki1WeyoFTR9Ye7AR1SUW3saE6QQvdS/g52aJ2IojBjWOiRiLbw==} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + buffer-alloc-unsafe@1.1.0: + resolution: {integrity: sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==} + + buffer-alloc@1.2.0: + resolution: {integrity: sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==} + + buffer-fill@1.0.0: + resolution: {integrity: sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==} + + buffer-v6-polyfill@1.0.5: + resolution: {integrity: sha512-LdUw/JMZyKN+EBDbOHqynYtOLXDjgo+uf5vCUhfO5hVsU2chvbqyexizvxUMaU4ipYZy9MiQyIFwMeIgsb6nBA==} + + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + + call-once-fn@1.0.15: + resolution: {integrity: sha512-LPMeZc0iO4Ep9XCtvRk9ecOdQpJd1DKRWly1+95F+OinTRJri39ZUVItxJu0ru/KzBbbv0cmKFb0gzG4PJCinA==} + engines: {node: '>=0.8'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.4.1: + resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + chownr@1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + + cli-cursor@5.0.0: + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} + engines: {node: '>=18'} + + cli-progress@3.12.0: + resolution: {integrity: sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==} + engines: {node: '>=4'} + + cli-truncate@4.0.0: + resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} + engines: {node: '>=18'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + + color@4.2.3: + resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} + engines: {node: '>=12.5.0'} + + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + + commander@6.2.1: + resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} + engines: {node: '>= 6'} + + commander@9.5.0: + resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} + engines: {node: ^12.20.0 || >=14} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + + core-js-pure@3.40.0: + resolution: {integrity: sha512-AtDzVIgRrmRKQai62yuSIN5vNiQjcJakJb4fbhVw3ehxx7Lohphvw9SGNWKhLFqSxC4ilD0g/L1huAYFQU3Q6A==} + + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decompress-response@6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} + + deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + + detect-libc@2.0.3: + resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} + engines: {node: '>=8'} + + duplexify@4.1.3: + resolution: {integrity: sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==} + + emoji-regex@10.4.0: + resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + + environment@1.1.0: + resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} + engines: {node: '>=18'} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} + + expand-template@2.0.3: + resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} + engines: {node: '>=6'} + + extract-base-iterator@1.2.22: + resolution: {integrity: sha512-gGMzo6ijt6oh9VSLOG3H+rpyzkoCYkVBgF/qdxVM/Wc/eKJyX2gxrBN8gO7IbnAMxre36wvzwzzD6umw80i3CQ==} + engines: {node: '>=0.8'} + + fast-extract@1.3.31: + resolution: {integrity: sha512-P3poghIIxD7mEIHymqaeevrrdWD23JLyagIfox+/jw6r0L8CtjHJsg/S/YZsHH6V2/IfK5tHoBsiyAqBIocSHw==} + engines: {node: '>=0.8'} + peerDependencies: + lzma-native: '*' + peerDependenciesMeta: + lzma-native: + optional: true + + fifo@2.4.1: + resolution: {integrity: sha512-XTbUCNmo54Jav0hcL6VxDuY4x1eCQH61HEF80C2Oww283pfjQ2C8avZeyq4v43sW2S2403kmzssE9j4lbF66Sg==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + flush-write-stream@2.0.0: + resolution: {integrity: sha512-uXClqPxT4xW0lcdSBheb2ObVU+kuqUk3Jk64EwieirEXZx9XUrVwp/JuBfKAWaM4T5Td/VL7QLDWPXp/MvGm/g==} + + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + fs-constants@1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + + fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-east-asian-width@1.3.0: + resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} + engines: {node: '>=18'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + + github-from-package@0.0.0: + resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + globalyzer@0.1.0: + resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} + + globrex@0.1.2: + resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + hash-string@1.0.0: + resolution: {integrity: sha512-dtNNyxXobzHavayZwOwRWhBTqS9GX4jDjIMsGc0fDyaN2A+4zMn5Ua9ODDCggN6w3Spma6mAHL3ImmW3BkWDmQ==} + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + + husky@9.1.7: + resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} + engines: {node: '>=18'} + hasBin: true + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + + ini@3.0.1: + resolution: {integrity: sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + is-absolute@1.0.0: + resolution: {integrity: sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==} + engines: {node: '>=0.10.0'} + + is-apple-silicon@https://codeload.github.com/trickypr/is-apple-silicon/tar.gz/5f75501a1d7566ba9f94174b6825d7bd9d302b6a: + resolution: {tarball: https://codeload.github.com/trickypr/is-apple-silicon/tar.gz/5f75501a1d7566ba9f94174b6825d7bd9d302b6a} + version: 1.0.1 + + is-arrayish@0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + + is-error@2.2.2: + resolution: {integrity: sha512-IOQqts/aHWbiisY5DuPJQ0gcbvaLFCa7fBa9xoLfxBZvQ+ZI/Zh9xoI7Gk+G64N0FdK4AbibytHht2tWgpJWLg==} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-fullwidth-code-point@4.0.0: + resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} + engines: {node: '>=12'} + + is-fullwidth-code-point@5.0.0: + resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} + engines: {node: '>=18'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-promise@4.0.0: + resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} + + is-relative@1.0.0: + resolution: {integrity: sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==} + engines: {node: '>=0.10.0'} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + is-unc-path@1.0.0: + resolution: {integrity: sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==} + engines: {node: '>=0.10.0'} + + is-windows@1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + + kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + + lifecycle@1.0.4: + resolution: {integrity: sha512-FJx0SNrM2rouctdOH4rATsHT+BvgyXX4LEQ+Yn9COQNPK3u4XAPp9qS7OKpRO22MeT39oxkjZkRcLnHxSmiduw==} + + lilconfig@3.1.3: + resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} + engines: {node: '>=14'} + + lint-staged@15.3.0: + resolution: {integrity: sha512-vHFahytLoF2enJklgtOtCtIjZrKD/LoxlaUusd5nh7dWv/dkKQJY74ndFSzxCdv7g0ueGg1ORgTSt4Y9LPZn9A==} + engines: {node: '>=18.12.0'} + hasBin: true + + listr2@8.2.5: + resolution: {integrity: sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==} + engines: {node: '>=18.0.0'} + + lodash.compact@3.0.1: + resolution: {integrity: sha512-2ozeiPi+5eBXW1CLtzjk8XQFhQOEMwwfxblqeq6EGyTxZJ1bPATqilY0e6g2SLQpP4KuMeuioBhEnWz5Pr7ICQ==} + + lodash.throttle@4.1.1: + resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==} + + log-update@6.1.0: + resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} + engines: {node: '>=18'} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} + + mimic-response@3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + mkdirp-classic@0.5.3: + resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + + mock-require-lazy@1.0.14: + resolution: {integrity: sha512-PNuw/5/+IJLgOSJoXv4DYBu840i2NmhRFgUoB/To/hvL7J8YxjjrvNaAaPotq7Ndff344pDFSqDqGpstdhB8Tg==} + engines: {node: '>=0.8'} + + modern-async@1.1.5: + resolution: {integrity: sha512-Yioj6tw1jvZef+bYjcZN9gMPBpVkkqGOMbQg/1U9dIqdij44mpftvNJxTf/u2Gc6oobuNGUFWNJwJwq8qEs9bw==} + + mount-dmg@1.0.1: + resolution: {integrity: sha512-YEHSgtE1d6jIm6ht0uqo4MWQSXHvHYujgURXf+59hQDErH5bL5rv4uGwko8ejiFIeK6ySk8jBX1oX9NrlmBTCg==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + mvdan-sh@0.10.1: + resolution: {integrity: sha512-kMbrH0EObaKmK3nVRKUIIya1dpASHIEusM13S4V1ViHFuxuNxCo+arxoa6j/dbV22YBGjl7UKJm9QQKJ2Crzhg==} + + nanoassert@2.0.0: + resolution: {integrity: sha512-7vO7n28+aYO4J+8w96AzhmU8G+Y/xpPDJz/se19ICsqj/momRbb9mh9ZUtkoJ5X3nTnPdhEJyc0qnM6yAsHBaA==} + + napi-build-utils@2.0.0: + resolution: {integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==} + + next-tick@1.1.0: + resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} + + node-abi@3.73.0: + resolution: {integrity: sha512-z8iYzQGBu35ZkTQ9mtR8RqugJZ9RCLn8fv3d7LsgDBzOijGQP3RdKTX4LA7LXw03ZhU5z0l4xfhIMgSES31+cg==} + engines: {node: '>=10'} + + node-addon-api@5.1.0: + resolution: {integrity: sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + npm-run-path@5.3.0: + resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + on-one@0.1.4: + resolution: {integrity: sha512-fWyHjSVZvs7Dkt7F/fZCm4Eoxv7+uQkaiUYh3jDVN15khYa5iTnFWW9VM8rQgStAca5cDxHzyAT7cF+gfyLgcg==} + engines: {node: '>=0.8'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + + onetime@7.0.0: + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} + engines: {node: '>=18'} + + os-shim@0.1.3: + resolution: {integrity: sha512-jd0cvB8qQ5uVt0lvCIexBaROw1KyKm5sbulg2fWOHjETisuCzWyt+eTZKEMs8v6HwzoGs8xik26jg7eCM6pS+A==} + engines: {node: '>= 0.4.0'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + pidtree@0.6.0: + resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} + engines: {node: '>=0.10'} + hasBin: true + + png-to-ico@2.1.8: + resolution: {integrity: sha512-Nf+IIn/cZ/DIZVdGveJp86NG5uNib1ZXMiDd/8x32HCTeKSvgpyg6D/6tUBn1QO/zybzoMK0/mc3QRgAyXdv9w==} + engines: {node: '>=8'} + hasBin: true + + pngjs@6.0.0: + resolution: {integrity: sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==} + engines: {node: '>=12.13.0'} + + prebuild-install@7.1.3: + resolution: {integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==} + engines: {node: '>=10'} + hasBin: true + + prettier-plugin-sh@0.14.0: + resolution: {integrity: sha512-hfXulj5+zEl/ulrO5kMuuTPKmXvOg0bnLHY1hKFNN/N+/903iZbNp8NyZBTsgI8dtkSgFfAEIQq0IQTyP1ZVFQ==} + engines: {node: '>=16.0.0'} + peerDependencies: + prettier: ^3.0.3 + + prettier@3.4.2: + resolution: {integrity: sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==} + engines: {node: '>=14'} + hasBin: true + + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + progress-stream@2.0.0: + resolution: {integrity: sha512-xJwOWR46jcXUq6EH9yYyqp+I52skPySOeHfkxOZ2IY1AiBi/sFJhbhAKHoV3OTw/omQ45KTio9215dRJ2Yxd3Q==} + + prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + + pump@3.0.2: + resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} + + pumpify@2.0.1: + resolution: {integrity: sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw==} + + queue-cb@1.4.16: + resolution: {integrity: sha512-7g8cAIeoENe4kYgLAjTF7j7nX71pLlGdIAViR8U8pmHD3UA116+LjMRyucE6c6qUYBlv4ppaYXCTZjlo/IN27w==} + engines: {node: '>=0.8'} + + rc@1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true + + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + require_optional@1.0.1: + resolution: {integrity: sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==} + + resolve-from@2.0.0: + resolution: {integrity: sha512-qpFcKaXsq8+oRoLilkwyc7zHGF5i9Q2/25NIgLQQ/+VVv9rU4qvr6nXVAw1DsnXJyQkZsR4Ytfbtg5ehfcUssQ==} + engines: {node: '>=0.10.0'} + + restore-cursor@5.1.0: + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} + engines: {node: '>=18'} + + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + + rimraf2@2.8.2: + resolution: {integrity: sha512-Bz7P3Zu6lEpek5LduIqg5A2mRu8kCllR+rGYofqq9bRRiHC9m+Py/EiINPt9iu/XOqQ//Q++XSka7EwL3K3Chw==} + hasBin: true + peerDependencies: + glob: '*' + peerDependenciesMeta: + glob: + optional: true + + rustic@1.2.2: + resolution: {integrity: sha512-aagYrcImcYj3QbaP7nirOw8/q8aULMu0LkKucP9B4WsRbXlXpk195nYAEB+uJzAcgk2pKS+yMzbAJtIoOqwZoQ==} + + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + + sh-syntax@0.4.2: + resolution: {integrity: sha512-/l2UZ5fhGZLVZa16XQM9/Vq/hezGGbdHeVEA01uWjOL1+7Ek/gt6FquW0iKKws4a9AYPYvlz6RyVvjh3JxOteg==} + engines: {node: '>=16.0.0'} + + sharp@0.30.7: + resolution: {integrity: sha512-G+MY2YW33jgflKPTXXptVO28HvNOo9G3j0MybYAHeEmby+QuD2U98dT6ueht9cv/XDqZspSpIhoSW+BAKJ7Hig==} + engines: {node: '>=12.13.0'} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + shell-escape@0.2.0: + resolution: {integrity: sha512-uRRBT2MfEOyxuECseCZd28jC1AJ8hmqqneWQ4VWUTgCAFvb3wKU1jLqj6egC4Exrr88ogg3dp+zroH4wJuaXzw==} + + short-hash@1.0.0: + resolution: {integrity: sha512-qbUCD2Pkl4IXRyVqneEjGnUr0NGDGLzZnBUVGJngIQZf/FrhOL0yJhH+JQzak0t8xMmScIKpoX1SxOsPHdwa4w==} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + simple-concat@1.0.1: + resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} + + simple-get@4.0.1: + resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} + + simple-swizzle@0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + + slice-ansi@5.0.0: + resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} + engines: {node: '>=12'} + + slice-ansi@7.1.0: + resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} + engines: {node: '>=18'} + + speedometer@1.0.0: + resolution: {integrity: sha512-lgxErLl/7A5+vgIIXsh9MbeukOaCb2axgQ+bKCdIE+ibNT4XNYGNCR1qFEGq6F+YDASXK3Fh/c5FgtZchFolxw==} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + stack-base-iterator@1.1.20: + resolution: {integrity: sha512-dlhhk0qesNjtXQCvJsayyvrUIh4gz6HkGC3g00RmXUgpbpYV7SJm97/Ac2HNUfO2mtq68DEGvt+msCf7Uk55Hg==} + engines: {node: '>=0.8'} + + stream-shift@1.0.3: + resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} + + string-argv@0.3.2: + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} + engines: {node: '>=0.6.19'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} + + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + + strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + tar-fs@2.1.2: + resolution: {integrity: sha512-EsaAXwxmx8UB7FRKqeozqEPop69DXcmYwTQwXvyAPF352HJsPdkVhvTaDPYqfNgruveJIJy3TA2l+2zj8LJIJA==} + + tar-iterator@1.2.25: + resolution: {integrity: sha512-PyjH/Rils3eQ2ThsBG4O8zQLx/nPkoS/Iqvob4wEtpOJoO5DcqQKeI88aGWC3ktG6ms1Lgf1qrYtCo59W4WeRg==} + engines: {node: '>=0.8'} + + tar-stream-compat@2.1.5: + resolution: {integrity: sha512-hhIcRHj6S+y7IDR+VO8IcOjPUsAJ+50POvGK1fDFqbOTLTs/J7YA07TUgvpSkYkYuRUfYsuAFM/0SrvrdIZMdQ==} + engines: {node: '>=0.8'} + + tar-stream@2.2.0: + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} + + temp-suffix@0.1.14: + resolution: {integrity: sha512-OqUZmSYtyGgteGxgjh8mkV69Zr1GXSYMj/+VUol698zxnopimbAlmIx5cQIIg1F9XDyA01htZfxLqC1FQZ7hbw==} + engines: {node: '>=0.8'} + + through2@2.0.5: + resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + tiny-glob@0.2.9: + resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + to-utf8@0.0.1: + resolution: {integrity: sha512-zks18/TWT1iHO3v0vFp5qLKOG27m67ycq/Y7a7cTiRuUNlc4gf3HGnkRgMv0NyhnfTamtkYBJl+YeD1/j07gBQ==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + tunnel-agent@0.6.0: + resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + + unbzip2-stream@1.4.3: + resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} + + unc-path-regex@0.1.2: + resolution: {integrity: sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==} + engines: {node: '>=0.10.0'} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + wrap-ansi@9.0.0: + resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} + engines: {node: '>=18'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + xmlbuilder2@3.1.1: + resolution: {integrity: sha512-WCSfbfZnQDdLQLiMdGUQpMxxckeQ4oZNMNhLVkcekTu7xhD4tuUDyAPoY8CwXvBYE6LwBHd6QW2WZXlOWr1vCw==} + engines: {node: '>=12.0'} + + xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + + yaml@2.6.1: + resolution: {integrity: sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==} + engines: {node: '>= 14'} + hasBin: true + + zip-iterator@1.2.23: + resolution: {integrity: sha512-gS+3YsU/vIHXxaViw67Dm1DMyN7U5iVU/NFB0rWYKyN7MYlOH61icBZm8RWesDtknsUaT9saEChwj+ueZKS8Dg==} + engines: {node: '>=0.8'} + + zip@1.2.0: + resolution: {integrity: sha512-8B4Z9BXJKkI8BkHhKvQan4rwCzUENnj95YHFYrI7F1NbqKCIdW86kujctzEB+kJ6XapHPiAhiZ9xi5GbW5SPdw==} + +snapshots: + + '@oozcitak/dom@1.15.10': + dependencies: + '@oozcitak/infra': 1.0.8 + '@oozcitak/url': 1.0.4 + '@oozcitak/util': 8.3.8 + + '@oozcitak/infra@1.0.8': + dependencies: + '@oozcitak/util': 8.3.8 + + '@oozcitak/url@1.0.4': + dependencies: + '@oozcitak/infra': 1.0.8 + '@oozcitak/util': 8.3.8 + + '@oozcitak/util@8.3.8': {} + + '@resvg/resvg-js-android-arm-eabi@1.4.0': + optional: true + + '@resvg/resvg-js-android-arm64@1.4.0': + optional: true + + '@resvg/resvg-js-darwin-arm64@1.4.0': + optional: true + + '@resvg/resvg-js-darwin-x64@1.4.0': + optional: true + + '@resvg/resvg-js-linux-arm-gnueabihf@1.4.0': + optional: true + + '@resvg/resvg-js-linux-arm64-gnu@1.4.0': + optional: true + + '@resvg/resvg-js-linux-arm64-musl@1.4.0': + optional: true + + '@resvg/resvg-js-linux-x64-gnu@1.4.0': + optional: true + + '@resvg/resvg-js-linux-x64-musl@1.4.0': + optional: true + + '@resvg/resvg-js-win32-arm64-msvc@1.4.0': + optional: true + + '@resvg/resvg-js-win32-ia32-msvc@1.4.0': + optional: true + + '@resvg/resvg-js-win32-x64-msvc@1.4.0': + optional: true + + '@resvg/resvg-js@1.4.0': + optionalDependencies: + '@resvg/resvg-js-android-arm-eabi': 1.4.0 + '@resvg/resvg-js-android-arm64': 1.4.0 + '@resvg/resvg-js-darwin-arm64': 1.4.0 + '@resvg/resvg-js-darwin-x64': 1.4.0 + '@resvg/resvg-js-linux-arm-gnueabihf': 1.4.0 + '@resvg/resvg-js-linux-arm64-gnu': 1.4.0 + '@resvg/resvg-js-linux-arm64-musl': 1.4.0 + '@resvg/resvg-js-linux-x64-gnu': 1.4.0 + '@resvg/resvg-js-linux-x64-musl': 1.4.0 + '@resvg/resvg-js-win32-arm64-msvc': 1.4.0 + '@resvg/resvg-js-win32-ia32-msvc': 1.4.0 + '@resvg/resvg-js-win32-x64-msvc': 1.4.0 + + '@types/node@17.0.45': {} + + '@zen-browser/surfer@1.9.16(glob@7.2.3)': + dependencies: + '@resvg/resvg-js': 1.4.0 + async-icns: 1.0.2 + axios: 0.21.4 + chalk: 4.1.2 + cli-progress: 3.12.0 + commander: 6.2.1 + execa: 5.1.1 + fast-extract: 1.3.31(glob@7.2.3) + fs-extra: 10.1.0 + ini: 3.0.1 + is-apple-silicon: https://codeload.github.com/trickypr/is-apple-silicon/tar.gz/5f75501a1d7566ba9f94174b6825d7bd9d302b6a + kleur: 4.1.5 + modern-async: 1.1.5 + mount-dmg: 1.0.1 + picomatch: 2.3.1 + png-to-ico: 2.1.8 + prompts: 2.4.2 + rustic: 1.2.2 + semver: 7.6.3 + sharp: 0.30.7 + tiny-glob: 0.2.9 + xmlbuilder2: 3.1.1 + transitivePeerDependencies: + - debug + - glob + - lzma-native + + ansi-escapes@7.0.0: + dependencies: + environment: 1.1.0 + + ansi-regex@5.0.1: {} + + ansi-regex@6.1.0: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@6.2.1: {} + + argparse@1.0.10: + dependencies: + sprintf-js: 1.0.3 + + asap@2.0.6: {} + + async-compat@1.6.8: + dependencies: + is-error: 2.2.2 + is-promise: 4.0.0 + + async-icns@1.0.2: + dependencies: + commander: 9.5.0 + + axios@0.21.4: + dependencies: + follow-redirects: 1.15.9 + transitivePeerDependencies: + - debug + + balanced-match@1.0.2: + optional: true + + base64-js@0.0.2: {} + + base64-js@1.5.1: {} + + bl@2.2.1: + dependencies: + readable-stream: 2.3.8 + safe-buffer: 5.2.1 + + bl@3.0.1: + dependencies: + readable-stream: 3.6.2 + + bl@4.1.0: + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + + bops@0.1.1: + dependencies: + base64-js: 0.0.2 + to-utf8: 0.0.1 + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + optional: true + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + buffer-alloc-unsafe@1.1.0: {} + + buffer-alloc@1.2.0: + dependencies: + buffer-alloc-unsafe: 1.1.0 + buffer-fill: 1.0.0 + + buffer-fill@1.0.0: {} + + buffer-v6-polyfill@1.0.5: {} + + buffer@5.7.1: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + call-once-fn@1.0.15: {} + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@5.4.1: {} + + chownr@1.1.4: {} + + cli-cursor@5.0.0: + dependencies: + restore-cursor: 5.1.0 + + cli-progress@3.12.0: + dependencies: + string-width: 4.2.3 + + cli-truncate@4.0.0: + dependencies: + slice-ansi: 5.0.0 + string-width: 7.2.0 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + color-string@1.9.1: + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + + color@4.2.3: + dependencies: + color-convert: 2.0.1 + color-string: 1.9.1 + + colorette@2.0.20: {} + + commander@12.1.0: {} + + commander@6.2.1: {} + + commander@9.5.0: {} + + concat-map@0.0.1: + optional: true + + content-disposition@0.5.4: + dependencies: + safe-buffer: 5.2.1 + + core-js-pure@3.40.0: {} + + core-util-is@1.0.3: {} + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + debug@4.4.0: + dependencies: + ms: 2.1.3 + + decompress-response@6.0.0: + dependencies: + mimic-response: 3.1.0 + + deep-extend@0.6.0: {} + + detect-libc@2.0.3: {} + + duplexify@4.1.3: + dependencies: + end-of-stream: 1.4.4 + inherits: 2.0.4 + readable-stream: 3.6.2 + stream-shift: 1.0.3 + + emoji-regex@10.4.0: {} + + emoji-regex@8.0.0: {} + + end-of-stream@1.4.4: + dependencies: + once: 1.4.0 + + environment@1.1.0: {} + + esprima@4.0.1: {} + + eventemitter3@5.0.1: {} + + execa@5.1.1: + dependencies: + cross-spawn: 7.0.6 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + + execa@8.0.1: + dependencies: + cross-spawn: 7.0.6 + get-stream: 8.0.1 + human-signals: 5.0.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.3.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 + + expand-template@2.0.3: {} + + extract-base-iterator@1.2.22(glob@7.2.3): + dependencies: + graceful-fs: 4.2.11 + is-absolute: 1.0.0 + lodash.compact: 3.0.1 + mkdirp-classic: 0.5.3 + object-assign: 4.1.1 + queue-cb: 1.4.16 + rimraf2: 2.8.2(glob@7.2.3) + stack-base-iterator: 1.1.20 + transitivePeerDependencies: + - glob + + fast-extract@1.3.31(glob@7.2.3): + dependencies: + bl: 3.0.1 + buffer-v6-polyfill: 1.0.5 + call-once-fn: 1.0.15 + content-disposition: 0.5.4 + flush-write-stream: 2.0.0 + lodash.throttle: 4.1.1 + mkdirp-classic: 0.5.3 + mock-require-lazy: 1.0.14 + next-tick: 1.1.0 + on-one: 0.1.4 + progress-stream: 2.0.0 + pumpify: 2.0.1 + queue-cb: 1.4.16 + readable-stream: 2.3.8 + require_optional: 1.0.1 + rimraf2: 2.8.2(glob@7.2.3) + signal-exit: 3.0.7 + tar-iterator: 1.2.25(glob@7.2.3) + temp-suffix: 0.1.14 + unbzip2-stream: 1.4.3 + zip-iterator: 1.2.23(glob@7.2.3) + transitivePeerDependencies: + - glob + + fifo@2.4.1: {} + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + flush-write-stream@2.0.0: + dependencies: + inherits: 2.0.4 + readable-stream: 3.6.2 + + follow-redirects@1.15.9: {} + + fs-constants@1.0.0: {} + + fs-extra@10.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fs.realpath@1.0.0: + optional: true + + get-caller-file@2.0.5: {} + + get-east-asian-width@1.3.0: {} + + get-stream@6.0.1: {} + + get-stream@8.0.1: {} + + github-from-package@0.0.0: {} + + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + optional: true + + globalyzer@0.1.0: {} + + globrex@0.1.2: {} + + graceful-fs@4.2.11: {} + + has-flag@4.0.0: {} + + hash-string@1.0.0: {} + + human-signals@2.1.0: {} + + human-signals@5.0.0: {} + + husky@9.1.7: {} + + ieee754@1.2.1: {} + + imurmurhash@0.1.4: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + optional: true + + inherits@2.0.4: {} + + ini@1.3.8: {} + + ini@3.0.1: {} + + is-absolute@1.0.0: + dependencies: + is-relative: 1.0.0 + is-windows: 1.0.2 + + is-apple-silicon@https://codeload.github.com/trickypr/is-apple-silicon/tar.gz/5f75501a1d7566ba9f94174b6825d7bd9d302b6a: {} + + is-arrayish@0.3.2: {} + + is-error@2.2.2: {} + + is-fullwidth-code-point@3.0.0: {} + + is-fullwidth-code-point@4.0.0: {} + + is-fullwidth-code-point@5.0.0: + dependencies: + get-east-asian-width: 1.3.0 + + is-number@7.0.0: {} + + is-promise@4.0.0: {} + + is-relative@1.0.0: + dependencies: + is-unc-path: 1.0.0 + + is-stream@2.0.1: {} + + is-stream@3.0.0: {} + + is-unc-path@1.0.0: + dependencies: + unc-path-regex: 0.1.2 + + is-windows@1.0.2: {} + + isarray@1.0.0: {} + + isexe@2.0.0: {} + + js-yaml@3.14.1: + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + + jsonfile@6.1.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + kleur@3.0.3: {} + + kleur@4.1.5: {} + + lifecycle@1.0.4: {} + + lilconfig@3.1.3: {} + + lint-staged@15.3.0: + dependencies: + chalk: 5.4.1 + commander: 12.1.0 + debug: 4.4.0 + execa: 8.0.1 + lilconfig: 3.1.3 + listr2: 8.2.5 + micromatch: 4.0.8 + pidtree: 0.6.0 + string-argv: 0.3.2 + yaml: 2.6.1 + transitivePeerDependencies: + - supports-color + + listr2@8.2.5: + dependencies: + cli-truncate: 4.0.0 + colorette: 2.0.20 + eventemitter3: 5.0.1 + log-update: 6.1.0 + rfdc: 1.4.1 + wrap-ansi: 9.0.0 + + lodash.compact@3.0.1: {} + + lodash.throttle@4.1.1: {} + + log-update@6.1.0: + dependencies: + ansi-escapes: 7.0.0 + cli-cursor: 5.0.0 + slice-ansi: 7.1.0 + strip-ansi: 7.1.0 + wrap-ansi: 9.0.0 + + merge-stream@2.0.0: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mimic-fn@2.1.0: {} + + mimic-fn@4.0.0: {} + + mimic-function@5.0.1: {} + + mimic-response@3.1.0: {} + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + optional: true + + minimist@1.2.8: {} + + mkdirp-classic@0.5.3: {} + + mock-require-lazy@1.0.14: + dependencies: + get-caller-file: 2.0.5 + normalize-path: 3.0.0 + + modern-async@1.1.5: + dependencies: + core-js-pure: 3.40.0 + nanoassert: 2.0.0 + + mount-dmg@1.0.1: + dependencies: + shell-escape: 0.2.0 + + ms@2.1.3: {} + + mvdan-sh@0.10.1: {} + + nanoassert@2.0.0: {} + + napi-build-utils@2.0.0: {} + + next-tick@1.1.0: {} + + node-abi@3.73.0: + dependencies: + semver: 7.6.3 + + node-addon-api@5.1.0: {} + + normalize-path@3.0.0: {} + + npm-run-path@4.0.1: + dependencies: + path-key: 3.1.1 + + npm-run-path@5.3.0: + dependencies: + path-key: 4.0.0 + + object-assign@4.1.1: {} + + on-one@0.1.4: {} + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + onetime@6.0.0: + dependencies: + mimic-fn: 4.0.0 + + onetime@7.0.0: + dependencies: + mimic-function: 5.0.1 + + os-shim@0.1.3: {} + + path-is-absolute@1.0.1: + optional: true + + path-key@3.1.1: {} + + path-key@4.0.0: {} + + picomatch@2.3.1: {} + + pidtree@0.6.0: {} + + png-to-ico@2.1.8: + dependencies: + '@types/node': 17.0.45 + minimist: 1.2.8 + pngjs: 6.0.0 + + pngjs@6.0.0: {} + + prebuild-install@7.1.3: + dependencies: + detect-libc: 2.0.3 + expand-template: 2.0.3 + github-from-package: 0.0.0 + minimist: 1.2.8 + mkdirp-classic: 0.5.3 + napi-build-utils: 2.0.0 + node-abi: 3.73.0 + pump: 3.0.2 + rc: 1.2.8 + simple-get: 4.0.1 + tar-fs: 2.1.2 + tunnel-agent: 0.6.0 + + prettier-plugin-sh@0.14.0(prettier@3.4.2): + dependencies: + mvdan-sh: 0.10.1 + prettier: 3.4.2 + sh-syntax: 0.4.2 + + prettier@3.4.2: {} + + process-nextick-args@2.0.1: {} + + progress-stream@2.0.0: + dependencies: + speedometer: 1.0.0 + through2: 2.0.5 + + prompts@2.4.2: + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + + pump@3.0.2: + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + + pumpify@2.0.1: + dependencies: + duplexify: 4.1.3 + inherits: 2.0.4 + pump: 3.0.2 + + queue-cb@1.4.16: {} + + rc@1.2.8: + dependencies: + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.8 + strip-json-comments: 2.0.1 + + readable-stream@2.3.8: + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + + require_optional@1.0.1: + dependencies: + resolve-from: 2.0.0 + semver: 5.7.2 + + resolve-from@2.0.0: {} + + restore-cursor@5.1.0: + dependencies: + onetime: 7.0.0 + signal-exit: 4.1.0 + + rfdc@1.4.1: {} + + rimraf2@2.8.2(glob@7.2.3): + optionalDependencies: + glob: 7.2.3 + + rustic@1.2.2: {} + + safe-buffer@5.1.2: {} + + safe-buffer@5.2.1: {} + + semver@5.7.2: {} + + semver@7.6.3: {} + + sh-syntax@0.4.2: + dependencies: + tslib: 2.8.1 + + sharp@0.30.7: + dependencies: + color: 4.2.3 + detect-libc: 2.0.3 + node-addon-api: 5.1.0 + prebuild-install: 7.1.3 + semver: 7.6.3 + simple-get: 4.0.1 + tar-fs: 2.1.2 + tunnel-agent: 0.6.0 + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + shell-escape@0.2.0: {} + + short-hash@1.0.0: + dependencies: + hash-string: 1.0.0 + + signal-exit@3.0.7: {} + + signal-exit@4.1.0: {} + + simple-concat@1.0.1: {} + + simple-get@4.0.1: + dependencies: + decompress-response: 6.0.0 + once: 1.4.0 + simple-concat: 1.0.1 + + simple-swizzle@0.2.2: + dependencies: + is-arrayish: 0.3.2 + + sisteransi@1.0.5: {} + + slice-ansi@5.0.0: + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 4.0.0 + + slice-ansi@7.1.0: + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 5.0.0 + + speedometer@1.0.0: {} + + sprintf-js@1.0.3: {} + + stack-base-iterator@1.1.20: + dependencies: + asap: 2.0.6 + async-compat: 1.6.8 + call-once-fn: 1.0.15 + fifo: 2.4.1 + + stream-shift@1.0.3: {} + + string-argv@0.3.2: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@7.2.0: + dependencies: + emoji-regex: 10.4.0 + get-east-asian-width: 1.3.0 + strip-ansi: 7.1.0 + + string_decoder@1.1.1: + dependencies: + safe-buffer: 5.1.2 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.1.0 + + strip-final-newline@2.0.0: {} + + strip-final-newline@3.0.0: {} + + strip-json-comments@2.0.1: {} + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + tar-fs@2.1.2: + dependencies: + chownr: 1.1.4 + mkdirp-classic: 0.5.3 + pump: 3.0.2 + tar-stream: 2.2.0 + + tar-iterator@1.2.25(glob@7.2.3): + dependencies: + call-once-fn: 1.0.15 + extract-base-iterator: 1.2.22(glob@7.2.3) + lifecycle: 1.0.4 + lodash.compact: 3.0.1 + mkdirp-classic: 0.5.3 + on-one: 0.1.4 + rimraf2: 2.8.2(glob@7.2.3) + tar-stream-compat: 2.1.5 + transitivePeerDependencies: + - glob + + tar-stream-compat@2.1.5: + dependencies: + bl: 2.2.1 + buffer-alloc: 1.2.0 + end-of-stream: 1.4.4 + fs-constants: 1.0.0 + inherits: 2.0.4 + readable-stream: 2.3.8 + + tar-stream@2.2.0: + dependencies: + bl: 4.1.0 + end-of-stream: 1.4.4 + fs-constants: 1.0.0 + inherits: 2.0.4 + readable-stream: 3.6.2 + + temp-suffix@0.1.14: + dependencies: + imurmurhash: 0.1.4 + + through2@2.0.5: + dependencies: + readable-stream: 2.3.8 + xtend: 4.0.2 + + through@2.3.8: {} + + tiny-glob@0.2.9: + dependencies: + globalyzer: 0.1.0 + globrex: 0.1.2 + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + to-utf8@0.0.1: {} + + tslib@2.8.1: {} + + tunnel-agent@0.6.0: + dependencies: + safe-buffer: 5.2.1 + + unbzip2-stream@1.4.3: + dependencies: + buffer: 5.7.1 + through: 2.3.8 + + unc-path-regex@0.1.2: {} + + universalify@2.0.1: {} + + util-deprecate@1.0.2: {} + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + wrap-ansi@9.0.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 7.2.0 + strip-ansi: 7.1.0 + + wrappy@1.0.2: {} + + xmlbuilder2@3.1.1: + dependencies: + '@oozcitak/dom': 1.15.10 + '@oozcitak/infra': 1.0.8 + '@oozcitak/util': 8.3.8 + js-yaml: 3.14.1 + + xtend@4.0.2: {} + + yaml@2.6.1: {} + + zip-iterator@1.2.23(glob@7.2.3): + dependencies: + buffer-v6-polyfill: 1.0.5 + call-once-fn: 1.0.15 + extract-base-iterator: 1.2.22(glob@7.2.3) + lifecycle: 1.0.4 + lodash.compact: 3.0.1 + mkdirp-classic: 0.5.3 + on-one: 0.1.4 + os-shim: 0.1.3 + queue-cb: 1.4.16 + readable-stream: 2.3.8 + rimraf2: 2.8.2(glob@7.2.3) + short-hash: 1.0.0 + temp-suffix: 0.1.14 + zip: 1.2.0 + transitivePeerDependencies: + - glob + + zip@1.2.0: + dependencies: + bops: 0.1.1 diff --git a/scripts/download-language-packs.sh b/scripts/download-language-packs.sh index 11f472592..4363c6f21 100644 --- a/scripts/download-language-packs.sh +++ b/scripts/download-language-packs.sh @@ -10,6 +10,7 @@ cd $CURRENT_DIR LAST_FIREFOX_L10N_COMMIT=$(cat ./firefox-cache/l10n-last-commit-hash) cd ./l10n +rm -rf firefox-l10n # clone only from LAST_FIREFOX_L10N_COMMIT git clone https://github.com/mozilla-l10n/firefox-l10n cd firefox-l10n diff --git a/scripts/update_ff.py b/scripts/update_ff.py index cc1b0a89d..df61856d5 100644 --- a/scripts/update_ff.py +++ b/scripts/update_ff.py @@ -18,8 +18,8 @@ def update_rc(last_version: str): with open("surfer.json", "w") as f: data["version"]["candidate"] = rc_version json.dump(data, f, indent=2) - print("Download the new engine by running 'pnpm download'.") - os.system("pnpm download") + print("Download the new engine by running 'npm run download'.") + os.system("npm run download") else: print("No new Firefox RC version available.") @@ -28,7 +28,7 @@ def update_ff(is_rc: bool = False, last_version: str = ""): """Runs the npm command to update the 'ff' component.""" if is_rc: return update_rc(last_version) - result = os.system("pnpm update-ff:raw") + result = os.system("npm run update-ff:raw") if result != 0: raise RuntimeError("Failed to update 'ff' component.") @@ -63,8 +63,7 @@ def update_l10n_last_commit_hash(): os.system(f"git clone {L10N_REPO} l10n-temp") if not os.path.exists("firefox-cache"): os.mkdir("firefox-cache") - with open("l10n-last-commit-hash", "w") as f: - os.system("cat l10n-temp/.git/refs/heads/main > firefox-cache/l10n-last-commit-hash") + os.system("cat l10n-temp/.git/refs/heads/main > firefox-cache/l10n-last-commit-hash") except KeyboardInterrupt: print("Exiting...") shutil.rmtree("l10n-temp") diff --git a/src/browser/app/profile/zen-browser.js b/src/browser/app/profile/zen-browser.js index 0fe55448f..ff35d39e5 100644 --- a/src/browser/app/profile/zen-browser.js +++ b/src/browser/app/profile/zen-browser.js @@ -8,9 +8,7 @@ #endif #endif -pref("browser.tabs.cardPreview.enabled", true); -pref("browser.tabs.hoverPreview.enabled", true); -pref("browser.tabs.cardPreview.delayMs", 100); +pref("browser.tabs.hoverPreview.enabled", false); #ifdef MOZ_UPDATE_CHANNEL pref("devtools.debugger.prompt-connection", true); @@ -86,7 +84,7 @@ pref('zen.theme.accent-color', "#ffb787"); pref('zen.theme.content-element-separation', 6); // In pixels pref('zen.theme.pill-button', false); pref('zen.theme.gradient', true); -pref('zen.theme.essentials-favicon-bg', false); +pref('zen.theme.essentials-favicon-bg', true); pref('zen.tabs.show-newtab-vertical', true); pref('zen.view.show-newtab-button-border-top', false); @@ -102,7 +100,7 @@ pref('zen.injections.match-urls', 'http://localhost/*', locked); pref('zen.rice.share.notice.accepted', false); #ifdef XP_MACOSX -pref('zen.theme.border-radius', 12); // In pixels +pref('zen.theme.border-radius', 10); // In pixels #else #ifdef XP_WIN pref('zen.theme.border-radius', 12); // In pixels @@ -124,6 +122,7 @@ pref('zen.view.compact.color-toolbar', true); pref('zen.view.compact.color-sidebar', true); pref('zen.view.compact.animate-sidebar', true); +pref('zen.urlbar.replace-newtab', true); pref('zen.urlbar.behavior', 'floating-on-type'); // default, floating-on-type, float #ifdef XP_MACOSX @@ -177,8 +176,8 @@ pref('zen.pinned-tab-manager.debug', false); pref('zen.pinned-tab-manager.restore-pinned-tabs-to-pinned-url', false); pref('zen.pinned-tab-manager.close-shortcut-behavior', 'switch'); -// Pref to enable the new profiles (TODO: Check this out!) -//pref("browser.profiles.enabled", true); +// TODO: Check this out! +pref("browser.profiles.enabled", false); // Zen webpanels (calling it sidebar due to legacy reasons) pref('zen.sidebar.data', "{\"data\":\n {\"p1\":{\n \"url\":\"https://www.wikipedia.org/\"\n },\n\"p2\":{\n \"url\":\"https://m.twitter.com/\",\n\"ua\": true\n },\n\"p3\": {\n \"url\": \"https://www.youtube.com/\",\n\"ua\": true\n},\n\"p4\": {\n \"url\": \"https://translate.google.com/\",\n\"ua\": true\n},\n\"p5\": {\n \"url\": \"https://todoist.com/\",\n\"ua\": true\n}},\n\"index\":[\"p1\",\"p2\",\"p3\",\"p4\",\"p5\"]}"); diff --git a/src/browser/base/content/ZenCustomizableUI.sys.mjs b/src/browser/base/content/ZenCustomizableUI.sys.mjs index fcd92ea1d..a3622a5ee 100644 --- a/src/browser/base/content/ZenCustomizableUI.sys.mjs +++ b/src/browser/base/content/ZenCustomizableUI.sys.mjs @@ -4,7 +4,7 @@ export var ZenCustomizableUI = new (class { constructor() {} TYPE_TOOLBAR = 'toolbar'; - defaultSidebarIcons = ['zen-profile-button', 'zen-workspaces-button', 'downloads-button']; + defaultSidebarIcons = ['preferences-button', 'zen-workspaces-button', 'downloads-button']; startup(CustomizableUIInternal) { CustomizableUIInternal.registerArea( diff --git a/src/browser/base/content/ZenStartup.mjs b/src/browser/base/content/ZenStartup.mjs index 6549eb475..a8880efdd 100644 --- a/src/browser/base/content/ZenStartup.mjs +++ b/src/browser/base/content/ZenStartup.mjs @@ -101,7 +101,8 @@ // to how Gecko internally rounds in those cases, we allow for some // minor differences (the internal Gecko layout size is 1/60th of a // pixel, so 0.02 should cover it). - let overflowing = contentSize - tabContainer.arrowScrollbox.scrollClientSize > 0.02; + //let overflowing = contentSize - tabContainer.arrowScrollbox.scrollClientSize > 0.02; + let overflowing = true; // cheatign the system, because we want to always show make the element overflowing window.requestAnimationFrame(() => { tabContainer.arrowScrollbox.toggleAttribute('overflowing', overflowing); @@ -109,9 +110,6 @@ }); }); observer.observe(tabsWrapper); - tabsWrapper.addEventListener('dblclick', (event) => { - // DO NOT REMOVE, THIS IS TO FIX "OPEN NEW TAB" ON DOUBLE CLICK - }); }, _initSearchBar() { diff --git a/src/browser/base/content/ZenUIManager.mjs b/src/browser/base/content/ZenUIManager.mjs index ad366ac23..c843966c8 100644 --- a/src/browser/base/content/ZenUIManager.mjs +++ b/src/browser/base/content/ZenUIManager.mjs @@ -28,7 +28,8 @@ var gZenUIManager = { this._hasLoadedDOM = true; }); - window.addEventListener('TabClose', this.updateTabsToolbar.bind(this)); + window.addEventListener('TabClose', this.onTabClose.bind(this)); + this.tabsWrapper.addEventListener('scroll', this.saveScrollbarState.bind(this)); }, updateTabsToolbar() { @@ -56,6 +57,27 @@ var gZenUIManager = { tabs.style.maxHeight = height + 'px'; }, + get tabsWrapper() { + if (this._tabsWrapper) { + return this._tabsWrapper; + } + this._tabsWrapper = document.getElementById('zen-browser-tabs-wrapper'); + return this._tabsWrapper; + }, + + saveScrollbarState() { + this._scrollbarState = this.tabsWrapper.scrollTop; + }, + + restoreScrollbarState() { + this.tabsWrapper.scrollTop = this._scrollbarState; + }, + + onTabClose(event) { + this.updateTabsToolbar(); + this.restoreScrollbarState(); + }, + openAndChangeToTab(url, options) { if (window.ownerGlobal.parent) { const tab = window.ownerGlobal.parent.gBrowser.addTrustedTab(url, options); @@ -68,9 +90,7 @@ var gZenUIManager = { }, generateUuidv4() { - return '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, (c) => - (+c ^ (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (+c / 4)))).toString(16) - ); + return Services.uuid.generateUUID().toString(); }, toogleBookmarksSidebar() { @@ -126,6 +146,43 @@ var gZenUIManager = { this.__currentPopup = null; this.__currentPopupTrackElement = null; }, + + _prevUrlbarLabel: null, + _lastSearch: '', + + handleNewTab(werePassedURL, searchClipboard, where) { + const shouldOpenURLBar = + Services.prefs.getBoolPref('zen.urlbar.replace-newtab') && !werePassedURL && !searchClipboard && where === 'tab'; + if (shouldOpenURLBar) { + this._prevUrlbarLabel = gURLBar._untrimmedValue; + gURLBar._zenHandleUrlbarClose = this.handleUrlbarClose.bind(this); + gURLBar.setAttribute('zen-newtab', true); + document.getElementById('Browser:OpenLocation').doCommand(); + gURLBar.search(this._lastSearch); + return true; + } + return false; + }, + + handleUrlbarClose(onSwitch) { + gURLBar._zenHandleUrlbarClose = null; + gURLBar.removeAttribute('zen-newtab'); + if (onSwitch) { + this._prevUrlbarLabel = null; + this._lastSearch = ''; + } else { + this._lastSearch = gURLBar._untrimmedValue; + } + gURLBar.setURI(this._prevUrlbarLabel, false, false, false, true); + gURLBar.handleRevert(); + if (gURLBar.focused) { + gURLBar.view.close({ elementPicked: onSwitch }); + gURLBar.updateTextOverflow(); + if (gBrowser.selectedTab.linkedBrowser && onSwitch) { + gURLBar.getBrowserState(gBrowser.selectedTab.linkedBrowser).urlbarFocused = false; + } + } + }, }; var gZenVerticalTabsManager = { @@ -248,7 +305,7 @@ var gZenVerticalTabsManager = { aTab.style.removeProperty('opacity'); }); gZenUIManager.motion - .animate(aTab.querySelector('.tab-stack'), { + .animate(aTab.querySelector('.tab-content'), { filter: ['blur(1px)', 'blur(0px)'], }) .then(() => { diff --git a/src/browser/base/content/browser-commands-js.patch b/src/browser/base/content/browser-commands-js.patch index 293d011e5..e39ef0bb4 100644 --- a/src/browser/base/content/browser-commands-js.patch +++ b/src/browser/base/content/browser-commands-js.patch @@ -1,8 +1,19 @@ diff --git a/browser/base/content/browser-commands.js b/browser/base/content/browser-commands.js -index 352de44dda36e3f6672eb353f42978ede0cd2681..d6956a318c34bfb12b0ba957edab1166e1a4edaf 100644 +index 352de44dda36e3f6672eb353f42978ede0cd2681..66d1616da17df3430cec0994a346f0f446944f1a 100644 --- a/browser/base/content/browser-commands.js +++ b/browser/base/content/browser-commands.js -@@ -407,8 +407,8 @@ var BrowserCommands = { +@@ -318,6 +318,10 @@ var BrowserCommands = { + } + } + ++ if (gZenUIManager.handleNewTab(werePassedURL, searchClipboard, where)) { ++ return; ++ } ++ + // A notification intended to be useful for modular peformance tracking + // starting as close as is reasonably possible to the time when the user + // expressed the intent to open a new tab. Since there are a lot of +@@ -407,8 +411,8 @@ var BrowserCommands = { (event.ctrlKey || event.metaKey || event.altKey) && gBrowser.selectedTab.pinned ) { diff --git a/src/browser/base/content/browser-init-js.patch b/src/browser/base/content/browser-init-js.patch index 3d3d188ed..0cbd4ecba 100644 --- a/src/browser/base/content/browser-init-js.patch +++ b/src/browser/base/content/browser-init-js.patch @@ -1,11 +1,11 @@ diff --git a/browser/base/content/browser-init.js b/browser/base/content/browser-init.js -index 9df41bb3c82919839ee1408aa4d177ea7ee40a56..e37c64fa2c2ea39762be4285a1a7055463ded537 100644 +index 63100defacf66c6b3232b9e0a783a5fd14e3a46a..22b79b021ff0baab4dac602447a124308208c828 100644 --- a/browser/base/content/browser-init.js +++ b/browser/base/content/browser-init.js -@@ -152,13 +152,15 @@ var gBrowserInit = { - elem.setAttribute("skipintoolbarset", "true"); - } - } +@@ -162,13 +162,15 @@ var gBrowserInit = { + elem.setAttribute("skipintoolbarset", "true"); + } + } + ZenCustomizableUI.init(window); for (let area of CustomizableUI.areas) { let type = CustomizableUI.getAreaType(area); @@ -16,10 +16,10 @@ index 9df41bb3c82919839ee1408aa4d177ea7ee40a56..e37c64fa2c2ea39762be4285a1a70554 } } + ZenCustomizableUI.registerToolbarNodes(window); - if (isVerticalTabs) { - // Show the vertical tabs toolbar - setToolbarVisibility( -@@ -253,6 +255,10 @@ var gBrowserInit = { + if (isVerticalTabs) { + // Show the vertical tabs toolbar + setToolbarVisibility( +@@ -287,6 +289,10 @@ var gBrowserInit = { gPrivateBrowsingUI.init(); BrowserSearch.init(); BrowserPageActions.init(); diff --git a/src/browser/base/content/browser-js.patch b/src/browser/base/content/browser-js.patch index 7ead783f1..db2f39965 100644 --- a/src/browser/base/content/browser-js.patch +++ b/src/browser/base/content/browser-js.patch @@ -1,5 +1,5 @@ diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js -index 9a65dcc7ad41ab961907c95338e023b173d4f474..9477e0c115ed3c4a670f1ac63846b6de01bf8b8c 100644 +index 019b168c1aeae7e1c97a3ae58c99a48a27f54134..1f051e8a1e8a58e8bb721196deecfa36f4089dd6 100644 --- a/browser/base/content/browser.js +++ b/browser/base/content/browser.js @@ -32,6 +32,7 @@ ChromeUtils.defineESModuleGetters(this, { @@ -10,7 +10,7 @@ index 9a65dcc7ad41ab961907c95338e023b173d4f474..9477e0c115ed3c4a670f1ac63846b6de DevToolsSocketStatus: "resource://devtools/shared/security/DevToolsSocketStatus.sys.mjs", DownloadUtils: "resource://gre/modules/DownloadUtils.sys.mjs", -@@ -630,6 +631,15 @@ XPCOMUtils.defineLazyPreferenceGetter( +@@ -632,6 +633,15 @@ XPCOMUtils.defineLazyPreferenceGetter( false ); @@ -26,19 +26,18 @@ index 9a65dcc7ad41ab961907c95338e023b173d4f474..9477e0c115ed3c4a670f1ac63846b6de customElements.setElementCreationCallback("screenshots-buttons", () => { Services.scriptloader.loadSubScript( "chrome://browser/content/screenshots/screenshots-buttons.js", -@@ -3440,6 +3450,11 @@ var XULBrowserWindow = { +@@ -3440,6 +3450,10 @@ var XULBrowserWindow = { AboutReaderParent.updateReaderButton(gBrowser.selectedBrowser); TranslationsParent.onLocationChange(gBrowser.selectedBrowser); + gZenViewSplitter.onLocationChange(gBrowser.selectedBrowser); + ZenWorkspaces.onLocationChange(gBrowser.selectedBrowser); + gZenTabUnloader.onLocationChange(gBrowser.selectedBrowser); -+ gZenGlanceManager.onLocationChange(gBrowser.selectedBrowser); + PictureInPicture.updateUrlbarToggle(gBrowser.selectedBrowser); if (!gMultiProcessBrowser) { -@@ -4435,7 +4450,7 @@ nsBrowserAccess.prototype = { +@@ -4435,7 +4449,7 @@ nsBrowserAccess.prototype = { // Passing a null-URI to only create the content window, // and pass true for aSkipLoad to prevent loading of // about:blank @@ -47,7 +46,7 @@ index 9a65dcc7ad41ab961907c95338e023b173d4f474..9477e0c115ed3c4a670f1ac63846b6de null, aParams, aWhere, -@@ -4443,6 +4458,10 @@ nsBrowserAccess.prototype = { +@@ -4443,6 +4457,10 @@ nsBrowserAccess.prototype = { aName, true ); @@ -58,7 +57,7 @@ index 9a65dcc7ad41ab961907c95338e023b173d4f474..9477e0c115ed3c4a670f1ac63846b6de }, openURIInFrame: function browser_openURIInFrame( -@@ -7281,6 +7300,12 @@ var gDialogBox = { +@@ -7285,6 +7303,12 @@ var gDialogBox = { parentElement.showModal(); this._didOpenHTMLDialog = true; diff --git a/src/browser/base/content/navigator-toolbox-inc-xhtml.patch b/src/browser/base/content/navigator-toolbox-inc-xhtml.patch index 00ad568d9..6d7f1a45c 100644 --- a/src/browser/base/content/navigator-toolbox-inc-xhtml.patch +++ b/src/browser/base/content/navigator-toolbox-inc-xhtml.patch @@ -1,5 +1,5 @@ diff --git a/browser/base/content/navigator-toolbox.inc.xhtml b/browser/base/content/navigator-toolbox.inc.xhtml -index 00391af141d9015fe5839534e5e6b22a91ba65d9..b68767d0fef6cea2756376bbcfe00603d5d1a655 100644 +index a0a382643a2f74b6d789f3641ef300eed202d5e9..8b7b2ae3e7764d5dd77cd344f0cf67aea54a6f47 100644 --- a/browser/base/content/navigator-toolbox.inc.xhtml +++ b/browser/base/content/navigator-toolbox.inc.xhtml @@ -2,7 +2,7 @@ @@ -86,7 +86,7 @@ index 00391af141d9015fe5839534e5e6b22a91ba65d9..b68767d0fef6cea2756376bbcfe00603 diff --git a/src/browser/base/content/navigator-toolbox-js.patch b/src/browser/base/content/navigator-toolbox-js.patch index e9c0f33c7..59e00cfd2 100644 --- a/src/browser/base/content/navigator-toolbox-js.patch +++ b/src/browser/base/content/navigator-toolbox-js.patch @@ -1,5 +1,5 @@ diff --git a/browser/base/content/navigator-toolbox.js b/browser/base/content/navigator-toolbox.js -index 64ded8fb2c08f1dbfec8fe08ab427a24b53f1169..69009d53d7242c26f777ac2e0bb1897ff27ad916 100644 +index 64ded8fb2c08f1dbfec8fe08ab427a24b53f1169..3434a833c4d1220554b4df6eeeed83f500c6f812 100644 --- a/browser/base/content/navigator-toolbox.js +++ b/browser/base/content/navigator-toolbox.js @@ -8,7 +8,7 @@ @@ -11,3 +11,19 @@ index 64ded8fb2c08f1dbfec8fe08ab427a24b53f1169..69009d53d7242c26f777ac2e0bb1897f const widgetOverflow = document.getElementById("widget-overflow"); function onPopupShowing(event) { +@@ -187,6 +187,7 @@ document.addEventListener( + #reload-button , + #urlbar-go-button, + #reader-mode-button, ++ #zen-browser-tabs-wrapper, + #picture-in-picture-button, + #shopping-sidebar-button, + #urlbar-zoom-button, +@@ -208,6 +209,7 @@ document.addEventListener( + case "vertical-tabs-newtab-button": + case "tabs-newtab-button": + case "new-tab-button": ++ case "zen-browser-tabs-wrapper": + gBrowser.handleNewTabMiddleClick(element, event); + break; + diff --git a/src/browser/base/content/zen-assets.jar.inc.mn b/src/browser/base/content/zen-assets.jar.inc.mn index 69b4c1c56..563908e14 100644 --- a/src/browser/base/content/zen-assets.jar.inc.mn +++ b/src/browser/base/content/zen-assets.jar.inc.mn @@ -4,6 +4,7 @@ content/browser/ZenStartup.mjs (content/ZenStartup.mjs) content/browser/ZenUIManager.mjs (content/ZenUIManager.mjs) content/browser/ZenCustomizableUI.sys.mjs (content/ZenCustomizableUI.sys.mjs) + content/browser/zen-components/ZenUIMigration.mjs (zen-components/ZenUIMigration.mjs) content/browser/zen-components/ZenCompactMode.mjs (zen-components/ZenCompactMode.mjs) content/browser/zen-components/ZenViewSplitter.mjs (zen-components/ZenViewSplitter.mjs) content/browser/zen-components/ZenThemesCommon.mjs (zen-components/ZenThemesCommon.mjs) diff --git a/src/browser/base/content/zen-glance.inc.xhtml b/src/browser/base/content/zen-glance.inc.xhtml index 61c7bf385..64d5a0703 100644 --- a/src/browser/base/content/zen-glance.inc.xhtml +++ b/src/browser/base/content/zen-glance.inc.xhtml @@ -1,4 +1,4 @@ - - + + - \ No newline at end of file + diff --git a/src/browser/base/content/zen-styles/zen-animations.css b/src/browser/base/content/zen-styles/zen-animations.css index 01c231662..067582958 100644 --- a/src/browser/base/content/zen-styles/zen-animations.css +++ b/src/browser/base/content/zen-styles/zen-animations.css @@ -227,76 +227,6 @@ } } -@keyframes zen-glance-content-animation-out { - 0% { - /* make the box shrink to final width/height and x/y coordinates */ - transform: translate(-50%, -50%) translateZ(0); - width: 85%; - height: 100%; - top: 50%; - left: 50%; - opacity: 1; - } - - 100% { - /* make the box appear from initial width/height and x/y coordinates */ - transform: translate(-50%, -50%) translateZ(0); - opacity: 0; - width: 47%; - height: 53%; - top: 50%; - left: 50%; - opacity: 0; - } -} - -@keyframes zen-glance-buttons-animation-full { - from { - width: 85%; - height: 85%; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - } - - to { - width: 100%; - height: 100%; - top: 50%; - left: 50%; - opacity: 1; - transform: translate(-50%, -50%); - } -} - -@keyframes zen-glance-loading-animation { - 0% { - opacity: 1; - width: 80%; - } - - 90% { - width: 100%; - } - - 100% { - opacity: 0; - } -} - -@keyframes zen-glance-buttons-animation { - from { - right: 0; - opacity: 0; - width: fit-content; - } - - to { - opacity: 1; - transform: translateX(-100%) translateY(-50%); - } -} - @keyframes zen-rice-form-out { 0% { transform: translateX(0); diff --git a/src/browser/base/content/zen-styles/zen-browser-container.css b/src/browser/base/content/zen-styles/zen-browser-container.css index 8627090b0..e6cb6cd3f 100644 --- a/src/browser/base/content/zen-styles/zen-browser-container.css +++ b/src/browser/base/content/zen-styles/zen-browser-container.css @@ -9,11 +9,6 @@ border-radius: var(--zen-native-inner-radius); position: relative; - /* For glance */ - transition: - transform 0.1s ease-in-out, - opacity 0.1s ease-in-out; - overflow: hidden; :root:not([zen-no-padding='true']) & { diff --git a/src/browser/base/content/zen-styles/zen-compact-mode.css b/src/browser/base/content/zen-styles/zen-compact-mode.css index fa3d4517d..0c95505d9 100644 --- a/src/browser/base/content/zen-styles/zen-compact-mode.css +++ b/src/browser/base/content/zen-styles/zen-compact-mode.css @@ -42,13 +42,13 @@ position: absolute; z-index: 10; transition: - left 0.25s ease, - right 0.25s ease, + left 0.15s ease, + right 0.15s ease, opacity 1.5s ease; top: 0; bottom: var(--zen-element-separation); - opacity: 0; padding: 0 var(--zen-compact-float) !important; + opacity: 0; :root[zen-single-toolbar='true'] & { top: var(--zen-element-separation); @@ -59,13 +59,13 @@ margin-left: 0 !important; } - & #urlbar[open] { + & #urlbar[open]:not([zen-floating-urlbar='true']) { top: 0 !important; } } &:not([zen-right-side='true']) #navigator-toolbox { - left: calc(-1 * var(--zen-sidebar-width) + var(--zen-element-separation)); + left: calc(-1 * var(--zen-sidebar-width) + 1px); } /* When we have multiple toolbars and the top-toolbar is NOT being hidden, @@ -82,7 +82,7 @@ --zen-compact-float: calc(var(--zen-element-separation) + 1px); &:not([animate='true']) { - right: calc(-1 * var(--zen-sidebar-width) + var(--zen-element-separation)); + right: calc(-1 * var(--zen-sidebar-width) + 1px); } } @@ -111,6 +111,15 @@ background-size: 2000px !important; /* Dont ask me why */ backdrop-filter: blur(5px) !important; } + + & #urlbar[open][zen-floating-urlbar='true'] { + --zen-urlbar-offset: var(--zen-sidebar-width); + transition: left 0.05s ease; + + #navigator-toolbox:has(&) { + opacity: 1; + } + } } #navigator-toolbox:hover, @@ -121,9 +130,9 @@ #navigator-toolbox[movingtab], #navigator-toolbox:has(.tabbrowser-tab:active), #navigator-toolbox:has( - *:is([panelopen='true'], [open='true'], #nav-bar:focus-within):not(tab):not(.zen-compact-mode-ignore) + *:is([panelopen='true'], [open='true'], #urlbar:not([zen-floating-urlbar='true']):focus-within):not(tab):not(.zen-compact-mode-ignore) ) { - &:not([animate='true']) { + &:not([animate='true']):not(:has(#urlbar[zen-floating-urlbar='true']:hover)) { --zen-compact-mode-func: linear( 0 0%, 0.002748 1%, @@ -232,10 +241,16 @@ right 0.3s var(--zen-compact-mode-func); opacity: 1; - left: -1px; - :root[zen-right-side='true'] & { - right: -1px; - left: auto; + &:not([supress-primary-adjustment='true']) { + left: -1px; + :root[zen-right-side='true'] & { + right: -1px; + left: auto; + } + + & #urlbar[open][zen-floating-urlbar='true'] { + --zen-urlbar-offset: 0px; + } } } } diff --git a/src/browser/base/content/zen-styles/zen-glance.css b/src/browser/base/content/zen-styles/zen-glance.css index d920af515..4ea37f5db 100644 --- a/src/browser/base/content/zen-styles/zen-glance.css +++ b/src/browser/base/content/zen-styles/zen-glance.css @@ -9,42 +9,49 @@ visibility: inherit; } -.zen-glance-background { - transform: scale(0.98); - backdrop-filter: blur(5px); - opacity: 0.6; -} - #zen-glance-sidebar-container { - display: none; + position: absolute; + display: flex; + z-index: 999; - & toolbarbutton:hover { - background: var(--button-background-color-hover); + &[hidden='true'] { + display: none; + } + + top: 10%; + transform: translateY(-50%); + + padding: 5px; + gap: 12px; + left: 2%; + + & toolbarbutton { + width: 32px; + height: 32px; + background: light-dark(rgb(24, 24, 24), rgb(231, 231, 231)); + transition: background 0.2s ease; + border-radius: 999px; + appearance: none; + box-shadow: 0 0 12px 1px rgba(0, 0, 0, 0.07); + opacity: 0; + + &:hover { + background: light-dark(rgb(41, 41, 41), rgb(204, 204, 204)); + } + + & label { + display: none; + } + + & image { + filter: invert(1); + } } } .browserSidebarContainer.zen-glance-overlay { box-shadow: none !important; - &[fade-out='true'] { - background: transparent; - opacity: 1; - - & .browserContainer { - opacity: 1; - animation: zen-glance-content-animation-out 0.3s ease-in-out forwards !important; - - & browser { - opacity: 1 !important; - } - - & #zen-glance-sidebar-container { - opacity: 0; - transition: opacity 0.1s ease-in-out; - } - } - } - & .browserContainer { background: var(--zen-dialog-background); position: fixed; @@ -69,37 +76,6 @@ overflow: hidden; } - & #zen-glance-sidebar-container { - position: absolute; - display: flex; - top: 10%; - left: 0; - transform: translateY(-50%); - opacity: 0; - background: var(--zen-dialog-background); - - border: 1px solid var(--zen-colors-border); - border-right: none; - - border-top-left-radius: var(--zen-native-inner-radius); - border-bottom-left-radius: var(--zen-native-inner-radius); - - padding: 5px; - gap: 6px; - - animation: zen-glance-buttons-animation 0.2s ease-in-out forwards; - animation-delay: 0.3s; - - & toolbarbutton { - width: 32px; - height: 32px; - - & label { - display: none; - } - } - } - & browser { width: 100%; height: 100%; @@ -108,9 +84,7 @@ } &[animate-full='true'] { - opacity: 1; - animation: zen-glance-buttons-animation-full 0.2s ease-in-out forwards !important; - + transform: translate(-50%, -50%); & #zen-glance-sidebar-container { opacity: 0 !important; } @@ -118,22 +92,18 @@ &[animate='true'] { position: absolute; - transform: translate(-50%, -50%); - - &:not([animate-end='true']) { - pointer-events: none; - - & browser { - opacity: 0; - visibility: hidden; - } - - & #zen-glance-sidebar-container { - opacity: 0; - animation: none; - pointer-events: none; - } - } } } + + &[fade-out='true'] { + & browser { + transition: opacity 0.1s ease; + opacity: 0; + } + } + + & browser[animate-glance-open='true'] { + transition: opacity 0.2s ease-in-out; + opacity: 0; + } } diff --git a/src/browser/base/content/zen-styles/zen-sidebar.css b/src/browser/base/content/zen-styles/zen-sidebar.css index 1cb4b970d..01b170d82 100644 --- a/src/browser/base/content/zen-styles/zen-sidebar.css +++ b/src/browser/base/content/zen-styles/zen-sidebar.css @@ -42,14 +42,13 @@ #zen-tabbox-wrapper { & #sidebar-splitter { opacity: 0; - margin-inline-end: -4px; + margin: 0 calc(-1 * var(--zen-element-separation)); } & #sidebar-box { border-radius: var(--zen-native-inner-radius); box-shadow: var(--zen-big-shadow); overflow: hidden; - border: 1px solid var(--zen-colors-border); :root:not([zen-right-side='true']) &[positionend='true'] { margin-right: var(--zen-element-separation); diff --git a/src/browser/base/content/zen-styles/zen-tabs/vertical-tabs.css b/src/browser/base/content/zen-styles/zen-tabs/vertical-tabs.css index 7b88356d4..d2211409d 100644 --- a/src/browser/base/content/zen-styles/zen-tabs/vertical-tabs.css +++ b/src/browser/base/content/zen-styles/zen-tabs/vertical-tabs.css @@ -29,7 +29,7 @@ & #zen-sidebar-top-buttons .toolbarbutton-1 { & > .toolbarbutton-icon { - padding: 5px; + padding: 4px; } } @@ -76,6 +76,9 @@ @media (-moz-platform: macos) { --zen-min-toolbox-padding: .52rem; } + @media (-moz-platform: linux) { + --zen-min-toolbox-padding: .35rem; + } --zen-toolbox-padding: max(var(--zen-min-toolbox-padding), calc(var(--zen-element-separation) / 1.5)); } @@ -91,8 +94,8 @@ #tracking-protection-icon, #tracking-protection-icon-box, #blocked-permissions-container > .blocked-permission-icon { - width: 12px; - height: 12px; + width: 14px; + height: 14px; } #identity-icon-box, @@ -285,7 +288,6 @@ padding: 0 !important; position: relative; - border-radius: var(--border-radius-medium); & .tab-background { overflow: hidden; @@ -309,14 +311,23 @@ /* We have a tab inside a tab, this means, it's a glance tab */ & .tabbrowser-tab { pointer-events: none; - margin: 0; + margin: 0 0 0 4px; --toolbarbutton-inner-padding: 0; --border-radius-medium: 8px; + width: 24px; + height: 24px; + --tab-min-height: 24px; + --tab-min-width: 24px; & .tab-background { - background: transparent; + background: var(--zen-toolbar-element-bg) !important; + margin-block: 0 !important; + margin-inline: 0 !important; box-shadow: none !important; } + & .tab-content { + padding: 0 5px; + } & label { display: none !important; } & .tab-close-button, & .tab-reset-button { @@ -325,6 +336,8 @@ & .tab-icon-image { --toolbarbutton-inner-padding: 0 !important; + width: 14px; + height: 14px; } } @@ -348,6 +361,7 @@ align-items: center; padding-top: var(--zen-element-separation); + --toolbarbutton-inner-padding: 5px; & > toolbarbutton:not(#zen-workspaces-button) { padding: 0 !important; @@ -373,6 +387,8 @@ min-height: fit-content; overflow-y: auto; overflow-x: hidden; + height: 100%; + scrollbar-width: thin; } #vertical-pinned-tabs-container { @@ -722,31 +738,33 @@ /* Mark: Move sidebar to the right */ :root[zen-right-side='true'] { & #navigator-toolbox { - order: 3 !important; + order: 10 !important; } & #zen-sidebar-splitter { - order: 2 !important; + order: 9 !important; } } /* Mark: Override the default tab close button */ #tabbrowser-tabs { & .tabbrowser-tab { - &[pinned] .tab-close-button { + &[pinned]:not([pending='true']) .tab-close-button { display: none !important; } - &[pinned]:not([zen-essential]):hover .tab-reset-button, - &[pinned][visuallyselected]:not([zen-essential]) .tab-reset-button { - display: block; + &[pinned]:not([pending='true']):not([zen-essential]) { + &:hover .tab-reset-button, + &[visuallyselected] .tab-reset-button { + display: block; + } } &[zen-essential] .tab-reset-button { display: none; } - &:not([pinned]) .tab-reset-button { + &:not([pinned][visuallyselected]) .tab-reset-button { display: none; } @@ -762,7 +780,7 @@ border-radius: var(--tab-border-radius); color: inherit; fill: currentColor; - padding: 6px; + padding: var(--tab-close-button-padding); width: 24px; height: 24px; outline: var(--toolbarbutton-outline); @@ -931,8 +949,7 @@ transition: max-height 0.3s ease-out; opacity: 1; grid-template-columns: repeat(auto-fit, minmax(var(--tab-pinned-min-width-expanded), auto)); - overflow-y: auto; - overflow-x: hidden; + overflow: hidden; scrollbar-width: thin; display: grid; padding: 0; @@ -945,7 +962,7 @@ & .tab-background { border-radius: var(--border-radius-medium) !important; - transition: background 0.2s ease-in-out; + transition: background 0.1s ease-in-out; } --tab-selected-bgcolor: light-dark(rgba(255, 255, 255, 0.85), rgba(255, 255, 255, 0.2)); @@ -982,7 +999,7 @@ } @media (-moz-bool-pref: 'zen.theme.essentials-favicon-bg') { - &[selected] .tab-background { + &[visuallyselected] .tab-background { &::after { content: ""; inset: -50%; @@ -1006,11 +1023,11 @@ inset: 0; z-index: 0; content: ""; - transition: background 0.2s ease-in-out; + transition: background 0.1s ease-in-out; } } - &[selected]:hover .tab-background::before { + &[visuallyselected]:hover .tab-background::before { background: light-dark(rgba(255, 255, 255, 0.80), rgba(68, 64, 64, 0.80)); } } @@ -1069,3 +1086,59 @@ %include vertical-tabs-topbuttons-fix.css } } + +/* Vertical tabs reordering indicators */ +#zen-drag-indicator { + --zen-drag-indicator-height: 2px; + --zen-drag-indicator-bg: color-mix(in srgb, var(--zen-primary-color) 50%, light-dark(rgba(0, 0, 0, .85), rgba(255, 255, 255, .95)) 50%); + position: fixed; + z-index: 1000; + background: var(--zen-drag-indicator-bg); + pointer-events: none; + border-radius: 5px; + + &::before { + content: ""; + position: absolute; + height: calc(2 * var(--zen-drag-indicator-height)); + width: calc(2 * var(--zen-drag-indicator-height)); + border: var(--zen-drag-indicator-height) solid var(--zen-drag-indicator-bg); + border-radius: 50%; + background: transparent; + } + + &[orientation='horizontal'] { + left: calc(var(--indicator-left) + 2 * var(--zen-drag-indicator-height) + 4px); + width: calc(var(--indicator-width) - 2 * var(--zen-drag-indicator-height) - 4px); + height: var(--zen-drag-indicator-height); + transition: top 0.1s ease-out, left 0.1s ease-out, width 0.1s ease-out; + + &::before { + left: calc(-2 * var(--zen-drag-indicator-height)); + top: 50%; + transform: translate(calc(-1 * var(--zen-drag-indicator-height)), -50%); + } + } + + &[orientation='vertical'] { + top: calc(var(--indicator-top) + 2 * var(--zen-drag-indicator-height) + 4px); + height: calc(var(--indicator-height) - 2 * var(--zen-drag-indicator-height) - 4px); + width: var(--zen-drag-indicator-height); + transition: top 0.1s ease-out, left 0.1s ease-out, height 0.1s ease-out; + + &::before { + top: calc(-2 * var(--zen-drag-indicator-height)); + left: 50%; + transform: translate(-50%, calc(-1 * var(--zen-drag-indicator-height))); + } + } +} + +/* Horizontal tabs reordering indicators */ +#zen-essentials-container .tabbrowser-tab.drag-over-before { + box-shadow: 3px 0 6px -2px var(--toolbarbutton-active-background, rgba(0, 255, 0, 0.2)); +} + +#zen-essentials-container .tabbrowser-tab.drag-over-after { + box-shadow: -3px 0 6px -2px var(--toolbarbutton-active-background, rgba(0, 255, 0, 0.2)); +} diff --git a/src/browser/base/content/zen-styles/zen-theme.css b/src/browser/base/content/zen-styles/zen-theme.css index a4e15cb8a..62b2efa5c 100644 --- a/src/browser/base/content/zen-styles/zen-theme.css +++ b/src/browser/base/content/zen-styles/zen-theme.css @@ -131,6 +131,8 @@ --toolbarbutton-border-radius: 6px; --urlbar-margin-inline: 1px !important; + --tab-icon-overlay-stroke: light-dark(white, black) !important; + --fp-contextmenu-border-radius: 8px; --fp-contextmenu-padding: calc(4px - var(--fp-contextmenu-menuitem-border-width)) 0; --fp-contextmenu-menuitem-border-radius: calc(4px + var(--fp-contextmenu-menuitem-border-width)); @@ -146,6 +148,8 @@ --fp-contextmenu-bgcolor: light-dark(Menu, rgb(43 42 51 / 0.95)); --toolbar-bgcolor: transparent; + --tab-close-button-padding: 5px !important; + --toolbarbutton-active-background: var(--zen-toolbar-element-bg); --input-bgcolor: var(--zen-colors-tertiary) !important; @@ -179,7 +183,7 @@ * 1. If the native radius - the separation is less than 4px, use 4px. * 2. Otherwise, use the the calculated value (inner radius = outer radius - separation). */ - max(5px, calc(var(--zen-native-content-radius) - var(--zen-element-separation))) + max(5px, calc(var(--zen-native-content-radius) - var(--zen-element-separation) / 2)) ); /** Other theme-related styles */ diff --git a/src/browser/base/content/zen-styles/zen-urlbar.css b/src/browser/base/content/zen-styles/zen-urlbar.css index eda3ebab3..0502aa2b8 100644 --- a/src/browser/base/content/zen-styles/zen-urlbar.css +++ b/src/browser/base/content/zen-styles/zen-urlbar.css @@ -10,7 +10,7 @@ } #urlbar { - --toolbarbutton-border-radius: 10px; + --toolbarbutton-border-radius: 8px; --urlbarView-separator-color: var(--zen-colors-border); --urlbarView-hover-background: var(--toolbarbutton-hover-background); --urlbarView-highlight-background: var(--toolbarbutton-hover-background); @@ -129,9 +129,9 @@ :root[zen-single-toolbar='true'] { .urlbar-page-action:not([open]), #tracking-protection-icon-container { - margin-inline-end: calc(-16px - 2 * var(--urlbar-icon-padding)) !important; + margin-inline-end: calc(-14px - 2 * var(--urlbar-icon-padding)) !important; opacity: 0; - transition: all 0.2s; + transition: all 0.1s ease; } #identity-permission-box > *:not(#permissions-granted-icon) { @@ -234,9 +234,23 @@ button.popup-notification-dropmarker { } @container urlbar-container (width < 350px) { + #userContext-icons { + transition: all 0.1s ease; + } + #userContext-label { display: none; } + + #userContext-indicator { + margin-inline-end: 4px; + } + + #urlbar:hover:not([breakout-extend='true']) #userContext-icons { + margin-inline-end: calc(-16px - 2 * var(--urlbar-icon-padding)) !important; + opacity: 0; + pointer-events: none; + } } @media (max-width: 550px) { @@ -274,7 +288,7 @@ button.popup-notification-dropmarker { #urlbar .urlbar-page-action, #urlbar #tracking-protection-icon-container, #urlbar:not([breakout-extend='true']) #identity-box:is(:not(.chromeUI), [pageproxystate='invalid']) #identity-icon-box { - border-radius: 10px !important; + border-radius: 8px !important; } /* Extensions or similar */ @@ -379,7 +393,7 @@ button.popup-notification-dropmarker { :root[zen-single-toolbar='true'] { #urlbar[open] { - min-width: 30vw; + min-width: 40vw; } &[zen-right-side='true'] #urlbar[open]:not([zen-floating-urlbar='true']) { @@ -399,12 +413,14 @@ button.popup-notification-dropmarker { font-size: 1.15em !important; top: calc(var(--zen-toolbar-height) * 2) !important; + --zen-urlbar-center: calc(var(--zen-urlbar-offset, 0px) + 28vw); + :root[zen-right-side='true'] & { - right: 28vw !important; + right: var(--zen-urlbar-center) !important; } :root:not([zen-right-side='true']) & { - left: 28vw !important; + left: var(--zen-urlbar-center) !important; } #urlbar-container:has(&) { diff --git a/src/browser/base/content/zen-styles/zen-workspaces.css b/src/browser/base/content/zen-styles/zen-workspaces.css index 3fe0b2a71..a88c6a2aa 100644 --- a/src/browser/base/content/zen-styles/zen-workspaces.css +++ b/src/browser/base/content/zen-styles/zen-workspaces.css @@ -141,14 +141,6 @@ & #zen-workspaces-button .zen-workspace-sidebar-icon { margin-inline-end: 5px; - - & [no-icon='true'] { - display: none; - } - } - - & #zen-workspaces-button .zen-workspace-sidebar-icon[no-icon='true'] + .zen-workspace-sidebar-name { - margin-left: 0; } & #zen-workspaces-button { @@ -431,8 +423,8 @@ min-height: 1px !important; padding: 3px; border-radius: 4px; - width: 20px; - height: 20px; + width: 24px; + height: 24px; } #PanelUI-zen-workspaces-create-footer, @@ -460,6 +452,27 @@ align-items: center; position: relative; + &::before { + border-radius: var(--border-radius-medium); + background: transparent; + transition: background 0.1s; + pointer-events: none; + content: ''; + position: absolute; + top: 6px; + left: 2px; + z-index: -1; + width: calc(100% - 4px); + height: calc(100% - 12px); + } + + &:hover, + &[open='true'] { + &::before { + background: var(--tab-hover-background-color); + } + } + & #zen-current-workspace-indicator-icon { font-size: 14px; } diff --git a/src/browser/base/zen-components/ZenCommonUtils.mjs b/src/browser/base/zen-components/ZenCommonUtils.mjs index 0ecabfac8..701363e36 100644 --- a/src/browser/base/zen-components/ZenCommonUtils.mjs +++ b/src/browser/base/zen-components/ZenCommonUtils.mjs @@ -72,6 +72,21 @@ var gZenCommonActions = { ConfirmationHint.show(document.getElementById('PanelUI-menu-button'), 'zen-copy-current-url-confirmation'); } }, + copyCurrentURLAsMarkdownToClipboard() { + const currentUrl = gBrowser.currentURI.spec; + const tabTitle = gBrowser.selectedTab.label; + if (currentUrl && tabTitle) { + const markdownLink = `[${tabTitle}](${currentUrl})`; + let str = Cc['@mozilla.org/supports-string;1'].createInstance(Ci.nsISupportsString); + str.data = markdownLink; + let transferable = Cc['@mozilla.org/widget/transferable;1'].createInstance(Ci.nsITransferable); + transferable.init(getLoadContext()); + transferable.addDataFlavor('text/plain'); + transferable.setTransferData('text/plain', str); + Services.clipboard.setData(transferable, null, Ci.nsIClipboard.kGlobalClipboard); + ConfirmationHint.show(document.getElementById('PanelUI-menu-button'), 'zen-copy-current-url-confirmation'); + } + }, throttle(f, delay) { let timer = 0; diff --git a/src/browser/base/zen-components/ZenCompactMode.mjs b/src/browser/base/zen-components/ZenCompactMode.mjs index 53c039d42..56bf32ecb 100644 --- a/src/browser/base/zen-components/ZenCompactMode.mjs +++ b/src/browser/base/zen-components/ZenCompactMode.mjs @@ -41,9 +41,15 @@ var gZenCompactModeManager = { get preference() { if (!document.documentElement.hasAttribute('zen-compact-mode')) { - document.documentElement.setAttribute( - 'zen-compact-mode', - lazyCompactMode.mainAppWrapper.getAttribute('zen-compact-mode') + window.addEventListener( + 'MozAfterPaint', + () => { + document.documentElement.setAttribute( + 'zen-compact-mode', + lazyCompactMode.mainAppWrapper.getAttribute('zen-compact-mode') + ); + }, + { once: true } ); } return lazyCompactMode.mainAppWrapper.getAttribute('zen-compact-mode') === 'true'; @@ -100,8 +106,6 @@ var gZenCompactModeManager = { }, updateCompactModeContext(isSingleToolbar) { - this.getAndApplySidebarWidth(); // Ignore return value - const IDs = [ 'zen-context-menu-compact-mode-hide-sidebar', 'zen-context-menu-compact-mode-hide-toolbar', @@ -140,6 +144,7 @@ var gZenCompactModeManager = { getAndApplySidebarWidth() { let sidebarWidth = this.sidebar.getBoundingClientRect().width; if (sidebarWidth > 1) { + gZenUIManager.restoreScrollbarState(); this.sidebar.style.setProperty('--zen-sidebar-width', `${sidebarWidth}px`); } return sidebarWidth; @@ -157,6 +162,9 @@ var gZenCompactModeManager = { if (canAnimate) { this.sidebar.setAttribute('animate', 'true'); } + this.sidebar.style.removeProperty('margin-right'); + this.sidebar.style.removeProperty('margin-left'); + this.sidebar.style.removeProperty('transform'); window.requestAnimationFrame(() => { let sidebarWidth = this.getAndApplySidebarWidth(); if (!canAnimate) { @@ -176,24 +184,23 @@ var gZenCompactModeManager = { { ease: 'easeIn', type: 'spring', - stiffness: 3000, - damping: 150, - mass: 1, + bounce: 0, + duration: 0.2, } ) .then(() => { this.sidebar.removeAttribute('animate'); - this.sidebar.style.transition = 'none'; this.sidebar.style.removeProperty('margin-right'); this.sidebar.style.removeProperty('margin-left'); this.sidebar.style.removeProperty('transform'); - this._animating = false; + this.sidebar.style.transition = 'none'; setTimeout(() => { + this._animating = false; this.sidebar.style.removeProperty('transition'); }); }); } else if (canHideSidebar && !isCompactMode) { - document.getElementById('browser').style.overflow = 'hidden'; + document.getElementById('browser').style.overflow = 'clip'; if (this.sidebarIsOnRight) { this.sidebar.style.marginRight = `-${sidebarWidth}px`; } else { @@ -204,16 +211,15 @@ var gZenCompactModeManager = { this.sidebar, this.sidebarIsOnRight ? { - marginRight: 0, + marginRight: [`-${sidebarWidth}px`, 0], transform: ['translateX(100%)', 'translateX(0)'], } : { marginLeft: 0 }, { ease: 'easeOut', type: 'spring', - stiffness: 3000, - damping: 150, - mass: 1, + bounce: 0, + duration: 0.2, } ) .then(() => { @@ -342,7 +348,7 @@ var gZenCompactModeManager = { return; } - if (this.hoverableElements[i].keepHoverDuration) { + if (this.hoverableElements[i].keepHoverDuration && !event.target.querySelector('#urlbar[zen-floating-urlbar]')) { this.flashElement(target, this.hoverableElements[i].keepHoverDuration, 'has-hover' + target.id, 'zen-has-hover'); } else { this._removeHoverFrames[target.id] = window.requestAnimationFrame(() => target.removeAttribute('zen-has-hover')); diff --git a/src/browser/base/zen-components/ZenGlanceManager.mjs b/src/browser/base/zen-components/ZenGlanceManager.mjs index 1e703078d..9757b6eb2 100644 --- a/src/browser/base/zen-components/ZenGlanceManager.mjs +++ b/src/browser/base/zen-components/ZenGlanceManager.mjs @@ -1,14 +1,15 @@ { class ZenGlanceManager extends ZenDOMOperatedFeature { - #currentBrowser = null; - #currentTab = null; - _animating = false; _lazyPref = {}; + #glances = new Map(); + #currentGlanceID = null; + init() { window.addEventListener('keydown', this.onKeyDown.bind(this)); window.addEventListener('TabClose', this.onTabClose.bind(this)); + window.addEventListener('TabSelect', this.onLocationChange.bind(this)); XPCOMUtils.defineLazyPreferenceGetter( this._lazyPref, @@ -24,17 +25,29 @@ Services.obs.addObserver(this, 'quit-application-requested'); } + get #currentBrowser() { + return this.#glances.get(this.#currentGlanceID)?.browser; + } + + get #currentTab() { + return this.#glances.get(this.#currentGlanceID)?.tab; + } + + get #currentParentTab() { + return this.#glances.get(this.#currentGlanceID)?.parentTab; + } + onKeyDown(event) { - if (event.key === 'Escape' && this.#currentBrowser) { + if (event.key === 'Escape' && this.#currentGlanceID) { event.preventDefault(); event.stopPropagation(); - this.closeGlance(); + this.closeGlance({ onTabClose: true }); } } onOverlayClick(event) { if (event.target === this.overlay && event.originalTarget !== this.contentWrapper) { - this.closeGlance(); + this.closeGlance({ onTabClose: true }); } } @@ -48,13 +61,13 @@ onUnload() { // clear everything - if (this.#currentBrowser) { - gBrowser.removeTab(this.#currentTab); + for (let [id, glance] of this.#glances) { + gBrowser.removeTab(glance.tab, { animate: false }); } } getTabPosition(tab) { - return Math.max(gBrowser._numVisiblePinTabs, tab._tPos) + 1; + return Math.max(gBrowser.pinnedTabCount, tab._tPos) + 1; } createBrowserElement(url, currentTab, existingTab = null) { @@ -65,21 +78,57 @@ skipLoad: false, index: this.getTabPosition(currentTab), }; - this.currentParentTab = currentTab; + currentTab._selected = true; + const newUUID = gZenUIManager.generateUuidv4(); const newTab = existingTab ?? gBrowser.addTrustedTab(Services.io.newURI(url).spec, newTabOptions); - - gBrowser.selectedTab = newTab; + if (currentTab.hasAttribute('zenDefaultUserContextId')) { + newTab.setAttribute('zenDefaultUserContextId', true); + } currentTab.querySelector('.tab-content').appendChild(newTab); newTab.setAttribute('zen-glance-tab', true); - this.#currentBrowser = newTab.linkedBrowser; - this.#currentTab = newTab; + newTab.setAttribute('glance-id', newUUID); + currentTab.setAttribute('glance-id', newUUID); + this.#glances.set(newUUID, { + tab: newTab, + parentTab: currentTab, + browser: newTab.linkedBrowser, + }); + this.#currentGlanceID = newUUID; + gBrowser.selectedTab = newTab; return this.#currentBrowser; } + fillOverlay(browser) { + this.overlay = browser.closest('.browserSidebarContainer'); + this.browserWrapper = browser.closest('.browserContainer'); + this.contentWrapper = browser.closest('.browserStack'); + } + + showSidebarButtons(animate = false) { + if (this.sidebarButtons.hasAttribute('hidden') && animate) { + gZenUIManager.motion.animate( + this.sidebarButtons.querySelectorAll('toolbarbutton'), + { x: [50, 0], opacity: [0, 1] }, + { delay: gZenUIManager.motion.stagger(0.1) } + ); + } + this.sidebarButtons.removeAttribute('hidden'); + } + + hideSidebarButtons() { + this.sidebarButtons.setAttribute('hidden', true); + } + openGlance(data, existingTab = null, ownerTab = null) { if (this.#currentBrowser) { return; } + if (gBrowser.selectedTab === this.#currentParentTab) { + gBrowser.selectedTab = this.#currentTab; + return; + } + this.animatingOpen = true; + this._animating = true; const initialX = data.x; const initialY = data.y; @@ -89,36 +138,52 @@ this.browserWrapper?.removeAttribute('animate'); this.browserWrapper?.removeAttribute('animate-end'); this.browserWrapper?.removeAttribute('animate-full'); - this.browserWrapper?.removeAttribute('animate-full-end'); this.browserWrapper?.removeAttribute('has-finished-animation'); this.overlay?.removeAttribute('post-fade-out'); const currentTab = ownerTab ?? gBrowser.selectedTab; - this.animatingOpen = true; - this._animating = true; - const browserElement = this.createBrowserElement(data.url, currentTab, existingTab); - this.overlay = browserElement.closest('.browserSidebarContainer'); - this.browserWrapper = browserElement.closest('.browserContainer'); - this.contentWrapper = browserElement.closest('.browserStack'); - - this.browserWrapper.prepend(this.sidebarButtons); + this.fillOverlay(browserElement); this.overlay.classList.add('zen-glance-overlay'); this.browserWrapper.removeAttribute('animate-end'); window.requestAnimationFrame(() => { - this.quickOpenGlance(); + this.quickOpenGlance({ dontOpenButtons: true }); + this.showSidebarButtons(true); + gZenUIManager.motion.animate( + this.#currentParentTab.linkedBrowser.closest('.browserSidebarContainer'), + { + scale: [1, 0.98], + backdropFilter: ['blur(0px)', 'blur(5px)'], + opacity: [1, 0.5], + }, + { + duration: 0.4, + type: 'spring', + bounce: 0.2, + } + ); + this.#currentBrowser.setAttribute('animate-glance-open', true); this.overlay.removeAttribute('fade-out'); this.browserWrapper.setAttribute('animate', true); - this.browserWrapper.style.top = `${initialY + initialHeight / 2}px`; - this.browserWrapper.style.left = `${initialX + initialWidth / 2}px`; + const top = initialY + initialHeight / 2; + const left = initialX + initialWidth / 2; + this.browserWrapper.style.top = `${top}px`; + this.browserWrapper.style.left = `${left}px`; this.browserWrapper.style.width = `${initialWidth}px`; this.browserWrapper.style.height = `${initialHeight}px`; this.browserWrapper.style.opacity = 0.8; + this.#glances.get(this.#currentGlanceID).originalPosition = { + top: this.browserWrapper.style.top, + left: this.browserWrapper.style.left, + width: this.browserWrapper.style.width, + height: this.browserWrapper.style.height, + }; + this.browserWrapper.style.transform = 'translate(-50%, -50%)'; this.overlay.style.overflow = 'visible'; gZenUIManager.motion .animate( @@ -131,12 +196,13 @@ opacity: 1, }, { - duration: 0.4, + duration: 0.3, type: 'spring', bounce: 0.2, } ) .then(() => { + this.#currentBrowser.removeAttribute('animate-glance-open'); this.overlay.style.removeProperty('overflow'); this.browserWrapper.removeAttribute('animate'); this.browserWrapper.setAttribute('animate-end', true); @@ -147,166 +213,236 @@ }); } - closeGlance({ noAnimation = false, onTabClose = false } = {}) { + closeGlance({ noAnimation = false, onTabClose = false, setNewID = null, isDifferent = false } = {}) { if (this._animating || !this.#currentBrowser || this.animatingOpen || this._duringOpening) { return; } this.browserWrapper.removeAttribute('has-finished-animation'); if (noAnimation) { + this.#currentParentTab.linkedBrowser.closest('.browserSidebarContainer').removeAttribute('style'); this.quickCloseGlance({ closeCurrentTab: false }); - this.#currentBrowser = null; - this.#currentTab = null; return; } + this.closingGlance = true; this._animating = true; gBrowser._insertTabAtIndex(this.#currentTab, { - index: this.getTabPosition(this.currentParentTab), + index: this.getTabPosition(this.#currentParentTab), }); let quikcCloseZen = false; if (onTabClose) { // Create new tab if no more ex if (gBrowser.tabs.length === 1) { - gBrowser.selectedTab = gZenUIManager.openAndChangeToTab(Services.prefs.getStringPref('browser.startup.homepage')); + BrowserCommands.openTab(); return; - } else if (gBrowser.selectedTab === this.#currentTab) { - this._duringOpening = true; - gBrowser.tabContainer.advanceSelectedTab(1, true); // to skip the current tab - this._duringOpening = false; - quikcCloseZen = true; } } // do NOT touch here, I don't know what it does, but it works... - window.requestAnimationFrame(() => { - this.#currentTab.style.display = 'none'; - this.browserWrapper.removeAttribute('animate'); - this.browserWrapper.removeAttribute('animate-end'); - this.overlay.setAttribute('fade-out', true); - window.requestAnimationFrame(() => { - this.quickCloseGlance({ justAnimateParent: true }); - this.browserWrapper.setAttribute('animate', true); - setTimeout(() => { - if (!this.currentParentTab) { - return; - } - - if (!onTabClose || quikcCloseZen) { - this.quickCloseGlance(); - } - this.overlay.removeAttribute('fade-out'); - this.browserWrapper.removeAttribute('animate'); - - this.lastCurrentTab = this.#currentTab; - - this.overlay.classList.remove('zen-glance-overlay'); - gBrowser._getSwitcher().setTabStateNoAction(this.lastCurrentTab, gBrowser.AsyncTabSwitcher.STATE_UNLOADED); - - if (!onTabClose && gBrowser.selectedTab === this.lastCurrentTab) { - this._duringOpening = true; - gBrowser.selectedTab = this.currentParentTab; - } - - // reset everything - this.currentParentTab = null; - this.browserWrapper = null; - this.overlay = null; - this.contentWrapper = null; - - this.lastCurrentTab.removeAttribute('zen-glance-tab'); - this.lastCurrentTab._closingGlance = true; - - gBrowser.tabContainer._invalidateCachedTabs(); - gBrowser.removeTab(this.lastCurrentTab, { animate: true }); - - this.#currentTab = null; - this.#currentBrowser = null; - - this.lastCurrentTab = null; - this._duringOpening = false; - - this._animating = false; - }, 400); + this.#currentTab.style.display = 'none'; + this.overlay.setAttribute('fade-out', true); + this.overlay.style.pointerEvents = 'none'; + this.quickCloseGlance({ justAnimateParent: true, clearID: false }); + const originalPosition = this.#glances.get(this.#currentGlanceID).originalPosition; + gZenUIManager.motion + .animate( + this.#currentParentTab.linkedBrowser.closest('.browserSidebarContainer'), + { + scale: [0.98, 1], + backdropFilter: ['blur(5px)', 'blur(0px)'], + opacity: [0.5, 1], + }, + { + duration: 0.4, + type: 'spring', + bounce: 0.2, + } + ) + .then(() => { + this.#currentParentTab.linkedBrowser.closest('.browserSidebarContainer').removeAttribute('style'); + }); + gZenUIManager.motion + .animate( + this.browserWrapper, + { + ...originalPosition, + opacity: 0.3, + }, + { type: 'spring', bounce: 0, duration: 0.4, easing: 'ease' } + ) + .then(() => { + this.browserWrapper.removeAttribute('animate'); + this.browserWrapper.removeAttribute('animate-end'); + if (!this.#currentParentTab) { + return; + } + + if (!onTabClose || quikcCloseZen) { + this.quickCloseGlance({ clearID: false }); + } + this.overlay.removeAttribute('fade-out'); + this.browserWrapper.removeAttribute('animate'); + + this.lastCurrentTab = this.#currentTab; + + this.overlay.classList.remove('zen-glance-overlay'); + gBrowser._getSwitcher().setTabStateNoAction(this.lastCurrentTab, gBrowser.AsyncTabSwitcher.STATE_UNLOADED); + + if (!onTabClose) { + this.#currentParentTab._visuallySelected = false; + } + + // reset everything + const prevOverlay = this.overlay; + this.browserWrapper = null; + this.overlay = null; + this.contentWrapper = null; + + this.lastCurrentTab.removeAttribute('zen-glance-tab'); + this.lastCurrentTab._closingGlance = true; + + if (!isDifferent) { + gBrowser.selectedTab = this.#currentParentTab; + } + this._ignoreClose = true; + gBrowser.removeTab(this.lastCurrentTab, { animate: true }); + gBrowser.tabContainer._invalidateCachedTabs(); + + this.#currentParentTab.removeAttribute('glance-id'); + + this.#glances.delete(this.#currentGlanceID); + this.#currentGlanceID = setNewID; + + this.lastCurrentTab = null; + this._duringOpening = false; + + this._animating = false; + this.closingGlance = false; + + if (this.#currentGlanceID) { + this.quickOpenGlance(); + } }); - }); } - quickOpenGlance() { + quickOpenGlance({ dontOpenButtons = false } = {}) { if (!this.#currentBrowser || this._duringOpening) { return; } this._duringOpening = true; - try { - gBrowser.selectedTab = this.#currentTab; - } catch (e) {} + if (!dontOpenButtons) { + this.showSidebarButtons(); + } - this.currentParentTab.linkedBrowser - .closest('.browserSidebarContainer') - .classList.add('deck-selected', 'zen-glance-background'); - this.currentParentTab.linkedBrowser.closest('.browserSidebarContainer').classList.remove('zen-glance-overlay'); - this.currentParentTab.linkedBrowser.zenModeActive = true; + const parentBrowserContainer = this.#currentParentTab.linkedBrowser.closest('.browserSidebarContainer'); + parentBrowserContainer.classList.add('zen-glance-background'); + parentBrowserContainer.classList.remove('zen-glance-overlay'); + parentBrowserContainer.classList.add('deck-selected'); + this.#currentParentTab.linkedBrowser.zenModeActive = true; + this.#currentParentTab.linkedBrowser.docShellIsActive = true; this.#currentBrowser.zenModeActive = true; - this.currentParentTab.linkedBrowser.docShellIsActive = true; this.#currentBrowser.docShellIsActive = true; this.#currentBrowser.setAttribute('zen-glance-selected', true); + this.fillOverlay(this.#currentBrowser); + this.#currentParentTab._visuallySelected = true; - this.currentParentTab._visuallySelected = true; this.overlay.classList.add('deck-selected'); + this.overlay.classList.add('zen-glance-overlay'); this._duringOpening = false; } - quickCloseGlance({ closeCurrentTab = true, closeParentTab = true, justAnimateParent = false } = {}) { - const parentHasBrowser = !!this.currentParentTab.linkedBrowser; - if (!justAnimateParent) { + quickCloseGlance({ closeCurrentTab = true, closeParentTab = true, justAnimateParent = false, clearID = true } = {}) { + const parentHasBrowser = !!this.#currentParentTab.linkedBrowser; + this.hideSidebarButtons(); + if (parentHasBrowser) { + this.#currentParentTab.linkedBrowser.closest('.browserSidebarContainer').classList.remove('zen-glance-background'); + } + if (!justAnimateParent && this.overlay) { if (parentHasBrowser) { if (closeParentTab) { - this.currentParentTab.linkedBrowser.closest('.browserSidebarContainer').classList.remove('deck-selected'); + this.#currentParentTab.linkedBrowser.closest('.browserSidebarContainer').classList.remove('deck-selected'); } - this.currentParentTab.linkedBrowser.zenModeActive = false; + this.#currentParentTab.linkedBrowser.zenModeActive = false; } this.#currentBrowser.zenModeActive = false; if (closeParentTab && parentHasBrowser) { - this.currentParentTab.linkedBrowser.docShellIsActive = false; + this.#currentParentTab.linkedBrowser.docShellIsActive = false; } if (closeCurrentTab) { this.#currentBrowser.docShellIsActive = false; this.overlay.classList.remove('deck-selected'); + this.#currentTab._selected = false; } - if (!this.currentParentTab._visuallySelected && closeParentTab) { - this.currentParentTab._visuallySelected = false; + if (!this.#currentParentTab._visuallySelected && closeParentTab) { + this.#currentParentTab._visuallySelected = false; } this.#currentBrowser.removeAttribute('zen-glance-selected'); + this.overlay.classList.remove('zen-glance-overlay'); } - if (parentHasBrowser) { - this.currentParentTab.linkedBrowser.closest('.browserSidebarContainer').classList.remove('zen-glance-background'); + if (clearID) { + this.#currentGlanceID = null; } } - onLocationChange(_) { - if (this._duringOpening) { + onLocationChangeOpenGlance() { + if (!this.animatingOpen) { + this.quickOpenGlance(); + } + } + + // note: must be async to avoid timing issues + onLocationChange(event) { + const tab = event.target; + if (this.animatingFullOpen || this.closingGlance) { return; } - if (gBrowser.selectedTab === this.#currentTab && !this.animatingOpen && !this._duringOpening && this.#currentBrowser) { - this.quickOpenGlance(); + if (this._duringOpening || !tab.hasAttribute('glance-id')) { + if (this.#currentGlanceID && !this._duringOpening) { + this.quickCloseGlance(); + } return; } - if (gBrowser.selectedTab === this.currentParentTab && this.#currentBrowser) { - this.quickOpenGlance(); - } else if ((!this.animatingFullOpen || this.animatingOpen) && this.#currentBrowser) { - this.closeGlance(); + if (this.#currentGlanceID && this.#currentGlanceID !== tab.getAttribute('glance-id')) { + this.quickCloseGlance(); + } + this.#currentGlanceID = tab.getAttribute('glance-id'); + if (gBrowser.selectedTab === this.#currentParentTab && this.#currentBrowser) { + const curTab = this.#currentTab; + setTimeout(() => { + gBrowser.selectedTab = curTab; + }, 0); + } else if (gBrowser.selectedTab === this.#currentTab) { + setTimeout(this.onLocationChangeOpenGlance.bind(this), 0); } } onTabClose(event) { - if (event.target === this.currentParentTab) { + if (event.target === this.#currentParentTab) { this.closeGlance({ onTabClose: true }); } } + manageTabClose(tab) { + if (tab.hasAttribute('glance-id')) { + const oldGlanceID = this.#currentGlanceID; + const newGlanceID = tab.getAttribute('glance-id'); + this.#currentGlanceID = newGlanceID; + const isDifferent = newGlanceID !== oldGlanceID; + if (this._ignoreClose) { + this._ignoreClose = false; + return false; + } + this.closeGlance({ onTabClose: true, setNewID: isDifferent ? oldGlanceID : null, isDifferent }); + // only keep continueing tab close if we are not on the currently selected tab + return !isDifferent; + } + return false; + } + tabDomainsDiffer(tab1, url2) { try { if (!tab1) { @@ -350,29 +486,42 @@ } fullyOpenGlance() { + this.animatingFullOpen = true; gBrowser._insertTabAtIndex(this.#currentTab, { index: this.getTabPosition(this.#currentTab), }); - this.animatingFullOpen = true; - this.currentParentTab._visuallySelected = false; + this.#currentParentTab._visuallySelected = false; this.browserWrapper.removeAttribute('style'); this.browserWrapper.removeAttribute('has-finished-animation'); this.browserWrapper.setAttribute('animate-full', true); this.#currentTab.removeAttribute('zen-glance-tab'); + this.#currentTab.removeAttribute('glance-id'); + this.#currentParentTab.removeAttribute('glance-id'); gBrowser.selectedTab = this.#currentTab; - this.currentParentTab.linkedBrowser.closest('.browserSidebarContainer').classList.remove('zen-glance-background'); - setTimeout(() => { - window.requestAnimationFrame(() => { - this.browserWrapper.setAttribute('animate-full-end', true); + this.#currentParentTab.linkedBrowser.closest('.browserSidebarContainer').classList.remove('zen-glance-background'); + this.hideSidebarButtons(); + gZenUIManager.motion + .animate( + this.browserWrapper, + { + width: ['85%', '100%'], + height: ['100%', '100%'], + }, + { + duration: 0.4, + type: 'spring', + } + ) + .then(() => { + this.browserWrapper.removeAttribute('animate-full'); this.overlay.classList.remove('zen-glance-overlay'); - setTimeout(() => { - this.animatingFullOpen = false; - this.closeGlance({ noAnimation: true }); - }, 600); + this.browserWrapper.removeAttribute('style'); + this.animatingFullOpen = false; + this.closeGlance({ noAnimation: true }); + this.#glances.delete(this.#currentGlanceID); }); - }, 300); } openGlanceForBookmark(event) { @@ -406,6 +555,10 @@ return false; } + + getFocusedTab(aDir) { + return aDir < 0 ? this.#currentParentTab : this.#currentTab; + } } window.gZenGlanceManager = new ZenGlanceManager(); diff --git a/src/browser/base/zen-components/ZenKeyboardShortcuts.mjs b/src/browser/base/zen-components/ZenKeyboardShortcuts.mjs index dee74be78..986dd3d26 100644 --- a/src/browser/base/zen-components/ZenKeyboardShortcuts.mjs +++ b/src/browser/base/zen-components/ZenKeyboardShortcuts.mjs @@ -80,6 +80,7 @@ const defaultKeyboardGroups = { 'zen-search-find-again-shortcut-prev', ], pageOperations: [ + 'zen-text-action-copy-url-markdown-shortcut', 'zen-text-action-copy-url-shortcut', 'zen-location-open-shortcut', 'zen-location-open-shortcut-alt', @@ -755,7 +756,7 @@ class ZenKeyboardShortcutsLoader { } class ZenKeyboardShortcutsVersioner { - static LATEST_KBS_VERSION = 7; + static LATEST_KBS_VERSION = 8; constructor() {} @@ -809,6 +810,20 @@ class ZenKeyboardShortcutsVersioner { return this.migrateIfNeeded(data); } + fillDefaultIfNotPresent(data) { + for (let shortcut of ZenKeyboardShortcutsLoader.zenGetDefaultShortcuts()) { + // If it has an ID and we dont find it in the data, we add it + if (shortcut.getID() && !data.find((s) => s.getID() == shortcut.getID())) { + data.push(shortcut); + } + } + return data; + } + + fixedKeyboardShortcuts(data) { + return this.fillDefaultIfNotPresent(this.migrateIfNeeded(data)); + } + migrate(data, version) { if (version < 1) { // Migrate from 0 to 1 @@ -907,6 +922,21 @@ class ZenKeyboardShortcutsVersioner { gZenKeyboardShortcutsManager._hasToLoadDefaultDevtools = true; window.addEventListener('zen-devtools-keyset-added', listener); } + if (version < 8) { + // Migrate from 7 to 8 + // In this new version, we add the "Copy URL as Markdown" shortcut to the default shortcuts + data.push( + new KeyShortcut( + 'zen-copy-url-markdown', + 'C', + '', + ZEN_OTHER_SHORTCUTS_GROUP, + KeyShortcutModifiers.fromObject({ accel: true, shift: true, alt: true }), + 'code:gZenCommonActions.copyCurrentURLAsMarkdownToClipboard()', + 'zen-text-action-copy-url-markdown-shortcut' + ) + ); + } return data; } } @@ -934,7 +964,7 @@ var gZenKeyboardShortcutsManager = { if (this.inBrowserView) { const loadedShortcuts = await this._loadSaved(); - this._currentShortcutList = this.versioner.migrateIfNeeded(loadedShortcuts); + this._currentShortcutList = this.versioner.fixedKeyboardShortcuts(loadedShortcuts); this._applyShortcuts(); await this._saveShortcuts(); diff --git a/src/browser/base/zen-components/ZenPinnedTabManager.mjs b/src/browser/base/zen-components/ZenPinnedTabManager.mjs index 056ad76ca..aa2f9213d 100644 --- a/src/browser/base/zen-components/ZenPinnedTabManager.mjs +++ b/src/browser/base/zen-components/ZenPinnedTabManager.mjs @@ -327,6 +327,10 @@ } const actualPin = this._pinsCache.find((pin) => pin.uuid === tab.getAttribute('zen-pin-id')); + + if (!actualPin) { + return; + } actualPin.position = tab.position; await ZenPinnedTabsStorage.savePin(actualPin); } @@ -446,7 +450,7 @@ } } - _onCloseTabShortcut(event, selectedTab = gBrowser.selectedTab) { + _onCloseTabShortcut(event, selectedTab = gBrowser.selectedTab, behavior = lazy.zenPinnedTabCloseShortcutBehavior) { if (!selectedTab?.pinned) { return; } @@ -454,8 +458,6 @@ event.stopPropagation(); event.preventDefault(); - const behavior = lazy.zenPinnedTabCloseShortcutBehavior; - switch (behavior) { case 'close': this._removePinnedAttributes(selectedTab, true); @@ -470,6 +472,9 @@ this._resetTabToStoredState(selectedTab); } if (behavior.includes('unload')) { + if (selectedTab.hasAttribute('glance-id')) { + break; + } gBrowser.explicitUnloadTabs([selectedTab]); selectedTab.removeAttribute('linkedpanel'); } @@ -557,8 +562,8 @@ } } - addToEssentials() { - const tabs = TabContextMenu.contextTab.multiselected ? gBrowser.selectedTabs : [TabContextMenu.contextTab]; + addToEssentials(tab) { + const tabs = tab ? [tab] : TabContextMenu.contextTab.multiselected ? gBrowser.selectedTabs : [TabContextMenu.contextTab]; for (let i = 0; i < tabs.length; i++) { const tab = tabs[i]; tab.setAttribute('zen-essential', 'true'); @@ -575,8 +580,8 @@ gZenUIManager.updateTabsToolbar(); } - removeEssentials() { - const tabs = TabContextMenu.contextTab.multiselected ? gBrowser.selectedTabs : [TabContextMenu.contextTab]; + removeEssentials(tab) { + const tabs = tab ? [tab] : TabContextMenu.contextTab.multiselected ? gBrowser.selectedTabs : [TabContextMenu.contextTab]; for (let i = 0; i < tabs.length; i++) { const tab = tabs[i]; tab.removeAttribute('zen-essential'); @@ -640,6 +645,170 @@ document.getElementById('context_unpinSelectedTabs').hidden || contextTab.getAttribute('zen-essential'); document.getElementById('context_zen-pinned-tab-separator').hidden = !isVisible; } + + moveToAnotherTabContainerIfNecessary(event, draggedTab) { + const pinnedTabsTarget = + event.target.closest('#vertical-pinned-tabs-container') || event.target.closest('#zen-current-workspace-indicator'); + const essentialTabsTarget = event.target.closest('#zen-essentials-container'); + const tabsTarget = event.target.closest('#tabbrowser-arrowscrollbox'); + + let moved = false; + let isVertical = this.expandedSidebarMode; + let isRegularTabs = false; + // Check for pinned tabs container + if (pinnedTabsTarget) { + if (!draggedTab.pinned) { + gBrowser.pinTab(draggedTab); + moved = true; + } else if (draggedTab.hasAttribute('zen-essential')) { + this.removeEssentials(draggedTab); + gBrowser.pinTab(draggedTab); + moved = true; + } + } + // Check for essentials container + else if (essentialTabsTarget) { + if (!draggedTab.hasAttribute('zen-essential')) { + this.addToEssentials(draggedTab); + moved = true; + isVertical = false; + } + } + // Check for normal tabs container + else if (tabsTarget || event.target.id === 'zen-browser-tabs-wrapper') { + if (draggedTab.pinned && !draggedTab.hasAttribute('zen-essential')) { + gBrowser.unpinTab(draggedTab); + moved = true; + isRegularTabs = true; + } else if (draggedTab.hasAttribute('zen-essential')) { + this.removeEssentials(draggedTab); + moved = true; + isRegularTabs = true; + } + } + + // If the tab was moved, adjust its position relative to the target tab + if (moved) { + const targetTab = event.target.closest('.tabbrowser-tab'); + if (targetTab) { + const rect = targetTab.getBoundingClientRect(); + let newIndex = targetTab._tPos; + + if (isVertical) { + const middleY = targetTab.screenY + rect.height / 2; + if (!isRegularTabs && event.screenY > middleY) { + newIndex++; + } else if (isRegularTabs && event.screenY < middleY) { + newIndex--; + } + } else { + const middleX = targetTab.screenX + rect.width / 2; + if (event.screenX > middleX) { + newIndex++; + } + } + gBrowser.moveTabTo(draggedTab, newIndex); + } + } + + return moved; + } + + removeTabContainersDragoverClass() { + this.dragIndicator.remove(); + this._dragIndicator = null; + document.getElementById('zen-current-workspace-indicator').removeAttribute('open'); + } + + get dragIndicator() { + if (!this._dragIndicator) { + this._dragIndicator = document.createElement('div'); + this._dragIndicator.id = 'zen-drag-indicator'; + document.body.appendChild(this._dragIndicator); + } + return this._dragIndicator; + } + + get expandedSidebarMode() { + return document.documentElement.getAttribute('zen-sidebar-expanded') === 'true'; + } + + applyDragoverClass(event, draggedTab) { + const pinnedTabsTarget = event.target.closest('#vertical-pinned-tabs-container'); + const essentialTabsTarget = event.target.closest('#zen-essentials-container'); + const tabsTarget = event.target.closest('#tabbrowser-arrowscrollbox'); + const targetTab = event.target.closest('.tabbrowser-tab'); + if (event.target.closest('#zen-current-workspace-indicator')) { + this.removeTabContainersDragoverClass(); + event.target.setAttribute('open', true); + } else { + document.getElementById('zen-current-workspace-indicator').removeAttribute('open'); + } + + // If there's no valid target tab, nothing to do + if (!targetTab) { + return; + } + + let shouldAddDragOverElement = false; + let isVertical = this.expandedSidebarMode; + + // Decide whether we should show a dragover class for the given target + if (pinnedTabsTarget) { + if (!draggedTab.pinned || draggedTab.hasAttribute('zen-essential')) { + shouldAddDragOverElement = true; + } + } else if (essentialTabsTarget) { + if (!draggedTab.hasAttribute('zen-essential')) { + shouldAddDragOverElement = true; + isVertical = false; + } + } else if (tabsTarget) { + if (draggedTab.pinned || draggedTab.hasAttribute('zen-essential')) { + shouldAddDragOverElement = true; + } + } + + if (!shouldAddDragOverElement) { + this.removeTabContainersDragoverClass(); + return; + } + + // Calculate middle to decide 'before' or 'after' + const rect = targetTab.getBoundingClientRect(); + + if (isVertical) { + const separation = 8; + const middleY = targetTab.screenY + rect.height / 2; + const indicator = this.dragIndicator; + let top = 0; + if (event.screenY > middleY) { + top = rect.top + rect.height + 'px'; + } else { + top = rect.top + 'px'; + } + indicator.setAttribute('orientation', 'horizontal'); + indicator.style.setProperty('--indicator-left', rect.left + separation / 2 + 'px'); + indicator.style.setProperty('--indicator-width', rect.width - separation + 'px'); + indicator.style.top = top; + indicator.style.removeProperty('left'); + } else { + const separation = 8; + const middleX = targetTab.screenX + rect.width / 2; + const indicator = this.dragIndicator; + let left = 0; + if (event.screenX > middleX) { + left = rect.left + rect.width + 1 + 'px'; + } else { + left = rect.left - 2 + 'px'; + } + indicator.setAttribute('orientation', 'vertical'); + indicator.style.setProperty('--indicator-top', rect.top + separation / 2 + 'px'); + indicator.style.setProperty('--indicator-height', rect.height - separation + 'px'); + indicator.style.left = left; + indicator.style.removeProperty('top'); + } + } } window.gZenPinnedTabManager = new ZenPinnedTabManager(); diff --git a/src/browser/base/zen-components/ZenTabUnloader.mjs b/src/browser/base/zen-components/ZenTabUnloader.mjs index a9a29a16a..e14b606ab 100644 --- a/src/browser/base/zen-components/ZenTabUnloader.mjs +++ b/src/browser/base/zen-components/ZenTabUnloader.mjs @@ -173,7 +173,7 @@ } handleTabClose(tab) { - // Nothing yet + tab.lastActivity = null; } handleTabOpen(tab) { @@ -226,7 +226,7 @@ unloadTab() { const tabs = TabContextMenu.contextTab.multiselected ? gBrowser.selectedTabs : [TabContextMenu.contextTab]; for (let i = 0; i < tabs.length; i++) { - if (this.canUnloadTab(tabs[i], Date.now(), [], true)) { + if (this.canUnloadTab(tabs[i], Date.now(), this.intervalUnloader.excludedUrls, true)) { this.unload(tabs[i]); } } @@ -258,6 +258,7 @@ !tab.linkedPanel || tab.splitView || tab.attention || + tab.hasAttribute('glance-id') || tab.linkedBrowser?.zenModeActive || (tab.pictureinpicture && !ignoreTimestamp) || (tab.soundPlaying && !ignoreTimestamp) || diff --git a/src/browser/base/zen-components/ZenUIMigration.mjs b/src/browser/base/zen-components/ZenUIMigration.mjs new file mode 100644 index 000000000..6aa1454b7 --- /dev/null +++ b/src/browser/base/zen-components/ZenUIMigration.mjs @@ -0,0 +1,63 @@ +const lazy = {}; + +ChromeUtils.defineESModuleGetters(lazy, { + BrowserWindowTracker: 'resource:///modules/BrowserWindowTracker.sys.mjs', +}); + +class ZenUIMigration { + PREF_NAME = 'zen.migration.version'; + MIGRATION_VERSION = 1; + + init(isNewProfile, win) { + if (!isNewProfile) { + this._migrate(win); + } + this.clearVariables(); + } + + get _migrationVersion() { + return Services.prefs.getIntPref(this.PREF_NAME, 0); + } + + set _migrationVersion(value) { + Services.prefs.setIntPref(this.PREF_NAME, value); + } + + _migrate(win) { + if (this._migrationVersion < 1) { + this._migrateV1(win); + } + } + + clearVariables() { + this._migrationVersion = this.MIGRATION_VERSION; + } + + async _migrateV1(win) { + // Introduction of the new URL bar, show a message to the user + const notification = win.gNotificationBox.appendNotification( + 'zen-new-urlbar-notification', + { + label: { 'l10n-id': 'zen-new-urlbar-notification' }, + image: 'chrome://browser/skin/notification-icons/persistent-storage-blocked.svg', + priority: win.gNotificationBox.PRIORITY_WARNING_HIGH, + }, + [ + { + 'l10n-id': 'zen-disable', + accessKey: 'D', + callback: () => { + Services.prefs.setBoolPref('zen.urlbar.replace-newtab', false); + }, + }, + { + link: 'https://docs.zen-browser.app/user-manual/urlbar/', + 'l10n-id': 'zen-learn-more-text', + }, + ] + ); + notification.persistence = -1; + } +} + +export var gZenUIMigration = new ZenUIMigration(); diff --git a/src/browser/base/zen-components/ZenWorkspaces.mjs b/src/browser/base/zen-components/ZenWorkspaces.mjs index e4d4121e7..6d8d867d7 100644 --- a/src/browser/base/zen-components/ZenWorkspaces.mjs +++ b/src/browser/base/zen-components/ZenWorkspaces.mjs @@ -8,7 +8,7 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature { _swipeState = { isGestureActive: true, - cumulativeDelta: 0, + lastDelta: 0, direction: null, }; _lastScrollTime = 0; @@ -207,7 +207,10 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature { element.addEventListener('MozSwipeGestureMayStart', this._handleSwipeMayStart.bind(this), true); element.addEventListener('MozSwipeGestureStart', this._handleSwipeStart.bind(this), true); element.addEventListener('MozSwipeGestureUpdate', this._handleSwipeUpdate.bind(this), true); - element.addEventListener('MozSwipeGestureEnd', this._handleSwipeEnd.bind(this), true); + + // Use MozSwipeGesture instead of MozSwipeGestureEnd because MozSwipeGestureEnd is fired after animation ends, + // while MozSwipeGesture is fired immediately after swipe ends. + element.addEventListener('MozSwipeGesture', this._handleSwipeEnd.bind(this), true); } _handleSwipeMayStart(event) { @@ -231,7 +234,7 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature { this._swipeState = { isGestureActive: true, - cumulativeDelta: 0, + lastDelta: 0, direction: null, }; } @@ -242,23 +245,17 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature { event.preventDefault(); event.stopPropagation(); - // Update cumulative delta - this._swipeState.cumulativeDelta += event.delta; + const delta = event.delta * 500; + this._swipeState.lastDelta = delta; - // Determine swipe direction based on cumulative delta - if (Math.abs(this._swipeState.cumulativeDelta) > 1) { - this._swipeState.direction = this._swipeState.cumulativeDelta > 0 ? 'left' : 'right'; + if (Math.abs(delta) > 1) { + this._swipeState.direction = delta > 0 ? 'left' : 'right'; } // Apply a translateX to the tab strip to give the user feedback on the swipe const stripWidth = document.getElementById('tabbrowser-tabs').scrollWidth; - // To make the animation larger, we multiply the delta by 5 - let translateX = this._swipeState.cumulativeDelta * 10; - if (this._swipeState.direction === 'left') { - translateX = Math.min(translateX, stripWidth); - } else { - translateX = Math.max(translateX, -stripWidth); - } + const translateX = Math.max(-stripWidth, Math.min(delta, stripWidth)); + for (const element of this._animateTabsElements) { element.style.transform = `translateX(${translateX}px)`; } @@ -282,7 +279,7 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature { // Reset swipe state this._swipeState = { isGestureActive: false, - cumulativeDelta: 0, + lastDelta: 0, direction: null, }; } @@ -1306,10 +1303,11 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature { } } - async _performWorkspaceChange(window, { onInit = false, explicitAnimationDirection = undefined } = {}) { + async _performWorkspaceChange(window, { onInit = false, alwaysChange = false, explicitAnimationDirection = undefined } = {}) { const previousWorkspace = await this.getActiveWorkspace(); + alwaysChange = alwaysChange || onInit; - if (previousWorkspace && previousWorkspace.uuid === window.uuid && !onInit) { + if (previousWorkspace && previousWorkspace.uuid === window.uuid && !alwaysChange) { this._cancelSwipeAnimation(); return; } @@ -1340,7 +1338,7 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature { const visibleTabs = this._processTabVisibility(window.uuid, containerId, workspaces); // Second pass: Handle tab selection - await this._handleTabSelection(window, onInit, visibleTabs, containerId, workspaces); + await this._handleTabSelection(window, onInit, visibleTabs, containerId, workspaces, previousWorkspace.uuid); // Update UI and state await this._updateWorkspaceState(window, onInit); @@ -1456,9 +1454,9 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature { return tabWorkspaceId === workspaceUuid; } - async _handleTabSelection(window, onInit, visibleTabs, containerId, workspaces) { + async _handleTabSelection(window, onInit, visibleTabs, containerId, workspaces, previousWorkspaceId) { const currentSelectedTab = gBrowser.selectedTab; - const oldWorkspaceId = currentSelectedTab.getAttribute('zen-workspace-id'); + const oldWorkspaceId = previousWorkspaceId; const lastSelectedTab = this._lastSelectedWorkspaceTabs[window.uuid]; // Save current tab as last selected for old workspace if it shouldn't be visible in new workspace @@ -1814,7 +1812,13 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature { if (matchingWorkspaces.length === 1) { const workspace = matchingWorkspaces[0]; if (workspace.uuid !== this.getActiveWorkspaceFromCache().uuid) { - this.changeWorkspace(workspace); + window.addEventListener( + 'TabSelected', + (event) => { + this.changeWorkspace(workspace, { alwaysChange: true }); + }, + { once: true } + ); return [userContextId, true, workspace.uuid]; } } diff --git a/src/browser/base/zen-components/actors/ZenGlanceChild.sys.mjs b/src/browser/base/zen-components/actors/ZenGlanceChild.sys.mjs index 6a328f870..c43451375 100644 --- a/src/browser/base/zen-components/actors/ZenGlanceChild.sys.mjs +++ b/src/browser/base/zen-components/actors/ZenGlanceChild.sys.mjs @@ -96,7 +96,7 @@ export class ZenGlanceChild extends JSWindowActorChild { } handleClick(event) { - if (this.ensureOnlyKeyModifiers(event)) { + if (this.ensureOnlyKeyModifiers(event) || event.button !== 0 || event.defaultPrevented) { return; } const activationMethod = this._activationMethod; diff --git a/src/browser/base/zen-components/actors/ZenThemeMarketplaceParent.sys.mjs b/src/browser/base/zen-components/actors/ZenThemeMarketplaceParent.sys.mjs index e9c6d0622..ac5174e2c 100644 --- a/src/browser/base/zen-components/actors/ZenThemeMarketplaceParent.sys.mjs +++ b/src/browser/base/zen-components/actors/ZenThemeMarketplaceParent.sys.mjs @@ -122,10 +122,10 @@ export class ZenThemeMarketplaceParent extends JSWindowActorParent { } getStyleSheetFullContent(style = '') { - let stylesheet = '@-moz-document url-prefix("chrome:") {'; + let stylesheet = '@-moz-document url-prefix("chrome:") {\n'; for (const line of style.split('\n')) { - stylesheet += ` ${line}`; + stylesheet += ` ${line}\n`; } stylesheet += '}'; diff --git a/src/browser/components/BrowserGlue-sys-mjs.patch b/src/browser/components/BrowserGlue-sys-mjs.patch index 042d3a1d4..cc19b6ee6 100644 --- a/src/browser/components/BrowserGlue-sys-mjs.patch +++ b/src/browser/components/BrowserGlue-sys-mjs.patch @@ -1,8 +1,24 @@ diff --git a/browser/components/BrowserGlue.sys.mjs b/browser/components/BrowserGlue.sys.mjs -index 2de73e75bf98b21dde9ec05213a66f9e9039200f..04ab3ea4c47d674778e8965654867c4cf0f99161 100644 +index b888a753a7f23a9800fe04da51a4e6b898314ff2..35eea774e1ea4b1807ec65ebc767f423d81602bd 100644 --- a/browser/components/BrowserGlue.sys.mjs +++ b/browser/components/BrowserGlue.sys.mjs -@@ -4643,6 +4643,7 @@ BrowserGlue.prototype = { +@@ -121,6 +121,7 @@ ChromeUtils.defineESModuleGetters(lazy, { + WindowsGPOParser: "resource://gre/modules/policies/WindowsGPOParser.sys.mjs", + clearTimeout: "resource://gre/modules/Timer.sys.mjs", + setTimeout: "resource://gre/modules/Timer.sys.mjs", ++ gZenUIMigration: "chrome://browser/content/zen-components/ZenUIMigration.mjs", + }); + + if (AppConstants.MOZ_UPDATER) { +@@ -1951,6 +1952,7 @@ BrowserGlue.prototype = { + + lazy.UrlbarPrefs.updateFirefoxSuggestScenario(); + ++ lazy.gZenUIMigration.init(this._isNewProfile, aWindow); + // A channel for "remote troubleshooting" code... + let channel = new lazy.WebChannel( + "remote-troubleshooting", +@@ -4761,6 +4763,7 @@ BrowserGlue.prototype = { }, async _maybeShowDefaultBrowserPrompt() { @@ -10,7 +26,7 @@ index 2de73e75bf98b21dde9ec05213a66f9e9039200f..04ab3ea4c47d674778e8965654867c4c // Highest priority is about:welcome window modal experiment // Second highest priority is the upgrade dialog, which can include a "primary // browser" request and is limited in various ways, e.g., major upgrades. -@@ -5169,6 +5170,16 @@ BrowserGlue.prototype = { +@@ -5302,6 +5305,16 @@ BrowserGlue.prototype = { "nsIObserver", "nsISupportsWeakReference", ]), diff --git a/src/browser/components/preferences/zen-settings.js b/src/browser/components/preferences/zen-settings.js index 58c75a627..fe770629f 100644 --- a/src/browser/components/preferences/zen-settings.js +++ b/src/browser/components/preferences/zen-settings.js @@ -719,6 +719,8 @@ var zenMissingKeyboardShortcutL10n = { goHome: 'zen-key-go-home', key_redo: 'zen-key-redo', + key_inspectorMac: 'zen-key-inspector-mac', + // Devtools key_toggleToolbox: 'zen-devtools-toggle-shortcut', key_browserToolbox: 'zen-devtools-toggle-browser-toolbox-shortcut', diff --git a/src/browser/components/sidebar/browser-sidebar-js.patch b/src/browser/components/sidebar/browser-sidebar-js.patch new file mode 100644 index 000000000..4bd9fb764 --- /dev/null +++ b/src/browser/components/sidebar/browser-sidebar-js.patch @@ -0,0 +1,22 @@ +diff --git a/browser/components/sidebar/browser-sidebar.js b/browser/components/sidebar/browser-sidebar.js +index 1937a01b9940c79782cc2ad002b09ea5938b89e0..a702e8c520fad651a98615215f94657b7e1c58eb 100644 +--- a/browser/components/sidebar/browser-sidebar.js ++++ b/browser/components/sidebar/browser-sidebar.js +@@ -671,7 +671,7 @@ var SidebarController = { + */ + setPosition() { + // First reset all ordinals to match DOM ordering. +- let browser = document.getElementById("browser"); ++ let browser = document.getElementById("tabbrowser-tabbox"); + [...browser.children].forEach((node, i) => { + node.style.order = i + 1; + }); +@@ -681,7 +681,7 @@ var SidebarController = { + // DOM ordering is: sidebar-main | launcher-splitter | sidebar-box | splitter | tabbrowser-tabbox | + // Want to display as: | tabbrowser-tabbox | splitter | sidebar-box | launcher-splitter | sidebar-main + // So we just swap box and tabbrowser-tabbox ordering and move sidebar-main to the end +- let tabbox = document.getElementById("tabbrowser-tabbox"); ++ let tabbox = document.getElementById("tabbrowser-tabpanels"); + let boxOrdinal = this._box.style.order; + this._box.style.order = tabbox.style.order; + diff --git a/src/browser/components/tabbrowser/content/tab-js.patch b/src/browser/components/tabbrowser/content/tab-js.patch index 1e48494ed..e888b83a4 100644 --- a/src/browser/components/tabbrowser/content/tab-js.patch +++ b/src/browser/components/tabbrowser/content/tab-js.patch @@ -1,8 +1,8 @@ diff --git a/browser/components/tabbrowser/content/tab.js b/browser/components/tabbrowser/content/tab.js -index 60061540d79843281f3ee2ce905824b224da6f46..c01f8a7f18921588ecdc635c281cf01041ef627b 100644 +index d41c486c02a6f09dcff5741a59ad8b617294c481..0328460c7eb45d8ffb9de4f9b8d4a7bdd7a5b7b3 100644 --- a/browser/components/tabbrowser/content/tab.js +++ b/browser/components/tabbrowser/content/tab.js -@@ -39,6 +39,7 @@ +@@ -37,6 +37,7 @@ @@ -10,7 +10,16 @@ index 60061540d79843281f3ee2ce905824b224da6f46..c01f8a7f18921588ecdc635c281cf010 `; -@@ -447,6 +448,7 @@ +@@ -168,7 +169,7 @@ + } + + set _visuallySelected(val) { +- if (val == this.hasAttribute("visuallyselected")) { ++ if (val == this.hasAttribute("visuallyselected") || (!val && this.linkedBrowser?.closest('.browserSidebarContainer').classList.contains('zen-glance-background'))) { + return; + } + +@@ -451,6 +452,7 @@ this.style.MozUserFocus = "ignore"; } else if ( event.target.classList.contains("tab-close-button") || @@ -18,13 +27,21 @@ index 60061540d79843281f3ee2ce905824b224da6f46..c01f8a7f18921588ecdc635c281cf010 event.target.classList.contains("tab-icon-overlay") ) { eventMaySelectTab = false; -@@ -549,6 +551,11 @@ +@@ -544,6 +546,7 @@ + if (this.multiselected) { + gBrowser.removeMultiSelectedTabs(); + } else { ++ gZenPinnedTabManager._removePinnedAttributes(this, true); + gBrowser.removeTab(this, { + animate: true, + triggeringEvent: event, +@@ -553,6 +556,11 @@ // (see tabbrowser-tabs 'click' handler). gBrowser.tabContainer._blockDblClick = true; } + + if (event.target.classList.contains("tab-reset-button")) { -+ gZenPinnedTabManager._resetTabToStoredState(this); ++ gZenPinnedTabManager._onCloseTabShortcut(event, this, 'unload-switch'); + gBrowser.tabContainer._blockDblClick = true; + } } diff --git a/src/browser/components/tabbrowser/content/tabbrowser-js.patch b/src/browser/components/tabbrowser/content/tabbrowser-js.patch index 2234dfb64..56bb251ba 100644 --- a/src/browser/components/tabbrowser/content/tabbrowser-js.patch +++ b/src/browser/components/tabbrowser/content/tabbrowser-js.patch @@ -1,5 +1,5 @@ diff --git a/browser/components/tabbrowser/content/tabbrowser.js b/browser/components/tabbrowser/content/tabbrowser.js -index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..6362493d8ec06aa90cc3425498c0fb749b23d289 100644 +index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..838542e31112c7c3b5e9049da4a2cb6b1c975652 100644 --- a/browser/components/tabbrowser/content/tabbrowser.js +++ b/browser/components/tabbrowser/content/tabbrowser.js @@ -406,11 +406,39 @@ @@ -80,7 +80,17 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..6362493d8ec06aa90cc3425498c0fb74 oldTab.updateLastAccessed(); // if this is the foreground window, update the last-seen timestamps. if (this.ownerGlobal == BrowserWindowTracker.getTopWindow()) { -@@ -2387,7 +2421,7 @@ +@@ -1477,6 +1511,9 @@ + newBrowser && + gURLBar.getBrowserState(newBrowser).urlbarFocused && + gURLBar.focused; ++ if (gURLBar._zenHandleUrlbarClose) { ++ gURLBar._zenHandleUrlbarClose(true); ++ } + if (!keepFocusOnUrlBar) { + // Clear focus so that _adjustFocusAfterTabSwitch can detect if + // some element has been focused and respect that. +@@ -2387,7 +2424,7 @@ let panel = this.getPanel(browser); let uniqueId = this._generateUniquePanelID(); @@ -89,7 +99,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..6362493d8ec06aa90cc3425498c0fb74 aTab.linkedPanel = uniqueId; // Inject the into the DOM if necessary. -@@ -2447,7 +2481,7 @@ +@@ -2447,7 +2484,7 @@ // hasSiblings=false on both the existing browser and the new browser. if (this.tabs.length == 2) { this.tabs[0].linkedBrowser.browsingContext.hasSiblings = true; @@ -98,7 +108,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..6362493d8ec06aa90cc3425498c0fb74 } else { aTab.linkedBrowser.browsingContext.hasSiblings = this.tabs.length > 1; } -@@ -2679,6 +2713,12 @@ +@@ -2679,6 +2716,12 @@ ); } @@ -111,7 +121,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..6362493d8ec06aa90cc3425498c0fb74 if (!UserInteraction.running("browser.tabs.opening", window)) { UserInteraction.start("browser.tabs.opening", "initting", window); } -@@ -2742,6 +2782,12 @@ +@@ -2742,6 +2785,12 @@ noInitialLabel, skipBackgroundNotify, }); @@ -124,7 +134,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..6362493d8ec06aa90cc3425498c0fb74 if (insertTab) { // insert the tab into the tab container in the correct position this._insertTabAtIndex(t, { -@@ -2885,6 +2931,9 @@ +@@ -2885,6 +2934,9 @@ } } @@ -134,7 +144,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..6362493d8ec06aa90cc3425498c0fb74 // Additionally send pinned tab events if (pinned) { this._notifyPinnedStatus(t); -@@ -3403,6 +3452,21 @@ +@@ -3403,6 +3455,21 @@ ) { tabWasReused = true; tab = this.selectedTab; @@ -156,7 +166,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..6362493d8ec06aa90cc3425498c0fb74 if (!tabData.pinned) { this.unpinTab(tab); } else { -@@ -3416,6 +3480,7 @@ +@@ -3416,6 +3483,7 @@ restoreTabsLazily && !select && !tabData.pinned; let url = "about:blank"; @@ -164,7 +174,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..6362493d8ec06aa90cc3425498c0fb74 if (tabData.entries?.length) { let activeIndex = (tabData.index || tabData.entries.length) - 1; // Ensure the index is in bounds. -@@ -3451,7 +3516,21 @@ +@@ -3451,7 +3519,21 @@ skipLoad: true, preferredRemoteType, }); @@ -187,7 +197,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..6362493d8ec06aa90cc3425498c0fb74 if (select) { tabToSelect = tab; } -@@ -3729,7 +3808,7 @@ +@@ -3729,7 +3811,7 @@ // Ensure we have an index if one was not provided. if (typeof index != "number") { // Move the new tab after another tab if needed, to the end otherwise. @@ -196,7 +206,16 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..6362493d8ec06aa90cc3425498c0fb74 if ( !bulkOrderedOpen && ((openerTab && -@@ -4095,6 +4174,9 @@ +@@ -3780,7 +3862,7 @@ + } + + /** @type {MozTabbrowserTab|undefined} */ +- let tabAfter = this.tabs.at(index); ++ let tabAfter = this.tabs.filter(tab => !tab.hasAttribute("zen-glance-tab")).at(index); + this.tabContainer._invalidateCachedTabs(); + + if (tabGroup) { +@@ -4095,6 +4177,9 @@ return; } @@ -206,7 +225,15 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..6362493d8ec06aa90cc3425498c0fb74 this.removeTabs(selectedTabs); } -@@ -4443,6 +4525,12 @@ +@@ -4427,6 +4512,7 @@ + skipSessionStore, + } = {} + ) { ++ gZenUIManager.saveScrollbarState(); + if (UserInteraction.running("browser.tabs.opening", window)) { + UserInteraction.finish("browser.tabs.opening", window); + } +@@ -4443,6 +4529,12 @@ TelemetryStopwatch.start("FX_TAB_CLOSE_TIME_NO_ANIM_MS", aTab); } @@ -219,19 +246,26 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..6362493d8ec06aa90cc3425498c0fb74 // Handle requests for synchronously removing an already // asynchronously closing tab. if (!animate && aTab.closing) { -@@ -4471,7 +4559,10 @@ +@@ -4457,7 +4549,9 @@ + // frame created for it (for example, by updating the visually selected + // state). + let tabWidth = window.windowUtils.getBoundsWithoutFlushing(aTab).width; +- ++ if (gZenGlanceManager.manageTabClose(aTab)) { ++ return; ++ } + if ( + !this._beginRemoveTab(aTab, { + closeWindowFastpath: true, +@@ -4471,7 +4565,6 @@ TelemetryStopwatch.cancel("FX_TAB_CLOSE_TIME_NO_ANIM_MS", aTab); return; } - -+ if (aTab.hasAttribute("zen-glance-tab")) { -+ gZenGlanceManager.closeGlance(); -+ return; -+ } let lockTabSizing = !this.tabContainer.verticalMode && !aTab.pinned && -@@ -4610,14 +4701,14 @@ +@@ -4610,14 +4703,14 @@ !!this.tabsInCollapsedTabGroups.length; if ( aTab.visible && @@ -248,7 +282,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..6362493d8ec06aa90cc3425498c0fb74 if (closeWindow) { // We've already called beforeunload on all the relevant tabs if we get here, -@@ -5465,10 +5556,10 @@ +@@ -5465,10 +5558,10 @@ SessionStore.deleteCustomTabValue(aTab, "hiddenBy"); } @@ -261,7 +295,17 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..6362493d8ec06aa90cc3425498c0fb74 aTab.selected || aTab.closing || // Tabs that are sharing the screen, microphone or camera cannot be hidden. -@@ -7443,6 +7534,7 @@ +@@ -5727,6 +5820,9 @@ + this.tabContainer.insertBefore(aTab, neighbor); + } + }); ++ if (aTab.hasAttribute("glance-id")) { ++ this.moveTabTo(aTab.querySelector("tab[glance-id]"), aIndex, options); ++ } + } + + moveTabToGroup(aTab, aGroup) { +@@ -7443,6 +7539,7 @@ aWebProgress.isTopLevel ) { this.mTab.setAttribute("busy", "true"); @@ -269,7 +313,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..6362493d8ec06aa90cc3425498c0fb74 gBrowser._tabAttrModified(this.mTab, ["busy"]); this.mTab._notselectedsinceload = !this.mTab.selected; gBrowser.syncThrobberAnimations(this.mTab); -@@ -8411,7 +8503,7 @@ var TabContextMenu = { +@@ -8411,7 +8508,7 @@ var TabContextMenu = { ); contextUnpinSelectedTabs.hidden = !this.contextTab.pinned || !multiselectionContext; @@ -278,7 +322,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..6362493d8ec06aa90cc3425498c0fb74 // Move Tab items let contextMoveTabOptions = document.getElementById( "context_moveTabOptions" -@@ -8444,7 +8536,7 @@ var TabContextMenu = { +@@ -8444,7 +8541,7 @@ var TabContextMenu = { let contextMoveTabToStart = document.getElementById("context_moveToStart"); let isFirstTab = tabsToMove[0] == visibleTabs[0] || @@ -287,7 +331,7 @@ index ff90a70bdad6c94ec4b90027ff102972d0eb28e5..6362493d8ec06aa90cc3425498c0fb74 contextMoveTabToStart.disabled = isFirstTab && allSelectedTabsAdjacent; document.getElementById("context_openTabInWindow").disabled = -@@ -8677,6 +8769,7 @@ var TabContextMenu = { +@@ -8677,6 +8774,7 @@ var TabContextMenu = { if (this.contextTab.multiselected) { gBrowser.removeMultiSelectedTabs(); } else { diff --git a/src/browser/components/tabbrowser/content/tabs-js.patch b/src/browser/components/tabbrowser/content/tabs-js.patch index 512df10ff..756161868 100644 --- a/src/browser/components/tabbrowser/content/tabs-js.patch +++ b/src/browser/components/tabbrowser/content/tabs-js.patch @@ -1,5 +1,5 @@ diff --git a/browser/components/tabbrowser/content/tabs.js b/browser/components/tabbrowser/content/tabs.js -index 8aeb244ffca9f48661805f5b7d860b5896055562..94b6a5ee6b89965fc63a8e8d1075bd0de37c4d15 100644 +index 8aeb244ffca9f48661805f5b7d860b5896055562..bffa5e0be62e73f380adf558c5df3441bde7b604 100644 --- a/browser/components/tabbrowser/content/tabs.js +++ b/browser/components/tabbrowser/content/tabs.js @@ -94,7 +94,7 @@ @@ -16,11 +16,19 @@ index 8aeb244ffca9f48661805f5b7d860b5896055562..94b6a5ee6b89965fc63a8e8d1075bd0d if ( event.button != 0 || - event.target != this.arrowScrollbox || -+ event.target != this || ++ event.target != document.getElementById("zen-browser-tabs-wrapper") || event.composedTarget.localName == "toolbarbutton" ) { return; -@@ -659,7 +659,7 @@ +@@ -411,6 +411,7 @@ + // Reset the "ignored click" flag + target._ignoredCloseButtonClicks = false; + } ++ gZenUIManager.saveScrollbarState(); + } + + /* Protects from close-tab-button errant doubleclick: +@@ -659,7 +660,7 @@ if (this.#isContainerVerticalPinnedExpanded(tab)) { // In expanded vertical mode, the max number of pinned tabs per row is dynamic // Set this before adjusting dragged tab's position @@ -29,16 +37,43 @@ index 8aeb244ffca9f48661805f5b7d860b5896055562..94b6a5ee6b89965fc63a8e8d1075bd0d let tabsPerRow = 0; let position = 0; for (let pinnedTab of pinnedTabs) { -@@ -1010,7 +1010,7 @@ +@@ -859,6 +860,9 @@ + } + + let draggedTab = event.dataTransfer.mozGetDataAt(TAB_DROP_TYPE, 0); ++ if (draggedTab && effects === "move") { ++ gZenPinnedTabManager.applyDragoverClass(event, draggedTab); ++ } + if ( + (effects == "move" || effects == "copy") && + this == draggedTab.container && +@@ -972,6 +976,14 @@ + + this._tabDropIndicator.hidden = true; + event.stopPropagation(); ++ if (draggedTab && dropEffect == "move") { ++ let moved = gZenPinnedTabManager.moveToAnotherTabContainerIfNecessary(event, draggedTab); ++ ++ if (moved) { ++ this._finishMoveTogetherSelectedTabs(draggedTab); ++ return; ++ } ++ } + if (draggedTab && dropEffect == "copy") { + // copy the dropped tab (wherever it's from) + let newIndex = this._getDropIndex(event); +@@ -1010,8 +1022,8 @@ } } else { let pinned = draggedTab.pinned; - let numPinned = gBrowser.pinnedTabCount; +- let tabs = this.visibleTabs.slice( + let numPinned = gBrowser._numVisiblePinTabs; - let tabs = this.visibleTabs.slice( ++ let tabs = this.visibleTabs.filter(tab => !tab.hasAttribute("zen-glance-tab")).slice( pinned ? 0 : numPinned, pinned ? numPinned : undefined -@@ -1090,7 +1090,7 @@ + ); +@@ -1090,7 +1102,7 @@ let postTransitionCleanup = () => { tab.removeAttribute("tabdrop-samewindow"); @@ -47,7 +82,7 @@ index 8aeb244ffca9f48661805f5b7d860b5896055562..94b6a5ee6b89965fc63a8e8d1075bd0d if (dropIndex !== false) { gBrowser.moveTabTo(tab, dropIndex); if (!directionForward) { -@@ -1100,7 +1100,7 @@ +@@ -1100,7 +1112,7 @@ gBrowser.syncThrobberAnimations(tab); }; @@ -56,7 +91,7 @@ index 8aeb244ffca9f48661805f5b7d860b5896055562..94b6a5ee6b89965fc63a8e8d1075bd0d postTransitionCleanup(); } else { let onTransitionEnd = transitionendEvent => { -@@ -1263,7 +1263,8 @@ +@@ -1263,7 +1275,8 @@ if ( dt.mozUserCancelled || dt.dropEffect != "none" || @@ -66,16 +101,28 @@ index 8aeb244ffca9f48661805f5b7d860b5896055562..94b6a5ee6b89965fc63a8e8d1075bd0d ) { delete draggedTab._dragData; return; -@@ -1512,7 +1513,7 @@ +@@ -1512,9 +1525,19 @@ } this.#allTabs = [ - ...this.verticalPinnedTabsContainer.children, -+ ...document.getElementById("zen-essentials-container").children, ...this.verticalPinnedTabsContainer.children, ++ ...document.getElementById("zen-essentials-container").children, ...this.verticalPinnedTabsContainer.children, ...children, ]; ++ const lastPinnedTabIdx = gBrowser.pinnedTabCount; ++ for (let i = 0; i < this.#allTabs.length; i++) { ++ // add glance tabs (tabs inside tabs) to the list ++ const glanceTab = this.#allTabs[i].querySelector("tab[zen-glance-tab]"); ++ if (glanceTab) { ++ // insert right after the parent tab ++ this.#allTabs.splice(Math.min(i + 1, lastPinnedTabIdx), 0, glanceTab); ++ i++; ++ } ++ } return this.#allTabs; -@@ -1593,6 +1594,7 @@ + } + +@@ -1593,6 +1616,7 @@ } this.#focusableItems = [ @@ -83,7 +130,7 @@ index 8aeb244ffca9f48661805f5b7d860b5896055562..94b6a5ee6b89965fc63a8e8d1075bd0d ...verticalPinnedTabsContainer.children, ...focusableItems, ]; -@@ -1617,8 +1619,8 @@ +@@ -1617,8 +1641,8 @@ #isContainerVerticalPinnedExpanded(tab) { return ( this.verticalMode && @@ -94,7 +141,7 @@ index 8aeb244ffca9f48661805f5b7d860b5896055562..94b6a5ee6b89965fc63a8e8d1075bd0d ); } -@@ -1816,7 +1818,7 @@ +@@ -1816,7 +1840,7 @@ let rect = ele => { return window.windowUtils.getBoundsWithoutFlushing(ele); }; @@ -103,7 +150,7 @@ index 8aeb244ffca9f48661805f5b7d860b5896055562..94b6a5ee6b89965fc63a8e8d1075bd0d if (tab && rect(tab).width <= this._tabClipWidth) { this.setAttribute("closebuttons", "activetab"); } else { -@@ -1832,6 +1834,7 @@ +@@ -1832,6 +1856,7 @@ this.arrowScrollbox.ensureElementIsVisible(selectedTab, aInstant); } @@ -111,7 +158,16 @@ index 8aeb244ffca9f48661805f5b7d860b5896055562..94b6a5ee6b89965fc63a8e8d1075bd0d selectedTab._notselectedsinceload = false; } -@@ -1879,7 +1882,7 @@ +@@ -1843,7 +1868,7 @@ + return; + } + +- let tabs = this.visibleTabs; ++ let tabs = this.visibleTabs.filter(tab => !tab.hasAttribute("zen-glance-tab")); + if (!tabs.length) { + return; + } +@@ -1879,7 +1904,7 @@ if (isEndTab && !this._hasTabTempMaxWidth) { return; } @@ -120,7 +176,7 @@ index 8aeb244ffca9f48661805f5b7d860b5896055562..94b6a5ee6b89965fc63a8e8d1075bd0d // Force tabs to stay the same width, unless we're closing the last tab, // which case we need to let them expand just enough so that the overall // tabbar width is the same. -@@ -1894,7 +1897,7 @@ +@@ -1894,7 +1919,7 @@ let tabsToReset = []; for (let i = numPinned; i < tabs.length; i++) { let tab = tabs[i]; @@ -129,16 +185,14 @@ index 8aeb244ffca9f48661805f5b7d860b5896055562..94b6a5ee6b89965fc63a8e8d1075bd0d if (!isEndTab) { // keep tabs the same width tab.style.transition = "none"; -@@ -1963,13 +1966,13 @@ - let verticalTabsContainer = document.getElementById( - "vertical-pinned-tabs-container" +@@ -1965,11 +1990,11 @@ ); -- let numPinned = gBrowser.pinnedTabCount; -+ let numPinned = gBrowser._numVisiblePinTabs; + let numPinned = gBrowser.pinnedTabCount; - if (gBrowser.pinnedTabCount !== verticalTabsContainer.children.length) { +- let tabs = this.visibleTabs; + if (gBrowser.pinnedTabCount !== (verticalTabsContainer.children.length + document.getElementById("zen-essentials-container").children.length)) { - let tabs = this.visibleTabs; ++ let tabs = this.allTabs.filter(tab => !tab.hasAttribute("zen-glance-tab")); for (let i = 0; i < numPinned; i++) { tabs[i].style.marginInlineStart = ""; - verticalTabsContainer.appendChild(tabs[i]); @@ -146,48 +200,52 @@ index 8aeb244ffca9f48661805f5b7d860b5896055562..94b6a5ee6b89965fc63a8e8d1075bd0d } } -@@ -1993,7 +1996,7 @@ +@@ -1992,8 +2017,8 @@ + } _positionPinnedTabs() { - let tabs = this.visibleTabs; +- let tabs = this.visibleTabs; - let numPinned = gBrowser.pinnedTabCount; ++ let tabs = this.visibleTabs.filter(tab => !tab.hasAttribute("zen-glance-tab")); + let numPinned = gBrowser._numVisiblePinTabs; let absPositionHorizontalTabs = this.overflowing && tabs.length > numPinned && numPinned > 0; -@@ -2074,7 +2077,7 @@ +@@ -2074,7 +2099,7 @@ return; } - let tabs = this.visibleTabs.slice(0, gBrowser.pinnedTabCount); -+ let tabs = this.visibleTabs.slice(0, gBrowser._numVisiblePinTabs); ++ let tabs = this.visibleTabs.filter(tab => !tab.hasAttribute("zen-glance-tab")).slice(0, gBrowser._numVisiblePinTabs); let directionX = screenX > dragData.animLastScreenX; let directionY = screenY > dragData.animLastScreenY; -@@ -2257,9 +2260,9 @@ +@@ -2257,9 +2282,9 @@ } let pinned = draggedTab.pinned; - let numPinned = gBrowser.pinnedTabCount; -+ let numPinned = gBrowser._numVisiblePinTabs; - let tabs = this.visibleTabs.slice( +- let tabs = this.visibleTabs.slice( - pinned ? 0 : numPinned, ++ let numPinned = gBrowser._numVisiblePinTabs; ++ let tabs = this.visibleTabs.filter(tab => !tab.hasAttribute("zen-glance-tab")).slice( + pinned ? gBrowser._numZenEssentials : numPinned, pinned ? numPinned : undefined ); -@@ -2502,8 +2505,8 @@ +@@ -2502,8 +2527,9 @@ ); } - _finishAnimateTabMove() { - if (!this.hasAttribute("movingtab")) { + _finishAnimateTabMove(always = false) { ++ gZenPinnedTabManager.removeTabContainersDragoverClass(); + if (!this.hasAttribute("movingtab") && !always) { return; } -@@ -2668,9 +2671,9 @@ +@@ -2668,9 +2694,9 @@ function newIndex(aTab, index) { // Don't allow mixing pinned and unpinned tabs. if (aTab.pinned) { @@ -199,7 +257,7 @@ index 8aeb244ffca9f48661805f5b7d860b5896055562..94b6a5ee6b89965fc63a8e8d1075bd0d } } -@@ -2754,7 +2757,7 @@ +@@ -2754,7 +2780,7 @@ } _notifyBackgroundTab(aTab) { @@ -208,7 +266,7 @@ index 8aeb244ffca9f48661805f5b7d860b5896055562..94b6a5ee6b89965fc63a8e8d1075bd0d return; } -@@ -2772,12 +2775,14 @@ +@@ -2772,12 +2798,14 @@ selectedTab = { left: selectedTab.left, right: selectedTab.right, @@ -224,7 +282,7 @@ index 8aeb244ffca9f48661805f5b7d860b5896055562..94b6a5ee6b89965fc63a8e8d1075bd0d selectedTab, ]; }) -@@ -2794,8 +2799,11 @@ +@@ -2794,8 +2822,11 @@ delete this._lastTabToScrollIntoView; // Is the new tab already completely visible? if ( @@ -238,7 +296,7 @@ index 8aeb244ffca9f48661805f5b7d860b5896055562..94b6a5ee6b89965fc63a8e8d1075bd0d ) { return; } -@@ -2803,21 +2811,29 @@ +@@ -2803,21 +2834,29 @@ if (this.arrowScrollbox.smoothScroll) { // Can we make both the new tab and the selected tab completely visible? if ( diff --git a/src/browser/components/urlbar/UrlbarInput-sys-mjs.patch b/src/browser/components/urlbar/UrlbarInput-sys-mjs.patch index 5cefe55f6..4f76c0d50 100644 --- a/src/browser/components/urlbar/UrlbarInput-sys-mjs.patch +++ b/src/browser/components/urlbar/UrlbarInput-sys-mjs.patch @@ -1,5 +1,5 @@ diff --git a/browser/components/urlbar/UrlbarInput.sys.mjs b/browser/components/urlbar/UrlbarInput.sys.mjs -index 3ab07e5864b3bb200608e7f619645f92ade129fe..31085d82271b0259cd69ec9691ea5f33fe29e19e 100644 +index 50968dc04b527438acf30151f0c2e92f8b45097c..2948efd18fb1ee609695acd5b5b0211ce209ff1a 100644 --- a/browser/components/urlbar/UrlbarInput.sys.mjs +++ b/browser/components/urlbar/UrlbarInput.sys.mjs @@ -67,6 +67,13 @@ XPCOMUtils.defineLazyPreferenceGetter( @@ -16,7 +16,60 @@ index 3ab07e5864b3bb200608e7f619645f92ade129fe..31085d82271b0259cd69ec9691ea5f33 const DEFAULT_FORM_HISTORY_NAME = "searchbar-history"; const SEARCH_BUTTON_CLASS = "urlbar-search-button"; -@@ -2152,6 +2159,11 @@ export class UrlbarInput { +@@ -348,7 +355,11 @@ export class UrlbarInput { + // See _on_select(). HTMLInputElement.select() dispatches a "select" + // event but does not set the primary selection. + this._suppressPrimaryAdjustment = true; ++ this.document.getElementById("navigator-toolbox").setAttribute("supress-primary-adjustment", true); + this.inputField.select(); ++ this.document.ownerGlobal.setTimeout(() => { ++ this.document.getElementById("navigator-toolbox").removeAttribute("supress-primary-adjustment"); ++ }, 100); + this._suppressPrimaryAdjustment = false; + } + +@@ -424,6 +435,10 @@ export class UrlbarInput { + hideSearchTerms = false, + isSameDocument = false + ) { ++ if (this.hasAttribute("zen-newtab")) { ++ return; ++ } ++ + // We only need to update the searchModeUI on tab switch conditionally + // as we only persist searchMode with ScotchBonnet enabled. + if ( +@@ -697,8 +712,11 @@ export class UrlbarInput { + return; + } + } +- ++ this.document.getElementById("navigator-toolbox").setAttribute("supress-primary-adjustment", true); + this.handleNavigation({ event }); ++ this.document.ownerGlobal.setTimeout(() => { ++ this.document.getElementById("navigator-toolbox").removeAttribute("supress-primary-adjustment"); ++ }, 200); + } + + /** +@@ -1087,11 +1105,14 @@ export class UrlbarInput { + } + + if (!result.payload.providesSearchMode) { +- this.view.close({ elementPicked: true }); ++ if (this._zenHandleUrlbarClose) { ++ this._zenHandleUrlbarClose(true); ++ } else { ++ this.view.close({ elementPicked: true }); ++ } + } + + this.controller.recordSelectedResult(event, result); +- + if (isCanonized) { + this.controller.engagementEvent.record(event, { + result, +@@ -2144,6 +2165,11 @@ export class UrlbarInput { this.setAttribute("breakout-extend", "true"); @@ -28,7 +81,28 @@ index 3ab07e5864b3bb200608e7f619645f92ade129fe..31085d82271b0259cd69ec9691ea5f33 // Enable the animation only after the first extend call to ensure it // doesn't run when opening a new window. if (!this.hasAttribute("breakout-extend-animate")) { -@@ -3875,6 +3887,11 @@ export class UrlbarInput { +@@ -2163,6 +2189,11 @@ export class UrlbarInput { + return; + } + ++ if (this._zenHandleUrlbarClose) { ++ this._zenHandleUrlbarClose(); ++ } ++ this.removeAttribute("zen-floating-urlbar"); ++ + this.removeAttribute("breakout-extend"); + this.#updateTextboxPosition(); + } +@@ -3305,7 +3336,7 @@ export class UrlbarInput { + } else { + where = lazy.BrowserUtils.whereToOpenLink(event, false, false); + } +- if (lazy.UrlbarPrefs.get("openintab")) { ++ if (lazy.UrlbarPrefs.get("openintab") || this.hasAttribute("zen-newtab")) { + if (where == "current") { + where = "tab"; + } else if (where == "tab") { +@@ -3859,6 +3890,11 @@ export class UrlbarInput { } _on_click(event) { @@ -40,7 +114,16 @@ index 3ab07e5864b3bb200608e7f619645f92ade129fe..31085d82271b0259cd69ec9691ea5f33 if ( event.target == this.inputField || event.target == this._inputContainer || -@@ -3986,9 +4003,12 @@ export class UrlbarInput { +@@ -3930,7 +3966,7 @@ export class UrlbarInput { + } + } + +- if (this.focusedViaMousedown) { ++ if (this.focusedViaMousedown || this.hasAttribute("zen-newtab")) { + this.view.autoOpen({ event }); + } else { + if (this._untrimOnFocusAfterKeydown) { +@@ -3970,9 +4006,12 @@ export class UrlbarInput { } _on_mousedown(event) { @@ -54,7 +137,7 @@ index 3ab07e5864b3bb200608e7f619645f92ade129fe..31085d82271b0259cd69ec9691ea5f33 if ( event.target != this.inputField && -@@ -3998,8 +4018,8 @@ export class UrlbarInput { +@@ -3982,8 +4021,8 @@ export class UrlbarInput { break; } diff --git a/src/browser/themes/shared/browser-shared-css.patch b/src/browser/themes/shared/browser-shared-css.patch index 062b3f5d5..8b235373c 100644 --- a/src/browser/themes/shared/browser-shared-css.patch +++ b/src/browser/themes/shared/browser-shared-css.patch @@ -1,8 +1,17 @@ diff --git a/browser/themes/shared/browser-shared.css b/browser/themes/shared/browser-shared.css -index b4854731c08b2f463751bb907cb44130ee6b6d2a..18d96cb457f5e57ed00b4eec6d2702287bfc72c7 100644 +index 7fcb1d906c3aaec3e6b099ae731267c2b9d0b96a..ea8e0f510b09faaed0955e9974a2d9f285a52649 100644 --- a/browser/themes/shared/browser-shared.css +++ b/browser/themes/shared/browser-shared.css -@@ -147,8 +147,6 @@ body { +@@ -78,7 +78,7 @@ body { + --toolbarbutton-border-radius: 4px; + --identity-box-margin-inline: 4px; + --urlbar-min-height: max(32px, 1.4em); +- --urlbar-icon-padding: calc((var(--urlbar-min-height) - 2px /* border */ - 2px /* padding */ - 16px /* icon */) / 2); ++ --urlbar-icon-padding: calc((var(--urlbar-min-height) - 2px /* border */ - 14px /* icon */) / 2); + + /* This should be used for icons and chiclets inside the input field. It makes + the gap around them more uniform when they are close to the field edges */ +@@ -148,8 +148,6 @@ body { */ &.fullscreen-with-menubar { z-index: var(--browser-area-z-index-toolbox-while-animating); diff --git a/src/browser/themes/shared/tabbrowser/tabs-css.patch b/src/browser/themes/shared/tabbrowser/tabs-css.patch index f7e43dddb..93e6cab24 100644 --- a/src/browser/themes/shared/tabbrowser/tabs-css.patch +++ b/src/browser/themes/shared/tabbrowser/tabs-css.patch @@ -1,8 +1,8 @@ diff --git a/browser/themes/shared/tabbrowser/tabs.css b/browser/themes/shared/tabbrowser/tabs.css -index e5adf8c853bc6f92d1f5aae6398bb979a114b4fd..8d0783f8a23fabdfe90e5b9136e16a962b35dd5e 100644 +index 96f930638c04c7ddcc8dc1a7fe4dce8b12a325e6..64487674de1afb711258a36757508cd9b741fcd9 100644 --- a/browser/themes/shared/tabbrowser/tabs.css +++ b/browser/themes/shared/tabbrowser/tabs.css -@@ -31,7 +31,7 @@ +@@ -33,7 +33,7 @@ --tab-icon-overlay-fill: light-dark(white, black); --tab-icon-overlay-stroke: light-dark(black, white); --tab-label-line-height: 1.7; @@ -11,7 +11,7 @@ index e5adf8c853bc6f92d1f5aae6398bb979a114b4fd..8d0783f8a23fabdfe90e5b9136e16a96 --tab-hover-background-color: color-mix(in srgb, currentColor 11%, transparent); --tab-selected-textcolor: var(--toolbar-color); --tab-selected-bgcolor: var(--toolbar-bgcolor); -@@ -205,8 +205,7 @@ +@@ -207,8 +207,7 @@ } #tabbrowser-tabs[positionpinnedtabs] > #tabbrowser-arrowscrollbox > &[pinned] { @@ -21,7 +21,15 @@ index e5adf8c853bc6f92d1f5aae6398bb979a114b4fd..8d0783f8a23fabdfe90e5b9136e16a96 } #tabbrowser-tabs[movingtab] &:is([selected], [multiselected]) { -@@ -250,6 +249,7 @@ +@@ -238,7 +237,6 @@ + } + + :root:not([uidensity=compact]) &[pinned] { +- padding: 0 10px; + } + + &:is([selected], [multiselected]) { +@@ -252,6 +250,7 @@ border-radius: inherit; position: relative; overflow: hidden; @@ -29,7 +37,15 @@ index e5adf8c853bc6f92d1f5aae6398bb979a114b4fd..8d0783f8a23fabdfe90e5b9136e16a96 &::before { position: absolute; -@@ -573,14 +573,14 @@ +@@ -511,7 +510,6 @@ + background-repeat: no-repeat; + border-radius: 10px; + -moz-context-properties: fill; +- fill: var(--tab-icon-overlay-fill); + } + } + +@@ -569,14 +567,14 @@ } &[textoverflow] { @@ -48,7 +64,7 @@ index e5adf8c853bc6f92d1f5aae6398bb979a114b4fd..8d0783f8a23fabdfe90e5b9136e16a96 direction: rtl; mask-image: linear-gradient(to right, transparent, black var(--tab-label-mask-size)); } -@@ -1069,7 +1069,7 @@ tab-group { +@@ -1146,7 +1144,7 @@ margin-inline: var(--tab-inner-inline-margin); #tabbrowser-tabs[orient="vertical"]:not([expanded]) & > .toolbarbutton-text { @@ -57,7 +73,15 @@ index e5adf8c853bc6f92d1f5aae6398bb979a114b4fd..8d0783f8a23fabdfe90e5b9136e16a96 } &:hover { -@@ -1283,7 +1283,7 @@ tab-group { +@@ -1194,7 +1192,6 @@ + } + + #vertical-pinned-tabs-container { +- --tab-inline-padding: calc((calc(var(--tab-collapsed-background-width) + 2 * var(--tab-pinned-margin-inline-expanded) - var(--icon-size-default)) / 2)); + display: none; + grid-template-columns: repeat(auto-fit, minmax(var(--tab-pinned-min-width-expanded), auto)); + overflow-y: auto; +@@ -1347,7 +1344,7 @@ toolbarbutton:not(#firefox-view-button), toolbarpaletteitem:not(#wrapper-firefox-view-button) ) ~ #tabbrowser-tabs { @@ -66,7 +90,7 @@ index e5adf8c853bc6f92d1f5aae6398bb979a114b4fd..8d0783f8a23fabdfe90e5b9136e16a96 padding-inline-start: calc(var(--tab-overflow-pinned-tabs-width) + 2px); margin-inline-start: 2px; } -@@ -1318,7 +1318,6 @@ toolbar:not(#TabsToolbar) #firefox-view-button { +@@ -1381,7 +1378,6 @@ toolbar:not(#TabsToolbar) #firefox-view-button { list-style-image: url(chrome://global/skin/icons/plus.svg); } diff --git a/src/browser/themes/shared/urlbar-searchbar-css.patch b/src/browser/themes/shared/urlbar-searchbar-css.patch new file mode 100644 index 000000000..e270338e9 --- /dev/null +++ b/src/browser/themes/shared/urlbar-searchbar-css.patch @@ -0,0 +1,15 @@ +diff --git a/browser/themes/shared/urlbar-searchbar.css b/browser/themes/shared/urlbar-searchbar.css +index 45aa61f93d354da432eceb1c276466609a6910d0..6585158b855af19689e86ef6a833f63736ec225c 100644 +--- a/browser/themes/shared/urlbar-searchbar.css ++++ b/browser/themes/shared/urlbar-searchbar.css +@@ -291,7 +291,9 @@ + } + + #urlbar[breakout][breakout-extend] { +- margin-left: calc(-1 * var(--urlbar-margin-inline)); ++ :root:not([zen-single-toolbar='true']) { ++ margin-left: calc(-1 * var(--urlbar-margin-inline)); ++ } + width: calc(var(--urlbar-width) + 2 * var(--urlbar-margin-inline)); + + > .urlbar-input-container { diff --git a/src/browser/themes/shared/zen-icons/accessibility.svg b/src/browser/themes/shared/zen-icons/accessibility.svg index fccb13583..89d9baa0b 100644 --- a/src/browser/themes/shared/zen-icons/accessibility.svg +++ b/src/browser/themes/shared/zen-icons/accessibility.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/add-to-dictionary.svg b/src/browser/themes/shared/zen-icons/add-to-dictionary.svg index a8f648706..6f6dfdabb 100644 --- a/src/browser/themes/shared/zen-icons/add-to-dictionary.svg +++ b/src/browser/themes/shared/zen-icons/add-to-dictionary.svg @@ -1,9 +1 @@ - - - - - + diff --git a/src/browser/themes/shared/zen-icons/arrow-down.svg b/src/browser/themes/shared/zen-icons/arrow-down.svg index 67e9236c0..1ef89c26f 100644 --- a/src/browser/themes/shared/zen-icons/arrow-down.svg +++ b/src/browser/themes/shared/zen-icons/arrow-down.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/arrow-left.svg b/src/browser/themes/shared/zen-icons/arrow-left.svg index dd6151fec..21c2342a2 100644 --- a/src/browser/themes/shared/zen-icons/arrow-left.svg +++ b/src/browser/themes/shared/zen-icons/arrow-left.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/arrow-right.svg b/src/browser/themes/shared/zen-icons/arrow-right.svg index 154f9da2c..eaf6fc7c0 100644 --- a/src/browser/themes/shared/zen-icons/arrow-right.svg +++ b/src/browser/themes/shared/zen-icons/arrow-right.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/arrow-up.svg b/src/browser/themes/shared/zen-icons/arrow-up.svg index 2f77795cd..7502b1f11 100644 --- a/src/browser/themes/shared/zen-icons/arrow-up.svg +++ b/src/browser/themes/shared/zen-icons/arrow-up.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/audio-save.svg b/src/browser/themes/shared/zen-icons/audio-save.svg index e017060dc..a5bc48b88 100644 --- a/src/browser/themes/shared/zen-icons/audio-save.svg +++ b/src/browser/themes/shared/zen-icons/audio-save.svg @@ -1,9 +1 @@ - - - - - + diff --git a/src/browser/themes/shared/zen-icons/autoplay-media-blocked.svg b/src/browser/themes/shared/zen-icons/autoplay-media-blocked.svg index 63a5c0f88..aeb9a98eb 100644 --- a/src/browser/themes/shared/zen-icons/autoplay-media-blocked.svg +++ b/src/browser/themes/shared/zen-icons/autoplay-media-blocked.svg @@ -1,10 +1 @@ - - - - - - + diff --git a/src/browser/themes/shared/zen-icons/autoplay-media.svg b/src/browser/themes/shared/zen-icons/autoplay-media.svg index f8e887385..20a6a2c81 100644 --- a/src/browser/themes/shared/zen-icons/autoplay-media.svg +++ b/src/browser/themes/shared/zen-icons/autoplay-media.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/back.svg b/src/browser/themes/shared/zen-icons/back.svg index b48dd7cd2..1678b6024 100644 --- a/src/browser/themes/shared/zen-icons/back.svg +++ b/src/browser/themes/shared/zen-icons/back.svg @@ -1,9 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/bookmark-hollow.svg b/src/browser/themes/shared/zen-icons/bookmark-hollow.svg index 09adfebbe..0d1792366 100644 --- a/src/browser/themes/shared/zen-icons/bookmark-hollow.svg +++ b/src/browser/themes/shared/zen-icons/bookmark-hollow.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/bookmark-star-on-tray.svg b/src/browser/themes/shared/zen-icons/bookmark-star-on-tray.svg index 51f2d4e83..0d1792366 100644 --- a/src/browser/themes/shared/zen-icons/bookmark-star-on-tray.svg +++ b/src/browser/themes/shared/zen-icons/bookmark-star-on-tray.svg @@ -1,9 +1 @@ - - - - - + diff --git a/src/browser/themes/shared/zen-icons/bookmark.svg b/src/browser/themes/shared/zen-icons/bookmark.svg index a725501d7..d4af6bbbf 100644 --- a/src/browser/themes/shared/zen-icons/bookmark.svg +++ b/src/browser/themes/shared/zen-icons/bookmark.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/camera-blocked.svg b/src/browser/themes/shared/zen-icons/camera-blocked.svg index 216868d64..090a80b78 100644 --- a/src/browser/themes/shared/zen-icons/camera-blocked.svg +++ b/src/browser/themes/shared/zen-icons/camera-blocked.svg @@ -1,10 +1 @@ - - - - - - + diff --git a/src/browser/themes/shared/zen-icons/camera.svg b/src/browser/themes/shared/zen-icons/camera.svg index 16857087e..eb7b8eb93 100644 --- a/src/browser/themes/shared/zen-icons/camera.svg +++ b/src/browser/themes/shared/zen-icons/camera.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/canvas-blocked.svg b/src/browser/themes/shared/zen-icons/canvas-blocked.svg index 043707852..3fa44dd19 100644 --- a/src/browser/themes/shared/zen-icons/canvas-blocked.svg +++ b/src/browser/themes/shared/zen-icons/canvas-blocked.svg @@ -3,7 +3,7 @@ - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - + diff --git a/src/browser/themes/shared/zen-icons/canvas.svg b/src/browser/themes/shared/zen-icons/canvas.svg index 377b04b4f..56e2403dc 100644 --- a/src/browser/themes/shared/zen-icons/canvas.svg +++ b/src/browser/themes/shared/zen-icons/canvas.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/checkmark.svg b/src/browser/themes/shared/zen-icons/checkmark.svg index 0a240624b..2e009fdf1 100644 --- a/src/browser/themes/shared/zen-icons/checkmark.svg +++ b/src/browser/themes/shared/zen-icons/checkmark.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/chevron.svg b/src/browser/themes/shared/zen-icons/chevron.svg index 2fb938401..c4294002c 100644 --- a/src/browser/themes/shared/zen-icons/chevron.svg +++ b/src/browser/themes/shared/zen-icons/chevron.svg @@ -1,9 +1 @@ - - - - - + diff --git a/src/browser/themes/shared/zen-icons/close-all.svg b/src/browser/themes/shared/zen-icons/close-all.svg index 44683be36..a27866f14 100644 --- a/src/browser/themes/shared/zen-icons/close-all.svg +++ b/src/browser/themes/shared/zen-icons/close-all.svg @@ -1,6 +1 @@ - - \ No newline at end of file + diff --git a/src/browser/themes/shared/zen-icons/close.svg b/src/browser/themes/shared/zen-icons/close.svg index 0360479ac..327a6c91f 100644 --- a/src/browser/themes/shared/zen-icons/close.svg +++ b/src/browser/themes/shared/zen-icons/close.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/container-tab.svg b/src/browser/themes/shared/zen-icons/container-tab.svg index 92626dfa1..5774a0f1d 100644 --- a/src/browser/themes/shared/zen-icons/container-tab.svg +++ b/src/browser/themes/shared/zen-icons/container-tab.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/customize.svg b/src/browser/themes/shared/zen-icons/customize.svg index 3ef73c3cb..6ddec40ff 100644 --- a/src/browser/themes/shared/zen-icons/customize.svg +++ b/src/browser/themes/shared/zen-icons/customize.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/desktop-notification-blocked.svg b/src/browser/themes/shared/zen-icons/desktop-notification-blocked.svg index 34a03f66b..4ab923e16 100644 --- a/src/browser/themes/shared/zen-icons/desktop-notification-blocked.svg +++ b/src/browser/themes/shared/zen-icons/desktop-notification-blocked.svg @@ -1,10 +1 @@ - - - - - - + diff --git a/src/browser/themes/shared/zen-icons/desktop-notification.svg b/src/browser/themes/shared/zen-icons/desktop-notification.svg index e6f1c055c..866964cd8 100644 --- a/src/browser/themes/shared/zen-icons/desktop-notification.svg +++ b/src/browser/themes/shared/zen-icons/desktop-notification.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/developer.svg b/src/browser/themes/shared/zen-icons/developer.svg index 5085f8724..b2bcbe3ae 100644 --- a/src/browser/themes/shared/zen-icons/developer.svg +++ b/src/browser/themes/shared/zen-icons/developer.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/downloads.svg b/src/browser/themes/shared/zen-icons/downloads.svg index c8c49dc5f..6fc5ab26a 100644 --- a/src/browser/themes/shared/zen-icons/downloads.svg +++ b/src/browser/themes/shared/zen-icons/downloads.svg @@ -1,9 +1 @@ - - - - - + diff --git a/src/browser/themes/shared/zen-icons/drag-indicator.svg b/src/browser/themes/shared/zen-icons/drag-indicator.svg index 97a326ab2..97b4bb120 100644 --- a/src/browser/themes/shared/zen-icons/drag-indicator.svg +++ b/src/browser/themes/shared/zen-icons/drag-indicator.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/duplicate-tab.svg b/src/browser/themes/shared/zen-icons/duplicate-tab.svg index 0e764146a..67e321267 100644 --- a/src/browser/themes/shared/zen-icons/duplicate-tab.svg +++ b/src/browser/themes/shared/zen-icons/duplicate-tab.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/edit-copy.svg b/src/browser/themes/shared/zen-icons/edit-copy.svg index d457212a6..0f4e4f2b5 100644 --- a/src/browser/themes/shared/zen-icons/edit-copy.svg +++ b/src/browser/themes/shared/zen-icons/edit-copy.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/edit-cut.svg b/src/browser/themes/shared/zen-icons/edit-cut.svg index d02717d8e..e461be2cd 100644 --- a/src/browser/themes/shared/zen-icons/edit-cut.svg +++ b/src/browser/themes/shared/zen-icons/edit-cut.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/edit-delete.svg b/src/browser/themes/shared/zen-icons/edit-delete.svg index b4d74dcd3..8bcfe2ad7 100644 --- a/src/browser/themes/shared/zen-icons/edit-delete.svg +++ b/src/browser/themes/shared/zen-icons/edit-delete.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/edit-paste.svg b/src/browser/themes/shared/zen-icons/edit-paste.svg index b92aa0dad..ceb616c4a 100644 --- a/src/browser/themes/shared/zen-icons/edit-paste.svg +++ b/src/browser/themes/shared/zen-icons/edit-paste.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/edit-redo.svg b/src/browser/themes/shared/zen-icons/edit-redo.svg index e1e5b4ff6..39b73abb0 100644 --- a/src/browser/themes/shared/zen-icons/edit-redo.svg +++ b/src/browser/themes/shared/zen-icons/edit-redo.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/edit-select-all.svg b/src/browser/themes/shared/zen-icons/edit-select-all.svg index f3ad372ed..d90d0e5ed 100644 --- a/src/browser/themes/shared/zen-icons/edit-select-all.svg +++ b/src/browser/themes/shared/zen-icons/edit-select-all.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/edit-theme.svg b/src/browser/themes/shared/zen-icons/edit-theme.svg new file mode 100644 index 000000000..f1a2a6a9e --- /dev/null +++ b/src/browser/themes/shared/zen-icons/edit-theme.svg @@ -0,0 +1 @@ + diff --git a/src/browser/themes/shared/zen-icons/edit-undo.svg b/src/browser/themes/shared/zen-icons/edit-undo.svg index 3f31983d0..4e469ac9f 100644 --- a/src/browser/themes/shared/zen-icons/edit-undo.svg +++ b/src/browser/themes/shared/zen-icons/edit-undo.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/edit.svg b/src/browser/themes/shared/zen-icons/edit.svg index 3ecd452ba..e5317afc1 100644 --- a/src/browser/themes/shared/zen-icons/edit.svg +++ b/src/browser/themes/shared/zen-icons/edit.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/essential-add.svg b/src/browser/themes/shared/zen-icons/essential-add.svg index dae8567e1..f814e9540 100644 --- a/src/browser/themes/shared/zen-icons/essential-add.svg +++ b/src/browser/themes/shared/zen-icons/essential-add.svg @@ -1,6 +1 @@ - - + diff --git a/src/browser/themes/shared/zen-icons/essential-remove.svg b/src/browser/themes/shared/zen-icons/essential-remove.svg index 5806cd268..69ac1eb92 100644 --- a/src/browser/themes/shared/zen-icons/essential-remove.svg +++ b/src/browser/themes/shared/zen-icons/essential-remove.svg @@ -1,6 +1 @@ - - \ No newline at end of file + diff --git a/src/browser/themes/shared/zen-icons/expand-sidebar.svg b/src/browser/themes/shared/zen-icons/expand-sidebar.svg new file mode 100644 index 000000000..a72ec63ba --- /dev/null +++ b/src/browser/themes/shared/zen-icons/expand-sidebar.svg @@ -0,0 +1 @@ + diff --git a/src/browser/themes/shared/zen-icons/ext-link.svg b/src/browser/themes/shared/zen-icons/ext-link.svg index 64306a25d..089c65e22 100644 --- a/src/browser/themes/shared/zen-icons/ext-link.svg +++ b/src/browser/themes/shared/zen-icons/ext-link.svg @@ -1,9 +1 @@ - - - - - \ No newline at end of file + diff --git a/src/browser/themes/shared/zen-icons/extension-blocked.svg b/src/browser/themes/shared/zen-icons/extension-blocked.svg index e2b514d51..66278262e 100644 --- a/src/browser/themes/shared/zen-icons/extension-blocked.svg +++ b/src/browser/themes/shared/zen-icons/extension-blocked.svg @@ -1,10 +1 @@ - - - - - - + diff --git a/src/browser/themes/shared/zen-icons/extension.svg b/src/browser/themes/shared/zen-icons/extension.svg index 251379820..f462ae524 100644 --- a/src/browser/themes/shared/zen-icons/extension.svg +++ b/src/browser/themes/shared/zen-icons/extension.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/firefox-logo.svg b/src/browser/themes/shared/zen-icons/firefox-logo.svg deleted file mode 100644 index 3b8237a4a..000000000 --- a/src/browser/themes/shared/zen-icons/firefox-logo.svg +++ /dev/null @@ -1,6 +0,0 @@ - - \ No newline at end of file diff --git a/src/browser/themes/shared/zen-icons/firefox.svg b/src/browser/themes/shared/zen-icons/firefox.svg index 5b19e4e2e..dd324812a 100644 --- a/src/browser/themes/shared/zen-icons/firefox.svg +++ b/src/browser/themes/shared/zen-icons/firefox.svg @@ -3,4 +3,4 @@ - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - \ No newline at end of file + diff --git a/src/browser/themes/shared/zen-icons/folder.svg b/src/browser/themes/shared/zen-icons/folder.svg index cd530856e..410313bfe 100644 --- a/src/browser/themes/shared/zen-icons/folder.svg +++ b/src/browser/themes/shared/zen-icons/folder.svg @@ -1,6 +1 @@ - - \ No newline at end of file + diff --git a/src/browser/themes/shared/zen-icons/forget.svg b/src/browser/themes/shared/zen-icons/forget.svg index df1c15d55..d02a1961a 100644 --- a/src/browser/themes/shared/zen-icons/forget.svg +++ b/src/browser/themes/shared/zen-icons/forget.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/forward.svg b/src/browser/themes/shared/zen-icons/forward.svg index 311b06183..da06af2c8 100644 --- a/src/browser/themes/shared/zen-icons/forward.svg +++ b/src/browser/themes/shared/zen-icons/forward.svg @@ -1,6 +1 @@ - - \ No newline at end of file + diff --git a/src/browser/themes/shared/zen-icons/fullscreen-exit.svg b/src/browser/themes/shared/zen-icons/fullscreen-exit.svg index c77ccaea4..eb189574b 100644 --- a/src/browser/themes/shared/zen-icons/fullscreen-exit.svg +++ b/src/browser/themes/shared/zen-icons/fullscreen-exit.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/fullscreen.svg b/src/browser/themes/shared/zen-icons/fullscreen.svg index bf476d159..08ec0056e 100644 --- a/src/browser/themes/shared/zen-icons/fullscreen.svg +++ b/src/browser/themes/shared/zen-icons/fullscreen.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/geo-blocked.svg b/src/browser/themes/shared/zen-icons/geo-blocked.svg index ebe651cf3..52a9b5377 100644 --- a/src/browser/themes/shared/zen-icons/geo-blocked.svg +++ b/src/browser/themes/shared/zen-icons/geo-blocked.svg @@ -1,10 +1 @@ - - - - - - + diff --git a/src/browser/themes/shared/zen-icons/geo.svg b/src/browser/themes/shared/zen-icons/geo.svg index cff852aed..bf395d4d4 100644 --- a/src/browser/themes/shared/zen-icons/geo.svg +++ b/src/browser/themes/shared/zen-icons/geo.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/help.svg b/src/browser/themes/shared/zen-icons/help.svg index 5575ab284..95db53598 100644 --- a/src/browser/themes/shared/zen-icons/help.svg +++ b/src/browser/themes/shared/zen-icons/help.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/history.svg b/src/browser/themes/shared/zen-icons/history.svg index c6ce150e2..9d853baef 100644 --- a/src/browser/themes/shared/zen-icons/history.svg +++ b/src/browser/themes/shared/zen-icons/history.svg @@ -1,9 +1 @@ - - - - - \ No newline at end of file + diff --git a/src/browser/themes/shared/zen-icons/home.svg b/src/browser/themes/shared/zen-icons/home.svg index 2cb95adae..f4a3273d7 100644 --- a/src/browser/themes/shared/zen-icons/home.svg +++ b/src/browser/themes/shared/zen-icons/home.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/icons.css b/src/browser/themes/shared/zen-icons/icons.css index bcd1f08a5..a44d27339 100644 --- a/src/browser/themes/shared/zen-icons/icons.css +++ b/src/browser/themes/shared/zen-icons/icons.css @@ -45,6 +45,10 @@ list-style-image: url('reload.svg') !important; } +.tab-reset-button { + list-style-image: url('unpin.svg') !important; +} + #sidebar-button { list-style-image: url('sidebars-right.svg') !important; } @@ -64,11 +68,14 @@ } #sidebar-button:-moz-locale-dir(ltr):not([positionend]), -#sidebar-button:-moz-locale-dir(rtl)[positionend], -#zen-sidepanel-button { +#sidebar-button:-moz-locale-dir(rtl)[positionend] { list-style-image: url('chrome://browser/skin/sidebars.svg') !important; } +#zen-sidepanel-button { + list-style-image: url('sidebar.svg'); +} + #downloads-button, #downloads-indicator-anchor, #appMenu-downloads-button, @@ -100,10 +107,6 @@ list-style-image: url('arrow-right.svg'); } -#PanelUI-menu-button > * { - padding: var(--zen-toolbar-button-inner-padding); -} - #PanelUI-menu-button, #appMenu-more-button2, #zen-workspace-actions-menu-icon { @@ -164,7 +167,7 @@ #context_zenEditWorkspace, #zenToolbarThemePicker { - --menu-image: url('edit.svg') !important; + --menu-image: url('edit-theme.svg') !important; } #add-ons-button, @@ -390,7 +393,7 @@ } #zen-expand-sidebar-button { - list-style-image: url('move-tab.svg') !important; + list-style-image: url('expand-sidebar.svg') !important; } .panel-header > .subviewbutton-back { @@ -931,7 +934,7 @@ menuitem[contexttype='fullscreen'][label*='Exit'] { } #zen-context-menu-compact-mode { - --menu-image: url('chrome://browser/skin/sidebars.svg'); + --menu-image: url('sidebar.svg'); } #context_bookmarkTab, diff --git a/src/browser/themes/shared/zen-icons/image-copy.svg b/src/browser/themes/shared/zen-icons/image-copy.svg index 55070ef35..b8df4d044 100644 --- a/src/browser/themes/shared/zen-icons/image-copy.svg +++ b/src/browser/themes/shared/zen-icons/image-copy.svg @@ -1,10 +1 @@ - - - - - - + diff --git a/src/browser/themes/shared/zen-icons/image-open.svg b/src/browser/themes/shared/zen-icons/image-open.svg index 375bbcceb..677757e66 100644 --- a/src/browser/themes/shared/zen-icons/image-open.svg +++ b/src/browser/themes/shared/zen-icons/image-open.svg @@ -1,13 +1 @@ - - - - - - - - - + diff --git a/src/browser/themes/shared/zen-icons/image-save.svg b/src/browser/themes/shared/zen-icons/image-save.svg index be5e07551..3278cba0d 100644 --- a/src/browser/themes/shared/zen-icons/image-save.svg +++ b/src/browser/themes/shared/zen-icons/image-save.svg @@ -1,9 +1 @@ - - - - - + diff --git a/src/browser/themes/shared/zen-icons/info.svg b/src/browser/themes/shared/zen-icons/info.svg index 7ab0b1f61..9db7c53f9 100644 --- a/src/browser/themes/shared/zen-icons/info.svg +++ b/src/browser/themes/shared/zen-icons/info.svg @@ -1,8 +1 @@ - - - - \ No newline at end of file + diff --git a/src/browser/themes/shared/zen-icons/inspect.svg b/src/browser/themes/shared/zen-icons/inspect.svg index 8315e6070..cdab4a408 100644 --- a/src/browser/themes/shared/zen-icons/inspect.svg +++ b/src/browser/themes/shared/zen-icons/inspect.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/jar.inc.mn b/src/browser/themes/shared/zen-icons/jar.inc.mn index c6e75732b..ba6f17c2c 100644 --- a/src/browser/themes/shared/zen-icons/jar.inc.mn +++ b/src/browser/themes/shared/zen-icons/jar.inc.mn @@ -34,14 +34,15 @@ skin/classic/browser/zen-icons/edit-paste.svg (../shared/zen-icons/edit-paste.svg) skin/classic/browser/zen-icons/edit-redo.svg (../shared/zen-icons/edit-redo.svg) skin/classic/browser/zen-icons/edit-select-all.svg (../shared/zen-icons/edit-select-all.svg) + skin/classic/browser/zen-icons/edit-theme.svg (../shared/zen-icons/edit-theme.svg) skin/classic/browser/zen-icons/edit-undo.svg (../shared/zen-icons/edit-undo.svg) skin/classic/browser/zen-icons/edit.svg (../shared/zen-icons/edit.svg) skin/classic/browser/zen-icons/essential-add.svg (../shared/zen-icons/essential-add.svg) skin/classic/browser/zen-icons/essential-remove.svg (../shared/zen-icons/essential-remove.svg) + skin/classic/browser/zen-icons/expand-sidebar.svg (../shared/zen-icons/expand-sidebar.svg) skin/classic/browser/zen-icons/ext-link.svg (../shared/zen-icons/ext-link.svg) skin/classic/browser/zen-icons/extension-blocked.svg (../shared/zen-icons/extension-blocked.svg) skin/classic/browser/zen-icons/extension.svg (../shared/zen-icons/extension.svg) - skin/classic/browser/zen-icons/firefox-logo.svg (../shared/zen-icons/firefox-logo.svg) skin/classic/browser/zen-icons/firefox.svg (../shared/zen-icons/firefox.svg) skin/classic/browser/zen-icons/folder.svg (../shared/zen-icons/folder.svg) skin/classic/browser/zen-icons/forget.svg (../shared/zen-icons/forget.svg) @@ -62,10 +63,6 @@ skin/classic/browser/zen-icons/jar.inc.mn (../shared/zen-icons/jar.inc.mn) skin/classic/browser/zen-icons/library.svg (../shared/zen-icons/library.svg) skin/classic/browser/zen-icons/link.svg (../shared/zen-icons/link.svg) - skin/classic/browser/zen-icons/mac-close.svg (../shared/zen-icons/mac-close.svg) - skin/classic/browser/zen-icons/mac-maximize.svg (../shared/zen-icons/mac-maximize.svg) - skin/classic/browser/zen-icons/mac-minimize.svg (../shared/zen-icons/mac-minimize.svg) - skin/classic/browser/zen-icons/mac-restore.svg (../shared/zen-icons/mac-restore.svg) skin/classic/browser/zen-icons/mail.svg (../shared/zen-icons/mail.svg) skin/classic/browser/zen-icons/manage.svg (../shared/zen-icons/manage.svg) skin/classic/browser/zen-icons/media-loop.svg (../shared/zen-icons/media-loop.svg) @@ -82,6 +79,7 @@ skin/classic/browser/zen-icons/midi.svg (../shared/zen-icons/midi.svg) skin/classic/browser/zen-icons/move-tab.svg (../shared/zen-icons/move-tab.svg) skin/classic/browser/zen-icons/new-tab-image.svg (../shared/zen-icons/new-tab-image.svg) + skin/classic/browser/zen-icons/nucleo-copyright-notice.html (../shared/zen-icons/nucleo-copyright-notice.html) skin/classic/browser/zen-icons/open.svg (../shared/zen-icons/open.svg) skin/classic/browser/zen-icons/page-portrait.svg (../shared/zen-icons/page-portrait.svg) skin/classic/browser/zen-icons/passwords.svg (../shared/zen-icons/passwords.svg) @@ -112,6 +110,7 @@ skin/classic/browser/zen-icons/send-to-device.svg (../shared/zen-icons/send-to-device.svg) skin/classic/browser/zen-icons/settings.svg (../shared/zen-icons/settings.svg) skin/classic/browser/zen-icons/share.svg (../shared/zen-icons/share.svg) + skin/classic/browser/zen-icons/sidebar.svg (../shared/zen-icons/sidebar.svg) skin/classic/browser/zen-icons/sidebars-right.svg (../shared/zen-icons/sidebars-right.svg) skin/classic/browser/zen-icons/source-code.svg (../shared/zen-icons/source-code.svg) skin/classic/browser/zen-icons/spell-check.svg (../shared/zen-icons/spell-check.svg) @@ -128,11 +127,6 @@ skin/classic/browser/zen-icons/update-resources.sh (../shared/zen-icons/update-resources.sh) skin/classic/browser/zen-icons/video-open.svg (../shared/zen-icons/video-open.svg) skin/classic/browser/zen-icons/video-save.svg (../shared/zen-icons/video-save.svg) - skin/classic/browser/zen-icons/win11-close-dark.svg (../shared/zen-icons/win11-close-dark.svg) - skin/classic/browser/zen-icons/win11-close.svg (../shared/zen-icons/win11-close.svg) - skin/classic/browser/zen-icons/win11-maximize.svg (../shared/zen-icons/win11-maximize.svg) - skin/classic/browser/zen-icons/win11-minimize.svg (../shared/zen-icons/win11-minimize.svg) - skin/classic/browser/zen-icons/win11-restore.svg (../shared/zen-icons/win11-restore.svg) skin/classic/browser/zen-icons/window.svg (../shared/zen-icons/window.svg) skin/classic/browser/zen-icons/xr-blocked.svg (../shared/zen-icons/xr-blocked.svg) skin/classic/browser/zen-icons/xr.svg (../shared/zen-icons/xr.svg) diff --git a/src/browser/themes/shared/zen-icons/library.svg b/src/browser/themes/shared/zen-icons/library.svg index 0d2a624a3..b623e3383 100644 --- a/src/browser/themes/shared/zen-icons/library.svg +++ b/src/browser/themes/shared/zen-icons/library.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/link.svg b/src/browser/themes/shared/zen-icons/link.svg index 9edeb4ce3..5f1c21e95 100644 --- a/src/browser/themes/shared/zen-icons/link.svg +++ b/src/browser/themes/shared/zen-icons/link.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/mac-close.svg b/src/browser/themes/shared/zen-icons/mac-close.svg deleted file mode 100644 index 0b1719ed5..000000000 --- a/src/browser/themes/shared/zen-icons/mac-close.svg +++ /dev/null @@ -1,259 +0,0 @@ - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/browser/themes/shared/zen-icons/mac-maximize.svg b/src/browser/themes/shared/zen-icons/mac-maximize.svg deleted file mode 100644 index 052c24dd1..000000000 --- a/src/browser/themes/shared/zen-icons/mac-maximize.svg +++ /dev/null @@ -1,576 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/browser/themes/shared/zen-icons/mac-minimize.svg b/src/browser/themes/shared/zen-icons/mac-minimize.svg deleted file mode 100644 index a8b049ce4..000000000 --- a/src/browser/themes/shared/zen-icons/mac-minimize.svg +++ /dev/null @@ -1,582 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/browser/themes/shared/zen-icons/mac-restore.svg b/src/browser/themes/shared/zen-icons/mac-restore.svg deleted file mode 100644 index 1782e0666..000000000 --- a/src/browser/themes/shared/zen-icons/mac-restore.svg +++ /dev/null @@ -1,588 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/browser/themes/shared/zen-icons/mail.svg b/src/browser/themes/shared/zen-icons/mail.svg index 86c3528af..18dcdff03 100644 --- a/src/browser/themes/shared/zen-icons/mail.svg +++ b/src/browser/themes/shared/zen-icons/mail.svg @@ -3,6 +3,6 @@ - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - + diff --git a/src/browser/themes/shared/zen-icons/manage.svg b/src/browser/themes/shared/zen-icons/manage.svg index 4cf0679cf..879093489 100644 --- a/src/browser/themes/shared/zen-icons/manage.svg +++ b/src/browser/themes/shared/zen-icons/manage.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/media-loop.svg b/src/browser/themes/shared/zen-icons/media-loop.svg index 7124990be..347399d89 100644 --- a/src/browser/themes/shared/zen-icons/media-loop.svg +++ b/src/browser/themes/shared/zen-icons/media-loop.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/media-mute.svg b/src/browser/themes/shared/zen-icons/media-mute.svg index 6c9e0670b..d97c674da 100644 --- a/src/browser/themes/shared/zen-icons/media-mute.svg +++ b/src/browser/themes/shared/zen-icons/media-mute.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/media-pause.svg b/src/browser/themes/shared/zen-icons/media-pause.svg index 84888b297..f6bdbdafb 100644 --- a/src/browser/themes/shared/zen-icons/media-pause.svg +++ b/src/browser/themes/shared/zen-icons/media-pause.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/media-pip.svg b/src/browser/themes/shared/zen-icons/media-pip.svg index e938777e7..4ef02df2b 100644 --- a/src/browser/themes/shared/zen-icons/media-pip.svg +++ b/src/browser/themes/shared/zen-icons/media-pip.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/media-play.svg b/src/browser/themes/shared/zen-icons/media-play.svg index 67eba330f..7cf4f6039 100644 --- a/src/browser/themes/shared/zen-icons/media-play.svg +++ b/src/browser/themes/shared/zen-icons/media-play.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/media-speed.svg b/src/browser/themes/shared/zen-icons/media-speed.svg index 1af6d042f..3cb15775c 100644 --- a/src/browser/themes/shared/zen-icons/media-speed.svg +++ b/src/browser/themes/shared/zen-icons/media-speed.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/media-unmute.svg b/src/browser/themes/shared/zen-icons/media-unmute.svg index 444db3b8d..dc630d8a5 100644 --- a/src/browser/themes/shared/zen-icons/media-unmute.svg +++ b/src/browser/themes/shared/zen-icons/media-unmute.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/menu-bar.svg b/src/browser/themes/shared/zen-icons/menu-bar.svg index f7d17ae57..f843149e2 100644 --- a/src/browser/themes/shared/zen-icons/menu-bar.svg +++ b/src/browser/themes/shared/zen-icons/menu-bar.svg @@ -1,6 +1 @@ - - \ No newline at end of file + diff --git a/src/browser/themes/shared/zen-icons/menu.svg b/src/browser/themes/shared/zen-icons/menu.svg index 609ff90fb..dc211f56a 100644 --- a/src/browser/themes/shared/zen-icons/menu.svg +++ b/src/browser/themes/shared/zen-icons/menu.svg @@ -1,10 +1 @@ - - - - - - + diff --git a/src/browser/themes/shared/zen-icons/microphone-blocked.svg b/src/browser/themes/shared/zen-icons/microphone-blocked.svg index 6451ee589..e0c5193bc 100644 --- a/src/browser/themes/shared/zen-icons/microphone-blocked.svg +++ b/src/browser/themes/shared/zen-icons/microphone-blocked.svg @@ -1,10 +1 @@ - - - - - - + diff --git a/src/browser/themes/shared/zen-icons/microphone.svg b/src/browser/themes/shared/zen-icons/microphone.svg index 3bd48a23e..2ff9811d9 100644 --- a/src/browser/themes/shared/zen-icons/microphone.svg +++ b/src/browser/themes/shared/zen-icons/microphone.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/midi.svg b/src/browser/themes/shared/zen-icons/midi.svg index 8d98d0ef0..991acba26 100644 --- a/src/browser/themes/shared/zen-icons/midi.svg +++ b/src/browser/themes/shared/zen-icons/midi.svg @@ -3,6 +3,6 @@ - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - + diff --git a/src/browser/themes/shared/zen-icons/move-tab.svg b/src/browser/themes/shared/zen-icons/move-tab.svg index cc863f41c..dbf923668 100644 --- a/src/browser/themes/shared/zen-icons/move-tab.svg +++ b/src/browser/themes/shared/zen-icons/move-tab.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/new-tab-image.svg b/src/browser/themes/shared/zen-icons/new-tab-image.svg index d8b9da402..bc40fea49 100644 --- a/src/browser/themes/shared/zen-icons/new-tab-image.svg +++ b/src/browser/themes/shared/zen-icons/new-tab-image.svg @@ -1,11 +1 @@ - - - - - - - + diff --git a/src/browser/themes/shared/zen-icons/nucleo-copyright-notice.html b/src/browser/themes/shared/zen-icons/nucleo-copyright-notice.html new file mode 100644 index 000000000..9e53e90b2 --- /dev/null +++ b/src/browser/themes/shared/zen-icons/nucleo-copyright-notice.html @@ -0,0 +1,16 @@ + + + + +Nucleo Icons - Copyright Notice + + + Copyright (C) Nucleo + Version 1.2, 23 November 2023 + Nucleo Icons + https://nucleoapp.com/ + The Nucleo icons are copyrighted. Redistribution is not permitted. Use in source and binary forms, with or without modification, is permitted only if you possess a Nucleo license. + Refer to the license page for additional information: + https://nucleoapp.com/license + + \ No newline at end of file diff --git a/src/browser/themes/shared/zen-icons/open.svg b/src/browser/themes/shared/zen-icons/open.svg index e92ea516c..3e0a34c1e 100644 --- a/src/browser/themes/shared/zen-icons/open.svg +++ b/src/browser/themes/shared/zen-icons/open.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/page-portrait.svg b/src/browser/themes/shared/zen-icons/page-portrait.svg index dfb440c09..07dab98f5 100644 --- a/src/browser/themes/shared/zen-icons/page-portrait.svg +++ b/src/browser/themes/shared/zen-icons/page-portrait.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/passwords.svg b/src/browser/themes/shared/zen-icons/passwords.svg index 1529c33fb..b87deb0ff 100644 --- a/src/browser/themes/shared/zen-icons/passwords.svg +++ b/src/browser/themes/shared/zen-icons/passwords.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/paste-and-go.svg b/src/browser/themes/shared/zen-icons/paste-and-go.svg index 0aa645502..05ac6e8eb 100644 --- a/src/browser/themes/shared/zen-icons/paste-and-go.svg +++ b/src/browser/themes/shared/zen-icons/paste-and-go.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/permissions.svg b/src/browser/themes/shared/zen-icons/permissions.svg index 8549ff79c..bcb43381e 100644 --- a/src/browser/themes/shared/zen-icons/permissions.svg +++ b/src/browser/themes/shared/zen-icons/permissions.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/persistent-storage-blocked.svg b/src/browser/themes/shared/zen-icons/persistent-storage-blocked.svg index fdf67b861..66278262e 100644 --- a/src/browser/themes/shared/zen-icons/persistent-storage-blocked.svg +++ b/src/browser/themes/shared/zen-icons/persistent-storage-blocked.svg @@ -1,10 +1 @@ - - - - - - + diff --git a/src/browser/themes/shared/zen-icons/persistent-storage.svg b/src/browser/themes/shared/zen-icons/persistent-storage.svg index 2aacca100..65d2044b5 100644 --- a/src/browser/themes/shared/zen-icons/persistent-storage.svg +++ b/src/browser/themes/shared/zen-icons/persistent-storage.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/pin.svg b/src/browser/themes/shared/zen-icons/pin.svg index 7f42c705b..a30c319c1 100644 --- a/src/browser/themes/shared/zen-icons/pin.svg +++ b/src/browser/themes/shared/zen-icons/pin.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/plus.svg b/src/browser/themes/shared/zen-icons/plus.svg index 282c3f42d..6ce916b23 100644 --- a/src/browser/themes/shared/zen-icons/plus.svg +++ b/src/browser/themes/shared/zen-icons/plus.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/pocket-outline.svg b/src/browser/themes/shared/zen-icons/pocket-outline.svg index 6c48e082b..7a9d03478 100644 --- a/src/browser/themes/shared/zen-icons/pocket-outline.svg +++ b/src/browser/themes/shared/zen-icons/pocket-outline.svg @@ -3,6 +3,6 @@ - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - + diff --git a/src/browser/themes/shared/zen-icons/popup.svg b/src/browser/themes/shared/zen-icons/popup.svg index 6bc38f9ec..9f7ea80aa 100644 --- a/src/browser/themes/shared/zen-icons/popup.svg +++ b/src/browser/themes/shared/zen-icons/popup.svg @@ -1,10 +1 @@ - - - - - - + diff --git a/src/browser/themes/shared/zen-icons/print.svg b/src/browser/themes/shared/zen-icons/print.svg index dfc547726..ee1844f66 100644 --- a/src/browser/themes/shared/zen-icons/print.svg +++ b/src/browser/themes/shared/zen-icons/print.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/private-window.svg b/src/browser/themes/shared/zen-icons/private-window.svg index 150401b61..98d5c73c4 100644 --- a/src/browser/themes/shared/zen-icons/private-window.svg +++ b/src/browser/themes/shared/zen-icons/private-window.svg @@ -1,9 +1 @@ - - - - - + diff --git a/src/browser/themes/shared/zen-icons/privateBrowsing.svg b/src/browser/themes/shared/zen-icons/privateBrowsing.svg index c7c5564bf..1674d5457 100644 --- a/src/browser/themes/shared/zen-icons/privateBrowsing.svg +++ b/src/browser/themes/shared/zen-icons/privateBrowsing.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/reader-mode.svg b/src/browser/themes/shared/zen-icons/reader-mode.svg index 0bc5ef801..8de3ff026 100644 --- a/src/browser/themes/shared/zen-icons/reader-mode.svg +++ b/src/browser/themes/shared/zen-icons/reader-mode.svg @@ -1,9 +1 @@ - - - - - + diff --git a/src/browser/themes/shared/zen-icons/reload.svg b/src/browser/themes/shared/zen-icons/reload.svg index cb7fe1bd9..3aa735c04 100644 --- a/src/browser/themes/shared/zen-icons/reload.svg +++ b/src/browser/themes/shared/zen-icons/reload.svg @@ -1,8 +1 @@ - - - - \ No newline at end of file + diff --git a/src/browser/themes/shared/zen-icons/report.svg b/src/browser/themes/shared/zen-icons/report.svg index 5251be4ef..cab37aaec 100644 --- a/src/browser/themes/shared/zen-icons/report.svg +++ b/src/browser/themes/shared/zen-icons/report.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/save.svg b/src/browser/themes/shared/zen-icons/save.svg index 6ddab5885..4247ec61c 100644 --- a/src/browser/themes/shared/zen-icons/save.svg +++ b/src/browser/themes/shared/zen-icons/save.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/screen-blocked.svg b/src/browser/themes/shared/zen-icons/screen-blocked.svg index 6350c1e88..df45780fb 100644 --- a/src/browser/themes/shared/zen-icons/screen-blocked.svg +++ b/src/browser/themes/shared/zen-icons/screen-blocked.svg @@ -1,10 +1 @@ - - - - - - + diff --git a/src/browser/themes/shared/zen-icons/screen.svg b/src/browser/themes/shared/zen-icons/screen.svg index 52bdd7acb..57281387e 100644 --- a/src/browser/themes/shared/zen-icons/screen.svg +++ b/src/browser/themes/shared/zen-icons/screen.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/screenshot.svg b/src/browser/themes/shared/zen-icons/screenshot.svg index 5d1faef78..66b488605 100644 --- a/src/browser/themes/shared/zen-icons/screenshot.svg +++ b/src/browser/themes/shared/zen-icons/screenshot.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/search-glass.svg b/src/browser/themes/shared/zen-icons/search-glass.svg index 4c88fd522..24d287f2f 100644 --- a/src/browser/themes/shared/zen-icons/search-glass.svg +++ b/src/browser/themes/shared/zen-icons/search-glass.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/search-page.svg b/src/browser/themes/shared/zen-icons/search-page.svg index 8d18424fc..1aad4b524 100644 --- a/src/browser/themes/shared/zen-icons/search-page.svg +++ b/src/browser/themes/shared/zen-icons/search-page.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/security-broken.svg b/src/browser/themes/shared/zen-icons/security-broken.svg index 39cd91075..cab37aaec 100644 --- a/src/browser/themes/shared/zen-icons/security-broken.svg +++ b/src/browser/themes/shared/zen-icons/security-broken.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/security-warning.svg b/src/browser/themes/shared/zen-icons/security-warning.svg index 5cf49839c..f74987acc 100644 --- a/src/browser/themes/shared/zen-icons/security-warning.svg +++ b/src/browser/themes/shared/zen-icons/security-warning.svg @@ -1,9 +1 @@ - - - - - + diff --git a/src/browser/themes/shared/zen-icons/security.svg b/src/browser/themes/shared/zen-icons/security.svg index cefd377c1..a4d491f0b 100644 --- a/src/browser/themes/shared/zen-icons/security.svg +++ b/src/browser/themes/shared/zen-icons/security.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/send-to-device.svg b/src/browser/themes/shared/zen-icons/send-to-device.svg index f0de7e411..eff5388f8 100644 --- a/src/browser/themes/shared/zen-icons/send-to-device.svg +++ b/src/browser/themes/shared/zen-icons/send-to-device.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/settings.svg b/src/browser/themes/shared/zen-icons/settings.svg index d3cd4db9e..142f584d2 100644 --- a/src/browser/themes/shared/zen-icons/settings.svg +++ b/src/browser/themes/shared/zen-icons/settings.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/share.svg b/src/browser/themes/shared/zen-icons/share.svg index c8cca0b8f..3b4ec7d20 100644 --- a/src/browser/themes/shared/zen-icons/share.svg +++ b/src/browser/themes/shared/zen-icons/share.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/sidebar.svg b/src/browser/themes/shared/zen-icons/sidebar.svg new file mode 100644 index 000000000..b6134d970 --- /dev/null +++ b/src/browser/themes/shared/zen-icons/sidebar.svg @@ -0,0 +1 @@ + diff --git a/src/browser/themes/shared/zen-icons/sidebars-right.svg b/src/browser/themes/shared/zen-icons/sidebars-right.svg index 453e5ec90..4db5521bf 100644 --- a/src/browser/themes/shared/zen-icons/sidebars-right.svg +++ b/src/browser/themes/shared/zen-icons/sidebars-right.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/source-code.svg b/src/browser/themes/shared/zen-icons/source-code.svg index 5de449cb1..bb08f1398 100644 --- a/src/browser/themes/shared/zen-icons/source-code.svg +++ b/src/browser/themes/shared/zen-icons/source-code.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/spell-check.svg b/src/browser/themes/shared/zen-icons/spell-check.svg index 6c2c86115..455c785fe 100644 --- a/src/browser/themes/shared/zen-icons/spell-check.svg +++ b/src/browser/themes/shared/zen-icons/spell-check.svg @@ -1,10 +1 @@ - - - - - - + diff --git a/src/browser/themes/shared/zen-icons/split.svg b/src/browser/themes/shared/zen-icons/split.svg index 651c518aa..3e2337cb8 100644 --- a/src/browser/themes/shared/zen-icons/split.svg +++ b/src/browser/themes/shared/zen-icons/split.svg @@ -1,16 +1 @@ - - - - - - - - - - - - \ No newline at end of file + diff --git a/src/browser/themes/shared/zen-icons/tab-audio-blocked-small.svg b/src/browser/themes/shared/zen-icons/tab-audio-blocked-small.svg index 6b5240e82..9877ff260 100644 --- a/src/browser/themes/shared/zen-icons/tab-audio-blocked-small.svg +++ b/src/browser/themes/shared/zen-icons/tab-audio-blocked-small.svg @@ -1,9 +1 @@ - - - - - + diff --git a/src/browser/themes/shared/zen-icons/tab-audio-muted-small.svg b/src/browser/themes/shared/zen-icons/tab-audio-muted-small.svg index 81c19817a..e7701a9c3 100644 --- a/src/browser/themes/shared/zen-icons/tab-audio-muted-small.svg +++ b/src/browser/themes/shared/zen-icons/tab-audio-muted-small.svg @@ -1,9 +1 @@ - - - - - + diff --git a/src/browser/themes/shared/zen-icons/tab-audio-playing-small.svg b/src/browser/themes/shared/zen-icons/tab-audio-playing-small.svg index 45ea86f0d..dc630d8a5 100644 --- a/src/browser/themes/shared/zen-icons/tab-audio-playing-small.svg +++ b/src/browser/themes/shared/zen-icons/tab-audio-playing-small.svg @@ -1,9 +1 @@ - - - - - + diff --git a/src/browser/themes/shared/zen-icons/tab.svg b/src/browser/themes/shared/zen-icons/tab.svg index b8998288a..b46663ccc 100644 --- a/src/browser/themes/shared/zen-icons/tab.svg +++ b/src/browser/themes/shared/zen-icons/tab.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/tool-profiler.svg b/src/browser/themes/shared/zen-icons/tool-profiler.svg index 4a3eef35e..870d63c02 100644 --- a/src/browser/themes/shared/zen-icons/tool-profiler.svg +++ b/src/browser/themes/shared/zen-icons/tool-profiler.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/tracking-protection.svg b/src/browser/themes/shared/zen-icons/tracking-protection.svg index 336e83954..e0b5854da 100644 --- a/src/browser/themes/shared/zen-icons/tracking-protection.svg +++ b/src/browser/themes/shared/zen-icons/tracking-protection.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/translations.svg b/src/browser/themes/shared/zen-icons/translations.svg index c37e9ba34..2e9ee051d 100644 --- a/src/browser/themes/shared/zen-icons/translations.svg +++ b/src/browser/themes/shared/zen-icons/translations.svg @@ -1,6 +1 @@ - - - - \ No newline at end of file + diff --git a/src/browser/themes/shared/zen-icons/unpin.svg b/src/browser/themes/shared/zen-icons/unpin.svg index 97916123b..063818335 100644 --- a/src/browser/themes/shared/zen-icons/unpin.svg +++ b/src/browser/themes/shared/zen-icons/unpin.svg @@ -1,6 +1 @@ - - \ No newline at end of file + diff --git a/src/browser/themes/shared/zen-icons/video-open.svg b/src/browser/themes/shared/zen-icons/video-open.svg index 57180b966..dce174372 100644 --- a/src/browser/themes/shared/zen-icons/video-open.svg +++ b/src/browser/themes/shared/zen-icons/video-open.svg @@ -1,10 +1 @@ - - - - - - + diff --git a/src/browser/themes/shared/zen-icons/video-save.svg b/src/browser/themes/shared/zen-icons/video-save.svg index c23777ef5..a9773c398 100644 --- a/src/browser/themes/shared/zen-icons/video-save.svg +++ b/src/browser/themes/shared/zen-icons/video-save.svg @@ -1,10 +1 @@ - - - - - - + diff --git a/src/browser/themes/shared/zen-icons/win11-close-dark.svg b/src/browser/themes/shared/zen-icons/win11-close-dark.svg deleted file mode 100644 index f9975fcc3..000000000 --- a/src/browser/themes/shared/zen-icons/win11-close-dark.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - diff --git a/src/browser/themes/shared/zen-icons/win11-close.svg b/src/browser/themes/shared/zen-icons/win11-close.svg deleted file mode 100644 index 5b5d0c93a..000000000 --- a/src/browser/themes/shared/zen-icons/win11-close.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - diff --git a/src/browser/themes/shared/zen-icons/win11-maximize.svg b/src/browser/themes/shared/zen-icons/win11-maximize.svg deleted file mode 100644 index 9b18babd2..000000000 --- a/src/browser/themes/shared/zen-icons/win11-maximize.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - diff --git a/src/browser/themes/shared/zen-icons/win11-minimize.svg b/src/browser/themes/shared/zen-icons/win11-minimize.svg deleted file mode 100644 index 02f39f213..000000000 --- a/src/browser/themes/shared/zen-icons/win11-minimize.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - diff --git a/src/browser/themes/shared/zen-icons/win11-restore.svg b/src/browser/themes/shared/zen-icons/win11-restore.svg deleted file mode 100644 index 32974f67e..000000000 --- a/src/browser/themes/shared/zen-icons/win11-restore.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - diff --git a/src/browser/themes/shared/zen-icons/window.svg b/src/browser/themes/shared/zen-icons/window.svg index e32bc52a5..bc40fea49 100644 --- a/src/browser/themes/shared/zen-icons/window.svg +++ b/src/browser/themes/shared/zen-icons/window.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/xr-blocked.svg b/src/browser/themes/shared/zen-icons/xr-blocked.svg index f6f3afacc..839642c37 100644 --- a/src/browser/themes/shared/zen-icons/xr-blocked.svg +++ b/src/browser/themes/shared/zen-icons/xr-blocked.svg @@ -1,10 +1 @@ - - - - - - + diff --git a/src/browser/themes/shared/zen-icons/xr.svg b/src/browser/themes/shared/zen-icons/xr.svg index d950d0b33..4ec759867 100644 --- a/src/browser/themes/shared/zen-icons/xr.svg +++ b/src/browser/themes/shared/zen-icons/xr.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/zoom-control.svg b/src/browser/themes/shared/zen-icons/zoom-control.svg index de500330f..77505bc5e 100644 --- a/src/browser/themes/shared/zen-icons/zoom-control.svg +++ b/src/browser/themes/shared/zen-icons/zoom-control.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/browser/themes/shared/zen-icons/zoom-out.svg b/src/browser/themes/shared/zen-icons/zoom-out.svg index f673f6f36..063818335 100644 --- a/src/browser/themes/shared/zen-icons/zoom-out.svg +++ b/src/browser/themes/shared/zen-icons/zoom-out.svg @@ -1,8 +1 @@ - - - - + diff --git a/src/toolkit/content/widgets/tabbox-js.patch b/src/toolkit/content/widgets/tabbox-js.patch new file mode 100644 index 000000000..16babc2ad --- /dev/null +++ b/src/toolkit/content/widgets/tabbox-js.patch @@ -0,0 +1,31 @@ +diff --git a/toolkit/content/widgets/tabbox.js b/toolkit/content/widgets/tabbox.js +index 033582a3badb65d50f58a11f8a259e28eaa04ef3..fc79b5fb64ad17c3446979aa017fffb7f8ac3467 100644 +--- a/toolkit/content/widgets/tabbox.js ++++ b/toolkit/content/widgets/tabbox.js +@@ -210,7 +210,7 @@ + ) { + this._inAsyncOperation = false; + if (oldPanel != this._selectedPanel) { +- oldPanel?.classList.remove("deck-selected"); ++ if (!oldPanel?.classList.contains("zen-glance-background")) oldPanel?.classList.remove("deck-selected"); + this._selectedPanel?.classList.add("deck-selected"); + } + this.setAttribute("selectedIndex", val); +@@ -820,7 +820,7 @@ + if (tab == startTab) { + return null; + } +- if (filter(tab)) { ++ if (filter(tab) && !tab.hasAttribute("zen-glance-tab")) { + return tab; + } + } +@@ -883,7 +883,7 @@ + let { ariaFocusedItem } = this; + let startTab = ariaFocusedItem; + if (!ariaFocusedItem || !this.allTabs.includes(ariaFocusedItem)) { +- startTab = this.selectedItem; ++ startTab = gZenGlanceManager.getFocusedTab(aDir) || this.selectedItem; + } + let newTab = null; + diff --git a/surfer.json b/surfer.json index db7cd7020..96ac3b992 100644 --- a/surfer.json +++ b/surfer.json @@ -5,7 +5,7 @@ "binaryName": "zen", "version": { "product": "firefox", - "version": "134.0.2", + "version": "135.0", "candidate": "135.0" }, "buildOptions": { @@ -19,7 +19,7 @@ "brandShortName": "Zen", "brandFullName": "Zen Browser", "release": { - "displayVersion": "1.7.4b", + "displayVersion": "1.7.6b", "github": { "repo": "zen-browser/desktop" }, @@ -39,7 +39,7 @@ "brandShortName": "Zen", "brandFullName": "Zen Twilight", "release": { - "displayVersion": "1.7.4t", + "displayVersion": "1.7.7t", "github": { "repo": "zen-browser/desktop" } @@ -53,4 +53,4 @@ "licenseType": "MPL-2.0" }, "updateHostname": "updates.zen-browser.app" -} \ No newline at end of file +}
Copyright (C) Nucleo
Version 1.2, 23 November 2023
Nucleo Icons
https://nucleoapp.com/
The Nucleo icons are copyrighted. Redistribution is not permitted. Use in source and binary forms, with or without modification, is permitted only if you possess a Nucleo license.
Refer to the license page for additional information:
https://nucleoapp.com/license