Compare commits

...

56 Commits

Author SHA1 Message Date
Mr. M
7c221f1a82 fix: Fixed pinned tabs loading at startup, b=closes #9967, c=folders, workspaces 2025-08-23 23:01:17 +02:00
Mr. M
d6ec4d12d8 feat: Prevent draging folders outside the window, b=no-bug, c=no-component 2025-08-23 20:15:18 +02:00
Mr. M
2d81cd2087 fix: Fixed folder indentation on some cases, b=no-bug, c=folders 2025-08-23 20:06:07 +02:00
Mr. M
7beb3d5a9c fix: Resolve fix comment, b=no-bug, c=folders 2025-08-23 19:23:44 +02:00
Mr. M
ce5dc06c66 chore: Update event listeners, b=no-bug, c=folders 2025-08-23 17:52:17 +02:00
octaviusz
64cb61ec9f fix: improve tab selection for collapsed folders 2025-08-23 18:04:37 +03:00
Mr. M
b29a2bf7d8 feat: Improve tab selection inside collapsed folders, b=no-bug, c=folders 2025-08-23 14:05:57 +02:00
octaviusz
6b5131bbde feat: Enhance folder creation with split-view groups (#9968) 2025-08-22 13:45:39 -07:00
octaviusz
777bbfeef1 feat: Multiselected tabs support for folders, p=#9941
* feat: Multiselected tabs support

* refactor(folders): Store active tabs as direct references in folders and better handling collapsed items

* fix: Refine tab visibility and state management

* feat:  Add ungroup for multiple selected tabs drag and drop, b=no-bug, c=folders, tabs

* fix: Fixed wrong calculation of indentation and other small refactoring, b=no-bug, c=common, folders, tabs

* fix: Fixed restoring split views, b=no-bug, c=folders, workspaces

* test: Added tests for visible tab, b=no-bug, c=folders, tests, tabs

* feat: Folder active tabs are always visible, b=no-bug, c=folders

* fix: Fixed duplicate tabs appearing on the tab search list, b=no-bug, c=folders

* feat: Added support for active folder unload, b=no-bug, c=folders

* fix: first implementation `expandToSelected`

* fix: Formatting

* fix: Some minor fixes, b=no-bug, c=folders, tabs

* fix: Improve collapse visible tab function, b=no-bug, c=folders

* test: Added folder level tests, b=no-bug, c=folders, tests

---------

Signed-off-by: mr. m <91018726+mr-cheffy@users.noreply.github.com>
Co-authored-by: mr. m <91018726+mr-cheffy@users.noreply.github.com>
Co-authored-by: Mr. M <mr.m@tuta.com>
2025-08-22 09:57:12 -07:00
Mr. M
af73ce2f9c Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-08-21 10:59:54 +02:00
Mr. M
a4c47565be fix: Fixed flashing the urlbar when there are mutations on the DOM, b=no-bug, c=common 2025-08-21 10:59:49 +02:00
octaviusz
c1e2c7ec36 fix: Fixed zen-empty-tab movement while inserting items into a group (#9948) 2025-08-21 10:45:51 +02:00
Mr. M
21e82c2379 fix: Fixed wrong calculation of indentation and other small refactoring, b=no-bug, c=common, folders, tabs 2025-08-21 00:43:44 +02:00
Mr. M
bb9be72863 fix: Fixed restoring split views, b=no-bug, c=folders, workspaces 2025-08-21 00:39:12 +02:00
Mr. M
4a87be372d fix: Fixed session restore for folders with invalid workspace IDs, b=no-bug, c=folders, workspaces 2025-08-20 20:57:51 +02:00
Mr. M
d2e0a38bf3 chore: Preprocess SVG licenses and other small fixes, b=no-bug, c=folders, common, media, glance, tabs, tests, welcome 2025-08-20 13:49:14 +02:00
Mr. M
30a322f481 test: Added test for multiselected tabs inside folders, b=no-bug, c=folders, tests 2025-08-19 23:37:52 +02:00
Mr. M
6b2f1edf0d chore: Updated to firefox 142.0, b=no-bug, c=l10n 2025-08-19 18:15:04 +02:00
Mr. M
850ea775de test: Fixed welcome page tests and added empty tab checks, b=no-bug, c=tests, tabs, welcome 2025-08-19 14:34:38 +02:00
Mr. M
e7a9aba3c0 fix: Fixed restoring folders not working when the empty tab is not first, b=no-bug, c=folders, tabs, tests 2025-08-19 14:17:35 +02:00
Mr. M
04105c3c5e fix: Fixed windows control butons can be seen when switching compact mode, b=closes #9922, c=common 2025-08-19 01:42:55 +02:00
Mr. M
1e59e5d712 fix: Fixed color scheme generation for linux, b=no-bug, c=folders, workspaces 2025-08-19 01:38:15 +02:00
Mr. M
eb163dee88 test: Added tests for folder density and max subfolders, b=no-bug, c=folders, tests 2025-08-18 20:59:35 +02:00
Mr. M
d8196c58ab Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-08-18 20:11:52 +02:00
Mr. M
d216114364 feat: Imrove border spacing for no-separation in compact mode and other small tweaks, b=no-bug, c=compact-mode, folders, workspaces 2025-08-18 20:09:07 +02:00
octaviusz
f95f245644 fix: Remove overflow: hidden from tabs container (#9923) 2025-08-18 19:26:01 +02:00
octaviusz
6e161ac83e fix: After expanding a folder, has-active folders show extra items (#9920) 2025-08-18 12:32:19 +02:00
Mr. M
e06402f468 chore: Clean up old prefs and fixed small details, b=no-bug, c=common, folders, workspaces 2025-08-17 19:00:24 +02:00
Mr. M
25087e3cbf fix: Fixed 'switch tab' not working when tabs are unloaded, b=no-bug, c=workspaces 2025-08-17 17:09:38 +02:00
12th
b7b868e6ba fix: make scrolling more apparent, p=#9916 2025-08-17 16:19:08 +02:00
Mr. M
bc100ae8e2 feat: Added 'add subfolder' context menu item, b=no-bug, c=folders, tabs 2025-08-17 16:18:22 +02:00
Mr. M
c779267486 feat: Improved theme handling for single workspaces, b=no-bug, c=tabs, folders, workspaces 2025-08-17 15:18:55 +02:00
Mr. M
942606f82b chore: Move ffprefs to the import script from build, b=no-bug, c=no-component 2025-08-17 15:10:25 +02:00
Mr. M
c020106535 Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-08-17 15:08:36 +02:00
mr. m
bf66df57b1 feat: Changed 'expand folder' to 'unpack folder' and fixed pressing TAB on the URL while in compact mode, b=no-bug, c=folders, common, compact-mode 2025-08-17 03:56:06 +02:00
mr. m
129b8efb39 fix: Added more SVG icons and fixed the sizes, b=no-bug, c=common, folders 2025-08-17 02:51:41 +02:00
octaviusz
ce2311c086 feat: Improved indentation when dragging tabs and folders (#9908)
* feat: Improved indentation when dragging tabs and folders

* fix: Formatting
2025-08-16 11:09:53 -07:00
octaviusz
fcaac2ee0c fix: Cannot delete a folder or rename it if clicking on the text (#9906) 2025-08-16 17:20:41 +02:00
Mr. M
f2fcee9605 test: Added tests for folders opening from owner tabs, b=no-bug, c=folders, tests, tabs 2025-08-16 17:20:20 +02:00
octaviusz
8d15c9ef49 fix: Test test_Split_View_Inside_Folder (#9902)
* fix: Test `test_Split_View_Inside_Folder`

* fix: Extra `ungroupTab` call
2025-08-15 20:25:48 +02:00
mr. m
c8e58ad525 fix: Fixed flashing on essential tabs when switching workspaces, b=no-bug, c=configs, common, folders, workspaces 2025-08-15 20:13:29 +02:00
octaviusz
5dcc6d5f44 fix: During session restore insertBefore creates an extra group for (#9899) 2025-08-15 18:26:41 +02:00
Mr. M
8c84901598 test: Fixed workspace bookmarks tests and added new ones for workspace titles, b=closes #9900, c=workspaces, tests 2025-08-15 18:24:25 +02:00
Mr. M
aa23cd5c64 chore: Ran quality checks and license checks, b=no-bug, c=winsign, workspaces 2025-08-15 17:18:24 +02:00
Mr. M
4304e19cbb fix: Fixed glance flashing when fully expanding, b=no-bug, c=folders, glance, tabs 2025-08-15 14:34:07 +02:00
Mr. M
4e2dfd8a13 test: Added tests for tab group expand and collapse, b=closes #9885, c=tabs, folders, tests, workspaces 2025-08-14 18:00:13 +02:00
Mr. M
4a48d11b74 chore: Bypass mozilla written ToU to show our own one, b=no-bug, c=no-component 2025-08-14 17:13:42 +02:00
Mr. M
eb94ea5817 feat: Change input events to fix unhovering when having a site on the parent process, b=no-bug, c=compact-mode 2025-08-14 13:32:40 +02:00
Mr. M
a49e918847 fix: Fixed workspace icons overflow having the wrong spacing, b=no-bug, c=workspaces 2025-08-14 13:29:12 +02:00
Mr. M
4337e5a964 Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-08-14 13:06:10 +02:00
Mr. M
187053c4e8 fix: Fixed changing folder icon in collapsed mode, b=closes #9866, c=folders, workspaces 2025-08-14 13:06:07 +02:00
mr. m
199da1f824 chore: Updated to firefox 142.0, p=#9870
* chore: Updateed to firefox 142.0, b=no-bug, c=l10n, folders

* chore: Finish updating to firefox, b=no-bug, c=tabs

* chore: Fixed mods builds, b=no-bug, c=mods

* feat: Small changes to tabs layout, b=no-bug, c=tabs, compact-mode, folders, workspaces

* test: Fixed tests, b=no-bug, c=scripts, tests, folders

* test: Fixed tests, b=no-bug, c=tabs, tests, welcome
2025-08-13 23:21:38 +02:00
mr. m
2d54e9f27f feat: Dont translate the items if there's no visible pinned tabs, b=no-bug, c=tabs 2025-08-11 23:12:18 +02:00
mr. m
84f962346c feat: Improved font sizes and overall cleanup, b=no-bug, c=folders, tabs 2025-08-11 21:48:24 +02:00
mr. m
bf69ac13b2 fix: Fixed compact mode hovering showing the urlbar for a moment, b=no-bug, c=workspaces, compact-mode, tests 2025-08-11 18:48:36 +02:00
octaviusz
3229126f14 fix: Split view group have an extra group after session restore (#9841) 2025-08-10 17:47:20 -07:00
336 changed files with 3957 additions and 2391 deletions

View File

@@ -1,3 +1,7 @@
# This Source Code Form is subject to the terms of the Mozilla Public
# 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/.
root = true
[*]

4
.gitattributes vendored
View File

@@ -1,3 +1,7 @@
# This Source Code Form is subject to the terms of the Mozilla Public
# 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/.
*.patch linguist-language=C++
*.d.ts linguist-language=TypeScript

4
.gitignore vendored
View File

@@ -1,3 +1,7 @@
# This Source Code Form is subject to the terms of the Mozilla Public
# 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/.
.dotbuild/
engine/
firefox-*/

View File

@@ -1,3 +1,7 @@
# This Source Code Form is subject to the terms of the Mozilla Public
# 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/.
engine/
**/*.html

View File

@@ -1 +1 @@
* @mauro-balades
* @mr-cheffy

View File

@@ -1,3 +1,9 @@
<!--
- This Source Code Form is subject to the terms of the Mozilla Public
- 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/.
-->
# Contributor Covenant Code of Conduct
## Our Pledge

View File

@@ -1,3 +1,8 @@
<!--
- This Source Code Form is subject to the terms of the Mozilla Public
- 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/.
-->
<!-- TODO: Get a job -->
<img src="./docs/assets/zen-dark.svg" width="100px" align="left">
@@ -29,8 +34,8 @@ Zen is a firefox-based browser with the aim of pushing your productivity to a ne
### Firefox Versions
- [`Release`](https://zen-browser.app/download) - Is currently built using Firefox version `141.0.3`! 🚀
- [`Twilight`](https://zen-browser.app/download?twilight) - Is currently built using Firefox version `RC 141.0.3`!
- [`Release`](https://zen-browser.app/download) - Is currently built using Firefox version `142.0`! 🚀
- [`Twilight`](https://zen-browser.app/download?twilight) - Is currently built using Firefox version `RC 142.0`!
### Contributing

View File

@@ -1,3 +1,9 @@
<!--
- This Source Code Form is subject to the terms of the Mozilla Public
- 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/.
-->
# Security Policy
## Reporting a Vulnerability

View File

@@ -1,4 +1,8 @@
#!/bin/sh
# This Source Code Form is subject to the terms of the Mozilla Public
# 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/.
CURRENTDIR="$(dirname "$(readlink -f "$0")")"
export PATH="${CURRENTDIR}:${PATH}"
export MOZ_LEGACY_PROFILES=1 # Prevent per installation profiles

View File

@@ -1 +1 @@
4a784a2037bf44d4fcacf70fd69c86ff30825ec1
784e5dbc4955e29ee7a4e0b88adefdd230f2e9fe

View File

@@ -1,3 +1,7 @@
// This Source Code Form is subject to the terms of the Mozilla Public
// 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/.
const fs = require('fs');
const MJS_FILES = ['src/zen/split-view/ZenViewSplitter.ts'];

View File

@@ -1,3 +1,7 @@
# This Source Code Form is subject to the terms of the Mozilla Public
# 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/.
(New-Object System.Net.WebClient).DownloadFile("https://ftp.mozilla.org/pub/mozilla/libraries/win32/MozillaBuildSetup-Latest.exe", "C:\MozillaBuildSetup-Latest.exe")
C:\MozillaBuildSetup-Latest.exe /S | out-null

View File

@@ -1,3 +1,6 @@
# This Source Code Form is subject to the terms of the Mozilla Public
# 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/.
Remove-Item -Recurse -Force engine
Remove-Item -Recurse -Force .surfer

View File

@@ -1,3 +1,7 @@
# This Source Code Form is subject to the terms of the Mozilla Public
# 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/.
param(
[string][Parameter(Mandatory=$true)]$SignIdentity,
[string][Parameter(Mandatory=$true)]$GithubRunId

View File

@@ -7,10 +7,12 @@ unset MOZ_STDCXX_COMPAT
ac_add_options --disable-dmd
ac_add_options --enable-eme=widevine
# override LTO settings
# TODO: Dont use LTO for now, it's causing a lot of issues
export MOZ_LTO=cross,thin
ac_add_options --enable-lto=cross,thin
if test "$ZEN_RELEASE"; then
# override LTO settings
# TODO: Dont use LTO for now, it's causing a lot of issues
export MOZ_LTO=cross,thin
ac_add_options --enable-lto=cross,thin
fi
if test "$ZEN_RELEASE"; then
if test "$ZEN_GA_DISABLE_PGO"; then

View File

@@ -1,3 +1,7 @@
# This Source Code Form is subject to the terms of the Mozilla Public
# 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/.
base_path: locales
files:
- source: en-US/browser/browser/zen-general.ftl

View File

@@ -1,15 +0,0 @@
## Changed things that should be tested each release
- Workspaces
- Sidebar
- Split views
- Vertical tabs (expanded and not expanded)
- Tab groups
- Welcome Page
- Overall performance
- Overall stability
- Pinning tabs (Grid layout)
- Overall UX
- Themes Page
- Settings Page
- Keyboard shortcuts, check if there are any missing or not working

View File

@@ -1,3 +1,9 @@
<!--
- This Source Code Form is subject to the terms of the Mozilla Public
- 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/.
-->
# Branch Structure
The repository is structured as follows:

View File

@@ -1,18 +0,0 @@
# Custom Keyboard Shortcuts
```json
{
"<shortcut-id>": {
"key": "<key>",
"alt": false,
"shift": false,
"ctrl": false,
"meta": false,
"keycode": 0
}
}
```
The `key` field is the key that will trigger the shortcut. The `alt`, `shift`, `ctrl`, and `meta` fields are booleans that indicate if the respective modifier key should be pressed when the shortcut is triggered.
The `keycode` field is the keycode of the key that will trigger the shortcut. This field is optional and can be used to specify the keycode of the key that will trigger the shortcut. If the `keycode` field is specified, the `key` field will be ignored.

View File

@@ -1,19 +0,0 @@
# Workspaces Layout
```json
{
"workspaces": [
{
"uuid": "uuid1",
"name": "workspace1",
"icon": "icon1",
"default": true
},
...
]
}
```
To save the tabs and identity them, they will contain a `zen-workspace-uuid` attribute with the workspace uuid.
We will make use of Firefox's builtin session restore feature to save the tabs and windows after the user closes the browser.

View File

@@ -1,3 +1,7 @@
// This Source Code Form is subject to the terms of the Mozilla Public
// 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/.
import js from '@eslint/js';
import globals from 'globals';
import { defineConfig } from 'eslint/config';

View File

@@ -5,8 +5,11 @@ zen-folders-search-placeholder =
zen-folders-panel-rename-folder =
.label = Rename Folder
zen-folders-panel-expand-folder =
.label = Expand Folder
zen-folders-panel-unpack-folder =
.label = Unpack Folder
zen-folders-new-subfolder =
.label = New Subfolder
zen-folders-panel-delete-folder =
.label = Delete Folder

View File

@@ -66,4 +66,4 @@ zen-workspace-creation-header = Create a Space
zen-workspace-creation-label = Spaces are used to organize your tabs and sessions.
zen-workspaces-delete-workspace-title = Delete Space?
zen-workspaces-delete-workspace-body = Are you sure you want to delete this space? This action cannot be undone.
zen-workspaces-delete-workspace-body = Are you sure you want to delete { $name }? This action cannot be undone.

8
package-lock.json generated
View File

@@ -9,7 +9,7 @@
"version": "1.0.0",
"license": "MPL-2.0",
"dependencies": {
"@zen-browser/surfer": "^1.11.16"
"@zen-browser/surfer": "^1.11.20"
},
"devDependencies": {
"@babel/preset-typescript": "^7.27.0",
@@ -1135,9 +1135,9 @@
"license": "MIT"
},
"node_modules/@zen-browser/surfer": {
"version": "1.11.16",
"resolved": "https://registry.npmjs.org/@zen-browser/surfer/-/surfer-1.11.16.tgz",
"integrity": "sha512-F+2LkgFkhdH9+sGpQ/w27rmc96Xt6ZCKwBrHJQHnr19pLgReEt1YupKutDBuZ+OtyaORU0WT1DremLh+81aw5A==",
"version": "1.11.20",
"resolved": "https://registry.npmjs.org/@zen-browser/surfer/-/surfer-1.11.20.tgz",
"integrity": "sha512-Qmj0oxmg5CvZdLMHDSZChreG9EBFhQ/LG1fACYFPayQVASE37JKZkmLebBXW0O5WdNpzksHy3TB6sR/gHOEpzw==",
"license": "MPL-2.0",
"dependencies": {
"@resvg/resvg-js": "^1.4.0",

View File

@@ -6,10 +6,10 @@
"**/*": ""
},
"scripts": {
"build": "npm run ffprefs && surfer build",
"build": "surfer build",
"build:ui": "surfer build --ui",
"start": "cd engine && python3 ./mach run --noprofile",
"import": "surfer import",
"import": "npm run ffprefs && surfer import",
"export": "surfer export",
"init": "npm run download && npm run import && npm run bootstrap",
"download": "surfer download",
@@ -46,7 +46,7 @@
},
"homepage": "https://github.com/zen-browser/desktop#readme",
"dependencies": {
"@zen-browser/surfer": "^1.11.16"
"@zen-browser/surfer": "^1.11.20"
},
"devDependencies": {
"@babel/preset-typescript": "^7.27.0",

View File

@@ -31,3 +31,6 @@
- name: browser.contentblocking.report.show_mobile_app
value: false
locked: true
- name: termsofuse.bypassNotification
value: true

View File

@@ -10,3 +10,6 @@
- name: zen.folders.max-subfolders
value: 5
- name: zen.folders.owned-tabs-in-folder
value: false

View File

@@ -4,9 +4,6 @@
# URL bar and search-related preferences
- name: browser.urlbar.unitConversion.enabled
value: true
- name: browser.urlbar.trending.featureGate
value: false
@@ -19,18 +16,14 @@
- name: browser.urlbar.clipboard.featureGate
value: true
- name: browser.urlbar.suggest.calculator
value: true
- name: browser.urlbar.trimHttps
value: true
- name: browser.urlbar.untrimOnUserInteraction.featureGate
value: true
# Keep in sync with browser/components/topsites/constants.mjs
- name: browser.urlbar.maxRichResults
value: 7
value: 5
# Enable private suggestions
- name: browser.search.suggest.enabled
@@ -42,9 +35,6 @@
- name: browser.search.separatePrivateDefault.ui.enabled
value: true
- name: browser.urlbar.update2.engineAliasRefresh
value: true
- name: browser.urlbar.quicksuggest.enabled
value: false
locked: true
@@ -66,12 +56,6 @@
- name: browser.formfill.enable
value: false
- name: security.insecure_connection_text.enabled
value: true
- name: security.insecure_connection_text.pbmode.enabled
value: true
- name: network.IDN_show_punycode
value: true

View File

@@ -1,3 +1,7 @@
# This Source Code Form is subject to the terms of the Mozilla Public
# 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/.
[tool.autopep8]
max_line_length = 120
recursive = true

View File

@@ -1,3 +1,7 @@
# This Source Code Form is subject to the terms of the Mozilla Public
# 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/.
autopep8==2.3.1
click==8.1.8
mypy-extensions==1.0.0

View File

@@ -3,6 +3,11 @@
# 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/.
IGNORE_FILES=(
"shared.nsh"
"ignorePrefs.json"
)
# Recursively find all .patch files in the current directory and its subdirectories
find src -type f -name "*.patch" | while read -r patch_file; do
# Replace all - with . and remove the .patch extension
@@ -17,8 +22,10 @@ find src -type f -name "*.patch" | while read -r patch_file; do
new_file="${new_file/-ftl/.ftl}"
fi
# Create the new file with the same content as the original
npm run export ${new_file} &
new_file_base=$(basename "$new_file")
if [[ ! " ${IGNORE_FILES[@]} " =~ " ${new_file_base} " ]]; then
npm run export ${new_file}
fi
done
for job in $(jobs -p); do

View File

@@ -4,10 +4,33 @@
import os
import sys
import json
from pathlib import Path
IGNORE_PREFS_FILE_IN = os.path.join(
'src', 'zen', 'tests', 'ignorePrefs.json'
)
IGNORE_PREFS_FILE_OUT = os.path.join(
'engine', 'testing', 'mochitest', 'ignorePrefs.json'
)
def copy_ignore_prefs():
print("Copying ignorePrefs.json from src/zen/tests to engine/testing/mochitest...")
# if there are prefs that dont exist on output file, copy them from input file
all_prefs = []
with open(IGNORE_PREFS_FILE_OUT, 'r') as f:
all_prefs = json.load(f)
with open(IGNORE_PREFS_FILE_IN, 'r') as f_in:
new_prefs = json.load(f_in)
all_prefs.extend(p for p in new_prefs if p not in all_prefs)
with open(IGNORE_PREFS_FILE_OUT, 'w') as f_out:
json.dump(all_prefs, f_out, indent=2)
def main():
copy_ignore_prefs()
project_root = Path(__file__).resolve().parent.parent
package_json = project_root / 'package.json'

View File

@@ -1,8 +1,8 @@
diff --git a/Cargo.lock b/Cargo.lock
index f223ba9af3edd60a42730a606aca2c48bbdddc0c..501cf2de684532203bfb2e96f8add919f3d6e739 100644
index fe4eff865884fb79983f636861897648c36491b5..a9516246ffacfd50b7e4198967bebb71b2c73eca 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -4049,8 +4049,6 @@ dependencies = [
@@ -4067,8 +4067,6 @@ dependencies = [
[[package]]
name = "mime_guess"
version = "2.0.4"

View File

@@ -1,12 +1,11 @@
diff --git a/Cargo.toml b/Cargo.toml
index d402d783e2bbc30b87b2c59cf02e38b74d0484c1..b718ee7ed0519cac20d2828fee0350b44fc3f45a 100644
index c41cc4f4e68e5b30e1a290e07b2c5061db4400cc..7fa5402b32116922766ee1463b441d3fc86c1eff 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -227,6 +227,9 @@ rure = { path = "third_party/rust/rure" }
# Patch `plist` to work with `indexmap` 2.*
plist = { path = "third_party/rust/plist" }
@@ -218,6 +218,8 @@ moz_asserts = { path = "mozglue/static/rust/moz_asserts" }
# Workaround for https://github.com/rust-lang/cargo/issues/11232
rure = { path = "third_party/rust/rure" }
+# Patch mime_guess to add missing mime types
+mime_guess = { path = "third_party/rust/mime_guess" }
+
# Patch `unicode-width` 0.1.* to 0.2.

View File

@@ -1,5 +1,5 @@
diff --git a/browser/actors/WebRTCParent.sys.mjs b/browser/actors/WebRTCParent.sys.mjs
index 4ed2dd19207fc38b9e5cc22ea2947aba94b2f5ad..ffc88d62dc46683399c68cdfd35f1b1efde70902 100644
index 49ba7724801e699c60fac72d67b3b2d11b6c8c93..5a9f209b3e6b625c6346083ab7eace552a81a3b4 100644
--- a/browser/actors/WebRTCParent.sys.mjs
+++ b/browser/actors/WebRTCParent.sys.mjs
@@ -152,6 +152,7 @@ export class WebRTCParent extends JSWindowActorParent {

View File

@@ -1,5 +1,5 @@
diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js
index 8e839c497bba9de04948ad8759679b6a6f61a65f..d79bd14443d94b91309f0add133e35ab87d7fbf3 100644
index 05f6aec3dac31231e15cb316f6e06d66ee87bea9..3bbbe8553777056798ea9ddce1744a8e48848a37 100644
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -29,6 +29,7 @@ ChromeUtils.defineESModuleGetters(this, {
@@ -10,7 +10,7 @@ index 8e839c497bba9de04948ad8759679b6a6f61a65f..d79bd14443d94b91309f0add133e35ab
DevToolsSocketStatus:
"resource://devtools/shared/security/DevToolsSocketStatus.sys.mjs",
DownloadUtils: "resource://gre/modules/DownloadUtils.sys.mjs",
@@ -2282,6 +2283,8 @@ var XULBrowserWindow = {
@@ -2287,6 +2288,8 @@ var XULBrowserWindow = {
AboutReaderParent.updateReaderButton(gBrowser.selectedBrowser);
TranslationsParent.onLocationChange(gBrowser.selectedBrowser);
@@ -19,7 +19,7 @@ index 8e839c497bba9de04948ad8759679b6a6f61a65f..d79bd14443d94b91309f0add133e35ab
PictureInPicture.updateUrlbarToggle(gBrowser.selectedBrowser);
if (!gMultiProcessBrowser) {
@@ -4617,7 +4620,7 @@ function switchToTabHavingURI(
@@ -4630,7 +4633,7 @@ function switchToTabHavingURI(
ignoreQueryString || replaceQueryString,
ignoreFragmentWhenComparing
);
@@ -28,7 +28,7 @@ index 8e839c497bba9de04948ad8759679b6a6f61a65f..d79bd14443d94b91309f0add133e35ab
for (let i = 0; i < browsers.length; i++) {
let browser = browsers[i];
let browserCompare = cleanURL(
@@ -4660,7 +4663,7 @@ function switchToTabHavingURI(
@@ -4673,7 +4676,7 @@ function switchToTabHavingURI(
}
if (!doAdopt) {
@@ -37,7 +37,7 @@ index 8e839c497bba9de04948ad8759679b6a6f61a65f..d79bd14443d94b91309f0add133e35ab
}
return true;
@@ -5476,6 +5479,9 @@ var ConfirmationHint = {
@@ -5489,6 +5492,9 @@ var ConfirmationHint = {
MozXULElement.insertFTLIfNeeded("toolkit/branding/brandings.ftl");
MozXULElement.insertFTLIfNeeded("browser/confirmationHints.ftl");
document.l10n.setAttributes(this._message, messageId, options.l10nArgs);

View File

@@ -1,8 +1,8 @@
diff --git a/browser/base/content/nsContextMenu.sys.mjs b/browser/base/content/nsContextMenu.sys.mjs
index e5ae99edff6cef4964ff15a7d32b0f9c80625425..6b7b6e75c76b25319334113bf2f17817f67e1073 100644
index b12427b3c23447ab26499120f8395c716dae9e82..934f5c1f1b38d035cd7d3a5253a8d3cecad385f8 100644
--- a/browser/base/content/nsContextMenu.sys.mjs
+++ b/browser/base/content/nsContextMenu.sys.mjs
@@ -1050,6 +1050,8 @@ export class nsContextMenu {
@@ -1054,6 +1054,8 @@ export class nsContextMenu {
!this.isSecureAboutPage()
);

View File

@@ -5,7 +5,10 @@
<panel id="zen-folder-tabs-popup" type="arrow" orient="vertical">
<hbox class="tabs-list-header">
<image class="zen-folder-tabs-list-search-icon" src="chrome://global/skin/icons/search-glass.svg"/>
<html:input id="zen-folder-tabs-list-search" data-l10n-id="zen-folders-search-placeholder" type="search"/>
<html:input id="zen-folder-tabs-list-search"
data-l10n-id="zen-folders-search-placeholder"
data-l10n-args="{&quot;folder-name&quot;:&quot;&quot;}"
type="search" />
</hbox>
<scrollbox class="zen-folder-tabs-list-scrollbox" flex="1">
<vbox id="zen-folder-tabs-list"></vbox>

View File

@@ -35,7 +35,9 @@
<menupopup id="zenFolderActions">
<menuitem id="context_zenFolderRename" data-l10n-id="zen-folders-panel-rename-folder"/>
<menuitem id="context_zenFolderChangeIcon" data-l10n-id="zen-folders-panel-change-icon-folder"/>
<menuitem id="context_zenFolderExpand" data-l10n-id="zen-folders-panel-expand-folder"/>
<menuseparator />
<menuitem id="context_zenFolderNewSubfolder" data-l10n-id="zen-folders-new-subfolder"/>
<menuitem id="context_zenFolderExpand" data-l10n-id="zen-folders-panel-unpack-folder"/>
<menuseparator />
<menu id="context_zenChangeFolderSpace"
data-l10n-id="zen-folders-panel-change-folder-space">
@@ -45,4 +47,3 @@
<menuseparator />
<menuitem id="context_zenFolderDelete" data-l10n-id="zen-folders-panel-delete-folder"/>
</menupopup>

View File

@@ -1,8 +1,8 @@
diff --git a/browser/base/jar.mn b/browser/base/jar.mn
index ad10fe2c55c422090ebfc3989ca6858c1d958a10..0ff76c3bd768b2b337683a35f8dbd197f421905c 100644
index f5a94b47c95304399bce8159dd9fb5d2911ea60a..f63cb861e8807294d597a341ddb408f236ee2df2 100644
--- a/browser/base/jar.mn
+++ b/browser/base/jar.mn
@@ -105,3 +105,5 @@ browser.jar:
@@ -106,3 +106,5 @@ browser.jar:
# L10n resources and overrides.
% override chrome://global/locale/appstrings.properties chrome://browser/locale/appstrings.properties

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/BrowserContentHandler.sys.mjs b/browser/components/BrowserContentHandler.sys.mjs
index 415d1d52507e0710a3c1daa5864618527b162100..f420fcb8db2ed6f33eb3b38ec9bd213809aa74c3 100644
index 81f72563b93b9ce77191ad4cf200489222e0122e..40bc484301b3d66542c4171921f527c2ac6ed047 100644
--- a/browser/components/BrowserContentHandler.sys.mjs
+++ b/browser/components/BrowserContentHandler.sys.mjs
@@ -1276,6 +1276,7 @@ function maybeRecordToHandleTelemetry(uri, isLaunch) {

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/BrowserGlue.sys.mjs b/browser/components/BrowserGlue.sys.mjs
index 05a5063427e4038b3d57f6f5bae31b60428c7880..a01e25b52ffc3a68dddb513cb085b7df726d15b0 100644
index f3253d2565cf735bdf33792697f91db9ca9ba5e9..5a6a62e3de3d510a3ae514773e6f8886ef8f9a09 100644
--- a/browser/components/BrowserGlue.sys.mjs
+++ b/browser/components/BrowserGlue.sys.mjs
@@ -8,6 +8,7 @@ import { XPCOMUtils } from "resource://gre/modules/XPCOMUtils.sys.mjs";
@@ -10,7 +10,7 @@ index 05a5063427e4038b3d57f6f5bae31b60428c7880..a01e25b52ffc3a68dddb513cb085b7df
AboutHomeStartupCache: "resource:///modules/AboutHomeStartupCache.sys.mjs",
AWToolbarButton: "resource:///modules/aboutwelcome/AWToolbarUtils.sys.mjs",
ASRouter: "resource:///modules/asrouter/ASRouter.sys.mjs",
@@ -1496,7 +1497,7 @@ BrowserGlue.prototype = {
@@ -1490,7 +1491,7 @@ BrowserGlue.prototype = {
windowcount++;
let tabbrowser = win.gBrowser;
if (tabbrowser) {
@@ -19,7 +19,7 @@ index 05a5063427e4038b3d57f6f5bae31b60428c7880..a01e25b52ffc3a68dddb513cb085b7df
}
}
@@ -1659,6 +1660,8 @@ BrowserGlue.prototype = {
@@ -1653,6 +1654,8 @@ BrowserGlue.prototype = {
} else if (profileDataVersion < APP_DATA_VERSION) {
lazy.ProfileDataUpgrader.upgrade(profileDataVersion, APP_DATA_VERSION);
}

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/search/SearchOneOffs.sys.mjs b/browser/components/search/SearchOneOffs.sys.mjs
index 23808139bc885c5e6457b3e4be0b1727c0f3bbf9..472fdbe863db5725d01af903b69a479b9edc3244 100644
index 3930862215a667e223f1bf6959dcf1c08421b37d..68d767b6d8490a374973eb86a032a6386879fd93 100644
--- a/browser/components/search/SearchOneOffs.sys.mjs
+++ b/browser/components/search/SearchOneOffs.sys.mjs
@@ -455,7 +455,7 @@ export class SearchOneOffs {
@@ -466,7 +466,7 @@ export class SearchOneOffs {
// For the search-bar, always show the one-off buttons where there is an
// option to add an engine.
let addEngineNeeded = isSearchBar && addEngines.length;

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/search/SearchUIUtils.sys.mjs b/browser/components/search/SearchUIUtils.sys.mjs
index 3666beb83bc50e80fa8848f18aaeb6545d5ff8a7..0566fc87e90531456e78bc6c33a0696f0aff6cb3 100644
index dfd18da85323751c4be7963cb5ab2357de488d83..e228bf594a0a736396cabd247bac4033091afccc 100644
--- a/browser/components/search/SearchUIUtils.sys.mjs
+++ b/browser/components/search/SearchUIUtils.sys.mjs
@@ -412,7 +412,7 @@ export var SearchUIUtils = {

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/sessionstore/SessionStore.sys.mjs b/browser/components/sessionstore/SessionStore.sys.mjs
index be029379c101a0105d4837136e064e6007b67c3e..cfa861920b15c2f535f1d9351425e29ee03bbdda 100644
index e954a8df26ed84731b08b151f90a758206946582..5b8013c71c6b50579668d16a5f7d5a82b5d43e4d 100644
--- a/browser/components/sessionstore/SessionStore.sys.mjs
+++ b/browser/components/sessionstore/SessionStore.sys.mjs
@@ -2120,7 +2120,6 @@ var SessionStoreInternal = {
@@ -2135,7 +2135,6 @@ var SessionStoreInternal = {
if (closedWindowState) {
let newWindowState;
if (
@@ -10,7 +10,7 @@ index be029379c101a0105d4837136e064e6007b67c3e..cfa861920b15c2f535f1d9351425e29e
!lazy.SessionStartup.willRestore()
) {
// We want to split the window up into pinned tabs and unpinned tabs.
@@ -2353,11 +2352,9 @@ var SessionStoreInternal = {
@@ -2368,11 +2367,9 @@ var SessionStoreInternal = {
tabbrowser.selectedTab.label;
}
@@ -22,7 +22,7 @@ index be029379c101a0105d4837136e064e6007b67c3e..cfa861920b15c2f535f1d9351425e29e
// Store the window's close date to figure out when each individual tab
// was closed. This timestamp should allow re-arranging data based on how
@@ -3303,7 +3300,7 @@ var SessionStoreInternal = {
@@ -3357,7 +3354,7 @@ var SessionStoreInternal = {
if (!isPrivateWindow && tabState.isPrivate) {
return;
}
@@ -31,7 +31,7 @@ index be029379c101a0105d4837136e064e6007b67c3e..cfa861920b15c2f535f1d9351425e29e
return;
}
@@ -4012,6 +4009,11 @@ var SessionStoreInternal = {
@@ -4069,6 +4066,11 @@ var SessionStoreInternal = {
Math.min(tabState.index, tabState.entries.length)
);
tabState.pinned = false;
@@ -43,7 +43,7 @@ index be029379c101a0105d4837136e064e6007b67c3e..cfa861920b15c2f535f1d9351425e29e
if (inBackground === false) {
aWindow.gBrowser.selectedTab = newTab;
@@ -4448,6 +4450,7 @@ var SessionStoreInternal = {
@@ -4505,6 +4507,7 @@ var SessionStoreInternal = {
// Append the tab if we're opening into a different window,
tabIndex: aSource == aTargetWindow ? pos : Infinity,
pinned: state.pinned,
@@ -51,7 +51,7 @@ index be029379c101a0105d4837136e064e6007b67c3e..cfa861920b15c2f535f1d9351425e29e
userContextId: state.userContextId,
skipLoad: true,
preferredRemoteType,
@@ -5303,7 +5306,7 @@ var SessionStoreInternal = {
@@ -5360,7 +5363,7 @@ var SessionStoreInternal = {
for (let i = tabbrowser.pinnedTabCount; i < tabbrowser.tabs.length; i++) {
let tab = tabbrowser.tabs[i];
@@ -60,7 +60,7 @@ index be029379c101a0105d4837136e064e6007b67c3e..cfa861920b15c2f535f1d9351425e29e
removableTabs.push(tab);
}
}
@@ -5363,7 +5366,7 @@ var SessionStoreInternal = {
@@ -5420,7 +5423,7 @@ var SessionStoreInternal = {
}
let workspaceID = aWindow.getWorkspaceID();
@@ -69,7 +69,7 @@ index be029379c101a0105d4837136e064e6007b67c3e..cfa861920b15c2f535f1d9351425e29e
winData.workspaceID = workspaceID;
}
},
@@ -5554,11 +5557,12 @@ var SessionStoreInternal = {
@@ -5611,11 +5614,12 @@ var SessionStoreInternal = {
}
let tabbrowser = aWindow.gBrowser;
@@ -83,7 +83,7 @@ index be029379c101a0105d4837136e064e6007b67c3e..cfa861920b15c2f535f1d9351425e29e
// update the internal state data for this window
for (let tab of tabs) {
if (tab == aWindow.FirefoxViewHandler.tab) {
@@ -5569,6 +5573,7 @@ var SessionStoreInternal = {
@@ -5626,6 +5630,7 @@ var SessionStoreInternal = {
tabsData.push(tabData);
}
@@ -91,7 +91,7 @@ index be029379c101a0105d4837136e064e6007b67c3e..cfa861920b15c2f535f1d9351425e29e
// update tab group state for this window
winData.groups = [];
for (let tabGroup of aWindow.gBrowser.tabGroups) {
@@ -5581,7 +5586,7 @@ var SessionStoreInternal = {
@@ -5638,7 +5643,7 @@ var SessionStoreInternal = {
// a window is closed, point to the first item in the tab strip instead (it will never be the Firefox View tab,
// since it's only inserted into the tab strip after it's selected).
if (aWindow.FirefoxViewHandler.tab?.selected) {
@@ -100,7 +100,7 @@ index be029379c101a0105d4837136e064e6007b67c3e..cfa861920b15c2f535f1d9351425e29e
winData.title = tabbrowser.tabs[0].label;
}
winData.selected = selectedIndex;
@@ -5693,8 +5698,8 @@ var SessionStoreInternal = {
@@ -5750,8 +5755,8 @@ var SessionStoreInternal = {
// selectTab represents.
let selectTab = 0;
if (overwriteTabs) {
@@ -111,7 +111,7 @@ index be029379c101a0105d4837136e064e6007b67c3e..cfa861920b15c2f535f1d9351425e29e
selectTab = Math.min(selectTab, winData.tabs.length);
}
@@ -5737,6 +5742,8 @@ var SessionStoreInternal = {
@@ -5794,6 +5799,8 @@ var SessionStoreInternal = {
winData.tabs,
winData.groups ?? []
);
@@ -120,7 +120,7 @@ index be029379c101a0105d4837136e064e6007b67c3e..cfa861920b15c2f535f1d9351425e29e
this._log.debug(
`restoreWindow, createTabsForSessionRestore returned ${tabs.length} tabs`
);
@@ -6286,6 +6293,22 @@ var SessionStoreInternal = {
@@ -6351,6 +6358,22 @@ var SessionStoreInternal = {
// Most of tabData has been restored, now continue with restoring
// attributes that may trigger external events.

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/tabbrowser/content/tab.js b/browser/components/tabbrowser/content/tab.js
index e5509953509c4da8756e36a0792f76814e24ba0c..32e21e1295aa508a2b8dc6b8a0ea4d678dd81594 100644
index f261f0f2c7945cbdb41e5d1b6067a8db38bef117..f126879aa9e843c74992aa751795aef3888a6a64 100644
--- a/browser/components/tabbrowser/content/tab.js
+++ b/browser/components/tabbrowser/content/tab.js
@@ -21,6 +21,7 @@
@@ -42,18 +42,22 @@ index e5509953509c4da8756e36a0792f76814e24ba0c..32e21e1295aa508a2b8dc6b8a0ea4d67
return;
}
@@ -224,7 +227,19 @@
@@ -224,9 +227,21 @@
}
get visible() {
- return this.isOpen && !this.hidden && !this.group?.collapsed;
- return (
- this.isOpen && !this.hidden && (!this.group?.collapsed || this.selected)
- );
+ if (!this.isOpen || this.hidden || this.hasAttribute("zen-empty-tab")) {
+ return false;
+ }
+
+ // Selected tabs are always visible
+ if ((this.selected || this.multiselected || this.hasAttribute("folder-active")) && !this.hasAttribute("was-folder-active")) return true;
+ // Recursively check all parent groups
+ let currentParent = this.group;
+ while (currentParent && !this.hasAttribute("folder-active")) {
+ while (currentParent) {
+ if (currentParent.collapsed) {
+ return false;
+ }
@@ -63,7 +67,7 @@ index e5509953509c4da8756e36a0792f76814e24ba0c..32e21e1295aa508a2b8dc6b8a0ea4d67
}
get hidden() {
@@ -295,7 +310,7 @@
@@ -297,7 +312,7 @@
return false;
}
@@ -72,7 +76,7 @@ index e5509953509c4da8756e36a0792f76814e24ba0c..32e21e1295aa508a2b8dc6b8a0ea4d67
}
get lastAccessed() {
@@ -372,8 +387,11 @@
@@ -374,8 +389,11 @@
}
get group() {
@@ -86,7 +90,7 @@ index e5509953509c4da8756e36a0792f76814e24ba0c..32e21e1295aa508a2b8dc6b8a0ea4d67
}
return null;
}
@@ -467,6 +485,8 @@
@@ -469,6 +487,8 @@
this.style.MozUserFocus = "ignore";
} else if (
event.target.classList.contains("tab-close-button") ||
@@ -95,7 +99,7 @@ index e5509953509c4da8756e36a0792f76814e24ba0c..32e21e1295aa508a2b8dc6b8a0ea4d67
event.target.classList.contains("tab-icon-overlay") ||
event.target.classList.contains("tab-audio-button")
) {
@@ -521,6 +541,10 @@
@@ -523,6 +543,10 @@
this.style.MozUserFocus = "";
}
@@ -106,7 +110,7 @@ index e5509953509c4da8756e36a0792f76814e24ba0c..32e21e1295aa508a2b8dc6b8a0ea4d67
on_click(event) {
if (event.button != 0) {
return;
@@ -569,6 +593,7 @@
@@ -571,6 +595,7 @@
)
);
} else {
@@ -114,7 +118,7 @@ index e5509953509c4da8756e36a0792f76814e24ba0c..32e21e1295aa508a2b8dc6b8a0ea4d67
gBrowser.removeTab(this, {
animate: true,
triggeringEvent: event,
@@ -581,6 +606,14 @@
@@ -583,6 +608,14 @@
// (see tabbrowser-tabs 'click' handler).
gBrowser.tabContainer._blockDblClick = true;
}
@@ -129,7 +133,7 @@ index e5509953509c4da8756e36a0792f76814e24ba0c..32e21e1295aa508a2b8dc6b8a0ea4d67
}
on_dblclick(event) {
@@ -604,6 +637,8 @@
@@ -606,6 +639,8 @@
animate: true,
triggeringEvent: event,
});

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/tabbrowser/content/tabbrowser.js b/browser/components/tabbrowser/content/tabbrowser.js
index 96fd8acdc09cc4c9649d1ed7503c2a0bde536613..b46335091e4d4ea71bf5027ea3a472cc839781b8 100644
index d80a66a01002e78a9c65545d08fe786328ddf124..bb57b1eeb033f602d5014ab23e2cc1389bb9e615 100644
--- a/browser/components/tabbrowser/content/tabbrowser.js
+++ b/browser/components/tabbrowser/content/tabbrowser.js
@@ -422,15 +422,60 @@
@@ -249,17 +249,14 @@ index 96fd8acdc09cc4c9649d1ed7503c2a0bde536613..b46335091e4d4ea71bf5027ea3a472cc
if (insertTab) {
// Insert the tab into the tab container in the correct position.
this.#insertTabAtIndex(t, {
@@ -2790,8 +2874,9 @@
@@ -2790,6 +2874,7 @@
ownerTab,
openerTab,
pinned,
+ essential,
bulkOrderedOpen,
- tabGroup: tabGroup ?? openerTab?.group,
+ tabGroup: tabGroup,
tabGroup: tabGroup ?? openerTab?.group,
});
}
@@ -2808,6 +2893,7 @@
openWindowInfo,
skipLoad,
@@ -293,7 +290,7 @@ index 96fd8acdc09cc4c9649d1ed7503c2a0bde536613..b46335091e4d4ea71bf5027ea3a472cc
}
if (!color) {
@@ -3040,9 +3132,13 @@
@@ -3040,9 +3132,14 @@
label,
isAdoptingGroup
);
@@ -303,13 +300,14 @@ index 96fd8acdc09cc4c9649d1ed7503c2a0bde536613..b46335091e4d4ea71bf5027ea3a472cc
+ }
+ group.essential = tabs.some(tab => tab.hasAttribute("essential"));
+ group.pinned = group.essential || tabs.some(tab => tab.pinned);
+ if (forSplitView && !insertBefore?.group?.isZenFolder) insertBefore = insertBefore?.group ?? insertBefore;
+ insertBefore.before(
group,
- insertBefore?.group ?? insertBefore
);
group.addTabs(tabs);
@@ -3163,7 +3259,7 @@
@@ -3163,7 +3260,7 @@
}
this.#handleTabMove(tab, () =>
@@ -318,7 +316,7 @@ index 96fd8acdc09cc4c9649d1ed7503c2a0bde536613..b46335091e4d4ea71bf5027ea3a472cc
);
}
@@ -3357,6 +3453,7 @@
@@ -3365,6 +3462,7 @@
openWindowInfo,
skipLoad,
triggeringRemoteType,
@@ -326,7 +324,7 @@ index 96fd8acdc09cc4c9649d1ed7503c2a0bde536613..b46335091e4d4ea71bf5027ea3a472cc
}
) {
// If we don't have a preferred remote type (or it is `NOT_REMOTE`), and
@@ -3426,6 +3523,7 @@
@@ -3434,6 +3532,7 @@
openWindowInfo,
name,
skipLoad,
@@ -334,16 +332,16 @@ index 96fd8acdc09cc4c9649d1ed7503c2a0bde536613..b46335091e4d4ea71bf5027ea3a472cc
});
}
@@ -3613,7 +3711,7 @@
@@ -3621,7 +3720,7 @@
// Add a new tab if needed.
if (!tab) {
let createLazyBrowser =
- restoreTabsLazily && !select && !tabData.pinned;
+ restoreTabsLazily && !tabData.pinned;
+ restoreTabsLazily;
let url = "about:blank";
if (tabData.entries?.length) {
@@ -3650,8 +3748,10 @@
@@ -3658,8 +3757,10 @@
insertTab: false,
skipLoad: true,
preferredRemoteType,
@@ -355,7 +353,7 @@ index 96fd8acdc09cc4c9649d1ed7503c2a0bde536613..b46335091e4d4ea71bf5027ea3a472cc
if (select) {
tabToSelect = tab;
}
@@ -3663,7 +3763,8 @@
@@ -3671,7 +3772,8 @@
this.pinTab(tab);
// Then ensure all the tab open/pinning information is sent.
this._fireTabOpen(tab, {});
@@ -365,7 +363,7 @@ index 96fd8acdc09cc4c9649d1ed7503c2a0bde536613..b46335091e4d4ea71bf5027ea3a472cc
let { groupId } = tabData;
const tabGroup = tabGroupWorkingData.get(groupId);
// if a tab refers to a tab group we don't know, skip any group
@@ -3677,7 +3778,10 @@
@@ -3685,7 +3787,10 @@
tabGroup.stateData.id,
tabGroup.stateData.color,
tabGroup.stateData.collapsed,
@@ -377,7 +375,7 @@ index 96fd8acdc09cc4c9649d1ed7503c2a0bde536613..b46335091e4d4ea71bf5027ea3a472cc
);
tabsFragment.appendChild(tabGroup.node);
}
@@ -3722,9 +3826,23 @@
@@ -3730,9 +3835,23 @@
// to remove the old selected tab.
if (tabToSelect) {
let leftoverTab = this.selectedTab;
@@ -401,7 +399,7 @@ index 96fd8acdc09cc4c9649d1ed7503c2a0bde536613..b46335091e4d4ea71bf5027ea3a472cc
if (tabs.length > 1 || !tabs[0].selected) {
this._updateTabsAfterInsert();
@@ -3919,7 +4037,7 @@
@@ -3927,7 +4046,7 @@
// Ensure we have an index if one was not provided.
if (typeof elementIndex != "number" && typeof tabIndex != "number") {
// Move the new tab after another tab if needed, to the end otherwise.
@@ -410,7 +408,7 @@ index 96fd8acdc09cc4c9649d1ed7503c2a0bde536613..b46335091e4d4ea71bf5027ea3a472cc
if (
!bulkOrderedOpen &&
((openerTab &&
@@ -3931,7 +4049,7 @@
@@ -3939,7 +4058,7 @@
let lastRelatedTab =
openerTab && this._lastRelatedTabMap.get(openerTab);
let previousTab = lastRelatedTab || openerTab || this.selectedTab;
@@ -419,7 +417,7 @@ index 96fd8acdc09cc4c9649d1ed7503c2a0bde536613..b46335091e4d4ea71bf5027ea3a472cc
tabGroup = previousTab.group;
}
if (
@@ -3942,7 +4060,7 @@
@@ -3950,7 +4069,7 @@
) {
elementIndex = Infinity;
} else if (previousTab.visible) {
@@ -428,7 +426,7 @@ index 96fd8acdc09cc4c9649d1ed7503c2a0bde536613..b46335091e4d4ea71bf5027ea3a472cc
} else if (previousTab == FirefoxViewHandler.tab) {
elementIndex = 0;
}
@@ -3970,14 +4088,14 @@
@@ -3978,14 +4097,14 @@
}
// Ensure index is within bounds.
if (tab.pinned) {
@@ -445,9 +443,9 @@ index 96fd8acdc09cc4c9649d1ed7503c2a0bde536613..b46335091e4d4ea71bf5027ea3a472cc
- let itemAfter = allItems.at(index);
+ let itemAfter = gZenGlanceManager.getTabOrGlanceParent(allItems.at(index));
// Prevent a flash of unstyled content by setting up the tab content
// and inherited attributes before appending it (see Bug 1592054):
@@ -3985,7 +4103,7 @@
if (pinned && !itemAfter?.pinned) {
itemAfter = null;
@@ -3996,7 +4115,7 @@
this.tabContainer._invalidateCachedTabs();
@@ -456,7 +454,7 @@ index 96fd8acdc09cc4c9649d1ed7503c2a0bde536613..b46335091e4d4ea71bf5027ea3a472cc
if (this.isTab(itemAfter) && itemAfter.group == tabGroup) {
// Place at the front of, or between tabs in, the same tab group
this.tabContainer.insertBefore(tab, itemAfter);
@@ -4018,6 +4136,7 @@
@@ -4032,6 +4151,7 @@
if (pinned) {
this._updateTabBarForPinnedTabs();
}
@@ -464,7 +462,7 @@ index 96fd8acdc09cc4c9649d1ed7503c2a0bde536613..b46335091e4d4ea71bf5027ea3a472cc
TabBarVisibility.update();
}
@@ -4307,6 +4426,9 @@
@@ -4321,6 +4441,9 @@
return;
}
@@ -474,7 +472,7 @@ index 96fd8acdc09cc4c9649d1ed7503c2a0bde536613..b46335091e4d4ea71bf5027ea3a472cc
this.removeTabs(selectedTabs, { isUserTriggered, telemetrySource });
}
@@ -4568,6 +4690,7 @@
@@ -4582,6 +4705,7 @@
telemetrySource,
} = {}
) {
@@ -482,7 +480,7 @@ index 96fd8acdc09cc4c9649d1ed7503c2a0bde536613..b46335091e4d4ea71bf5027ea3a472cc
// When 'closeWindowWithLastTab' pref is enabled, closing all tabs
// can be considered equivalent to closing the window.
if (
@@ -4657,6 +4780,7 @@
@@ -4671,6 +4795,7 @@
if (lastToClose) {
this.removeTab(lastToClose, aParams);
}
@@ -490,7 +488,7 @@ index 96fd8acdc09cc4c9649d1ed7503c2a0bde536613..b46335091e4d4ea71bf5027ea3a472cc
} catch (e) {
console.error(e);
}
@@ -4695,6 +4819,12 @@
@@ -4709,6 +4834,12 @@
aTab._closeTimeNoAnimTimerId = Glean.browserTabclose.timeNoAnim.start();
}
@@ -503,7 +501,7 @@ index 96fd8acdc09cc4c9649d1ed7503c2a0bde536613..b46335091e4d4ea71bf5027ea3a472cc
// Handle requests for synchronously removing an already
// asynchronously closing tab.
if (!animate && aTab.closing) {
@@ -4709,6 +4839,9 @@
@@ -4723,6 +4854,9 @@
// state).
let tabWidth = window.windowUtils.getBoundsWithoutFlushing(aTab).width;
let isLastTab = this.#isLastTabInWindow(aTab);
@@ -513,7 +511,7 @@ index 96fd8acdc09cc4c9649d1ed7503c2a0bde536613..b46335091e4d4ea71bf5027ea3a472cc
if (
!this._beginRemoveTab(aTab, {
closeWindowFastpath: true,
@@ -4891,7 +5024,7 @@
@@ -4905,7 +5039,7 @@
closeWindowWithLastTab != null
? closeWindowWithLastTab
: !window.toolbar.visible ||
@@ -522,7 +520,7 @@ index 96fd8acdc09cc4c9649d1ed7503c2a0bde536613..b46335091e4d4ea71bf5027ea3a472cc
if (closeWindow) {
// We've already called beforeunload on all the relevant tabs if we get here,
@@ -4915,6 +5048,7 @@
@@ -4929,6 +5063,7 @@
newTab = true;
}
@@ -530,18 +528,22 @@ index 96fd8acdc09cc4c9649d1ed7503c2a0bde536613..b46335091e4d4ea71bf5027ea3a472cc
aTab._endRemoveArgs = [closeWindow, newTab];
// swapBrowsersAndCloseOther will take care of closing the window without animation.
@@ -4955,9 +5089,7 @@
@@ -4969,13 +5104,7 @@
aTab._mouseleave();
if (newTab) {
- this.addTrustedTab(BROWSER_NEW_TAB_URL, {
- skipAnimation: true,
- // In the event that insertAfterCurrent is set and the current tab is
- // inside a group that is being closed we want to avoid creating the
- // new tab inside that group.
- tabIndex: 0,
- });
+ gZenWorkspaces.selectEmptyTab(BROWSER_NEW_TAB_URL);
} else {
TabBarVisibility.update();
}
@@ -5090,6 +5222,7 @@
@@ -5108,6 +5237,7 @@
this.tabs[i]._tPos = i;
}
@@ -549,7 +551,7 @@ index 96fd8acdc09cc4c9649d1ed7503c2a0bde536613..b46335091e4d4ea71bf5027ea3a472cc
if (!this._windowIsClosing) {
// update tab close buttons state
this.tabContainer._updateCloseButtons();
@@ -5302,6 +5435,7 @@
@@ -5320,6 +5450,7 @@
}
let excludeTabs = new Set(aExcludeTabs);
@@ -557,7 +559,7 @@ index 96fd8acdc09cc4c9649d1ed7503c2a0bde536613..b46335091e4d4ea71bf5027ea3a472cc
// If this tab has a successor, it should be selectable, since
// hiding or closing a tab removes that tab as a successor.
@@ -5314,13 +5448,13 @@
@@ -5332,13 +5463,13 @@
!excludeTabs.has(aTab.owner) &&
Services.prefs.getBoolPref("browser.tabs.selectOwnerOnClose")
) {
@@ -573,7 +575,7 @@ index 96fd8acdc09cc4c9649d1ed7503c2a0bde536613..b46335091e4d4ea71bf5027ea3a472cc
);
let tab = this.tabContainer.findNextTab(aTab, {
@@ -5336,7 +5470,7 @@
@@ -5354,7 +5485,7 @@
}
if (tab) {
@@ -582,7 +584,7 @@ index 96fd8acdc09cc4c9649d1ed7503c2a0bde536613..b46335091e4d4ea71bf5027ea3a472cc
}
// If no qualifying visible tab was found, see if there is a tab in
@@ -5357,7 +5491,7 @@
@@ -5375,7 +5506,7 @@
});
}
@@ -591,7 +593,7 @@ index 96fd8acdc09cc4c9649d1ed7503c2a0bde536613..b46335091e4d4ea71bf5027ea3a472cc
}
_blurTab(aTab) {
@@ -5759,10 +5893,10 @@
@@ -5777,10 +5908,10 @@
SessionStore.deleteCustomTabValue(aTab, "hiddenBy");
}
@@ -604,7 +606,15 @@ index 96fd8acdc09cc4c9649d1ed7503c2a0bde536613..b46335091e4d4ea71bf5027ea3a472cc
aTab.selected ||
aTab.closing ||
// Tabs that are sharing the screen, microphone or camera cannot be hidden.
@@ -5952,7 +6086,7 @@
@@ -5839,6 +5970,7 @@
* @param {MozTabbrowserTab|MozTabbrowserTabGroup|MozTabbrowserTabGroup.labelElement} aTab
*/
replaceTabWithWindow(aTab, aOptions) {
+ if (!this.isTab(aTab)) return; // TODO: Handle tab groups
if (this.tabs.length == 1) {
return null;
}
@@ -5972,7 +6104,7 @@
* `true` if element is a `<tab-group>`
*/
isTabGroup(element) {
@@ -613,7 +623,7 @@ index 96fd8acdc09cc4c9649d1ed7503c2a0bde536613..b46335091e4d4ea71bf5027ea3a472cc
}
/**
@@ -6029,7 +6163,7 @@
@@ -6049,7 +6181,7 @@
// Don't allow mixing pinned and unpinned tabs.
if (this.isTab(element) && element.pinned) {
@@ -622,7 +632,7 @@ index 96fd8acdc09cc4c9649d1ed7503c2a0bde536613..b46335091e4d4ea71bf5027ea3a472cc
} else {
tabIndex = Math.max(tabIndex, this.pinnedTabCount);
}
@@ -6055,10 +6189,16 @@
@@ -6075,10 +6207,16 @@
this.#handleTabMove(
element,
() => {
@@ -641,7 +651,7 @@ index 96fd8acdc09cc4c9649d1ed7503c2a0bde536613..b46335091e4d4ea71bf5027ea3a472cc
if (neighbor && this.isTab(element) && tabIndex > element._tPos) {
neighbor.after(element);
} else {
@@ -6116,22 +6256,26 @@
@@ -6136,22 +6274,23 @@
#moveTabNextTo(element, targetElement, moveBefore = false, metricsContext) {
if (this.isTabGroupLabel(targetElement)) {
targetElement = targetElement.group;
@@ -662,9 +672,6 @@ index 96fd8acdc09cc4c9649d1ed7503c2a0bde536613..b46335091e4d4ea71bf5027ea3a472cc
// Don't allow mixing pinned and unpinned tabs.
+ targetElement = gZenGlanceManager.getTabOrGlanceParent(targetElement);
+ if (targetElement?.group?.hasAttribute("split-view-group")) {
+ targetElement = targetElement.group;
+ }
+ if (element.hasAttribute('zen-essential') && !targetElement?.hasAttribute('zen-essential')) {
+ targetElement = this.tabsWithoutGlance[this._numZenEssentials - 1];
+ } else
@@ -674,7 +681,7 @@ index 96fd8acdc09cc4c9649d1ed7503c2a0bde536613..b46335091e4d4ea71bf5027ea3a472cc
moveBefore = false;
} else if (!element.pinned && targetElement && targetElement.pinned) {
// If the caller asks to move an unpinned element next to a pinned
@@ -6145,14 +6289,18 @@
@@ -6165,14 +6304,34 @@
// move the tab group right before the first unpinned tab.
// 4. Moving a tab group and the first unpinned tab is grouped:
// move the tab group right before the first unpinned tab's tab group.
@@ -687,6 +694,22 @@ index 96fd8acdc09cc4c9649d1ed7503c2a0bde536613..b46335091e4d4ea71bf5027ea3a472cc
}
+ if (!gZenFolders.canDropElement(element, targetElement)) {
+ element = element.group;
+ }
+ // It is necessary to place the check below to avoid inserting an element
+ // inside when the split group is the last element.
+ if (targetElement?.group?.hasAttribute("split-view-group")) {
+ targetElement = targetElement.group;
+ }
+ if (targetElement?.hasAttribute("zen-empty-tab")) {
+ // When the folder is the last element in the pinned section,
+ // targetElement is a tab with the zen-empty-tab attribute.
+ // If the movement is from top to bottom, it must be redefined as a folder.
+ if (!moveBefore) {
+ targetElement = targetElement.group;
+ } else {
+ // Always insert an element after zen-empty-tab to avoid it moving from the first position
+ moveBefore = false;
+ }
+ }
let getContainer = () =>
@@ -694,7 +717,7 @@ index 96fd8acdc09cc4c9649d1ed7503c2a0bde536613..b46335091e4d4ea71bf5027ea3a472cc
element.pinned
? this.tabContainer.pinnedTabsContainer
: this.tabContainer;
@@ -6161,7 +6309,7 @@
@@ -6181,7 +6340,7 @@
element,
() => {
if (moveBefore) {
@@ -703,8 +726,12 @@ index 96fd8acdc09cc4c9649d1ed7503c2a0bde536613..b46335091e4d4ea71bf5027ea3a472cc
} else if (targetElement) {
targetElement.after(element);
} else {
@@ -6210,7 +6358,7 @@
if (!this.isTab(aTab)) {
@@ -6227,10 +6386,10 @@
* @param {TabMetricsContext} [metricsContext]
*/
moveTabToGroup(aTab, aGroup, metricsContext) {
- if (!this.isTab(aTab)) {
+ if (!this.isTab(aTab) && !aTab.hasAttribute('split-view-group')) {
throw new Error("Can only move a tab into a tab group");
}
- if (aTab.pinned) {
@@ -712,7 +739,7 @@ index 96fd8acdc09cc4c9649d1ed7503c2a0bde536613..b46335091e4d4ea71bf5027ea3a472cc
return;
}
if (aTab.group && aTab.group.id === aGroup.id) {
@@ -6304,6 +6452,10 @@
@@ -6324,6 +6483,10 @@
moveActionCallback();
@@ -723,7 +750,7 @@ index 96fd8acdc09cc4c9649d1ed7503c2a0bde536613..b46335091e4d4ea71bf5027ea3a472cc
// Clear tabs cache after moving nodes because the order of tabs may have
// changed.
this.tabContainer._invalidateCachedTabs();
@@ -7198,7 +7350,7 @@
@@ -7221,7 +7384,7 @@
// preventDefault(). It will still raise the window if appropriate.
break;
}
@@ -732,7 +759,7 @@ index 96fd8acdc09cc4c9649d1ed7503c2a0bde536613..b46335091e4d4ea71bf5027ea3a472cc
window.focus();
aEvent.preventDefault();
break;
@@ -8143,6 +8295,7 @@
@@ -8166,6 +8329,7 @@
aWebProgress.isTopLevel
) {
this.mTab.setAttribute("busy", "true");
@@ -740,16 +767,16 @@ index 96fd8acdc09cc4c9649d1ed7503c2a0bde536613..b46335091e4d4ea71bf5027ea3a472cc
gBrowser._tabAttrModified(this.mTab, ["busy"]);
this.mTab._notselectedsinceload = !this.mTab.selected;
}
@@ -9108,7 +9261,7 @@ var TabContextMenu = {
@@ -9157,7 +9321,7 @@ var TabContextMenu = {
);
contextUnpinSelectedTabs.hidden =
!this.contextTab.pinned || !this.multiselected;
-
+ gZenPinnedTabManager.updatePinnedTabContextMenu(this.contextTab);
// Move Tab items
let contextMoveTabOptions = document.getElementById(
"context_moveTabOptions"
@@ -9384,6 +9537,7 @@ var TabContextMenu = {
// Build Ask Chat items
TabContextMenu.GenAI.buildTabMenu(
document.getElementById("context_askChat"),
@@ -9476,6 +9640,7 @@ var TabContextMenu = {
)
);
} else {

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/tabbrowser/content/tabgroup.js b/browser/components/tabbrowser/content/tabgroup.js
index 2ed2fa02b16013e40a32391b3dba0a4301d65262..aea9fb03dbc28a524ec5a26e76510b1fda11a48c 100644
index caea196b22b4689f55780a528661d87b52f4e728..9c1e141b6b2121d32f30c82862b597146f664b34 100644
--- a/browser/components/tabbrowser/content/tabgroup.js
+++ b/browser/components/tabbrowser/content/tabgroup.js
@@ -13,10 +13,12 @@
@@ -15,10 +15,10 @@ index 2ed2fa02b16013e40a32391b3dba0a4301d65262..aea9fb03dbc28a524ec5a26e76510b1f
+ <html:div class="tab-group-container">
+ <html:div class="zen-tab-group-start"/>
+ </html:div>
`;
/** @type {string} */
@@ -45,16 +47,22 @@
<vbox class="tab-group-overflow-count-container" pack="center">
<label class="tab-group-overflow-count" role="button" />
</vbox>
@@ -57,20 +59,26 @@
}
connectedCallback() {
@@ -38,6 +38,10 @@ index 2ed2fa02b16013e40a32391b3dba0a4301d65262..aea9fb03dbc28a524ec5a26e76510b1f
// causes the component to be repositioned in the DOM.
- this.#observeTabChanges();
// Similar to above, always set up TabSelect listener, as this gets
// removed in disconnectedCallback
this.ownerGlobal.addEventListener("TabSelect", this);
- if (this._initialized) {
- return;
- }
@@ -45,35 +49,36 @@ index 2ed2fa02b16013e40a32391b3dba0a4301d65262..aea9fb03dbc28a524ec5a26e76510b1f
this._initialized = true;
this.saveOnWindowClose = true;
@@ -68,12 +76,14 @@
@@ -97,11 +105,14 @@
this.#labelElement.container = gBrowser.tabContainer;
this.#labelElement.group = this;
- this.#labelElement.addEventListener("click", this);
+ this.querySelector(".tab-group-label-container").addEventListener("click", this);
+ if (!this.isZenFolder) {
this.#labelElement.addEventListener("contextmenu", e => {
e.preventDefault();
gBrowser.tabGroupMenu.openEditModal(this);
return false;
});
+ }
- this.#labelElement.addEventListener("contextmenu", e => {
- e.preventDefault();
- gBrowser.tabGroupMenu.openEditModal(this);
- return false;
- });
+ this.appendChild = function (child) {
+ this.querySelector(".tab-group-container").appendChild(child);
+ for (let tab of this.tabs) {
+ if (tab.hasAttribute("zen-empty-tab") && tab.group === this) {
+ this.querySelector(".zen-tab-group-start").after(tab);
+ }
+ }
+ };
this.#updateLabelAriaAttributes();
this.#updateCollapsedAriaAttributes();
@@ -93,6 +103,11 @@
// claim that a tab group was created by adoption the first time it
@@ -127,6 +138,8 @@
// mounts after getting created by `Tabbrowser.adoptTabGroup`.
this.#wasCreatedByAdoption = false;
+ this.appendChild = function (child) {
+ this.querySelector(".tab-group-container").appendChild(child);
+ }
+ }
+ this.#observeTabChanges();
}
+ this.#observeTabChanges();
+ }
disconnectedCallback() {
@@ -123,7 +138,10 @@
resetDefaultGroupName = () => {
this.#defaultGroupName = "";
@@ -197,7 +210,10 @@
}
});
}
@@ -85,15 +90,12 @@ index 2ed2fa02b16013e40a32391b3dba0a4301d65262..aea9fb03dbc28a524ec5a26e76510b1f
}
get color() {
@@ -172,7 +190,6 @@
// always create a text node and get consistent layout.
this.setAttribute("label", val || "\u200b");
- this.dataset.tooltip = val;
this.#updateLabelAriaAttributes();
if (diff) {
@@ -244,7 +261,53 @@
@@ -338,12 +354,61 @@
tabGroupName,
})
.then(result => {
- this.dataset.tooltip = result;
});
}
get tabs() {
@@ -145,10 +147,14 @@ index 2ed2fa02b16013e40a32391b3dba0a4301d65262..aea9fb03dbc28a524ec5a26e76510b1f
+ }
+ }
+ return true;
+ }
+
+ get level() {
+ return this.group?.level + 1 || 0;
}
/**
@@ -270,7 +333,7 @@
@@ -373,7 +438,7 @@
*/
addTabs(tabs, metricsContext) {
for (let tab of tabs) {
@@ -157,16 +163,16 @@ index 2ed2fa02b16013e40a32391b3dba0a4301d65262..aea9fb03dbc28a524ec5a26e76510b1f
tab.ownerGlobal.gBrowser.unpinTab(tab);
}
let tabToMove =
@@ -333,7 +396,7 @@
* @param {PointerEvent} event
@@ -437,7 +502,7 @@
*/
on_click(event) {
- if (event.target === this.#labelElement && event.button === 0) {
+ if (event.target.closest('.tab-group-label-container') && event.button === 0) {
let isToggleElement =
- event.target === this.#labelElement ||
+ this.labelElement.parentElement.contains(event.target) ||
event.target === this.#overflowCountLabel;
if (isToggleElement && event.button === 0) {
event.preventDefault();
this.collapsed = !this.collapsed;
gBrowser.tabGroupMenu.close();
@@ -364,5 +427,6 @@
@@ -470,5 +535,6 @@
}
}

View File

@@ -1,16 +1,8 @@
diff --git a/browser/components/tabbrowser/content/tabs.js b/browser/components/tabbrowser/content/tabs.js
index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d784cc9da0 100644
index e47f735e4e4563c9b7537944628418d1478c068d..8af76f08278e5db4029bf060bbf4ea4c82929be7 100644
--- a/browser/components/tabbrowser/content/tabs.js
+++ b/browser/components/tabbrowser/content/tabs.js
@@ -289,6 +289,7 @@
on_TabGroupCollapse(event) {
this._invalidateCachedVisibleTabs();
this._unlockTabSizing();
+ return;
// If the user's selected tab is in the collapsing group, kick them off
// the tab. If no tabs exist outside the group, create a new one and
@@ -345,7 +346,7 @@
@@ -332,7 +332,7 @@
// and we're not hitting the scroll buttons.
if (
event.button != 0 ||
@@ -19,7 +11,15 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7
event.composedTarget.localName == "toolbarbutton"
) {
return;
@@ -695,7 +696,7 @@
@@ -413,7 +413,6 @@
});
}
} else if (isTabGroupLabel(event.target)) {
- event.target.group.saveAndClose();
} else if (
event.originalTarget.closest("scrollbox") &&
!Services.prefs.getBoolPref(
@@ -686,7 +685,7 @@
if (this.#isContainerVerticalPinnedGrid(tab)) {
// In expanded vertical mode, the max number of pinned tabs per row is dynamic
// Set this before adjusting dragged tab's position
@@ -28,23 +28,20 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7
let tabsPerRow = 0;
let position = RTL_UI
? window.windowUtils.getBoundsWithoutFlushing(
@@ -777,11 +778,12 @@
@@ -772,9 +771,10 @@
if (tab.multiselected) {
this.#moveTogetherSelectedTabs(tab);
- } else if (isTabGroupLabel(tab) && !tab.group.collapsed) {
+ } else if (isTabGroupLabel(tab)) {
this._lockTabSizing();
this.#keepTabSizeLocked = true;
- tab.group.collapsed = true;
- expandGroupOnDrop = true;
+ } else if (isTabGroupLabel(tab) && (!tab.group.collapsed || tab.group.hasAttribute("has-active"))) {
+ tab.group.collapsed = !tab.group.hasAttribute("split-view-group");
+ expandGroupOnDrop = !tab.group.collapsed || tab.group.hasAttribute("has-active");
expandGroupOnDrop = true;
+ gZenFolders.collapseVisibleTab(tab.group);
}
}
@@ -879,7 +881,7 @@
@@ -872,7 +872,7 @@
? event.screenY - window.screenY - tabOffset
: event.screenY - window.screenY,
scrollPos:
@@ -53,18 +50,18 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7
? this.pinnedTabsContainer.scrollPosition
: this.arrowScrollbox.scrollPosition,
screenX: event.screenX,
@@ -933,6 +935,10 @@
@@ -933,6 +933,10 @@
}
let draggedTab = event.dataTransfer.mozGetDataAt(TAB_DROP_TYPE, 0);
+ if (draggedTab && effects === "move") {
+ if (draggedTab && dropEffect === "move") {
+ gZenPinnedTabManager.applyDragoverClass(event, draggedTab);
+ gZenViewSplitter.onBrowserDragEndToSplit(event);
+ }
if (
(effects == "move" || effects == "copy") &&
(dropEffect == "move" || dropEffect == "copy") &&
document == draggedTab.ownerDocument &&
@@ -1060,7 +1066,9 @@
@@ -1060,7 +1064,9 @@
isTabGroupLabel(draggedTab) &&
draggedTab._dragData?.expandGroupOnDrop
) {
@@ -72,10 +69,10 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7
+ const isActive = draggedTab.group.hasAttribute("has-active");
+ draggedTab.group.collapsed = isActive;
+ if (isActive) gZenFolders.expandVisibleTab(draggedTab.group);
this.#keepTabSizeLocked = false;
this._unlockTabSizing();
}
@@ -1089,6 +1097,18 @@
}
@@ -1096,6 +1102,18 @@
this._tabDropIndicator.hidden = true;
event.stopPropagation();
@@ -94,15 +91,21 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7
if (draggedTab && dropEffect == "copy") {
let duplicatedDraggedTab;
let duplicatedTabs = [];
@@ -1127,11 +1147,12 @@
newTranslateY -= tabHeight;
@@ -1120,8 +1138,9 @@
let translateOffsetY = oldTranslateY % tabHeight;
let newTranslateX = oldTranslateX - translateOffsetX;
let newTranslateY = oldTranslateY - translateOffsetY;
- let isPinned = draggedTab.pinned;
- let numPinned = gBrowser.pinnedTabCount;
+ let isPinned = draggedTab?.group ? draggedTab.group.pinned : draggedTab.pinned;
+ let numPinned = gBrowser._numVisiblePinTabsWithoutCollapsed;
+ let essential = draggedTab.hasAttribute("zen-essential");
if (this.#isContainerVerticalPinnedGrid(draggedTab)) {
// Update both translate axis for pinned vertical expanded tabs
@@ -1137,8 +1156,8 @@
}
} else {
- let isPinned = draggedTab.pinned;
- let numPinned = gBrowser.pinnedTabCount;
+ let isPinned = draggedTab?.group ? draggedTab.group.pinned : draggedTab.pinned;
+ let numPinned = gBrowser._numVisiblePinTabsWithoutCollapsed;
+ let essential = draggedTab.hasAttribute("zen-essential");
let tabs = this.ariaFocusableItems.slice(
- isPinned ? 0 : numPinned,
- isPinned ? numPinned : undefined
@@ -111,15 +114,29 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7
);
let size = this.verticalMode ? "height" : "width";
let screenAxis = this.verticalMode ? "screenY" : "screenX";
@@ -1181,6 +1202,7 @@
@@ -1179,11 +1198,9 @@
}
let shouldPin =
- numPinned &&
- this.pinnedTabsContainer.contains(event.target) &&
- !draggedTab.pinned;
+ false;
let shouldUnpin =
- this.arrowScrollbox.contains(event.target) && draggedTab.pinned;
+ false;
let shouldTranslate =
!gReduceMotion &&
!shouldCreateGroupOnDrop &&
@@ -1196,6 +1213,7 @@
(oldTranslateY && oldTranslateY != newTranslateY);
} else if (this.verticalMode) {
shouldTranslate &&= oldTranslateY && oldTranslateY != newTranslateY;
+ shouldTranslate = false; // TODO: Find a way to animate vertical tab moves.
+ shouldTranslate = false;
} else {
shouldTranslate &&= oldTranslateX && oldTranslateX != newTranslateX;
}
@@ -1349,6 +1371,7 @@
@@ -1379,6 +1397,7 @@
let nextItem = this.ariaFocusableItems[newIndex];
let tabGroup = isTab(nextItem) && nextItem.group;
@@ -127,7 +144,7 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7
gBrowser.loadTabs(urls, {
inBackground,
replace,
@@ -1381,6 +1404,17 @@
@@ -1411,6 +1430,17 @@
this.finishMoveTogetherSelectedTabs(draggedTab);
this.finishAnimateTabMove();
@@ -142,10 +159,10 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7
+ if (gZenViewSplitter._lastOpenedTab) gZenViewSplitter._lastOpenedTab._visuallySelected = false;
+ }
+
this.#keepTabSizeLocked = false;
this._unlockTabSizing();
this.#expandGroupOnDrop(draggedTab);
if (
@@ -1607,7 +1641,7 @@
@@ -1640,7 +1670,7 @@
}
get newTabButton() {
@@ -154,7 +171,7 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7
}
get verticalMode() {
@@ -1623,6 +1657,7 @@
@@ -1656,6 +1686,7 @@
}
get overflowing() {
@@ -162,7 +179,7 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7
return this.hasAttribute("overflow");
}
@@ -1631,26 +1666,54 @@
@@ -1664,26 +1695,54 @@
if (this.#allTabs) {
return this.#allTabs;
}
@@ -224,7 +241,7 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7
}
/**
@@ -1717,33 +1780,27 @@
@@ -1750,32 +1809,27 @@
let elementIndex = 0;
@@ -243,17 +260,18 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7
} else if (isTabGroup(child)) {
child.labelElement.elementIndex = elementIndex++;
focusableItems.push(child.labelElement);
- if (!child.collapsed) {
- let visibleTabsInGroup = child.tabs.filter(tab => tab.visible);
- visibleTabsInGroup.forEach(tab => {
-
- let visibleTabsInGroup = child.tabs.filter(tab => tab.visible);
- visibleTabsInGroup.forEach(tab => {
- tab.elementIndex = elementIndex++;
- });
+ if (!child.hasAttribute("split-view-group")) {
+ let visibleTabsAndGroupsInGroup = child.childGroupsAndTabs.filter(tab => tab.visible);
+ visibleTabsAndGroupsInGroup.forEach(tab => {
tab.elementIndex = elementIndex++;
});
- focusableItems.push(...visibleTabsInGroup);
+ focusableItems.push(...visibleTabsAndGroupsInGroup);
}
+ let visibleTabsInGroup = child.childGroupsAndTabs.filter(tab => tab.visible);
+ visibleTabsInGroup.forEach(tab => {
+ tab.elementIndex = elementIndex++;
+ });
focusableItems.push(...visibleTabsInGroup);
+ }
}
}
@@ -265,7 +283,7 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7
return this.#focusableItems;
}
@@ -1751,6 +1808,7 @@
@@ -1783,6 +1837,7 @@
_invalidateCachedTabs() {
this.#allTabs = null;
this._invalidateCachedVisibleTabs();
@@ -273,7 +291,7 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7
}
_invalidateCachedVisibleTabs() {
@@ -1766,8 +1824,8 @@
@@ -1798,8 +1853,8 @@
#isContainerVerticalPinnedGrid(tab) {
return (
this.verticalMode &&
@@ -284,7 +302,7 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7
!this.expandOnHover
);
}
@@ -1783,7 +1841,7 @@
@@ -1815,7 +1870,7 @@
if (node == null) {
// We have a container for non-tab elements at the end of the scrollbox.
@@ -293,7 +311,7 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7
}
node.before(tab);
@@ -1878,7 +1936,7 @@
@@ -1910,7 +1965,7 @@
// There are separate "new tab" buttons for horizontal tabs toolbar, vertical tabs and
// for when the tab strip is overflowed (which is shared by vertical and horizontal tabs);
// Attach the long click popup to all of them.
@@ -302,7 +320,7 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7
const newTab2 = this.newTabButton;
const newTabVertical = document.getElementById(
"vertical-tabs-newtab-button"
@@ -1973,10 +2031,12 @@
@@ -2005,10 +2060,12 @@
_handleTabSelect(aInstant) {
let selectedTab = this.selectedItem;
@@ -315,7 +333,15 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7
selectedTab._notselectedsinceload = false;
}
@@ -2130,7 +2190,7 @@
@@ -2152,6 +2209,7 @@
when the tab is first selected to be dragged.
*/
#updateTabStylesOnDrag(tab) {
+ return;
let isPinned = tab.pinned;
let numPinned = gBrowser.pinnedTabCount;
let allTabs = this.ariaFocusableItems;
@@ -2385,7 +2443,7 @@
return;
}
@@ -324,7 +350,7 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7
let directionX = screenX > dragData.animLastScreenX;
let directionY = screenY > dragData.animLastScreenY;
@@ -2139,6 +2199,8 @@
@@ -2394,6 +2452,8 @@
let { width: tabWidth, height: tabHeight } =
draggedTab.getBoundingClientRect();
@@ -333,16 +359,18 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7
let shiftSizeX = tabWidth * movingTabs.length;
let shiftSizeY = tabHeight;
dragData.tabWidth = tabWidth;
@@ -2168,7 +2230,7 @@
let translateX = screenX - dragData.screenX;
let translateY = screenY - dragData.screenY;
translateY +=
- this.pinnedTabsContainer.scrollPosition - dragData.scrollPos;
+ dragData.scrollPos;
let firstBoundX = firstTabInRow.screenX - firstMovingTabScreenX;
let firstBoundY = firstTabInRow.screenY - firstMovingTabScreenY;
@@ -2430,8 +2490,8 @@
let lastBoundX =
@@ -2294,7 +2356,7 @@
lastTabInRow.screenX +
lastTabInRow.getBoundingClientRect().width -
- (lastMovingTabScreenX + tabWidth);
- let lastBoundY = periphery.screenY - (lastMovingTabScreenY + tabHeight);
+ (lastMovingTabScreenX + tabWidth) + 4;
+ let lastBoundY = 0;
translateX = Math.min(Math.max(translateX, firstBoundX), lastBoundX);
translateY = Math.min(Math.max(translateY, firstBoundY), lastBoundY);
@@ -2547,7 +2607,7 @@
}
dragData.animDropElementIndex = newIndex;
@@ -351,7 +379,7 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7
dragData.dropBefore = newIndex < tabs.length;
// Shift background tabs to leave a gap where the dragged tab
@@ -2327,12 +2389,17 @@
@@ -2580,13 +2640,18 @@
this.#clearDragOverCreateGroupTimer();
@@ -361,7 +389,8 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7
+ let numPinned = gBrowser._numVisiblePinTabsWithoutCollapsed;
+ let essential = draggedTab.hasAttribute("zen-essential");
+ const isDraggingFolder = isTabGroupLabel(draggedTab) && draggedTab.group?.isZenFolder;
let tabs = this.ariaFocusableItems.slice(
let allTabs = this.ariaFocusableItems;
let tabs = allTabs.slice(
- isPinned ? 0 : numPinned,
- isPinned ? numPinned : undefined
+ (isPinned && essential) ? 0 : gBrowser._numZenEssentials,
@@ -373,17 +402,23 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7
if (this.#rtlMode) {
tabs.reverse();
@@ -2346,7 +2413,7 @@
@@ -2597,7 +2662,7 @@
let screenAxis = this.verticalMode ? "screenY" : "screenX";
let size = this.verticalMode ? "height" : "width";
let translateAxis = this.verticalMode ? "translateY" : "translateX";
let scrollDirection = this.verticalMode ? "scrollTop" : "scrollLeft";
- let { width: tabWidth, height: tabHeight } = bounds(draggedTab);
+ let { width: tabWidth, height: tabHeight } = bounds(draggedTab.group?.hasAttribute("split-view-group") ? draggedTab.group : draggedTab);
let translateX = event.screenX - dragData.screenX;
let translateY = event.screenY - dragData.screenY;
@@ -2360,12 +2427,18 @@
let lastTab = tabs.at(-1);
@@ -2607,10 +2672,16 @@
dragData.translateY = translateY;
// Move the dragged tab based on the mouse position.
- let firstTab = allTabs.at(this.#rtlMode ? -1 : 0);
- let lastTab = allTabs.at(this.#rtlMode ? 0 : -1);
+ let firstTab = tabs.at(this.#rtlMode ? -1 : 0);
+ let lastTab = tabs.at(this.#rtlMode ? 0 : -1);
let lastMovingTab = movingTabs.at(-1);
let firstMovingTab = movingTabs[0];
+ if (lastMovingTab.group?.hasAttribute("split-view-group")) {
@@ -395,22 +430,15 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7
let endEdge = ele => ele[screenAxis] + bounds(ele)[size];
let lastMovingTabScreen = endEdge(lastMovingTab);
let firstMovingTabScreen = firstMovingTab[screenAxis];
let shiftSize = lastMovingTabScreen - firstMovingTabScreen;
let translate = screen - dragData[screenAxis];
- if (!isPinned) {
+ if (true) {
translate +=
this.arrowScrollbox.scrollbox[scrollDirection] - dragData.scrollPos;
} else if (isPinned && this.verticalMode) {
@@ -2377,6 +2450,7 @@
// - for unpinned tabs, between the first and last unpinned tab
@@ -2619,6 +2690,7 @@
// Constrain the range over which the moving tabs can move between the first and last tab
let firstBound = firstTab[screenAxis] - firstMovingTabScreen;
let lastBound = endEdge(lastTab) - lastMovingTabScreen;
+ lastBound = gZenPinnedTabManager.getLastTabBound(lastBound, lastTab, isDraggingFolder);
translate = Math.min(Math.max(translate, firstBound), lastBound);
for (let item of movingTabs) {
@@ -2384,6 +2458,9 @@
// Center the tab under the cursor if the tab is not under the cursor while dragging
if (
@@ -2636,6 +2708,9 @@
// Shift the `.tab-group-label-container` to shift the label element.
item = item.parentElement;
}
@@ -420,7 +448,7 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7
item.style.transform = `${translateAxis}(${translate}px)`;
}
@@ -2521,6 +2598,9 @@
@@ -2773,6 +2848,9 @@
break;
}
let element = tabs[mid];
@@ -430,7 +458,7 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7
let elementForSize = isTabGroupLabel(element)
? element.parentElement
: element;
@@ -2540,6 +2620,8 @@
@@ -2792,6 +2870,8 @@
};
let dropElement = getOverlappedElement();
@@ -439,16 +467,19 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7
let newDropElementIndex;
if (dropElement) {
@@ -2604,7 +2686,7 @@
@@ -2856,7 +2936,10 @@
let shouldCreateGroupOnDrop;
let dropBefore;
if (dropElement) {
- let dropElementForOverlap = isTabGroupLabel(dropElement)
+ if (dropElement?.group?.hasAttribute("split-view-group") || dropElement.hasAttribute("split-view-group")) {
+ dropElement = dropElement.group.labelElement ?? dropElement.labelElement;
+ }
+ let dropElementForOverlap = isTabGroupLabel(dropElement) && !dropElement.group?.hasAttribute("split-view-group")
? dropElement.parentElement
: dropElement;
@@ -2624,7 +2706,7 @@
@@ -2876,7 +2959,7 @@
? Services.prefs.getIntPref(
"browser.tabs.dragDrop.moveOverThresholdPercent"
) / 100
@@ -457,7 +488,7 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7
moveOverThreshold = Math.min(1, Math.max(0, moveOverThreshold));
let shouldMoveOver = overlapPercent > moveOverThreshold;
if (logicalForward && shouldMoveOver) {
@@ -2656,44 +2738,21 @@
@@ -2908,44 +2991,21 @@
// If dragging a group over another group, don't make it look like it is
// possible to drop the dragged group inside the other group.
@@ -507,7 +538,7 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7
// When dragging tab(s) over an ungrouped tab, signal to the user
// that dropping the tab(s) will create a new tab group.
shouldCreateGroupOnDrop =
@@ -2703,12 +2762,6 @@
@@ -2955,12 +3015,6 @@
overlapPercent > dragOverGroupingThreshold;
if (shouldCreateGroupOnDrop) {
@@ -520,7 +551,7 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7
} else {
this.removeAttribute("movingtab-createGroup");
document
@@ -2735,19 +2788,14 @@
@@ -2987,19 +3041,14 @@
dropElement = dropElementGroup;
colorCode = undefined;
} else if (isTabGroupLabel(dropElement)) {
@@ -548,7 +579,7 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7
}
this.#setDragOverGroupColor(colorCode);
this.toggleAttribute("movingtab-ungroup", !colorCode);
@@ -2765,19 +2813,28 @@
@@ -3017,19 +3066,28 @@
dragData.dropElement = dropElement;
dragData.dropBefore = dropBefore;
dragData.animDropElementIndex = newDropElementIndex;
@@ -579,7 +610,7 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7
}
item.style.transform = transform;
}
@@ -2830,12 +2887,14 @@
@@ -3082,12 +3140,14 @@
);
}
@@ -596,7 +627,7 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7
for (let item of this.ariaFocusableItems) {
if (isTabGroupLabel(item)) {
@@ -2843,6 +2902,18 @@
@@ -3095,6 +3155,18 @@
item = item.parentElement;
}
item.style.transform = "";
@@ -615,7 +646,15 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7
item.removeAttribute("dragover-createGroup");
}
this.removeAttribute("movingtab-createGroup");
@@ -2889,7 +2960,7 @@
@@ -3122,7 +3194,6 @@
"tab-group-label-container"
)) {
label.style.width = "";
- label.style.height = "";
label.style.left = "";
label.style.top = "";
label.removeAttribute("dragtarget");
@@ -3198,7 +3269,7 @@
let postTransitionCleanup = () => {
movingTab._moveTogetherSelectedTabsData.animate = false;
};
@@ -624,7 +663,7 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7
postTransitionCleanup();
} else {
let onTransitionEnd = transitionendEvent => {
@@ -3062,7 +3133,7 @@
@@ -3371,7 +3442,7 @@
}
_notifyBackgroundTab(aTab) {
@@ -633,7 +672,7 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7
return;
}
@@ -3171,7 +3242,10 @@
@@ -3480,7 +3551,10 @@
#getDragTarget(event, { ignoreSides = false } = {}) {
let { target } = event;
while (target) {
@@ -645,7 +684,7 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7
break;
}
target = target.parentNode;
@@ -3188,6 +3262,9 @@
@@ -3497,6 +3571,9 @@
return null;
}
}

View File

@@ -0,0 +1,13 @@
diff --git a/browser/components/urlbar/UrlbarController.sys.mjs b/browser/components/urlbar/UrlbarController.sys.mjs
index 4f85be7203f44c16944924d50947a89e436f00bc..518956c320af4e7045e8ff9fe63b70f8c2430b22 100644
--- a/browser/components/urlbar/UrlbarController.sys.mjs
+++ b/browser/components/urlbar/UrlbarController.sys.mjs
@@ -410,7 +410,7 @@ export class UrlbarController {
// When there's no search string and no view selection, we want to focus
// the next toolbar item instead, for accessibility reasons.
let allowTabbingThroughResults =
- this.input.focusedViaMousedown ||
+ true ||
this.input.searchMode?.isPreview ||
this.view.selectedElement ||
(this.input.value &&

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/urlbar/UrlbarInput.sys.mjs b/browser/components/urlbar/UrlbarInput.sys.mjs
index 50e9d3931789551869ff37a4fc89d5dfe2c09ad1..0cbce1ce41345075c999f3ff9c0268965bbc92b9 100644
index db1a780f36d16c1b63ad50af76887b16e88ca8fe..7feb0444d8628dd1aa3a4fa99b439b4a45dcb08d 100644
--- a/browser/components/urlbar/UrlbarInput.sys.mjs
+++ b/browser/components/urlbar/UrlbarInput.sys.mjs
@@ -68,6 +68,13 @@ XPCOMUtils.defineLazyPreferenceGetter(
@@ -16,7 +16,7 @@ index 50e9d3931789551869ff37a4fc89d5dfe2c09ad1..0cbce1ce41345075c999f3ff9c026896
const DEFAULT_FORM_HISTORY_NAME = "searchbar-history";
const SEARCH_BUTTON_CLASS = "urlbar-search-button";
@@ -378,7 +385,16 @@ export class UrlbarInput {
@@ -380,7 +387,16 @@ export class UrlbarInput {
// See _on_select(). HTMLInputElement.select() dispatches a "select"
// event but does not set the primary selection.
this._suppressPrimaryAdjustment = true;
@@ -33,7 +33,7 @@ index 50e9d3931789551869ff37a4fc89d5dfe2c09ad1..0cbce1ce41345075c999f3ff9c026896
this._suppressPrimaryAdjustment = false;
}
@@ -454,6 +470,10 @@ export class UrlbarInput {
@@ -456,6 +472,10 @@ export class UrlbarInput {
hideSearchTerms = false,
isSameDocument = false
) {
@@ -44,7 +44,7 @@ index 50e9d3931789551869ff37a4fc89d5dfe2c09ad1..0cbce1ce41345075c999f3ff9c026896
// We only need to update the searchModeUI on tab switch conditionally
// as we only persist searchMode with ScotchBonnet enabled.
if (
@@ -717,8 +737,16 @@ export class UrlbarInput {
@@ -728,8 +748,16 @@ export class UrlbarInput {
return;
}
}
@@ -62,7 +62,7 @@ index 50e9d3931789551869ff37a4fc89d5dfe2c09ad1..0cbce1ce41345075c999f3ff9c026896
}
/**
@@ -1124,7 +1152,11 @@ export class UrlbarInput {
@@ -1143,7 +1171,11 @@ export class UrlbarInput {
}
if (!this.#providesSearchMode(result)) {
@@ -75,7 +75,7 @@ index 50e9d3931789551869ff37a4fc89d5dfe2c09ad1..0cbce1ce41345075c999f3ff9c026896
}
if (isCanonized) {
@@ -2177,6 +2209,10 @@ export class UrlbarInput {
@@ -2208,6 +2240,10 @@ export class UrlbarInput {
await this.#updateLayoutBreakoutDimensions();
}
@@ -86,7 +86,7 @@ index 50e9d3931789551869ff37a4fc89d5dfe2c09ad1..0cbce1ce41345075c999f3ff9c026896
startLayoutExtend() {
if (!this.#allowBreakout || this.hasAttribute("breakout-extend")) {
// Do not expand if the Urlbar does not support being expanded or it is
@@ -2191,6 +2227,12 @@ export class UrlbarInput {
@@ -2222,6 +2258,12 @@ export class UrlbarInput {
this.setAttribute("breakout-extend", "true");
@@ -99,7 +99,7 @@ index 50e9d3931789551869ff37a4fc89d5dfe2c09ad1..0cbce1ce41345075c999f3ff9c026896
// 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")) {
@@ -2210,6 +2252,24 @@ export class UrlbarInput {
@@ -2241,6 +2283,24 @@ export class UrlbarInput {
return;
}
@@ -124,7 +124,15 @@ index 50e9d3931789551869ff37a4fc89d5dfe2c09ad1..0cbce1ce41345075c999f3ff9c026896
this.removeAttribute("breakout-extend");
this.#updateTextboxPosition();
}
@@ -2539,7 +2599,7 @@ export class UrlbarInput {
@@ -2561,6 +2621,7 @@ export class UrlbarInput {
let updateKey = {};
this._layoutBreakoutUpdateKey = updateKey;
+ this.valueFormatter._formatURL();
await this.window.promiseDocumentFlushed(() => {});
await new Promise(resolve => {
this.window.requestAnimationFrame(() => {
@@ -2570,7 +2631,7 @@ export class UrlbarInput {
this.textbox.parentNode.style.setProperty(
"--urlbar-container-height",
@@ -133,7 +141,15 @@ index 50e9d3931789551869ff37a4fc89d5dfe2c09ad1..0cbce1ce41345075c999f3ff9c026896
);
this.textbox.style.setProperty(
"--urlbar-height",
@@ -2954,6 +3014,7 @@ export class UrlbarInput {
@@ -2586,6 +2647,7 @@ export class UrlbarInput {
this.textbox.showPopover();
this.#updateTextboxPosition();
+ this.valueFormatter._formatURL();
resolve();
});
});
@@ -2985,6 +3047,7 @@ export class UrlbarInput {
}
_toggleActionOverride(event) {
@@ -141,7 +157,7 @@ index 50e9d3931789551869ff37a4fc89d5dfe2c09ad1..0cbce1ce41345075c999f3ff9c026896
if (
event.keyCode == KeyEvent.DOM_VK_SHIFT ||
event.keyCode == KeyEvent.DOM_VK_ALT ||
@@ -3055,7 +3116,7 @@ export class UrlbarInput {
@@ -3086,7 +3149,7 @@ export class UrlbarInput {
*/
_trimValue(val) {
let trimmedValue = lazy.UrlbarPrefs.get("trimURLs")
@@ -150,7 +166,7 @@ index 50e9d3931789551869ff37a4fc89d5dfe2c09ad1..0cbce1ce41345075c999f3ff9c026896
: val;
// Only trim value if the directionality doesn't change to RTL and we're not
// showing a strikeout https protocol.
@@ -3425,6 +3486,10 @@ export class UrlbarInput {
@@ -3459,6 +3522,10 @@ export class UrlbarInput {
}
reuseEmpty = true;
}
@@ -161,7 +177,7 @@ index 50e9d3931789551869ff37a4fc89d5dfe2c09ad1..0cbce1ce41345075c999f3ff9c026896
if (
where == "tab" &&
reuseEmpty &&
@@ -3432,6 +3497,9 @@ export class UrlbarInput {
@@ -3466,6 +3533,9 @@ export class UrlbarInput {
) {
where = "current";
}
@@ -171,7 +187,7 @@ index 50e9d3931789551869ff37a4fc89d5dfe2c09ad1..0cbce1ce41345075c999f3ff9c026896
return where;
}
@@ -3689,6 +3757,7 @@ export class UrlbarInput {
@@ -3723,6 +3793,7 @@ export class UrlbarInput {
this.setResultForCurrentValue(null);
this.handleCommand();
this.controller.clearLastQueryContextCache();
@@ -179,7 +195,7 @@ index 50e9d3931789551869ff37a4fc89d5dfe2c09ad1..0cbce1ce41345075c999f3ff9c026896
this._suppressStartQuery = false;
});
@@ -3696,7 +3765,6 @@ export class UrlbarInput {
@@ -3730,7 +3801,6 @@ export class UrlbarInput {
contextMenu.addEventListener("popupshowing", () => {
// Close the results pane when the input field contextual menu is open,
// because paste and go doesn't want a result selection.
@@ -187,7 +203,7 @@ index 50e9d3931789551869ff37a4fc89d5dfe2c09ad1..0cbce1ce41345075c999f3ff9c026896
let controller =
this.document.commandDispatcher.getControllerForCommand("cmd_paste");
@@ -4098,6 +4166,7 @@ export class UrlbarInput {
@@ -4138,6 +4208,7 @@ export class UrlbarInput {
this.document.l10n.setAttributes(
this.inputField,
@@ -195,7 +211,7 @@ index 50e9d3931789551869ff37a4fc89d5dfe2c09ad1..0cbce1ce41345075c999f3ff9c026896
l10nId,
l10nId == "urlbar-placeholder-with-name" ? { name } : undefined
);
@@ -4209,6 +4278,11 @@ export class UrlbarInput {
@@ -4249,6 +4320,11 @@ export class UrlbarInput {
}
_on_click(event) {
@@ -207,7 +223,7 @@ index 50e9d3931789551869ff37a4fc89d5dfe2c09ad1..0cbce1ce41345075c999f3ff9c026896
if (
event.target == this.inputField ||
event.target == this._inputContainer ||
@@ -4280,7 +4354,7 @@ export class UrlbarInput {
@@ -4320,7 +4396,7 @@ export class UrlbarInput {
}
}
@@ -216,7 +232,7 @@ index 50e9d3931789551869ff37a4fc89d5dfe2c09ad1..0cbce1ce41345075c999f3ff9c026896
this.view.autoOpen({ event });
} else {
if (this._untrimOnFocusAfterKeydown) {
@@ -4320,9 +4394,16 @@ export class UrlbarInput {
@@ -4360,9 +4436,16 @@ export class UrlbarInput {
}
_on_mousedown(event) {
@@ -234,7 +250,7 @@ index 50e9d3931789551869ff37a4fc89d5dfe2c09ad1..0cbce1ce41345075c999f3ff9c026896
if (
event.target != this.inputField &&
@@ -4334,6 +4415,10 @@ export class UrlbarInput {
@@ -4374,6 +4457,10 @@ export class UrlbarInput {
this.focusedViaMousedown = !this.focused;
this._preventClickSelectsAll = this.focused;
@@ -245,7 +261,7 @@ index 50e9d3931789551869ff37a4fc89d5dfe2c09ad1..0cbce1ce41345075c999f3ff9c026896
// Keep the focus status, since the attribute may be changed
// upon calling this.focus().
@@ -4374,7 +4459,7 @@ export class UrlbarInput {
@@ -4414,7 +4501,7 @@ export class UrlbarInput {
}
// Don't close the view when clicking on a tab; we may want to keep the
// view open on tab switch, and the TabSelect event arrived earlier.

View File

@@ -0,0 +1,12 @@
diff --git a/browser/components/urlbar/UrlbarMuxerStandard.sys.mjs b/browser/components/urlbar/UrlbarMuxerStandard.sys.mjs
index 57463d2c4e39e67eeec7e2c752fe5236a662c7d2..4ca28540a71594e935847679a4b676ae48eb10d8 100644
--- a/browser/components/urlbar/UrlbarMuxerStandard.sys.mjs
+++ b/browser/components/urlbar/UrlbarMuxerStandard.sys.mjs
@@ -845,6 +845,7 @@ class MuxerUnifiedComplete extends UrlbarMuxer {
}
if (result.providerName == lazy.UrlbarProviderTabToSearch.name) {
+ return false;
// Discard the result if a tab-to-search result was added already.
if (!state.canAddTabToSearch) {
return false;

View File

@@ -1,12 +0,0 @@
diff --git a/browser/components/urlbar/UrlbarMuxerUnifiedComplete.sys.mjs b/browser/components/urlbar/UrlbarMuxerUnifiedComplete.sys.mjs
index c0d2b04ff869c4ad193d71aa19949d0e1fefe5ea..e5d054bf583a10fd96a94096cfe3752beb97d2ab 100644
--- a/browser/components/urlbar/UrlbarMuxerUnifiedComplete.sys.mjs
+++ b/browser/components/urlbar/UrlbarMuxerUnifiedComplete.sys.mjs
@@ -845,6 +845,7 @@ class MuxerUnifiedComplete extends UrlbarMuxer {
}
if (result.providerName == lazy.UrlbarProviderTabToSearch.name) {
+ return false;
// Discard the result if a tab-to-search result was added already.
if (!state.canAddTabToSearch) {
return false;

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/urlbar/UrlbarProviderPlaces.sys.mjs b/browser/components/urlbar/UrlbarProviderPlaces.sys.mjs
index 815734d9a5a589174ac33cb15ff9988d13e78b8c..227511238b13155f70d305bcbaa84dcd45a66e1c 100644
index ad971f090bdaba2865cf1fac2840b1f553d2630c..a9e676e43d35b617eebd5a67c8653397b7c0c6bf 100644
--- a/browser/components/urlbar/UrlbarProviderPlaces.sys.mjs
+++ b/browser/components/urlbar/UrlbarProviderPlaces.sys.mjs
@@ -40,11 +40,13 @@ function defaultQuery(conditions = "") {
@@ -7,7 +7,7 @@ index 815734d9a5a589174ac33cb15ff9988d13e78b8c..227511238b13155f70d305bcbaa84dcd
SELECT h.url, h.title, ${SQL_BOOKMARK_TAGS_FRAGMENT}, h.id, t.open_count,
${lazy.PAGES_FRECENCY_FIELD} AS frecency, t.userContextId,
- h.last_visit_date, t.groupId
+ h.last_visit_date, t.groupId, zp.title AS pinned_title, zp.url AS pinned_url
+ h.last_visit_date, t.groupId, zp.url AS pinned_url, zp.title AS pinned_title
FROM moz_places h
LEFT JOIN moz_openpages_temp t
ON t.url = h.url
@@ -26,11 +26,11 @@ index 815734d9a5a589174ac33cb15ff9988d13e78b8c..227511238b13155f70d305bcbaa84dcd
h.visit_count, h.typed,
0, t.open_count,
:matchBehavior, :searchBehavior, NULL)
@@ -1114,11 +1116,13 @@ Search.prototype = {
@@ -1116,11 +1118,13 @@ Search.prototype = {
? lazy.PlacesUtils.toDate(lastVisitPRTime).getTime()
: undefined;
let tabGroup = row.getResultByName("groupId");
+ let pinnedTitle = row.getResultByIndex("pinned_title");
+ let pinnedTitle = row.getResultByIndex(12);
+ let pinnedUrl = row.getResultByIndex("pinned_url");
let match = {

View File

@@ -0,0 +1,13 @@
diff --git a/browser/components/urlbar/UrlbarProvidersManager.sys.mjs b/browser/components/urlbar/UrlbarProvidersManager.sys.mjs
index 555273f6ea1efd77aa3062b9910bbfe28568775d..c8aae86e1233d256e538970d58fd0febed745893 100644
--- a/browser/components/urlbar/UrlbarProvidersManager.sys.mjs
+++ b/browser/components/urlbar/UrlbarProvidersManager.sys.mjs
@@ -138,7 +138,7 @@ class ProvidersManager {
// To improve dataflow and reduce UI work, when a result is added we may notify
// it to the controller after a delay, so that we can chunk results in that
// timeframe into a single call. See _notifyResultsFromProvider for details.
- this.CHUNK_RESULTS_DELAY_MS = 16;
+ this.CHUNK_RESULTS_DELAY_MS = 20;
}
/**

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/urlbar/UrlbarView.sys.mjs b/browser/components/urlbar/UrlbarView.sys.mjs
index ec5575d8990ee431729d044953924d3a8b79d665..376d68f3a30bc75ca19bba5efc97fe923ab0e49e 100644
index b3608bb8b851979b893da9c83e86d08b54288047..97ffb0b855b1f1c3fe5c4081aa1ec03ceda82b05 100644
--- a/browser/components/urlbar/UrlbarView.sys.mjs
+++ b/browser/components/urlbar/UrlbarView.sys.mjs
@@ -609,7 +609,7 @@ export class UrlbarView {
@@ -11,16 +11,16 @@ index ec5575d8990ee431729d044953924d3a8b79d665..376d68f3a30bc75ca19bba5efc97fe92
// Try to reuse the cached top-sites context. If it's not cached, then
// there will be a gap of time between when the input is focused and
// when the view opens that can be perceived as flicker.
@@ -1325,7 +1325,7 @@ export class UrlbarView {
@@ -1333,7 +1333,7 @@ export class UrlbarView {
includeHiddenExposures: true,
});
let canBeVisible =
- newSpanCount <= this.#queryContext.maxResults && !seenMisplacedResult;
+ newSpanCount < this.#queryContext.maxResults+1 && !seenMisplacedResult;
+ newSpanCount < this.#queryContext.maxResults && !seenMisplacedResult;
if (result.isHiddenExposure) {
if (canBeVisible) {
this.controller.engagementEvent.addExposure(
@@ -3015,7 +3015,7 @@ export class UrlbarView {
@@ -3061,7 +3061,7 @@ export class UrlbarView {
}
#enableOrDisableRowWrap() {

View File

@@ -1,8 +1,8 @@
diff --git a/browser/extensions/newtab/lib/ActivityStream.sys.mjs b/browser/extensions/newtab/lib/ActivityStream.sys.mjs
index fc416c1977f9bc20ad86ecb7758056489cbc94cf..939f5ea34a914e919ebe568f8e795d7421c0abbc 100644
index f4eca54a9638072a03b4c0e406fe14388b85db61..7f0c5f724558bdb004114f2a6bea266c94facdf9 100644
--- a/browser/extensions/newtab/lib/ActivityStream.sys.mjs
+++ b/browser/extensions/newtab/lib/ActivityStream.sys.mjs
@@ -258,7 +258,7 @@ export const PREFS_CONFIG = new Map([
@@ -260,7 +260,7 @@ export const PREFS_CONFIG = new Map([
"showSponsoredTopSites",
{
title: "Show sponsored top sites",

View File

@@ -1,8 +1,8 @@
diff --git a/browser/modules/BrowserDOMWindow.sys.mjs b/browser/modules/BrowserDOMWindow.sys.mjs
index 2bc4918c15b5ea80e486db66d20bb9668b9e29c0..3800a3807f11c5f65ce0d602a775f95037f5dcf8 100644
index 534d23b3e66176ea77f3ef577bf9630626948b9d..752e229bbe725ae394b7648adb949635f2bd70e4 100644
--- a/browser/modules/BrowserDOMWindow.sys.mjs
+++ b/browser/modules/BrowserDOMWindow.sys.mjs
@@ -362,7 +362,7 @@ export class BrowserDOMWindow {
@@ -374,7 +374,7 @@ export class BrowserDOMWindow {
// Passing a null-URI to only create the content window,
// and pass true for aSkipLoad to prevent loading of
// about:blank
@@ -11,7 +11,7 @@ index 2bc4918c15b5ea80e486db66d20bb9668b9e29c0..3800a3807f11c5f65ce0d602a775f950
null,
aParams,
aWhere,
@@ -370,6 +370,10 @@ export class BrowserDOMWindow {
@@ -382,6 +382,10 @@ export class BrowserDOMWindow {
aName,
true
);

View File

@@ -1,5 +1,5 @@
diff --git a/browser/modules/ExtensionsUI.sys.mjs b/browser/modules/ExtensionsUI.sys.mjs
index a31179ef7986e1290aef8af58d1f82e23e55fcbe..4adaa921ce5fce8155cd98aa0e7a2b0b6d44ac1b 100644
index 3302b1e9a66c8495e1a627b33488b952e8ef72b1..1de6ee8b59595da4acbb91bc625cd380be32845a 100644
--- a/browser/modules/ExtensionsUI.sys.mjs
+++ b/browser/modules/ExtensionsUI.sys.mjs
@@ -466,7 +466,7 @@ export var ExtensionsUI = {

View File

@@ -1,5 +1,5 @@
diff --git a/browser/modules/URILoadingHelper.sys.mjs b/browser/modules/URILoadingHelper.sys.mjs
index 14bf18132eaee8a0c8fe6e108ac423de91a7d3e2..fa616654fdf8a29d59889227780a98f0f9dc9a20 100644
index ce594b69f55f9b9245a56fe8c962cf8a83cfe9a1..f3b99524f49f5a624c2fc213257a911862cd70c2 100644
--- a/browser/modules/URILoadingHelper.sys.mjs
+++ b/browser/modules/URILoadingHelper.sys.mjs
@@ -516,7 +516,7 @@ export const URILoadingHelper = {

View File

@@ -1,5 +1,5 @@
diff --git a/browser/themes/BuiltInThemeConfig.sys.mjs b/browser/themes/BuiltInThemeConfig.sys.mjs
index a5361f1f0ec57f575f8d76e118ff762dc7547501..db5c5eb2059b4ceef3911fd807bf985408859d1a 100644
index 28b254d5757caf35c4ba755ef4cfed44bab5af00..660f517e0e3342970c6e30837fcf4d0adf360777 100644
--- a/browser/themes/BuiltInThemeConfig.sys.mjs
+++ b/browser/themes/BuiltInThemeConfig.sys.mjs
@@ -33,11 +33,4 @@ export const BuiltInThemeConfig = new Map([

View File

@@ -1,31 +1,31 @@
diff --git a/browser/themes/linux/browser.css b/browser/themes/linux/browser.css
index 714e465f6d5bb28fc0c9517013ce7f9961bd0ace..8d739cb6e0cee93d994b17f7e3451fb3fcf11ed7 100644
index dadb198cbf968dc622d2d0ee6c754f3541c052a2..5b7d17d8705c7cfddaee04c90d342bd705338a18 100644
--- a/browser/themes/linux/browser.css
+++ b/browser/themes/linux/browser.css
@@ -42,7 +42,8 @@
-moz-default-appearance: -moz-window-decorations;
appearance: auto;
@@ -43,7 +43,8 @@
-moz-default-appearance: -moz-window-decorations;
appearance: auto;
- #navigator-toolbox,
- #navigator-toolbox,
+ #zen-main-app-wrapper,
+ #zen-browser-background,
dialog::backdrop {
border-top-left-radius: env(-moz-gtk-csd-titlebar-radius);
border-top-right-radius: env(-moz-gtk-csd-titlebar-radius);
@@ -50,13 +51,14 @@
dialog::backdrop {
border-top-left-radius: env(-moz-gtk-csd-titlebar-radius);
border-top-right-radius: env(-moz-gtk-csd-titlebar-radius);
@@ -51,13 +52,14 @@
/* stylelint-disable-next-line media-query-no-invalid */
@media -moz-pref("widget.gtk.rounded-bottom-corners.enabled") {
- #navigator-toolbox {
/* stylelint-disable-next-line media-query-no-invalid */
@media -moz-pref("widget.gtk.rounded-bottom-corners.enabled") {
- #navigator-toolbox {
+ #zen-main-app-wrapper {
/* The body clip below covers this. */
border-radius: 0;
}
/* The body clip below covers this. */
border-radius: 0;
}
body,
- dialog::backdrop {
body,
- dialog::backdrop {
+ dialog::backdrop,
+ #zen-browser-background {
/* Use an uniform clip to allow WebRender to optimize it better */
border-radius: env(-moz-gtk-csd-titlebar-radius);
}
/* Use an uniform clip to allow WebRender to optimize it better */
border-radius: env(-moz-gtk-csd-titlebar-radius);
}

View File

@@ -1,18 +0,0 @@
diff --git a/browser/themes/shared/controlcenter/panel.css b/browser/themes/shared/controlcenter/panel.css
index d0bc0e89142ef8d6090f1b270a0193ac8899c41f..cb16ab639c675433b2bfbcee11def5428c41afb3 100644
--- a/browser/themes/shared/controlcenter/panel.css
+++ b/browser/themes/shared/controlcenter/panel.css
@@ -10,11 +10,11 @@
#identity-popup,
#permission-popup,
#protections-popup {
- --popup-width: 30.81em;
+ --popup-width: 28.81em;
/* Set default fill for icons in the identity popup.
Individual icons can override this. */
fill: currentColor;
- --horizontal-padding: calc(var(--arrowpanel-menuitem-padding-inline) * 2);
+ --horizontal-padding: 0;
--vertical-section-padding: 0.9em;
--height-offset: 0px;
font: menu;

View File

@@ -1,10 +0,0 @@
diff --git a/browser/themes/shared/light-dark-overrides.css b/browser/themes/shared/light-dark-overrides.css
index 8b10da7c3ccbbfca30f77e2b7602794dccbf306d..f9188accee0e02d3ef6944b155da613fa6bd335d 100644
--- a/browser/themes/shared/light-dark-overrides.css
+++ b/browser/themes/shared/light-dark-overrides.css
@@ -5,5 +5,4 @@
#urlbar {
--urlbar-box-bgcolor: var(--toolbar-field-focus-background-color);
--urlbar-box-focus-bgcolor: var(--button-background-color);
- --urlbar-box-hover-bgcolor: var(--button-background-color-hover);
}

View File

@@ -1,5 +1,5 @@
diff --git a/browser/themes/shared/tabbrowser/tabs.css b/browser/themes/shared/tabbrowser/tabs.css
index 79a95268e5..3a9fe04d6a 100644
index b710cbf2aa3febc0693bdc6aef48ef4aea855235..61c813322c866ae823dac6c0826d572a1e768135 100644
--- a/browser/themes/shared/tabbrowser/tabs.css
+++ b/browser/themes/shared/tabbrowser/tabs.css
@@ -19,7 +19,7 @@
@@ -23,7 +23,7 @@ index 79a95268e5..3a9fe04d6a 100644
--tab-selected-bgcolor: var(--toolbar-bgcolor);
--tab-selected-color-scheme: var(--toolbar-color-scheme);
&[lwt-tab-selected="light"] {
@@ -251,7 +251,6 @@
@@ -255,7 +255,6 @@
}
:root:not([uidensity="compact"], [sidebar-expand-on-hover]) &[pinned] {
@@ -31,7 +31,7 @@ index 79a95268e5..3a9fe04d6a 100644
}
&:is([selected], [multiselected]) {
@@ -265,6 +264,7 @@
@@ -269,6 +268,7 @@
border-radius: inherit;
position: relative;
overflow: hidden;
@@ -39,7 +39,7 @@ index 79a95268e5..3a9fe04d6a 100644
&::before {
position: absolute;
@@ -464,14 +464,11 @@
@@ -468,14 +468,11 @@
.tab-icon-image {
-moz-context-properties: fill, stroke;
fill: currentColor;
@@ -55,7 +55,7 @@ index 79a95268e5..3a9fe04d6a 100644
opacity: 0.5;
/* Fade the favicon out */
transition-property: filter, opacity;
@@ -488,10 +485,6 @@
@@ -492,10 +489,6 @@
/* stylelint-disable-next-line media-query-no-invalid */
@media -moz-pref("browser.tabs.fadeOutExplicitlyUnloadedTabs") {
&[pending][discarded] {
@@ -66,7 +66,7 @@ index 79a95268e5..3a9fe04d6a 100644
opacity: 0.5;
/* Fade the favicon out */
transition-property: filter, opacity;
@@ -564,7 +557,7 @@
@@ -568,7 +561,7 @@
z-index: 1; /* Overlay tab title */
#tabbrowser-tabs[orient="vertical"] & {
@@ -75,7 +75,7 @@ index 79a95268e5..3a9fe04d6a 100644
}
&[crashed] {
@@ -572,7 +565,7 @@
@@ -576,7 +569,7 @@
}
#tabbrowser-tabs[orient="vertical"]:not([expanded]) &:not([crashed]),
@@ -84,7 +84,7 @@ index 79a95268e5..3a9fe04d6a 100644
&[soundplaying] {
list-style-image: url("chrome://browser/skin/tabbrowser/tab-audio-playing-small.svg");
}
@@ -629,7 +622,7 @@
@@ -633,7 +626,7 @@
}
}
@@ -93,7 +93,7 @@ index 79a95268e5..3a9fe04d6a 100644
&[crashed] {
display: revert;
}
@@ -730,7 +723,7 @@
@@ -734,7 +727,7 @@
has not been added to root. There are certain scenarios when that attribute is temporarily
removed from root such as when toggling the sidebar to expand with the toolbar button. */
#tabbrowser-tabs[orient="horizontal"] &:not([pinned]):not([crashed]),
@@ -102,22 +102,7 @@ index 79a95268e5..3a9fe04d6a 100644
&:is([soundplaying], [muted], [activemedia-blocked]) {
display: flex;
}
@@ -1004,20 +997,20 @@ tab-group {
*/
display: contents;
- #tabbrowser-tabs[orient="horizontal"] &[collapsed] > .tabbrowser-tab {
+ #tabbrowser-tabs[orient="horizontal"] &[collapsed] .tab-group-container > .tabbrowser-tab {
min-width: 0 !important;
max-width: 0 !important;
padding: 0;
overflow-clip-margin: 0;
}
- #tabbrowser-tabs[orient="vertical"] &[collapsed] > .tabbrowser-tab {
+ #tabbrowser-tabs[orient="vertical"] &[collapsed] .tab-group-container > .tabbrowser-tab {
display: none;
}
@@ -1039,7 +1032,7 @@ tab-group {
}
#tabbrowser-tabs[orient="vertical"][expanded] {
@@ -126,7 +111,7 @@ index 79a95268e5..3a9fe04d6a 100644
&[movingtab][movingtab-addToGroup]:not([movingtab-createGroup], [movingtab-ungroup]) .tabbrowser-tab:is(:active, [multiselected]) {
margin-inline-start: var(--space-medium);
}
@@ -1370,7 +1363,7 @@ tab-group {
@@ -1457,7 +1450,7 @@ tab-group {
}
}
@@ -135,7 +120,7 @@ index 79a95268e5..3a9fe04d6a 100644
#vertical-tabs-newtab-button {
appearance: none;
min-height: var(--tab-min-height);
@@ -1381,7 +1374,7 @@ tab-group {
@@ -1468,7 +1461,7 @@ tab-group {
margin-inline: var(--tab-inner-inline-margin);
#tabbrowser-tabs[orient="vertical"]:not([expanded]) & > .toolbarbutton-text {
@@ -144,7 +129,7 @@ index 79a95268e5..3a9fe04d6a 100644
}
&:hover {
@@ -1405,7 +1398,7 @@ tab-group {
@@ -1492,7 +1485,7 @@ tab-group {
* flex container. #tabs-newtab-button is a child of the arrowscrollbox where
* we don't want a gap (between tabs), so we have to add some margin.
*/
@@ -153,7 +138,7 @@ index 79a95268e5..3a9fe04d6a 100644
margin-block: var(--tab-block-margin);
}
@@ -1600,7 +1593,6 @@ tab-group {
@@ -1687,7 +1680,6 @@ tab-group {
&:not([expanded]) {
.tabbrowser-tab[pinned] {
@@ -161,7 +146,7 @@ index 79a95268e5..3a9fe04d6a 100644
}
.tab-background {
@@ -1760,7 +1752,6 @@ toolbar:not(#TabsToolbar) #firefox-view-button {
@@ -1847,7 +1839,6 @@ toolbar:not(#TabsToolbar) #firefox-view-button {
list-style-image: url(chrome://global/skin/icons/plus.svg);
}

View File

@@ -1,8 +1,8 @@
diff --git a/browser/themes/shared/toolbarbuttons.css b/browser/themes/shared/toolbarbuttons.css
index a8df2d5cd8b3009daa033a9bf06908be78adeb3b..8c47fd0056599c539eb309eb90b465921400aae4 100644
index 1f91bda717979f3e81d2f6b243336078d97c5cb9..4232ec4761cb15ff96e9b18810b05f548a6f5fd9 100644
--- a/browser/themes/shared/toolbarbuttons.css
+++ b/browser/themes/shared/toolbarbuttons.css
@@ -254,7 +254,7 @@ toolbar .toolbaritem-combined-buttons > separator {
@@ -256,7 +256,7 @@ toolbar .toolbaritem-combined-buttons > separator {
#nav-bar-overflow-button {
list-style-image: url("chrome://global/skin/icons/chevron.svg");
@@ -11,7 +11,7 @@ index a8df2d5cd8b3009daa033a9bf06908be78adeb3b..8c47fd0056599c539eb309eb90b46592
display: none;
}
@@ -464,7 +464,7 @@ toolbarbutton.bookmark-item:not(.subviewbutton) {
@@ -466,7 +466,7 @@ toolbarbutton.bookmark-item:not(.subviewbutton) {
*/
align-items: stretch;
> .toolbarbutton-icon {

View File

@@ -1,5 +1,5 @@
diff --git a/browser/themes/shared/urlbar-searchbar.css b/browser/themes/shared/urlbar-searchbar.css
index 23661cf489d97cdbd6d4c66de199fd9dc0c8475f..2677dc60a92cebe014c817414a6067be9543cf98 100644
index d6c0b56270aee3dd0e74840314ea25af3ca8050a..17b22809744a8903b916b7769681a0c14d054f45 100644
--- a/browser/themes/shared/urlbar-searchbar.css
+++ b/browser/themes/shared/urlbar-searchbar.css
@@ -5,7 +5,7 @@
@@ -11,7 +11,16 @@ index 23661cf489d97cdbd6d4c66de199fd9dc0c8475f..2677dc60a92cebe014c817414a6067be
--urlbar-margin-inline: 5px;
--urlbar-padding-block: 4px;
}
@@ -303,10 +303,14 @@
@@ -23,7 +23,7 @@
#urlbar:not([usertyping]) > .urlbar-input-container > .urlbar-go-button,
#urlbar:not([focused]) > .urlbar-input-container > .urlbar-go-button,
#urlbar-revert-button-container {
- display: none;
+ display: none !important;
}
/* When rich suggestions are enabled the urlbar identity icon is given extra padding to
@@ -288,10 +288,14 @@
#urlbar[breakout][breakout-extend] {
height: auto;

View File

@@ -1,5 +1,5 @@
diff --git a/browser/themes/shared/urlbarView.css b/browser/themes/shared/urlbarView.css
index 28608327793ff564d19536e1086660b040c462d4..6714457b1de5928fff19f679eb0388f40e343186 100644
index 428ce749239be2a54c86e0feff123772d1a1d697..bfef48f520dac8968f79d06cbef2e5a047ded748 100644
--- a/browser/themes/shared/urlbarView.css
+++ b/browser/themes/shared/urlbarView.css
@@ -20,7 +20,7 @@
@@ -11,3 +11,11 @@ index 28608327793ff564d19536e1086660b040c462d4..6714457b1de5928fff19f679eb0388f4
--urlbarView-row-gutter: 2px;
--urlbarView-item-inline-padding: var(--urlbar-icon-padding);
--urlbarView-item-block-padding: 6px;
@@ -168,7 +168,6 @@
min-height: 32px;
}
:root[uidensity="touch"] & {
- padding-block: 11px;
}
}

View File

@@ -1,3 +1,7 @@
#filter dumbComments emptyLines substitution
# This Source Code Form is subject to the terms of the Mozilla Public
# 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/.
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.84167 13.5836L6.62299 15.1069C6.57158 15.1711 6.49377 15.2086 6.41152 15.2086H6L6.54164 12.5002L6 9.79171H6.41152C6.49377 9.79171 6.57158 9.82917 6.62299 9.89337L7.84167 11.4167H10.8751L9.85657 6.32393C9.82719 6.17729 9.92232 6.03456 10.069 6.00526C10.0865 6.00172 10.1043 6 10.1221 6H10.3335C10.6695 6 10.9809 6.17629 11.1538 6.46448L14.1252 11.4166H17.2564C17.6967 11.4166 18.1265 11.5507 18.4887 11.8012L18.7159 11.9583C19.0151 12.1652 19.0899 12.5753 18.8831 12.8745C18.8379 12.9399 18.7813 12.9965 18.7159 13.0416L18.4887 13.1988C18.1265 13.4492 17.6967 13.5833 17.2564 13.5833H14.1252L11.1538 18.5355C10.9809 18.8236 10.6695 18.9999 10.3335 18.9999H10.1221C10.1043 18.9999 10.0865 18.9982 10.069 18.9947C9.92232 18.9654 9.82719 18.8227 9.85657 18.676L10.8751 13.5832L7.84167 13.5836Z" fill="context-fill" fill-opacity="context-fill-opacity"/>
</svg>

Before

Width:  |  Height:  |  Size: 1004 B

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -1,5 +1,9 @@
#filter dumbComments emptyLines substitution
# This Source Code Form is subject to the terms of the Mozilla Public
# 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/.
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M6.49891 12.2216C6.2136 12.2074 5.99839 12.4631 6.05591 12.7429C6.27686 13.8176 6.80813 14.8085 7.58934 15.5897C8.37055 16.3709 9.36142 16.9022 10.4361 17.1231C10.7159 17.1807 10.9716 16.9654 10.9574 16.6801C10.947 16.4712 10.9228 16.2631 10.8848 16.0573C10.8439 15.835 10.6093 15.715 10.3969 15.7922L10.3654 15.8036C10.1811 15.8706 9.97752 15.7752 9.91117 15.5907C9.84515 15.4071 9.94 15.2047 10.1233 15.138L10.1559 15.1262C10.3683 15.0489 10.4715 14.8064 10.3606 14.6093C10.2775 14.4616 10.1864 14.3184 10.0877 14.1806C9.95583 13.9963 9.69182 13.9872 9.53158 14.1475L9.50608 14.173C9.368 14.3111 9.14414 14.3111 9.00607 14.173C8.86799 14.0349 8.86799 13.811 9.00607 13.673L9.03077 13.6483C9.19054 13.4885 9.18148 13.2253 8.99778 13.0937C8.85932 12.9945 8.71555 12.903 8.56712 12.8195C8.37063 12.709 8.12886 12.8121 8.05204 13.024L8.04067 13.0554C7.97418 13.2388 7.77177 13.3338 7.58816 13.2678C7.4038 13.2015 7.3084 12.998 7.37533 12.8139L7.38687 12.7821C7.46406 12.5697 7.34402 12.3352 7.12179 12.2942C6.91596 12.2563 6.70788 12.2321 6.49891 12.2216Z" fill="context-fill" fill-opacity="context-fill-opacity"/>
<path d="M12.7429 6.05602C12.463 5.99849 12.2074 6.21371 12.2216 6.49902C12.232 6.70798 12.2562 6.91607 12.2942 7.1219C12.3351 7.34412 12.5697 7.46417 12.7821 7.38698L12.8136 7.37551C12.9979 7.30854 13.2015 7.404 13.2678 7.58847C13.3338 7.77203 13.239 7.97442 13.0557 8.04111L13.0231 8.05295C12.8106 8.13026 12.7075 8.3728 12.8184 8.56985C12.9015 8.71759 12.9926 8.86071 13.0913 8.99856C13.2232 9.18283 13.4872 9.19192 13.6474 9.03168L13.6729 9.00617C13.811 8.8681 14.0348 8.8681 14.1729 9.00617C14.311 9.14425 14.311 9.36811 14.1729 9.50619L14.1483 9.53084C13.9885 9.69062 13.9976 9.95388 14.1814 10.0854C14.3198 10.1845 14.4635 10.2759 14.612 10.3593C14.8087 10.4699 15.0506 10.3668 15.1277 10.1548L15.1395 10.1224C15.2062 9.93889 15.409 9.84419 15.5925 9.91082C15.7761 9.97748 15.8709 10.1804 15.8041 10.364L15.7923 10.3965C15.715 10.6091 15.8352 10.8441 16.0578 10.885C16.2634 10.9229 16.4713 10.9471 16.6801 10.9575C16.9654 10.9717 17.1806 10.716 17.1231 10.4362C16.9021 9.36153 16.3709 8.37066 15.5896 7.58945C14.8084 6.80824 13.8176 6.27696 12.7429 6.05602Z" fill="context-fill" fill-opacity="context-fill-opacity"/>
<path d="M6.49891 12.2216C6.2136 12.2074 5.99839 12.4631 6.05591 12.7429C6.27686 13.8176 6.80813 14.8085 7.58934 15.5897C8.37055 16.3709 9.36142 16.9022 10.4361 17.1231C10.7159 17.1807 10.9716 16.9654 10.9574 16.6801C10.947 16.4712 10.9228 16.2631 10.8848 16.0573C10.8439 15.835 10.6093 15.715 10.3969 15.7922L10.3654 15.8036C10.1811 15.8706 9.97752 15.7752 9.91117 15.5907C9.84515 15.4071 9.94 15.2047 10.1233 15.138L10.1559 15.1262C10.3683 15.0489 10.4715 14.8064 10.3606 14.6093C10.2775 14.4616 10.1864 14.3184 10.0877 14.1806C9.95583 13.9963 9.69182 13.9872 9.53158 14.1475L9.50608 14.173C9.368 14.3111 9.14414 14.3111 9.00607 14.173C8.86799 14.0349 8.86799 13.811 9.00607 13.673L9.03077 13.6483C9.19054 13.4885 9.18148 13.2253 8.99778 13.0937C8.85932 12.9945 8.71555 12.903 8.56711 12.8195C8.37063 12.709 8.12886 12.8121 8.05204 13.024L8.04067 13.0554C7.97418 13.2388 7.77177 13.3338 7.58816 13.2678C7.4038 13.2015 7.3084 12.998 7.37533 12.8139L7.38687 12.7821C7.46406 12.5697 7.34402 12.3352 7.12179 12.2942C6.91596 12.2563 6.70788 12.2321 6.49891 12.2216Z" fill="context-fill" fill-opacity="context-fill-opacity"/>
<path d="M12.7429 6.05602C12.463 5.99849 12.2074 6.21371 12.2216 6.49902C12.232 6.70798 12.2562 6.91607 12.2942 7.1219C12.3351 7.34412 12.5697 7.46417 12.7821 7.38698L12.8136 7.37551C12.9979 7.30854 13.2015 7.404 13.2678 7.58847C13.3338 7.77203 13.239 7.97442 13.0557 8.04111L13.0231 8.05295C12.8106 8.13026 12.7075 8.3728 12.8184 8.56985C12.9015 8.71759 12.9926 8.86071 13.0913 8.99856C13.2232 9.18283 13.4872 9.19191 13.6474 9.03168L13.6729 9.00617C13.811 8.8681 14.0348 8.8681 14.1729 9.00617C14.311 9.14425 14.311 9.36811 14.1729 9.50619L14.1483 9.53084C13.9885 9.69062 13.9976 9.95388 14.1814 10.0854C14.3198 10.1844 14.4635 10.2759 14.612 10.3593C14.8087 10.4699 15.0506 10.3668 15.1277 10.1548L15.1395 10.1224C15.2062 9.93889 15.409 9.84419 15.5925 9.91082C15.7761 9.97748 15.8709 10.1804 15.8041 10.364L15.7923 10.3965C15.715 10.6091 15.8352 10.8441 16.0578 10.885C16.2634 10.9229 16.4713 10.9471 16.6801 10.9575C16.9654 10.9717 17.1806 10.716 17.1231 10.4362C16.9021 9.36153 16.3709 8.37066 15.5896 7.58945C14.8084 6.80824 13.8176 6.27696 12.7429 6.05602Z" fill="context-fill" fill-opacity="context-fill-opacity"/>
<path d="M15.717 11.7797C15.4943 11.7321 15.2642 11.8474 15.1863 12.0615L15.1592 12.136C15.0924 12.3195 14.8896 12.4142 14.7061 12.3474C14.5227 12.2807 14.428 12.0779 14.4947 11.8944L14.5221 11.8189C14.6004 11.6036 14.4968 11.3661 14.2941 11.2595C14.0161 11.1133 13.7508 10.9439 13.5011 10.7533C13.3186 10.6139 13.059 10.6202 12.8966 10.7826L12.8396 10.8396C12.7015 10.9776 12.4777 10.9776 12.3396 10.8396C12.2015 10.7015 12.2015 10.4776 12.3396 10.3395L12.3966 10.2826C12.5589 10.1202 12.5653 9.8605 12.4259 9.67801C12.2352 9.42834 12.0659 9.16308 11.9196 8.88504C11.813 8.6823 11.5756 8.57876 11.3603 8.657L11.2847 8.68445C11.1013 8.75113 10.8985 8.65648 10.8317 8.47304C10.765 8.28955 10.8596 8.0867 11.0431 8.01995L11.1177 7.99281C11.3317 7.91494 11.447 7.68484 11.3995 7.46212C11.3323 7.14735 11.2919 6.82754 11.2788 6.50613C11.2666 6.20909 11.0236 5.96094 10.7296 6.00512C9.54523 6.1831 8.44321 6.73579 7.5895 7.5895C6.73579 8.44321 6.1831 9.54523 6.00512 10.7296C5.96094 11.0236 6.20909 11.2666 6.50613 11.2788C6.82754 11.2919 7.14735 11.3323 7.46212 11.3995C7.68484 11.447 7.91494 11.3317 7.99281 11.1177L8.01995 11.0431C8.0867 10.8596 8.28955 10.765 8.47304 10.8317C8.65648 10.8985 8.75113 11.1013 8.68445 11.2847L8.657 11.3603C8.57876 11.5756 8.6823 11.813 8.88504 11.9196C9.16308 12.0659 9.42834 12.2352 9.67801 12.4259C9.8605 12.5653 10.1202 12.5589 10.2826 12.3966L10.3395 12.3396C10.4776 12.2015 10.7015 12.2015 10.8396 12.3396C10.9776 12.4777 10.9776 12.7015 10.8396 12.8396L10.7826 12.8966C10.6202 13.059 10.6139 13.3186 10.7533 13.5011C10.9439 13.7508 11.1133 14.0161 11.2595 14.2941C11.3661 14.4968 11.6036 14.6004 11.8189 14.5221L11.8944 14.4947C12.0779 14.428 12.2807 14.5227 12.3474 14.7061C12.4142 14.8896 12.3195 15.0924 12.136 15.1592L12.0615 15.1863C11.8474 15.2642 11.7321 15.4943 11.7797 15.717C11.8469 16.0318 11.8872 16.3516 11.9004 16.673C11.9125 16.97 12.1556 17.2182 12.4496 17.174C13.6339 16.996 14.7359 16.4434 15.5896 15.5896C16.4434 14.7359 16.996 13.6339 17.174 12.4496C17.2182 12.1556 16.97 11.9125 16.673 11.9004C16.3516 11.8872 16.0318 11.8469 15.717 11.7797Z" fill="context-fill" fill-opacity="context-fill-opacity"/>
</svg>

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

View File

@@ -1,3 +1,7 @@
#filter dumbComments emptyLines substitution
# This Source Code Form is subject to the terms of the Mozilla Public
# 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/.
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M9.9076 10.428H13.479L11.7747 8.04188L12.1816 7.75126L12.5884 7.46064L14.7079 10.428H17.113C17.4542 10.428 17.6952 10.7623 17.5873 11.0861L16.0346 15.7442C15.8985 16.1525 15.5163 16.428 15.0859 16.428H8.52743C8.097 16.428 7.71486 16.1525 7.57875 15.7442L6.02604 11.0861C5.91812 10.7623 6.1591 10.428 6.50038 10.428H8.6787L10.7982 7.46064C11.2369 6.84645 12.1497 6.84646 12.5884 7.46064L12.1816 7.75126L11.7747 8.04188C11.7348 7.98604 11.6518 7.98604 11.6119 8.04188L9.9076 10.428ZM10.8067 13.928C10.8067 13.3757 11.2544 12.928 11.8067 12.928C12.359 12.928 12.8067 13.3757 12.8067 13.928C12.8067 14.4802 12.359 14.928 11.8067 14.928C11.2544 14.928 10.8067 14.4802 10.8067 13.928Z" fill="context-fill" fill-opacity="context-fill-opacity"/>
</svg>

Before

Width:  |  Height:  |  Size: 890 B

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -1,3 +1,7 @@
#filter dumbComments emptyLines substitution
# This Source Code Form is subject to the terms of the Mozilla Public
# 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/.
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7 9.75C7 9.88807 7.11193 10 7.25 10H8.11358C8.25165 10 8.36358 9.88807 8.36358 9.75V9.57141C8.36358 9.09866 8.77134 8.71422 9.27272 8.71422H10.6363C11.1377 8.71422 11.5454 9.09868 11.5454 9.57141V9.75C11.5454 9.88807 11.6574 10 11.7954 10H12.2046C12.3426 10 12.4546 9.88807 12.4546 9.75V9.57141C12.4546 9.09866 12.8623 8.71422 13.3637 8.71422H14.7273C15.2287 8.71422 15.6364 9.09868 15.6364 9.57141V9.75C15.6364 9.88807 15.7484 10 15.8864 10H16.75C16.8881 10 17 9.88807 17 9.75V7.42859C17 7.19182 16.7964 7 16.5454 7H7.45457C7.20345 7 7 7.19193 7 7.42859V9.75ZM18 16.4545V12.6364L17.9999 12.6363C17.9999 11.7339 17.4232 10.9999 16.7142 11H7.28575C6.57675 11 6.0001 11.7339 6.0001 12.6363L6 16.4544C6 16.7557 6.19193 16.9999 6.42859 16.9999C6.66536 16.9999 6.85719 16.7556 6.85719 16.4544V15.9089L17.1428 15.909V16.4545C17.1428 16.7559 17.3347 17 17.5714 17C17.8082 17 18 16.7557 18 16.4545Z" fill="context-fill" fill-opacity="context-fill-opacity"/>
<path d="M16.7139 11C17.4229 10.9999 18 11.7344 18 12.6367V16.4541C18 16.7553 17.8081 17 17.5713 17C17.3347 16.9999 17.1426 16.7554 17.1426 16.4541V15.9092H6.85742V16.4541C6.85742 16.7553 6.66543 16.9999 6.42871 17C6.19205 17 6 16.7554 6 16.4541V12.6367C6 11.7344 6.57713 11 7.28613 11H16.7139ZM16.5459 7C16.7967 7.00024 17 7.19209 17 7.42871V9.75C17 9.88807 16.8881 10 16.75 10H15.8867C15.7486 10 15.6367 9.88807 15.6367 9.75V9.57129C15.6367 9.0987 15.2288 8.714 14.7275 8.71387H13.3633C12.8621 8.71409 12.4542 9.09873 12.4541 9.57129V9.75C12.4541 9.88807 12.3422 10 12.2041 10H11.7959C11.6578 10 11.5459 9.88807 11.5459 9.75V9.57129C11.5458 9.09875 11.1379 8.71409 10.6367 8.71387H9.27246C8.77124 8.714 8.36335 9.09867 8.36328 9.57129V9.75C8.36328 9.88807 8.25135 10 8.11328 10H7.25C7.11193 10 7 9.88807 7 9.75V7.42871C7 7.19219 7.2032 7.00024 7.4541 7H16.5459Z" fill="context-fill" fill-opacity="context-fill-opacity"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -1,3 +1,7 @@
#filter dumbComments emptyLines substitution
# This Source Code Form is subject to the terms of the Mozilla Public
# 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/.
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12.2102 17.9021C13.031 17.9021 13.7036 17.2409 13.7036 16.4201H10.7167C10.7167 17.2409 11.3779 17.9135 12.2102 17.9021ZM17.215 14.425C16.7704 13.9461 15.9267 13.2165 15.9267 10.8338C15.9267 9.03253 14.6613 7.57327 12.9512 7.23125V6.74103C12.9512 6.5445 12.8731 6.35601 12.7341 6.21704C12.5952 6.07807 12.4067 6 12.2102 6C12.0136 6 11.8251 6.07807 11.6862 6.21704C11.5472 6.35601 11.4691 6.5445 11.4691 6.74103V7.23125C9.75904 7.58467 8.49359 9.03253 8.49359 10.8338C8.49359 13.2165 7.66135 13.9461 7.20533 14.425C7.06853 14.5732 7.00012 14.7556 7.00012 14.9266C7.00012 15.3028 7.30794 15.6676 7.74115 15.679H16.6791C17.1238 15.679 17.4202 15.3142 17.4202 14.9266C17.4202 14.7442 17.3632 14.5732 17.215 14.425Z" fill="context-fill" fill-opacity="context-fill-opacity"/>
</svg>

Before

Width:  |  Height:  |  Size: 882 B

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -1,3 +1,7 @@
#filter dumbComments emptyLines substitution
# This Source Code Form is subject to the terms of the Mozilla Public
# 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/.
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M6 14.9291V6.34512C6 6.25062 6.06948 6.1705 6.16303 6.15714L6.70303 6.07999C8.51235 5.82152 10.3555 6.19373 11.9227 7.13407C11.9707 7.16283 12 7.21464 12 7.27054V17.1804C10.6894 16.1975 9.14493 15.5735 7.51931 15.3703L6.24936 15.2116C6.1069 15.1938 6 15.0727 6 14.9291Z" fill="context-fill" fill-opacity="context-fill-opacity"/>
<path d="M19 14.9291L19 6.34512C19 6.25062 18.9305 6.1705 18.837 6.15714L18.297 6.08C16.4876 5.82152 14.6445 6.19373 13.0773 7.13407C13.0293 7.16283 13 7.21464 13 7.27054L13 17.1804C14.3106 16.1975 15.8551 15.5735 17.4807 15.3703L18.7506 15.2116C18.8931 15.1938 19 15.0727 19 14.9291Z" fill="context-fill" fill-opacity="context-fill-opacity"/>

Before

Width:  |  Height:  |  Size: 785 B

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@@ -1,3 +1,7 @@
#filter dumbComments emptyLines substitution
# This Source Code Form is subject to the terms of the Mozilla Public
# 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/.
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M9.5 5.5C8.39543 5.5 7.5 6.39543 7.5 7.5V17.5C7.5 17.9091 7.74563 18.2608 8.09744 18.4157C8.34017 18.5225 8.60536 18.3946 8.79289 18.2071L11.2929 15.7071C11.6834 15.3166 12.3166 15.3166 12.7071 15.7071L15.2071 18.2071C15.3946 18.3946 15.6598 18.5225 15.9026 18.4157C16.2544 18.2608 16.5 17.9091 16.5 17.5V7.5C16.5 6.39543 15.6046 5.5 14.5 5.5H9.5Z" fill="context-fill" fill-opacity="context-fill-opacity"/>
<path d="M14.5 5.5C15.6046 5.5 16.5 6.39543 16.5 7.5V17.5C16.5 18.0177 16.1067 18.4438 15.6025 18.4951V18.4951C15.5372 18.4982 15.4736 18.4736 15.4274 18.4274L12.7071 15.7071C12.3166 15.3166 11.6834 15.3166 11.2929 15.7071L8.57259 18.4274C8.52636 18.4736 8.46277 18.4982 8.39746 18.4951V18.4951C7.89333 18.4438 7.5 18.0177 7.5 17.5V7.5C7.5 6.39543 8.39543 5.5 9.5 5.5H14.5Z" fill="context-fill" fill-opacity="context-fill-opacity"/>
</svg>

Before

Width:  |  Height:  |  Size: 559 B

After

Width:  |  Height:  |  Size: 780 B

View File

@@ -1,3 +1,7 @@
#filter dumbComments emptyLines substitution
# This Source Code Form is subject to the terms of the Mozilla Public
# 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/.
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.5 18C16.0899 18 19 15.0899 19 11.5C19 7.91015 16.0899 5 12.5 5C8.91015 5 6 7.91015 6 11.5C6 12.9273 6.46006 14.2472 7.23998 15.3194C7.26155 15.8859 7.18156 16.4553 7 17L6.5 18.5L9.44403 17.2383C10.355 17.7244 11.3953 18 12.5 18ZM9.5 13C10.0523 13 10.5 12.5523 10.5 12C10.5 11.4477 10.0523 11 9.5 11C8.94772 11 8.5 11.4477 8.5 12C8.5 12.5523 8.94772 13 9.5 13ZM12.5 13C13.0523 13 13.5 12.5523 13.5 12C13.5 11.4477 13.0523 11 12.5 11C11.9477 11 11.5 11.4477 11.5 12C11.5 12.5523 11.9477 13 12.5 13ZM16.5 12C16.5 12.5523 16.0523 13 15.5 13C14.9477 13 14.5 12.5523 14.5 12C14.5 11.4477 14.9477 11 15.5 11C16.0523 11 16.5 11.4477 16.5 12Z" fill="context-fill" fill-opacity="context-fill-opacity"/>
<path d="M12.5 5C16.0899 5 19 7.91015 19 11.5C19 15.0899 16.0899 18 12.5 18C11.3952 18 10.3553 17.7235 9.44434 17.2373L6.5 18.5L7 17C7.18199 16.454 7.26137 15.8832 7.23926 15.3154C6.46065 14.2437 6 12.926 6 11.5C6 7.91015 8.91015 5 12.5 5ZM9.5 11C8.94772 11 8.5 11.4477 8.5 12C8.5 12.5523 8.94772 13 9.5 13C10.0523 13 10.5 12.5523 10.5 12C10.5 11.4477 10.0523 11 9.5 11ZM12.5 11C11.9477 11 11.5 11.4477 11.5 12C11.5 12.5523 11.9477 13 12.5 13C13.0523 13 13.5 12.5523 13.5 12C13.5 11.4477 13.0523 11 12.5 11ZM15.5 11C14.9477 11 14.5 11.4477 14.5 12C14.5 12.5523 14.9477 13 15.5 13C16.0523 13 16.5 12.5523 16.5 12C16.5 11.4477 16.0523 11 15.5 11Z" fill="context-fill" fill-opacity="context-fill-opacity"/>
</svg>

Before

Width:  |  Height:  |  Size: 849 B

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@@ -1,3 +1,7 @@
#filter dumbComments emptyLines substitution
# This Source Code Form is subject to the terms of the Mozilla Public
# 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/.
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M8.5 6.5C7.39543 6.5 6.5 7.39543 6.5 8.5V15.5C6.5 16.6046 7.39543 17.5 8.5 17.5H15.5C16.6046 17.5 17.5 16.6046 17.5 15.5V8.5C17.5 7.39543 16.6046 6.5 15.5 6.5H8.5ZM14.8763 9.82925C15.0581 9.62143 15.0371 9.30555 14.8293 9.12371C14.6214 8.94187 14.3056 8.96293 14.1237 9.17075L10.9756 12.7685L9.85355 11.6464C9.65829 11.4512 9.34171 11.4512 9.14645 11.6464C8.95118 11.8417 8.95118 12.1583 9.14645 12.3536L10.6464 13.8536C10.7443 13.9514 10.8783 14.0043 11.0166 13.9997C11.1549 13.9951 11.2852 13.9334 11.3763 13.8293L14.8763 9.82925Z" fill="context-fill" fill-opacity="context-fill-opacity"/>
<path d="M15.5 6.5C16.6046 6.5 17.5 7.39543 17.5 8.5V15.5C17.5 16.6046 16.6046 17.5 15.5 17.5H8.5C7.39543 17.5 6.5 16.6046 6.5 15.5V8.5C6.5 7.39543 7.39543 6.5 8.5 6.5H15.5ZM14.8291 9.12402C14.6213 8.9422 14.3059 8.96314 14.124 9.1709L10.9756 12.7686L9.85352 11.6465C9.65825 11.4512 9.34175 11.4512 9.14648 11.6465C8.95122 11.8417 8.95122 12.1583 9.14648 12.3535L10.6465 13.8535C10.7443 13.9514 10.8783 14.0046 11.0166 14C11.1549 13.9954 11.2849 13.9332 11.376 13.8291L14.876 9.8291C15.0578 9.62131 15.0369 9.30587 14.8291 9.12402Z" fill="context-fill" fill-opacity="context-fill-opacity"/>
</svg>

Before

Width:  |  Height:  |  Size: 744 B

After

Width:  |  Height:  |  Size: 938 B

View File

@@ -1,3 +1,7 @@
#filter dumbComments emptyLines substitution
# This Source Code Form is subject to the terms of the Mozilla Public
# 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/.
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="12.5" cy="11.5" r="5.5" fill="context-fill" fill-opacity="context-fill-opacity"/>
</svg>

Before

Width:  |  Height:  |  Size: 197 B

After

Width:  |  Height:  |  Size: 441 B

View File

@@ -0,0 +1,7 @@
#filter dumbComments emptyLines substitution
# This Source Code Form is subject to the terms of the Mozilla Public
# 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/.
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.9443 8C10.3317 8 9.06974 8.91667 8.65452 10.0327C8.40496 10.7035 7.87607 11.2394 7.2245 11.5074C6.37374 11.8572 5.7777 12.6935 5.7777 13.6667C5.7777 14.9553 6.82236 16 8.11102 16H15.8887C17.1774 16 18.2221 14.9553 18.2221 13.6667C18.2221 12.6706 17.5975 11.8179 16.7151 11.4836C16.0411 11.2283 15.4871 10.6892 15.2237 10.0055C14.7986 8.90172 13.5432 8 11.9443 8ZM7.71729 9.68401C7.56689 10.0883 7.24313 10.4185 6.84421 10.5825C5.63154 11.0811 4.77771 12.2742 4.77771 13.6667C4.77771 15.5076 6.27008 17 8.11102 17H15.8887C17.7297 17 19.222 15.5076 19.222 13.6667C19.222 12.2414 18.3276 11.0251 17.0694 10.5485C16.6559 10.3918 16.3158 10.0587 16.1569 9.64606C15.5643 8.10776 13.9022 7 11.9443 7C9.97032 7 8.29694 8.12601 7.71729 9.68401Z" fill="context-fill" fill-opacity="context-fill-opacity"/>
</svg>

View File

@@ -1,3 +1,7 @@
#filter dumbComments emptyLines substitution
# This Source Code Form is subject to the terms of the Mozilla Public
# 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/.
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.06652 10.5825C7.46543 10.4185 7.7892 10.0883 7.9396 9.68401C8.51925 8.12601 10.1927 7 12.1666 7C14.1245 7 15.7867 8.10776 16.3793 9.64606C16.5382 10.0587 16.8783 10.3918 17.2918 10.5485C18.55 11.0251 19.4444 12.2414 19.4444 13.6667C19.4444 15.5076 17.9521 17 16.1111 17H8.33333C6.49238 17 5 15.5076 5 13.6667C5 12.2742 5.85384 11.0811 7.06652 10.5825Z" fill="context-fill" fill-opacity="context-fill-opacity"/>
<path d="M12.167 7C14.1246 7.00014 15.7853 8.10794 16.3775 9.64606C16.5365 10.0589 16.8768 10.3921 17.2905 10.5487C18.5493 11.0249 19.4443 12.2413 19.4443 13.667C19.4442 15.5077 17.9521 16.9999 16.1113 17H8.33301C6.49231 16.9998 5.00017 15.5077 5 13.667C5 12.2742 5.85428 11.081 7.06742 10.5826C7.46651 10.4187 7.79046 10.0884 7.94089 9.684C8.52044 8.12606 10.1931 7 12.167 7Z" fill="context-fill" fill-opacity="context-fill-opacity"/>
</svg>

Before

Width:  |  Height:  |  Size: 566 B

After

Width:  |  Height:  |  Size: 783 B

View File

@@ -1,3 +1,7 @@
#filter dumbComments emptyLines substitution
# This Source Code Form is subject to the terms of the Mozilla Public
# 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/.
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M9.03033 7.96967C9.32322 8.26256 9.32322 8.73744 9.03033 9.03033L6.06066 12L9.03033 14.9697C9.32322 15.2626 9.32322 15.7374 9.03033 16.0303C8.73744 16.3232 8.26256 16.3232 7.96967 16.0303L4.46967 12.5303C4.17678 12.2374 4.17678 11.7626 4.46967 11.4697L7.96967 7.96967C8.26256 7.67678 8.73744 7.67678 9.03033 7.96967ZM14.9697 7.96967C15.2626 7.67678 15.7374 7.67678 16.0303 7.96967L19.5303 11.4697C19.8232 11.7626 19.8232 12.2374 19.5303 12.5303L16.0303 16.0303C15.7374 16.3232 15.2626 16.3232 14.9697 16.0303C14.6768 15.7374 14.6768 15.2626 14.9697 14.9697L17.9393 12L14.9697 9.03033C14.6768 8.73744 14.6768 8.26256 14.9697 7.96967Z" fill="context-fill" fill-opacity="context-fill-opacity"/>
</svg>

Before

Width:  |  Height:  |  Size: 844 B

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -1,3 +1,7 @@
#filter dumbComments emptyLines substitution
# This Source Code Form is subject to the terms of the Mozilla Public
# 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/.
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.5014 6C15.743 6 17.9984 7.12567 17.9987 8.13923C17.9987 8.13934 17.9988 8.13943 17.9989 8.13943C17.999 8.13943 17.9991 8.13952 17.9991 8.13964C17.9988 9.14934 15.7433 10.275 12.5014 10.275C9.25943 10.275 7 9.14915 7 8.13943C7 7.12582 9.25931 6 12.5014 6ZM12.5014 12.7477C9.25943 12.7477 7 11.6218 7 10.6121V9.96112C7 9.79071 7.20349 9.69343 7.34531 9.78791C8.45886 10.5297 10.3128 10.9991 12.5014 10.9991C14.6854 10.9991 16.5414 10.5301 17.6528 9.78881C17.7948 9.69415 17.9987 9.79147 17.9987 9.96206V10.6121C17.9987 11.6219 15.7436 12.7477 12.5014 12.7477ZM7 13.1043C7 14.114 9.25943 15.2398 12.5014 15.2398C14.6757 15.2398 16.405 14.733 17.3106 14.0947C17.4111 14.002 17.5194 13.9169 17.6277 13.8317L17.6278 13.8316C17.8678 13.5957 17.9993 13.3441 17.9993 13.1043V12.4328C17.9993 12.2625 17.7961 12.1653 17.6545 12.2598C16.5321 13.0082 14.6611 13.4911 12.502 13.4911C10.3423 13.4911 8.46807 13.0081 7.34514 12.2596C7.20349 12.1651 7.00042 12.2623 7.00033 12.4325L7 13.1043ZM12.5014 17.732C9.25943 17.732 7 16.6061 7 15.5964L7.00033 14.9246C7.00042 14.7544 7.20349 14.6573 7.34513 14.7517C8.46807 15.5002 10.3423 15.9832 12.502 15.9832C14.6611 15.9832 16.5321 15.5003 17.6545 14.7519C17.7961 14.6574 17.9993 14.7546 17.9993 14.9249V15.5964C17.9993 15.8362 17.8678 16.0878 17.6278 16.3237L17.6277 16.3238C17.5194 16.409 17.4111 16.4941 17.3106 16.5869C16.405 17.2251 14.6757 17.732 12.5014 17.732Z" fill="context-fill" fill-opacity="context-fill-opacity"/>
<path d="M17.999 15.5967C17.9989 15.8364 17.8678 16.0884 17.6279 16.3242C17.5197 16.4093 17.411 16.4942 17.3105 16.5869C16.4049 17.2252 14.6752 17.7324 12.501 17.7324C9.25954 17.7323 7.00044 16.6063 7 15.5967L7.0006 14.9247C7.00075 14.7546 7.20374 14.6575 7.34534 14.7519C8.46831 15.5003 10.3425 15.9834 12.502 15.9834C14.6609 15.9834 16.5319 15.5005 17.6543 14.7522C17.7959 14.6578 17.999 14.755 17.999 14.9253V15.5967ZM17.999 13.1045C17.9989 13.3442 17.8678 13.5962 17.6279 13.832C17.5197 13.9172 17.4111 14.002 17.3105 14.0947C16.4049 14.733 14.6752 15.2402 12.501 15.2402C9.25947 15.2401 7.00034 14.1141 7 13.1045L7.0006 12.4326C7.00075 12.2624 7.20374 12.1653 7.34534 12.2597C8.4683 13.0081 10.3424 13.4912 12.502 13.4912C14.6609 13.4912 16.5319 13.0083 17.6543 12.26C17.7959 12.1656 17.999 12.2628 17.999 12.4331V13.1045ZM17.999 10.6123C17.9988 11.622 15.7429 12.748 12.501 12.748C9.25941 12.7479 7.00026 11.6219 7 10.6123V9.96135C7 9.79094 7.20348 9.69366 7.34531 9.78812C8.45881 10.5298 10.3126 10.999 12.501 10.999C14.6849 10.999 16.5416 10.5304 17.6531 9.7892C17.7951 9.69455 17.999 9.79188 17.999 9.96248V10.6123ZM12.501 6C15.6413 6 17.8566 7.05643 17.9922 8.04395L17.999 8.13965C17.9987 9.14935 15.7429 10.2754 12.501 10.2754C9.25945 10.2753 7.00032 9.14926 7 8.13965C7 7.12608 9.2591 6.00011 12.501 6Z" fill="context-fill" fill-opacity="context-fill-opacity"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@@ -1,3 +1,7 @@
#filter dumbComments emptyLines substitution
# This Source Code Form is subject to the terms of the Mozilla Public
# 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/.
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M5.33435 5.38869C5.25328 5.47796 5.19794 5.58755 5.17422 5.70578C5.14355 5.85845 4.94155 8.95378 7.82755 11.8391C10.5707 14.5804 12.3725 14.7081 13.5361 14.6171C13.6102 14.6113 13.6833 14.6375 13.7358 14.69L17.8461 18.8003C17.9437 18.898 18.102 18.898 18.1997 18.8003L18.7888 18.2112C18.8864 18.1136 18.8864 17.9553 18.7888 17.8577L13.6137 12.6826C13.516 12.5849 13.516 12.4266 13.6137 12.329L14.3174 11.6252C14.4151 11.5276 14.5734 11.5276 14.671 11.6252L15.3562 12.3104C15.4812 12.4354 15.6508 12.5056 15.8276 12.5056C16.0043 12.5056 16.1739 12.4354 16.2989 12.3104L19.9268 8.68256C20.0244 8.58493 20.0244 8.42663 19.9268 8.329L19.3377 7.73989C19.24 7.64226 19.0817 7.64226 18.9841 7.73989L16.0043 10.7197C15.9067 10.8173 15.7484 10.8173 15.6508 10.7197L15.6137 10.6826C15.516 10.5849 15.516 10.4266 15.6137 10.329L18.5934 7.34922C18.6911 7.25159 18.6911 7.0933 18.5934 6.99567L18.0043 6.40656C17.9067 6.30893 17.7484 6.30893 17.6508 6.40656L14.671 9.38634C14.5734 9.48397 14.4151 9.48397 14.3174 9.38634L14.2803 9.34922C14.1827 9.25159 14.1827 9.0933 14.2803 8.99567L17.2601 6.01589C17.3577 5.91826 17.3577 5.75997 17.2601 5.66234L16.671 5.07322C16.5734 4.97559 16.4151 4.97559 16.3174 5.07322L12.6896 8.70111C12.5646 8.82613 12.4944 8.99567 12.4944 9.17245C12.4944 9.34922 12.5646 9.51876 12.6896 9.64378L13.3748 10.329C13.4724 10.4266 13.4724 10.5849 13.3748 10.6826L12.671 11.3863C12.5734 11.4839 12.4151 11.4839 12.3174 11.3863L6.29889 5.36511C6.21355 5.27991 6.1067 5.21946 5.98972 5.19018C5.87274 5.1609 5.75001 5.1639 5.6346 5.19886C5.51919 5.23382 5.41542 5.29943 5.33435 5.38869ZM6.98405 18.605C7.08168 18.7026 7.23997 18.7026 7.3376 18.605L10.2649 15.6777C10.39 15.5526 10.3492 15.3404 10.1898 15.2638C9.94189 15.1448 9.69988 15.0139 9.46457 14.8716C9.36429 14.8109 9.23517 14.8247 9.15226 14.9076L6.39509 17.6623C6.29739 17.76 6.29735 17.9183 6.39501 18.016L6.98405 18.605Z" fill="context-fill" fill-opacity="context-fill-opacity"/>
<path d="M12.6896 8.70099C12.5647 8.82601 12.4943 8.99589 12.4943 9.17267C12.4944 9.34929 12.5648 9.51842 12.6896 9.64337L13.3752 10.3289C13.4728 10.4265 13.4728 10.5848 13.3752 10.6825L12.6711 11.3865C12.5735 11.4841 12.4152 11.4841 12.3175 11.3864L6.29901 5.36505C6.21367 5.27985 6.10642 5.21952 5.98944 5.19025C5.87263 5.16106 5.7502 5.16418 5.63495 5.19904C5.51955 5.23399 5.41524 5.29923 5.33417 5.38849C5.2531 5.47776 5.19773 5.58764 5.17401 5.70587C5.14326 5.8601 4.94246 8.95423 7.82733 11.8387C10.5702 14.5797 12.3721 14.7081 13.5358 14.6172C13.6099 14.6114 13.6829 14.6376 13.7354 14.6902L17.8459 18.8006C17.9435 18.8982 18.1018 18.8982 18.1994 18.8006L18.7892 18.2108C18.8868 18.1132 18.8868 17.9548 18.7892 17.8572L13.6135 12.6825C13.5159 12.5848 13.5159 12.4265 13.6135 12.3289L14.3175 11.6248C14.4152 11.5272 14.5735 11.5272 14.6711 11.6248L15.3566 12.3104C15.4816 12.4352 15.6507 12.5056 15.8273 12.5057C16.0041 12.5057 16.174 12.4353 16.299 12.3104L19.9269 8.68245C20.0246 8.58482 20.0246 8.42653 19.9269 8.3289L19.3381 7.74004C19.2404 7.64242 19.0822 7.64241 18.9845 7.74002L16.0041 10.7196C15.9065 10.8172 15.7482 10.8172 15.6506 10.7196L15.6135 10.6825C15.5159 10.5848 15.5159 10.4265 15.6135 10.3289L18.5939 7.34945C18.6915 7.25182 18.6915 7.09351 18.5939 6.99587L18.0041 6.40611C17.9065 6.30847 17.7482 6.30848 17.6506 6.40614L14.6711 9.38646C14.5735 9.48412 14.4152 9.48413 14.3175 9.38649L14.2804 9.34942C14.1828 9.2518 14.1828 9.09353 14.2804 8.99589L17.26 6.01546C17.3576 5.91783 17.3576 5.75955 17.26 5.66193L16.6711 5.07308C16.5735 4.97545 16.4152 4.97545 16.3175 5.07308L12.6896 8.70099ZM6.39481 17.662C6.29714 17.7596 6.29706 17.9179 6.39463 18.0155L6.98359 18.6051C7.08119 18.7028 7.23954 18.7029 7.33721 18.6052L10.2652 15.6781C10.3904 15.553 10.3496 15.3407 10.1901 15.2641C9.94213 15.1449 9.69992 15.0137 9.46452 14.8713C9.36425 14.8106 9.23513 14.8244 9.15223 14.9072L6.39481 17.662Z" fill="context-fill" fill-opacity="context-fill-opacity"/>
</svg>

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@@ -1,3 +1,7 @@
#filter dumbComments emptyLines substitution
# This Source Code Form is subject to the terms of the Mozilla Public
# 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/.
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7 12.5C7 9.80047 8.31653 6.59643 10.7399 5.40704C11.271 5.14637 11.8684 5 12.5 5C13.1316 5 13.729 5.14637 14.2601 5.40705C16.6835 6.59643 18 9.80047 18 12.5C18 15.5376 15.5376 18 12.5 18C9.46243 18 7 15.5376 7 12.5Z" fill="context-fill" fill-opacity="context-fill-opacity"/>
<path d="M12.5 5C13.1319 5 13.7295 5.14656 14.2606 5.40753C16.6831 6.59781 18 9.80094 18 12.5V12.5C18 15.5376 15.5376 18 12.5 18C9.46243 18 7 15.5376 7 12.5V12.5C7 9.80119 8.31627 6.5984 10.7383 5.40792C11.2698 5.1467 11.8677 5 12.5 5Z" fill="context-fill" fill-opacity="context-fill-opacity"/>
</svg>

Before

Width:  |  Height:  |  Size: 428 B

After

Width:  |  Height:  |  Size: 642 B

View File

@@ -1,3 +1,7 @@
#filter dumbComments emptyLines substitution
# This Source Code Form is subject to the terms of the Mozilla Public
# 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/.
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M8 18.2705H7V12.7705V6.77048C7 6.52606 7.17671 6.31747 7.4178 6.27729L8.49856 6.09716C9.84606 5.87258 11.2297 6.03924 12.4854 6.57737C13.5205 7.02102 14.6578 7.17143 15.7727 7.01216L17.4293 6.77551C17.5728 6.75501 17.7181 6.79779 17.8276 6.89276C17.9371 6.98773 18 7.12554 18 7.27048V13.2705C18 13.5226 17.8122 13.7353 17.562 13.7666L15.0917 14.0754C14.0044 14.2113 12.9004 14.0692 11.883 13.6622C11.2361 13.4034 10.5457 13.2705 9.849 13.2705L8 13.2705V18.2705Z" fill="context-fill" fill-opacity="context-fill-opacity"/>
</svg>

Before

Width:  |  Height:  |  Size: 633 B

After

Width:  |  Height:  |  Size: 877 B

View File

@@ -1,3 +1,7 @@
#filter dumbComments emptyLines substitution
# This Source Code Form is subject to the terms of the Mozilla Public
# 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/.
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M6 8C6 6.89543 6.89539 6 8 6H10.5C11.1531 6 11.7087 6.4174 11.9147 7H17C18.1046 7 19 7.89543 19 9V9.5H6V8ZM6 10.5V15C6 16.1046 6.89539 17 8 17H17C18.1046 17 19 16.1046 19 15V10.5H6Z" fill="context-fill" fill-opacity="context-fill-opacity"/>
<path d="M19 15C19 16.1046 18.1046 17 17 17H8C6.89539 17 6 16.1046 6 15V10.5H19V15ZM10.5 6C11.1531 6 11.7091 6.4174 11.915 7H17C18.1046 7 19 7.89543 19 9V9.5H6V8C6 6.89543 6.89539 6 8 6H10.5Z" fill="context-fill" fill-opacity="context-fill-opacity"/>
</svg>

Before

Width:  |  Height:  |  Size: 393 B

After

Width:  |  Height:  |  Size: 598 B

View File

@@ -0,0 +1,7 @@
#filter dumbComments emptyLines substitution
# This Source Code Form is subject to the terms of the Mozilla Public
# 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/.
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M13 18H11V17H13V18ZM13 15.75C13.2761 15.75 13.5 15.9739 13.5 16.25C13.5 16.5261 13.2761 16.75 13 16.75H11C10.7239 16.75 10.5 16.5261 10.5 16.25C10.5 15.9739 10.7239 15.75 11 15.75H13ZM12 5C14.4853 5 16.5 7.01472 16.5 9.5C16.5 11.1267 15.6362 12.5507 14.3428 13.3408C13.8645 13.633 13.5 14.1173 13.5 14.6777C13.5 14.817 13.4786 14.9512 13.4385 15.0771C13.346 15.3674 13.0341 15.5 12.7295 15.5H12.25V12.2168C12.4207 12.1768 12.5804 12.1054 12.7129 12.0283C12.9122 11.9125 13.0794 11.7741 13.1768 11.6768L12.8232 11.3232C12.754 11.3925 12.621 11.5042 12.4619 11.5967C12.2993 11.6912 12.1362 11.75 12 11.75C11.8638 11.75 11.7007 11.6912 11.5381 11.5967C11.379 11.5042 11.246 11.3925 11.1768 11.3232L10.8232 11.6768C10.9206 11.7741 11.0879 11.9125 11.2871 12.0283C11.4196 12.1054 11.5793 12.1768 11.75 12.2168V15.5H11.2705C10.9659 15.5 10.654 15.3674 10.5615 15.0771C10.5214 14.9512 10.5 14.817 10.5 14.6777C10.5 14.1173 10.1355 13.633 9.65723 13.3408C8.36377 12.5507 7.5 11.1267 7.5 9.5C7.5 7.01472 9.51472 5 12 5Z" fill="context-fill" fill-opacity="context-fill-opacity"/>
</svg>

View File

@@ -1,3 +1,7 @@
#filter dumbComments emptyLines substitution
# This Source Code Form is subject to the terms of the Mozilla Public
# 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/.
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M9.5 7C9.22386 7 9 7.22386 9 7.5H16C16 7.22386 15.7761 7 15.5 7H9.5Z" fill="context-fill" fill-opacity="context-fill-opacity"/>
<path d="M7 11C7 10.4477 7.44772 10 8 10H17C17.5523 10 18 10.4477 18 11V16C18 16.5523 17.5523 17 17 17H8C7.44771 17 7 16.5523 7 16V11Z" fill="context-fill" fill-opacity="context-fill-opacity"/>

Before

Width:  |  Height:  |  Size: 584 B

After

Width:  |  Height:  |  Size: 828 B

View File

@@ -1,3 +1,7 @@
#filter dumbComments emptyLines substitution
# This Source Code Form is subject to the terms of the Mozilla Public
# 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/.
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M6 6.5C6 6.22386 6.22386 6 6.5 6H10.5C10.7761 6 11 6.22386 11 6.5V10.5C11 10.7761 10.7761 11 10.5 11H6.5C6.22386 11 6 10.7761 6 10.5V6.5Z" fill="context-fill" fill-opacity="context-fill-opacity"/>
<path d="M6 13.5C6 13.2239 6.22386 13 6.5 13H10.5C10.7761 13 11 13.2239 11 13.5V17.5C11 17.7761 10.7761 18 10.5 18H6.5C6.22386 18 6 17.7761 6 17.5V13.5Z" fill="context-fill" fill-opacity="context-fill-opacity"/>

Before

Width:  |  Height:  |  Size: 951 B

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -1,3 +1,7 @@
#filter dumbComments emptyLines substitution
# This Source Code Form is subject to the terms of the Mozilla Public
# 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/.
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M10 7.5C10 8.32843 9.32843 9 8.5 9C7.67157 9 7 8.32843 7 7.5C7 6.67157 7.67157 6 8.5 6C9.32843 6 10 6.67157 10 7.5Z" fill="context-fill" fill-opacity="context-fill-opacity"/>
<path d="M14 7.5C14 8.32843 13.3284 9 12.5 9C11.6716 9 11 8.32843 11 7.5C11 6.67157 11.6716 6 12.5 6C13.3284 6 14 6.67157 14 7.5Z" fill="context-fill" fill-opacity="context-fill-opacity"/>

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -1,3 +1,7 @@
#filter dumbComments emptyLines substitution
# This Source Code Form is subject to the terms of the Mozilla Public
# 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/.
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M14.625 6.75C14.1268 6.74863 13.6342 6.85514 13.1811 7.06222C12.728 7.2693 12.325 7.57204 12 7.94963C11.675 7.57204 11.2721 7.2693 10.8189 7.06222C10.3658 6.85514 9.87322 6.74863 9.37502 6.75C8.68778 6.75107 8.01607 6.95442 7.44365 7.33472C6.87123 7.71501 6.42343 8.2554 6.1561 8.88851C5.88877 9.52161 5.81373 10.2194 5.94036 10.8949C6.06698 11.5703 6.38965 12.1936 6.86814 12.6869L11.6876 17.6123C11.7284 17.6538 11.777 17.6868 11.8306 17.7093C11.8842 17.7319 11.9418 17.7435 12 17.7435C12.0584 17.7435 12.1162 17.7318 12.17 17.7091C12.2238 17.6864 12.2725 17.6532 12.3133 17.6114L16.9639 12.8391C17.491 12.3672 17.8621 11.7462 18.0282 11.0584C18.1942 10.3707 18.1473 9.64872 17.8936 8.98827C17.6399 8.32782 17.1915 7.76008 16.6077 7.36034C16.024 6.9606 15.3325 6.74775 14.625 6.75Z" fill="context-fill" fill-opacity="context-fill-opacity"/>
</svg>

Before

Width:  |  Height:  |  Size: 955 B

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -1,3 +1,7 @@
#filter dumbComments emptyLines substitution
# This Source Code Form is subject to the terms of the Mozilla Public
# 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/.
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M9 8.5C9 8.22386 9.22386 8 9.5 8H15.5C15.7761 8 16 8.22386 16 8.5C16 8.77614 15.7761 9 15.5 9H9.5C9.22386 9 9 8.77614 9 8.5Z" fill="context-fill" fill-opacity="context-fill-opacity"/>
<path d="M9 9.5C8.72386 9.5 8.5 9.72386 8.5 10C8.5 10.2761 8.72386 10.5 9 10.5H16C16.2761 10.5 16.5 10.2761 16.5 10C16.5 9.72386 16.2761 9.5 16 9.5H9Z" fill="context-fill" fill-opacity="context-fill-opacity"/>

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@@ -1,3 +1,7 @@
#filter dumbComments emptyLines substitution
# This Source Code Form is subject to the terms of the Mozilla Public
# 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/.
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M8.12165 14.4062L7.23707 14.9535C6.90872 15.1566 6.92477 15.6395 7.26589 15.8204L11.9185 18.2878C12.065 18.3655 12.2405 18.3655 12.387 18.2878L17.0396 15.8204C17.3808 15.6395 17.3968 15.1566 17.0684 14.9535L16.1838 14.4061L12.8555 16.1713C12.416 16.4044 11.8895 16.4044 11.4499 16.1713L8.12165 14.4062Z" fill="context-fill" fill-opacity="context-fill-opacity"/>
<path d="M7.26575 9.82038C6.92462 9.63947 6.90857 9.15662 7.23693 8.95346L11.8895 6.0748C12.0507 5.97506 12.2545 5.97507 12.4157 6.0748L17.0683 8.95346C17.3967 9.15662 17.3806 9.63947 17.0395 9.82038L12.3869 12.2878C12.2404 12.3655 12.0649 12.3655 11.9184 12.2878L7.26575 9.82038Z" fill="context-fill" fill-opacity="context-fill-opacity"/>

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -1,3 +1,7 @@
#filter dumbComments emptyLines substitution
# This Source Code Form is subject to the terms of the Mozilla Public
# 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/.
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M16.239 9.5199H13.289L14.489 5.9949C14.714 5.2449 13.814 4.6449 13.214 5.2449L7.214 11.2449C6.764 11.6949 7.064 12.5199 7.739 12.5199H11.689L9.489 17.0449C9.264 17.7949 10.164 18.3949 10.764 17.7949L16.764 10.7949C17.214 10.3449 16.914 9.5199 16.239 9.5199Z" fill="context-fill" fill-opacity="context-fill-opacity"/>
</svg>

Before

Width:  |  Height:  |  Size: 429 B

After

Width:  |  Height:  |  Size: 673 B

View File

@@ -1,3 +1,7 @@
#filter dumbComments emptyLines substitution
# This Source Code Form is subject to the terms of the Mozilla Public
# 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/.
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.5 7C6.39543 7 5.5 7.89543 5.5 9V15C5.5 16.1046 6.39543 17 7.5 17H16.5C17.6046 17 18.5 16.1046 18.5 15V9C18.5 7.89543 17.6046 7 16.5 7H7.5ZM8.32926 8.62372C8.12144 8.44188 7.80556 8.46294 7.62372 8.67075C7.44188 8.87857 7.46294 9.19445 7.67075 9.3763L11.6708 12.8763C11.8593 13.0412 12.1407 13.0412 12.3293 12.8763L16.3293 9.3763C16.5371 9.19445 16.5581 8.87857 16.3763 8.67075C16.1945 8.46294 15.8786 8.44188 15.6708 8.62372L12 11.8356L8.32926 8.62372Z" fill="context-fill" fill-opacity="context-fill-opacity"/>
<path d="M16.5 7C17.6046 7 18.5 7.89543 18.5 9V15C18.5 16.1046 17.6046 17 16.5 17H7.5C6.39543 17 5.5 16.1046 5.5 15V9C5.5 7.89543 6.39543 7 7.5 7H16.5ZM16.376 8.6709C16.1941 8.46315 15.8787 8.4422 15.6709 8.62402L12 11.8359L8.3291 8.62402C8.12131 8.4422 7.80587 8.46315 7.62402 8.6709C7.4422 8.87869 7.46315 9.19412 7.6709 9.37598L11.6709 12.876C11.8594 13.0409 12.1406 13.0409 12.3291 12.876L16.3291 9.37598C16.5369 9.19413 16.5578 8.87869 16.376 8.6709Z" fill="context-fill" fill-opacity="context-fill-opacity"/>
</svg>

Before

Width:  |  Height:  |  Size: 667 B

After

Width:  |  Height:  |  Size: 862 B

View File

@@ -1,3 +1,7 @@
#filter dumbComments emptyLines substitution
# This Source Code Form is subject to the terms of the Mozilla Public
# 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/.
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M9.5 16.4375L6.72361 17.8257C6.39116 17.9919 6 17.7502 6 17.3785V8.9375C6 8.78012 6.0741 8.63193 6.2 8.5375L9.5 6.0625V16.4375ZM10.5 16.4375L13.5 17.9375V7.875L10.5 6V16.4375ZM14.5 7.85417V17.875L17.765 15.8344C17.9112 15.743 18 15.5828 18 15.4104V6.99652C18 6.80713 17.893 6.634 17.7236 6.5493L17.2595 6.31726C17.099 6.23702 16.9079 6.24892 16.7586 6.34845L14.5 7.85417Z" fill="context-fill" fill-opacity="context-fill-opacity"/>
<path d="M13.5 7.87402V17.9375L10.5 16.4375V5.99902L13.5 7.87402ZM9.5 16.4375L6.72363 17.8262C6.39134 17.9922 6.00028 17.7503 6 17.3789V8.9375C6.00001 8.78013 6.0743 8.63153 6.2002 8.53711L9.5 6.0625V16.4375ZM16.7588 6.34863C16.9081 6.24915 17.0993 6.23715 17.2598 6.31738L17.7236 6.5498C17.8928 6.63447 17.9998 6.80696 18 6.99609V15.4102C18 15.5826 17.9108 15.7426 17.7646 15.834L14.5 17.875V7.85449L16.7588 6.34863Z" fill="context-fill" fill-opacity="context-fill-opacity"/>
</svg>

Before

Width:  |  Height:  |  Size: 583 B

After

Width:  |  Height:  |  Size: 824 B

View File

@@ -1,3 +1,7 @@
#filter dumbComments emptyLines substitution
# This Source Code Form is subject to the terms of the Mozilla Public
# 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/.
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M18.3584 13.2143C17.4293 13.9316 16.2645 14.3584 15 14.3584C11.9624 14.3584 9.5 11.8959 9.5 8.85836C9.5 7.59385 9.92673 6.42902 10.644 5.5C7.70505 6.12369 5.5 8.73352 5.5 11.8584C5.5 15.4482 8.41015 18.3584 12 18.3584C15.1248 18.3584 17.7347 16.1533 18.3584 13.2143Z" fill="context-fill" fill-opacity="context-fill-opacity"/>
<path d="M10.6445 5.5C9.92711 6.42905 9.5 7.59379 9.5 8.8584C9.50002 11.8959 11.9624 14.3584 15 14.3584C16.2646 14.3584 17.4284 13.9302 18.3574 13.2129C17.7342 16.1525 15.1253 18.3584 12 18.3584C8.41016 18.3584 5.50002 15.4482 5.5 11.8584C5.5 8.73339 7.70531 6.12351 10.6445 5.5Z" fill="context-fill" fill-opacity="context-fill-opacity"/>
</svg>

Before

Width:  |  Height:  |  Size: 478 B

After

Width:  |  Height:  |  Size: 686 B

View File

@@ -1,3 +1,7 @@
#filter dumbComments emptyLines substitution
# This Source Code Form is subject to the terms of the Mozilla Public
# 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/.
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M17.9984 14.669V5.53883C17.9984 5.36682 17.9174 5.20515 17.7808 5.10382C17.6433 5.00202 17.4672 4.97284 17.3068 5.02626L10.3692 7.29966C10.1508 7.37112 10.0023 7.5784 10.0023 7.81223V14.4569C10.0023 14.8509 9.68804 15.1711 9.30041 15.1711H8.52806C7.13186 15.1711 6 16.028 6 17.0853C6 18.1426 7.13186 19 8.52817 19C9.92438 19 11.0562 18.1426 11.0562 17.0853V17.0845L11.0606 17.0853V9.64029L16.9402 7.71378V12.0806C16.9309 12.4666 16.622 12.7774 16.2401 12.7774H15.4722C14.0759 12.7774 12.9441 13.6344 12.9441 14.6917C12.9441 15.7494 14.0757 16.6059 15.4722 16.6059C16.8685 16.6059 18 15.7494 18 14.6917C17.9998 14.6839 17.9986 14.6765 17.9985 14.669L17.9984 14.669Z" fill="context-fill" fill-opacity="context-fill-opacity"/>
</svg>

Before

Width:  |  Height:  |  Size: 836 B

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -1,3 +1,7 @@
#filter dumbComments emptyLines substitution
# This Source Code Form is subject to the terms of the Mozilla Public
# 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/.
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12 6H10C8.89543 6 8 6.89543 8 8V16C8 17.1046 8.89543 18 10 18H15C16.1046 18 17 17.1046 17 16V11H14C12.8954 11 12 10.1046 12 9V6Z" fill="context-fill" fill-opacity="context-fill-opacity"/>
<path d="M13 6L17 10H14C13.4477 10 13 9.55228 13 9V6Z" fill="context-fill" fill-opacity="context-fill-opacity"/>

Before

Width:  |  Height:  |  Size: 414 B

After

Width:  |  Height:  |  Size: 658 B

View File

@@ -1,3 +1,7 @@
#filter dumbComments emptyLines substitution
# This Source Code Form is subject to the terms of the Mozilla Public
# 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/.
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M7.5 7.5C5.015 9.985 5.015 14.015 7.5 16.5C9.985 18.985 14.015 18.985 16.5 16.5C16.915 16.085 16.915 15.415 16.5 15C16.305 14.805 16.055 14.705 15.8 14.69C15.555 14.675 15.305 14.575 15.115 14.385C14.7 13.97 14.7 13.3 15.115 12.885L16 12C17.38 10.62 17.38 8.38 16 7C13.79 4.79 9.985 5.015 7.5 7.5ZM9.25 14.75C8.835 15.165 8.165 15.165 7.75 14.75C7.335 14.335 7.335 13.665 7.75 13.25C8.165 12.835 8.835 12.835 9.25 13.25C9.665 13.665 9.665 14.335 9.25 14.75ZM8.75 11.25C8.335 11.665 7.665 11.665 7.25 11.25C6.835 10.835 6.835 10.165 7.25 9.75C7.665 9.335 8.335 9.335 8.75 9.75C9.165 10.165 9.165 10.835 8.75 11.25ZM11.25 8.75C10.835 9.165 10.165 9.165 9.75 8.75C9.335 8.335 9.335 7.665 9.75 7.25C10.165 6.835 10.835 6.835 11.25 7.25C11.665 7.665 11.665 8.335 11.25 8.75ZM14.75 9.25C14.335 9.665 13.665 9.665 13.25 9.25C12.835 8.835 12.835 8.165 13.25 7.75C13.665 7.335 14.335 7.335 14.75 7.75C15.165 8.165 15.165 8.835 14.75 9.25Z" fill="context-fill" fill-opacity="context-fill-opacity"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Some files were not shown because too many files have changed in this diff Show More