Compare commits

..

383 Commits

Author SHA1 Message Date
mr. m
5cc13cf77f fix: Fixed adding tabs to essentials with a different container, b=(closes #8019), c=compact-mode, tabs 2025-05-04 12:29:44 +02:00
mr. m
56275abbaf fix: Fixed small issue on compact mode, b=(no-bug), c=compact-mode 2025-05-04 02:18:41 +02:00
mr. m
6ccbdcbdfa fix: Fixed duplicate newtabs when replace newtab is disabled, b=(no-bug), c=workspaces 2025-05-03 17:04:12 +02:00
mr. m
ebbec7f0b2 Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-05-03 16:37:32 +02:00
mr. m
a7d0719877 chore: Removed invalid height for workspace indicators, b=(no-bug), c=workspaces 2025-05-03 16:37:21 +02:00
Mr. M
1831e3e2fa chore: Bump version, b=(no-bug), c=no-component 2025-05-03 12:29:16 +02:00
Mr. M
fc2c119b94 fix: Fixed jittering when opening compact mode on windows, b=(closes #7990), c=compact-mode, workspaces 2025-05-03 12:24:36 +02:00
mr. m
163b276f7e Merge pull request #7989 from alvinsjoy/dev
fix: use list-style rather than menu for appMenu items
2025-05-03 12:05:25 +02:00
Mr. M
72ab38b9af fix: Fixed compact mode collapsed toolbar, b=(no-bug), c=compact-mode 2025-05-03 11:32:20 +02:00
Alvin Joy
991437ab2f Add !important 2025-05-03 10:03:21 +05:30
Alvin Joy
57679238de Merge branch 'dev' of https://github.com/alvinsjoy/zen-desktop into dev 2025-05-03 09:08:29 +05:30
Mr. M
d800c20905 fix: Fixed some issues before release, b=(no-bug), c=common, compact-mode, workspaces 2025-05-02 23:39:14 +02:00
Alvin Joy
2550b2fe41 fix: use list-style-image rather than menu-image for appMenu items, b=(no-bug), c=images 2025-05-03 00:43:39 +05:30
Mr. M
8a72d253aa style: Fixed minimum floating size of 4px for compact mode, b=(no-bug), c=compact-mode 2025-05-02 18:38:34 +02:00
Mr. M
71558dca71 fix: Fixed sidebar not appearing from the right side on linux, b=(no-bug), c=common, compact-mode 2025-05-02 18:04:05 +02:00
Mr. M
6dbc5bf6db Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-05-02 17:12:22 +02:00
Mr. M
98448b9572 chore: Added support for hidden sidebar with opened urlbar, b=(no-bug), c=compact-mode 2025-05-02 17:11:47 +02:00
mr. m
79bd7794a5 chore: Disabled acuweather for newtabs, b=(no-bug), c=no-component 2025-05-02 17:06:34 +02:00
mr. m
3ab70ff9a8 fix: Fixed sidebar jittering on windows, b=(no-bug), c=compact-mode 2025-05-02 14:22:21 +02:00
mr. m
e1894d5fb4 chore: Added semi-support for different container cross-window drag and drop, b=(no-bug), c=tabs 2025-05-02 12:27:32 +02:00
mr. m
58646d1d08 fix: Fixed right side compact mode not opening when element separation is 0 on windows and linux, b=(no-bug), c=compact-mode 2025-05-02 12:04:01 +02:00
Mr. M
2132f44812 fix: Fixed compact mode twitching on windows, b=(bug #7973), c=compact-mode, welcome 2025-05-02 10:06:17 +02:00
Mr. M
62f56d7949 feat: Added default engine selection step on the onboarding, b=(bug #7000), c=welcome, workspaces 2025-05-02 09:29:54 +02:00
Mr. M
33ac98c2b3 fix: Fixed a few things before release, b=(no-bug), c=common, compact-mode, mods, tabs, welcome 2025-05-02 01:10:44 +02:00
mr. m
8f962816ea chore: Fixed swiping tabs, b=(no-bug), c=tabs 2025-05-01 21:01:24 +02:00
mr. m
e95363adc8 fix: Fixed switching workspaces on containerized essentials, b=(no-bug), c=workspaces 2025-05-01 20:52:50 +02:00
mr. m
6250e9dfb2 fix: Common fixed before release, b=(no-bug), c=tabs, workspaces 2025-05-01 20:51:20 +02:00
Mr. M
0f57148418 fix: Changing workspace to a different container, b=(no-bug), c=tabs, workspaces 2025-05-01 20:31:21 +02:00
mr. m
9bd02871e2 fix: Small fixes before release, b=(closes #7940), c=tabs, workspaces 2025-05-01 17:36:56 +02:00
mr. m
f1fbe78f93 style: Improved how workspace containers are set, b=(no-bug), c=tabs 2025-05-01 17:17:01 +02:00
Mr. M
02c429993c fix: Fixed compact mode sidebar showing an extra pixel, b=(no-bug), c=compact-mode 2025-05-01 17:04:51 +02:00
Mr. M
beab17074d fix: Fixed opening glance on split views, b=(no-bug), c=workspaces 2025-05-01 16:56:09 +02:00
Mr. M
f608d6a8ce Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-05-01 16:33:21 +02:00
Mr. M
16c2ff8449 chore: Updated to firefox 138.0.1, b=(no-bug), c=no-component 2025-05-01 16:32:47 +02:00
mr. m
5c61ca688f Merge pull request #7961 from BrielOtero/improve-download-animation
Fix: Ensure download animation works properly when tabs are right
2025-05-01 16:19:07 +02:00
Mr. M
095a5f38f3 style: Styled a bit better the URL bar, b=(no-bug), c=common 2025-05-01 15:49:08 +02:00
Gabriel
696757003b Fixed download animation when tabs are on the right 2025-05-01 15:36:34 +02:00
Mr. M
9300004cbd fix: Fixed downloads panels, b=(no-bug), c=common 2025-05-01 15:32:09 +02:00
Mr. M
9c13275aca Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-05-01 14:27:55 +02:00
Mr. M
5c6b4736be fix: Fixed essentials jumping around when switching workspaces, b=(no-bug), c=tabs 2025-05-01 14:27:49 +02:00
mr. m
c566cc32fe Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-05-01 14:27:37 +02:00
mr. m
8dc0e6b4bf fix: Fixed urlbar having high margins, b=(no-bug), c=common 2025-05-01 14:27:32 +02:00
mr. m
f8f3f8abcb Merge pull request #7959 from zen-browser/revert-7958-patch-3 2025-05-01 14:14:19 +02:00
mr. m
22414da6a8 Revert "Oklch to Oklab (even better gradients)" 2025-05-01 05:14:10 -07:00
mr. m
150c94c0e9 Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-05-01 14:13:04 +02:00
mr. m
d845853643 feat: Added support for double clicking the resize bar, b=(no-bug), c=common 2025-05-01 14:12:55 +02:00
mr. m
ffbf4a703b Merge pull request #7958 from BlueFox1616/patch-3 2025-05-01 14:12:36 +02:00
BlueFox1616
649378b695 Oklch to Oklab (even better gradients)
Not 100% sure it will work as intended but it should give way better gradients

Signed-off-by: BlueFox1616 <149878174+BlueFox1616@users.noreply.github.com>
2025-05-01 15:03:08 +03:00
mr. m
8aa964bc78 chore: Pre-release changes, b=(no-bug), c=common, mods, tabs, workspaces 2025-05-01 13:20:01 +02:00
mr. m
6c89cd4a26 Merge pull request #7956 from BlueFox1616/patch-2
Update lch to oklch (changed gradients to a better colorspace)
2025-05-01 12:10:46 +02:00
BlueFox1616
2ba4ffb4f8 Update lch to oklch
Update to a better gradient 

Signed-off-by: BlueFox1616 <149878174+BlueFox1616@users.noreply.github.com>
2025-05-01 13:06:22 +03:00
mr-cheff
38753ab8b0 Update monthly issue metrics 2025-05-01 02:42:01 +00:00
mr. m
9da8a28345 feat: Added swipe support for containerized essentials, b=(no-bug), c=common, workspaces 2025-04-30 23:54:17 +02:00
mr. m
a4e79d4738 chore: Removed installer / uninstaller telemetry from firefox, b=(bug #7000), c=no-component 2025-04-30 21:16:28 +02:00
mr. m
44cff2b498 fix: Fixed opening urlbar on compact mode, b=(no-bug), c=compact-mode 2025-04-30 20:42:13 +02:00
mr. m
5fe326aad8 chore: Add support for 9 essentials dynamic layout, b=(no-bug), c=workspaces 2025-04-30 20:12:44 +02:00
mr. m
b4a5c1504c chore: Add support for 6 essentials dynamic layout, b=(no-bug), c=tabs, workspaces 2025-04-30 20:08:19 +02:00
mr. m
270254c760 style: Format before twilight release, b=(no-bug), c=common 2025-04-30 19:59:28 +02:00
mr. m
a71f24a1fa Merge pull request #7945 from sporocyst/1.12tsidebarOrder 2025-04-30 19:58:40 +02:00
mr. m
90bce607b0 fix: Fixed adding tabs to essentials from pinned tabs, b=(no-bug), c=tabs 2025-04-30 19:50:57 +02:00
mr. m
1540d6b411 chore: Make gradients use LCH for browser backgrounds, b=(no-bug), c=common, workspaces 2025-04-30 19:45:36 +02:00
sporocyst
b51af13bb0 Make Move sidebar to right works
Signed-off-by: sporocyst <sporocyst.tw@gmail.com>
2025-05-01 01:44:35 +08:00
mr. m
3eaeb4a0a1 chore: Added an outline to the urlbar on light mode, b=(no-bug), c=common 2025-04-30 19:29:05 +02:00
mr. m
aa6a03b5f9 chore: Added better stylings for mute/unmute button, b=(no-bug), c=tabs 2025-04-30 19:25:10 +02:00
mr. m
3ca5b24e25 chore: Improved essentials layouts and URL bar stylings, b=(no-bug), c=common, tabs, workspaces 2025-04-30 19:21:47 +02:00
mr. m
b074bf0690 fix: Fixed pinned tabs not restoring correctly, b=(no-bug), c=workspaces 2025-04-30 18:15:15 +02:00
mr. m
3130c13c30 chore: Removed unused default prefs, b=(no-bug), c=no-component 2025-04-30 15:03:49 +02:00
mr. m
f0b60391a8 fix: Fixed PGO builds for intel macos, b=(no-bug), c=common, workspaces 2025-04-30 14:47:46 +02:00
mr. m
a4086122aa fix: Essential tabs layout rendering to use better available space, b=(no-bug), c=common, tabs, workspaces 2025-04-30 14:32:35 +02:00
mr. m
fe9ee85688 Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-04-30 01:13:15 +02:00
mr. m
2cbe662019 fix: Fixed swiping workspaces when having container specific essentials, b=(no-bug), c=workspaces 2025-04-30 01:13:08 +02:00
Mr. M
be54733b13 chore: Updated to firefox 138, b=(no-bug), c=common, tabs 2025-04-29 22:59:06 +02:00
Mr. M
053bc28e68 chore: Invoke less connections at startup by locally bundling icons, b=(bug #7000), c=common, images, welcome 2025-04-29 20:23:31 +02:00
Mr. M
f38bea67ab chore: Added an icon for 'report broken site', b=(no-bug), c=no-component 2025-04-29 20:09:08 +02:00
Mr. M
8eec660d03 fix: Improved the way essentials are rendered, b=(no-bug), c=tabs, workspaces 2025-04-29 19:58:47 +02:00
Mr. M
79e731e89c test: Enable workspaces when doing tests, b=(no-bug), c=tests, workspaces 2025-04-29 18:27:00 +02:00
Mr. M
4f49ff3290 fix: Fixed PGO builds and test runs, b=(no-bug), c=no-component 2025-04-29 18:18:48 +02:00
Mr. M
0dac5522fe chore: Refactored vertical tabs css and improved essentials layout, b=(no-bug), c=tabs, workspaces 2025-04-29 14:26:21 +02:00
Mr. M
a35ef0e735 chore: Made an URL revamp! Fixed lots of things in different layouts and made it's UI a bit cleaner, b=(no-bug), c=common 2025-04-29 12:52:05 +02:00
Mr. M
c5515fc3ae fix: Revert fix for linux addons not loading, b=(no-bug), c=common 2025-04-29 10:44:26 +02:00
Mr. M
2d40259c6e Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-04-29 10:08:09 +02:00
Mr. M
388e69cc38 fix: Fixed incorrect behavior when using ctrl+enter from new tab addressbar, b=(bug #7898), c=common 2025-04-29 10:08:03 +02:00
mr. m
d2df699ced Merge pull request #7921 from Slowlife01/cache-favicon 2025-04-29 09:51:30 +02:00
Slowlife01
be244cfe5a fix: cache initial pinned tabs favicon, b=(no-bug), c=tabs, welcome 2025-04-29 14:13:01 +07:00
mr. m
6ccf5053cd fix: Fixed spelling on function name and auto-workspace switching, b=(no-bug), c=workspaces 2025-04-28 11:48:34 +02:00
Mr. M
0f71de410b fix: Fixed browser focus on an essential not switching workspaces, b=(no-bug), c=workspaces 2025-04-27 23:56:51 +02:00
Mr. M
6b8f3b750e fix: Fixed duplicating tabs being stuck on 'New Tab' text, b=(closes #7900), c=welcome 2025-04-27 23:39:05 +02:00
mr. m
eebee9fb97 Merge pull request #7903 from zen-browser/twilight-fixes 2025-04-27 22:53:09 +02:00
Mr. M
21e0496d6f fix: Fixed switching workspaces with containerized essentials, b=(no-bug), c=tabs, workspaces 2025-04-27 22:51:25 +02:00
Mr. M
9abc7f1a82 fix: Fixed sizing issues on compact mode with essentials, b=(closes #7897), c=compact-mode 2025-04-27 22:51:09 +02:00
Mr. M
fa8354b133 feat: Changed favicon URLs to private-cdn.zen-browser.app, b=(no-bug), c=welcome 2025-04-27 22:04:14 +02:00
mr. m
b51c205538 Merge pull request #7901 from zen-browser/maximise-privacy 2025-04-27 21:46:48 +02:00
Mr. M
73842430ea fix: Fixed fetching icons on new windows, b=(no-bug), c=tabs, welcome 2025-04-27 21:46:39 +02:00
Mr. M
2b6f2980ce fix: Fixed constantly recalculating pinned tabs, b=(no-bug), c=tabs 2025-04-27 19:53:03 +02:00
Mr. M
3d9a40beb9 feat: Added better privacy and less connections on startup, b=(no-bug), c=common, configs, tabs, welcome 2025-04-27 19:52:06 +02:00
Mr. M
2365fa9fbc fix: Fixed glance freezing when opening tabs in other worksaces, b=(bug #7864), c=glance, workspaces 2025-04-27 17:35:22 +02:00
Mr. M
0890180889 fix: Fixed URL bar unfocusing when pressing the newtab button and fixed workspace switching animations, b=(no-bug), c=tabs, workspaces 2025-04-27 17:19:16 +02:00
Mr. M
6b6339867d chore: Improved and cleaned workspace fetching from cache, b=(no-bug), c=workspaces 2025-04-27 16:21:23 +02:00
Mr. M
69405bda0f fix: Panels UI not rendering addons correctly and overflow outside the screen on linux, b=(bug #7633), c=common 2025-04-27 16:15:23 +02:00
Mr. M
0f76a4814d chore: Optimize containerized essentials by only animating what we need, b=(no-bug), c=workspaces 2025-04-27 15:57:44 +02:00
Mr. M
81a02834de fix: Fixed Paste-And-Go always navigating in the current tab, even after ctrl+T, b=(no-bug), c=no-component 2025-04-27 15:33:34 +02:00
mr. m
fa4315808b Merge pull request #7869 from Pdzly/feature/import-export-mods 2025-04-27 10:21:47 +02:00
Mr. M
8acdb00570 chore: Finished last polishing details and updated l10n, b=(no-bug), c=no-component 2025-04-27 10:21:04 +02:00
mr. m
d4a45ca006 Merge branch 'dev' into feature/import-export-mods 2025-04-27 10:04:03 +02:00
mr. m
d5225be720 Merge pull request #7690 from BrielOtero/download-animation 2025-04-27 09:52:34 +02:00
Mr. M
8f7302f0ee chore: Finished details for new downloads animation, b=(no-bug), c=no-component 2025-04-27 09:51:19 +02:00
Mr. M
446d198eca Merge branch 'download-animation' of https://github.com/BrielOtero/desktop into download-animation 2025-04-27 09:21:36 +02:00
Mr. M
38111960f8 feat: Stop asking each new file type for confirmation dialog when downloading files, b=(no-bug), c=no-component 2025-04-27 09:21:16 +02:00
mr. m
b83a9d94c6 Merge branch 'dev' into download-animation 2025-04-27 09:20:46 +02:00
Gabriel
a536c708ca Added new animation when download button is not visible 2025-04-26 23:47:57 +02:00
Mr. M
53de112eb8 chore: Added better testing preferences and cleaned up a bit, b=(no-bug), c=common, tests, workspaces 2025-04-26 15:02:59 +02:00
Mr. M
6662e0fa09 chore: format project, b=(no-bug), c=split-view 2025-04-26 13:18:42 +02:00
Mr. M
e90f188c63 fix: Fixed alert boxes cutoff half way on split view, b=(closes #7564), c=split-view 2025-04-26 13:16:42 +02:00
Mr. M
e039ee1692 fix: Fixed moving split view tabs into other workspaces not working, b=(closes #7840), c=split-view, welcome, workspaces 2025-04-26 12:56:36 +02:00
Mr. M
68fc9fb635 fix: Weird tab sizing when switching workspaces on twilight, b=(no-bug), c=workspaces 2025-04-26 12:24:19 +02:00
Pdzly
940a2ebc3f Merge branch 'main' into feature/import-export-mods 2025-04-25 20:11:52 +02:00
Pdzly
7f3d9fd9e7 Remove redundant blank line in CSS file
Eliminated an unnecessary blank line for cleaner and more consistent formatting. This improves the readability and maintains coding style standards.
2025-04-25 20:08:29 +02:00
Pdzly
5f552bb749 Fix theme export behavior by cleaning up DOM elements
Ensure the temporary link element is removed after triggering the export action to prevent cluttering the DOM. Additionally, display a success message upon successful theme export for better user feedback.
2025-04-25 18:51:44 +02:00
Pdzly
a233c6be8c Add theme import and export functionality
Implemented theme import and export options in the Zen Theme Marketplace. Added buttons, event handlers, and logic for users to save themes to a file or load them from an external JSON file. Included success and error states for both actions.
2025-04-25 18:47:05 +02:00
Pdzly
0f3120e831 Fix typo in comment within ZenThemeMarketplaceChild module
Corrected a misspelling of "called" in a comment for better clarity and readability. No functional changes were made, as this was a non-code text adjustment.
2025-04-25 18:21:07 +02:00
mr. m
9c93a21421 fix: Fixed workspaces not switching when they need to if the target tab is an essential, b=(no-bug), c=workspaces 2025-04-25 15:33:49 +02:00
mr. m
8201b175bb Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-04-25 15:21:32 +02:00
mr. m
78ee43347e fix: Tab siwtcher crashing zen if no active tabs exist, b=(closes #7865), c=tabs, workspaces 2025-04-25 15:21:27 +02:00
mr. m
7b23e4de11 Merge pull request #7862 from Slowlife01/mute-tab
fix: Fixed media controller mute not updating tab mute state
2025-04-25 10:40:57 +02:00
mr. m
7a7bd01717 Merge pull request #7861 from Slowlife01/workspace-contextmenu
fix: Fixed workspace context menu not working, b=(no-bug), c=workspaces
2025-04-25 10:39:42 +02:00
Slowlife01
7bb113d1f0 fix: Fixed media controller mute not updating tab mute state, b=(closes #7798), c=media 2025-04-25 14:39:50 +07:00
Slowlife01
db5d318c74 fix: Fixed workspace context menu not working, b=(no-bug), c=workspaces 2025-04-25 14:27:00 +07:00
mr. m
139e7a8b25 Merge pull request #7857 from aaronhma/dev
Keep Firefox name consistent + fix typos
2025-04-25 07:52:32 +02:00
Aaron
390afc7e63 firefox -> Firefox 2025-04-24 20:00:35 -07:00
Mr. M
8fcf251916 feat: Improved tab switching for containerizedd essentials, b=(no-bug), c=common, workspaces 2025-04-25 00:17:54 +02:00
Mr. M
cad9a299c3 fix: Fixed tabs opening on the pinned tabs container when opening a background tab from glance, b=(closes #7850), c=tabs, workspaces 2025-04-24 23:53:20 +02:00
Mr. M
3e53c9e338 Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-04-24 23:29:26 +02:00
Gabriel
8386b1b3e8 Improved download animation with better animation and better code, added custom prefs 2025-04-24 21:49:21 +02:00
mr. m
6c44ccf319 Fixed builds for twilight on macos
Signed-off-by: mr. m  <91018726+mauro-balades@users.noreply.github.com>
2025-04-24 19:12:12 +02:00
mr. m
f0b96a1538 Merge pull request #7846 from Pdzly/main
Homepage button on Zen Mods settings page.
2025-04-24 14:38:04 +02:00
rooki
b490d91572 style: Add homepage button to theme marketplace with click functionality 2025-04-24 14:27:21 +02:00
rooki
48bf0504e8 style: Add pointer cursor to zen-preferences for better UX 2025-04-24 14:18:05 +02:00
mr. m
d15ee91ea0 Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-04-24 13:34:26 +02:00
mr. m
af6fd8796d fix: Fixed sandboxing build error die to SDK upgrade, b=(no-bug), c=no-component 2025-04-24 13:34:13 +02:00
mr. m
b7a5a878d6 Use macos 15 instead of latest
Signed-off-by: mr. m  <91018726+mauro-balades@users.noreply.github.com>
2025-04-24 03:29:41 -07:00
mr. m
68100bda86 Use latest macos for builds
Signed-off-by: mr. m  <91018726+mauro-balades@users.noreply.github.com>
2025-04-24 02:10:47 -07:00
mr. m
a7d652ddca fix: Installing packages on linux and windows builds, b=(no-bug), c=workflows 2025-04-24 07:50:02 +02:00
mr. m
b8f54de530 fix: Macos builds having the wrong SDK, b=(no-bug), c=workflows 2025-04-24 01:29:01 +02:00
mr. m
8f86e40b5d fix: Firefox 139 patch import for macos SDK, b=(no-bug), c=no-component 2025-04-24 00:50:42 +02:00
mr. m
aced6e170f fix: Fixed macos builds having a wrong SDK version, b=(no-bug), c=no-component 2025-04-24 00:28:38 +02:00
mr. m
988b7caf3d fix: Fixed macos builds having a wrong SDK version, b=(no-bug), c=no-component 2025-04-24 00:26:49 +02:00
mr. m
abb71a0feb chore: Changed the order of build steps to import patches before bootstraping, b=(no-bug), c=workflows 2025-04-23 23:47:14 +02:00
Mr. M
26e1a1c58d fix: Fixed macos SDK having an invalid version and download URL, b=(no-bug), c=tabs, workspaces 2025-04-23 23:44:45 +02:00
Mr. M
4b1ff82756 fix: More common twilight issues, b=(no-bug), c=workspaces 2025-04-23 20:51:07 +02:00
mr. m
f668a5c8f9 Merge pull request #7831 from lolipodass/horizontal-bar-split-view
add horizontal bar simular to vertical in split view
2025-04-23 14:21:24 +02:00
lolipodass
7f1a5eea20 fix missed }
Signed-off-by: lolipodass <56706038+lolipodass@users.noreply.github.com>
2025-04-23 14:55:00 +03:00
lolipodass
b24f8e27fa add horizontal bar simular to vertical in split view
Signed-off-by: lolipodass <56706038+lolipodass@users.noreply.github.com>
2025-04-23 14:37:38 +03:00
mr. m
aae3ed0872 fix: more small fixes after twilight feedback, b=(no-bug), c=tabs, common, compact-mode, workspaces 2025-04-23 13:23:10 +02:00
mr. m
6de445eaa1 chore: [security]: Finish up wrapping event listeners and other small fixes, b=(no-bug), c=configs, common, compact-mode, split-view, tabs, workspaces 2025-04-23 00:30:56 +02:00
mr. m
18b4925dd4 style: Formatted the project, b=(no-bug), c=no-component 2025-04-22 16:56:04 +02:00
mr. m
7dc4bb728b Fixed twilight builds with invalid eme enabling
Signed-off-by: mr. m  <91018726+mauro-balades@users.noreply.github.com>
2025-04-22 16:52:12 +02:00
mr. m
61efc6b834 Make .d.ts also count as typescript
Signed-off-by: mr. m  <91018726+mauro-balades@users.noreply.github.com>
2025-04-22 16:50:15 +02:00
mr. m
4cc687e2cd fix: Fixed DRM not installed for arm64 builds, b=(closes #7759), c=configs 2025-04-22 16:25:31 +02:00
mr. m
ff1795fe96 chore: Update surfer version, b=(no-bug), c=no-component 2025-04-22 16:04:48 +02:00
mr. m
92e49efdc6 fix: Removed dead link from readme, b=(closes #7817), c=configs 2025-04-22 15:31:16 +02:00
mr. m
f7a19e8b14 fix: Fixed macos builds having an invalid app ID, b=(no-bug), c=configs 2025-04-22 15:29:45 +02:00
mr. m
1fa8d217f9 fix: Fixed zen installer patch importing, b=(no-bug), c=no-component 2025-04-22 15:11:31 +02:00
mr. m
09ec1ad864 chore: Updated to ff 138.0 and recalculated patches, b=(no-bug), c=tabs, media 2025-04-22 15:08:34 +02:00
Mr. M
0eb1c7d419 fix: Fixed automatic twilight releases not working, b=(no-bug), c=workflows 2025-04-22 14:26:24 +02:00
mr. m
9824e18dbf Merge pull request #7761 from mbergo/fix-tab-switching-crash
Fix tab switching crash when creating new tabs (Issue #7716)
2025-04-22 14:24:20 +02:00
mr. m
b95306348d Merge pull request #7796 from cbackas/dev
Feature: Add checks for sound before auto toggling PiP
2025-04-22 14:24:08 +02:00
mr. m
de43cc6cd5 Merge pull request #7723 from zen-browser/update-ff-138
Update for firefox 138.0 beta 9
2025-04-22 14:23:45 +02:00
Mr. M
de435f8e7b fix: Fixed readme version for firefox, b=(no-bug), c=no-component 2025-04-22 14:20:30 +02:00
Mr. M
f2e006fde9 chore: Updated to firefox 138.0 RC builds, b=(no-bug), c=no-component 2025-04-22 14:20:08 +02:00
mr. m
5f7c3a41f1 Merge pull request #7771 from zen-browser/containerized-essentials
Containerized essentials
2025-04-22 14:11:46 +02:00
mr. m
3fbe8c0b6c Update build/ts/transform-ts.js
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: mr. m  <91018726+mauro-balades@users.noreply.github.com>
2025-04-22 14:11:39 +02:00
Mr. M
3933f77968 chore: Disable pref before testing, b=(no-bug), c=no-component 2025-04-22 14:11:01 +02:00
Mr. M
68fc8cd6ed chore: Containerized essentials should be ready for testing, b=(no-bug), c=tabs, workspaces 2025-04-22 14:10:50 +02:00
Mr. M
47fbae7e0d chore: Continued working on containerized essentials, b=(no-bug), c=tabs, workspaces 2025-04-22 00:33:15 +02:00
cbackas
82a4ffdc12 use browser.audioMuted cuz slowlife01 knows the api better than me 2025-04-21 11:40:21 -05:00
cbackas
6386f178d4 dont trigger PiP for tabs that are muted 2025-04-21 09:40:48 -05:00
Zac
102d226269 Merge branch 'zen-browser:dev' into dev 2025-04-21 08:40:44 -05:00
cbackas
b399247652 check if player is muted before auto opening PIP 2025-04-21 08:40:12 -05:00
Marcus Bergo
263db42602 Fix tab switching crash when creating new tabs (Issue #7716)
Problem:
The Zen browser was experiencing random crashes when switching tabs, particularly
when creating a new tab with Ctrl+T and typing a URL. The crash logs showed
"CompositorBridgeChild receives IPC close with reason=AbnormalShutdown" errors,
indicating issues with the graphics compositor during tab switching operations.
This was caused by race conditions in the tab switching code and lack of proper
error handling when dealing with browser elements that might be in an invalid state.

Solution:
Instead of just catching errors, we've implemented a more robust solution that addresses
the root causes of the race conditions in the tab switching code:

1. State Management System:
   - Added a queue-based system for tab operations to ensure they execute in sequence
   - Implemented debouncing to prevent rapid tab switching that could cause race conditions
   - Added state validation before operations to ensure browser elements are in a valid state

2. Asynchronous Operation Handling:
   - Used Promises and async/await for proper sequencing of operations
   - Added proper timing controls with small delays to ensure DOM is ready
   - Implemented a mutex-like approach to prevent concurrent workspace changes

3. Robust Tab State Validation:
   - Added comprehensive checks for tab validity before operations
   - Implemented proper cleanup of resources to prevent memory leaks
   - Added validation for browser window state to prevent operations on closed windows

4. Improved Error Recovery:
   - Added fallback mechanisms when operations fail
   - Implemented proper cleanup of state even when errors occur
   - Added more informative error messages for better debugging

These changes make the browser much more robust when handling tab switching operations,
preventing the crashes reported in issue #7716.
2025-04-21 01:59:47 -03:00
Mr. M
8136387a75 style: Formatted the project, b=(no-bug), c=scripts 2025-04-21 00:05:34 +02:00
mr. m
e65991aa03 Merge pull request #7777 from zen-browser/typescript-refactor
Typescript refactor
2025-04-21 00:05:15 +02:00
Mr. M
a7846a64d0 chore: Started adding typescript to zen, b=(no-bug), c=scripts, workspaces 2025-04-21 00:02:19 +02:00
Mr. M
5dfc6a663f chore: Continued working on containerized essentials, b=(no-bug), c=common, compact-mode, tabs, workspaces 2025-04-20 23:33:57 +02:00
mr. m
0c45a24f48 Merge pull request #7774 from UnownPlain/fix-empty-sections
Fix empty release notes sections
2025-04-20 19:38:43 +02:00
UnownPlain
762d5de441 Fix empty release notes sections 2025-04-20 17:32:31 +00:00
mr. m
5bfb55a27d Merge branch 'update-ff-138' into containerized-essentials
Signed-off-by: mr. m  <91018726+mauro-balades@users.noreply.github.com>
2025-04-20 15:27:28 +02:00
Mr. M
87bb2f38db feat: Added fully containerized essentials, b=(no-bug), c=tabs, vendor, workspaces 2025-04-20 15:26:28 +02:00
mr. m
fb1575d875 fix: Fixed window controls not being accessible on fullscreen when element separation is 0, b=(no-bug), c=tabs 2025-04-19 19:46:25 +02:00
mr. m
c153bef170 Merge branch 'dev' into update-ff-138
Signed-off-by: mr. m  <91018726+mauro-balades@users.noreply.github.com>
2025-04-19 16:21:40 +02:00
Mr. M
2fcf6c80e9 chore: Completly migrated to firefox 138, b=(no-bug), c=tabs, common, folders, glance 2025-04-19 16:03:15 +02:00
Mr. M
2e6e71e3b6 chore: More migration for firefox 138.0, b=(no-bug), c=tabs, common, split-view 2025-04-19 14:07:51 +02:00
mr. m
004b946716 Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-04-19 13:52:34 +02:00
mr. m
6400722712 fix: fixed urlbar being selected on workspace change, b=(closes #7741), c=workspaces 2025-04-19 13:52:25 +02:00
mr. m
d9ec28459e chore: Disabled Auto-Pip once we have propper settings UI for it, b=(no-bug), c=no-component 2025-04-19 13:48:00 +02:00
mr. m
407c1d24af Merge pull request #7740 from Cheese-Space/patch-1
remove --cask flag from mac install instructions as it isn't necessary
2025-04-19 13:14:30 +02:00
mr. m
de6d8d1153 fix: Windows applications being shifted half a pixel to the top, b=(no-bug), c=no-component 2025-04-19 12:57:42 +02:00
Cheese_space
3eb10fc05b removed --cask flag from mac install instructions as it isn't necessary
Signed-off-by: Cheese_space <99285740+Cheese-Space@users.noreply.github.com>
2025-04-19 12:17:10 +02:00
mr. m
1ab6f77f95 feat: Make PiP checkbox disable the entire feature, not just video controls, b=(no-bug), c=no-component 2025-04-19 10:40:19 +02:00
mr. m
c1b15b59db chore: Bump version and small fixes, b=(no-bug), c=tabs 2025-04-19 10:34:32 +02:00
mr. m
3dae5a6d47 fix: Fixed links on the README, b=(no-bug), c=no-component 2025-04-18 22:20:56 +02:00
Mr. M
ec3e2ab870 chore: More patch fixes for firefox beta, b=(no-bug), c=common 2025-04-18 20:43:44 +02:00
mr. m
a2810d65de Merge branch 'dev' into update-ff-138 2025-04-18 19:56:46 +02:00
Mr. M
1713c04834 chore: Started updating for firefox 138.0 beta 9, b=(no-bug), c=common 2025-04-18 19:54:40 +02:00
mr. m
dab2646054 fix: Crashes when opening the overflow menu multiple times on macos, b=(closes #7718), c=no-component 2025-04-18 19:13:14 +02:00
mr. m
03bc0d2f22 Merge branch 'dev' into download-animation 2025-04-18 10:08:31 +02:00
mr. m
ad0485d651 Fix workflow failure for windows
Signed-off-by: mr. m  <91018726+mauro-balades@users.noreply.github.com>
2025-04-18 00:30:34 +02:00
Gabriel
7764c4bdd7 Refactor download animation with improved code, animations and styles 2025-04-17 22:33:56 +02:00
mr. m
46bbbccdc9 fix: Window controls not expanding on split views and element separation on 0 also not expanding them, b=(closes #7694), c=tabs 2025-04-17 21:12:06 +02:00
mr. m
ee28417a4c fix: Enable Restore pinned tabs to their originally pinned URL on startup setting does not work, b=(bug #7453), c=tabs 2025-04-17 20:00:07 +02:00
mr. m
5332ab9cac Merge branch 'dev' into download-animation 2025-04-17 19:08:39 +02:00
mr. m
746ac1eec7 chore: Format before release, b=(no-bug), c=split-view 2025-04-17 18:51:26 +02:00
mr. m
13c763b0e8 Merge branch 'dev' into download-animation 2025-04-17 18:50:51 +02:00
mr. m
8b67c4fdd1 fix: Fixed recalculating split view on compact mode, b=(no-bug), c=split-view 2025-04-17 18:40:59 +02:00
mr. m
c3e658d46a fix: Split view calculating the wrong side of split view, b=(no-bug), c=split-view 2025-04-17 18:26:04 +02:00
mr. m
5d0419075b Merge branch 'dev' into download-animation 2025-04-17 17:49:50 +02:00
mr. m
ebded1a73b Merge pull request #7688 from sporocyst/CompactFullMTrans
Smooth transition from fullscreen in compact mode
2025-04-17 17:05:38 +02:00
mr. m
cf879a5c23 Update zen-compact-mode.css
Signed-off-by: mr. m  <91018726+mauro-balades@users.noreply.github.com>
2025-04-17 17:05:27 +02:00
Gabriel
99ed27ca61 Initial development for download animation 2025-04-17 17:03:46 +02:00
sporocyst
4aa3e5b34d Opacity 0 when Compact Fullscreen
Signed-off-by: sporocyst <sporocyst.tw@gmail.com>
2025-04-17 22:18:43 +08:00
mr. m
303e6066e2 Bumped version to 1.11.4b
Signed-off-by: mr. m  <91018726+mauro-balades@users.noreply.github.com>
2025-04-17 14:42:23 +02:00
mr. m
861cd15240 Merge pull request #7677 from zen-browser/revert-7675-dev 2025-04-17 13:45:25 +02:00
mr. m
d695ddb91a Revert "feat: improve tab switching with trackpad" 2025-04-17 04:45:17 -07:00
mr. m
7abb2edb2f Merge pull request #7675 from mathieutu/dev
feat: improve tab switching with trackpad
2025-04-17 12:54:33 +02:00
Mathieu TUDISCO
dfe8abd496 feat: improve tab switching with trackpad 2025-04-17 12:42:25 +02:00
mr. m
61b384ee56 Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-04-17 11:13:31 +02:00
mr. m
d71a890430 fix: Fixed performance issue when closing multiple tabs, b=(closes #7507), c=common 2025-04-17 11:13:03 +02:00
mr. m
2c85a85fff Merge pull request #7672 from mathieutu/dev 2025-04-17 11:00:28 +02:00
mr. m
ce6074530f Merge branch 'dev' into dev 2025-04-17 11:00:18 +02:00
Mathieu TUDISCO
e20228153c fix: closes #7274 - Fixed mouses simulating swipes with Forward and Back buttons 2025-04-17 10:43:08 +02:00
mr. m
e431170435 fix: Split views not selected still having the pending attribute, b=(no-bug), c=split-view, tabs 2025-04-17 00:36:43 +02:00
mr. m
c671d1e389 fix: Revert export from 31a5e70b26 (diff-0dad6ae9e720c6b380d48f7e19654910c30256bacc25567e1319a927bace7e5f), b=(no-bug), c=no-component 2025-04-16 19:51:48 +02:00
mr. m
31a5e70b26 chore: Re-export all patches, b=(no-bug), c=no-component 2025-04-16 17:05:46 +02:00
mr. m
0c68c72b29 fix: Inconsistent spacing with the native firefox sidebar on compact mode (multiple toolbars), b=(closes #7118), c=compact-mode 2025-04-16 16:50:15 +02:00
mr. m
2b158fdf57 style: Changed commit template to display a cleaner message, b=(no-bug), c=no-component 2025-04-16 16:23:25 +02:00
mr. m
dd005b31a4 feat: no-bug - Improved tab blur next selection, r=workspaces 2025-04-16 12:50:21 +02:00
mr. m
0b467cc149 fix: closes #7295 - Fixed workspaces temporarily inheriting essential tabs from the source workspace a container tab was switched from, r=workspaces 2025-04-16 12:32:49 +02:00
mr. m
46e2fdca00 fix: closes #6992 - Fixed url bar not being selected when selecting an empty tab, r=workspaces 2025-04-16 12:25:23 +02:00
mr. m
983b06266b chore: no-bug - Formatted project, r=media 2025-04-16 12:05:07 +02:00
mr. m
cb8708d2d9 fix: closes #7650 - Fixed context menu closing the URL bar, r=no-component 2025-04-16 12:05:01 +02:00
mr. m
adbec11c04 chore: no-bug - Added missing licenses to files, r=common, folders, glance, media, mods, welcome, workspaces 2025-04-16 11:42:03 +02:00
mr. m
404f00c02b chore: no-bug - Changed pinned tabs to load on demand, r=no-component 2025-04-16 11:38:59 +02:00
mr. m
5d346205fc fix: closes #7605 - Fixed compact mode not focusing on the urlbar on startup, r=common 2025-04-16 10:56:35 +02:00
mr. m
db3f1a7c09 style: no-bug - Tweaked essential background values, r=tabs 2025-04-16 10:14:19 +02:00
mr. m
d2599f1f9a Merge pull request #7641 from mbergo/fix/workspace-drag-linux-bug
Fix workspace position dragging on Linux (Fixes #7542)
2025-04-16 08:43:31 +02:00
Marcus Bergo
ed88aafdc1 Fix workspace position dragging on Linux (Fixes #7542)
This commit fixes an issue where dragging workspaces to change their position doesn't work on Linux platforms.

The main changes include:
1. Added Linux-specific drag and drop handling with a transparent drag image
2. Enhanced dragover event handling for better visual feedback on Linux
3. Improved CSS styles for drag and drop elements on Linux
4. Added clearer comments to explain the reorder mode behavior

The issue was that the drag and drop functionality wasn't working properly on Linux due to platform-specific behavior differences. This fix ensures that workspace reordering works consistently across all platforms.
2025-04-16 01:30:17 -03:00
Mr. M
d94deed341 fix: no-bug - Media player not erroring out if browsing context is null, r=media 2025-04-16 01:57:00 +02:00
Mr. M
4b49d87a81 fix: closes #7614 - Fixed pinned tabs not correctly differentiating url params, r=tabs 2025-04-16 01:56:36 +02:00
Mr. M
4a6281ebf6 chore: no-bug - Formatted the project, r=no-component 2025-04-16 01:39:29 +02:00
Mr. M
332443fe81 Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-04-16 01:39:16 +02:00
Mr. M
96c784704a fix: closes #7547 - Fixed removing workspaces still leaving remains, r=tabs, workspaces 2025-04-16 01:39:02 +02:00
Mr. M
b0d10919d7 fix: closes #7630 - Fixed windows packages not containing redistributable files, r=configs 2025-04-15 22:58:02 +02:00
Mr. M
b0e4681b5f fix: closes #7453 - Fixed pinning a tab with invalid HOST or about:blank creating an infinite loop of reseting its state, r=tabs 2025-04-15 22:25:06 +02:00
Mr. M
2958f6ea7f fix: no-bug - Fixed split view animations when canceling the drop, r=tabs, common, split-view 2025-04-15 22:23:16 +02:00
Mr. M
4d46f94975 fix: no-bug - Fixed split view not opening a new window when dragging the tab, r=split-view 2025-04-15 22:13:04 +02:00
Mr. M
4cc7e9ca98 chore: no-bug - Cleaned up configurations for windows and unsused style sheets, r=no-component 2025-04-15 20:24:58 +02:00
mr. m
7688a11ef9 fix: closes #7365 - Fixed unloaded tabs appearing on ctrl+Tab panel, r=no-component 2025-04-15 19:24:24 +02:00
mr. m
80b182cc54 chore: no-bug - Updated firefox 137.0.2, r=no-component 2025-04-15 18:44:12 +02:00
Mr. M
b6936e7ca4 feat: no-bug - Enabled automatic picture-in-picture, r=no-component 2025-04-15 17:12:37 +02:00
Mr. M
1590326fc1 fix: closes #7374 - Fixed scrollbar not being accessible because it's too thin, r=tabs 2025-04-15 17:09:17 +02:00
Mr. M
1a1eb3264f fix: closes #7263 - Fixed glance not opening on http or file protocols, r=glance, tabs 2025-04-15 16:41:58 +02:00
Mr. M
3d80a8aa39 fix: bug #7453 - Pinned tabs failing to restore if they got selected before closing, r=split-view, tabs, workspaces 2025-04-15 16:28:10 +02:00
Mr. M
6cca084e05 style: closes #5154 - Tweaked essential background colors, r=tabs 2025-04-15 15:48:08 +02:00
Mr. M
1c2c496f7e style: closes #5154 - Changed essential backgrounds to have better visuals, r=tabs 2025-04-15 15:13:17 +02:00
Mr. M
8ab60be68b refactor: no-bug - Changed template method for commit messages, r=no-component 2025-04-15 14:29:15 +02:00
Mr. M
f1fe363083 refactor(scripts): no-bug - Added extra git components for commit messages 2025-04-15 14:26:59 +02:00
Mr. M
db619790be refactor(no-component): no-bug - Fixed code linter workflow name 2025-04-15 14:12:03 +02:00
mr. m
608749ce1a Merge pull request #7629 from zen-browser/component-refactor
Component refactor
2025-04-15 14:05:25 +02:00
Mr. M
1135744520 refactor(common, compact-mode, folders, fonts, glance, images, kbs, media, mods, split-view, tabs, tests, workspaces, vendor, welcome): closes #7628 - Refactor zen components file structure for easier understanding 2025-04-15 14:03:55 +02:00
mr. m
c8d616e657 Merge pull request #7624 from Slowlife01/fixmedia
fix(MediaController): update share state from same tab if not currently in sharing state
2025-04-15 11:17:03 +02:00
Slowlife01
3f8a6e04c8 fix(MediaController): update share state from same tab if not sharing 2025-04-15 15:56:58 +07:00
mr. m
851cd8e037 Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-04-14 19:39:40 +02:00
mr. m
7b3dae8bea fix(build.yml): optimize git clone command by using --depth 1 for faster downloads 2025-04-14 19:39:38 +02:00
Mr. M
e04ec0a00b fix(sign.ps1): add verbose and debug output to artifact unzipping process 2025-04-14 14:10:14 +02:00
Mr. M
0a61c26cc1 fix(sign.ps1): run artifact unzipping in parallel using jobs 2025-04-14 14:09:48 +02:00
Mr. M
ff35c58787 fix(sign.ps1): enhance artifact downloading with temporary directory and improved error handling 2025-04-14 13:41:48 +02:00
Mr. M
0a464fa93a fix(sign.ps1): implement retry logic for downloading artifacts 2025-04-14 12:01:12 +02:00
mr. m
a9958e88d0 Formatted the project before release 2025-04-14 01:07:33 +02:00
Mr. M
d3eb5907a4 fix(sign.ps1): enable verbose output for npm import command 2025-04-14 01:04:12 +02:00
Mr. M
a2017cc4c7 fix(build): clean up old build artifacts and update packaging process for setup.exe (closes https://github.com/zen-browser/desktop/issues/37) 2025-04-14 00:59:37 +02:00
Mr. M
87124fdaf4 fix(sign.ps1): append arm64 executable files to the list for signing
fix(download-language-packs.sh): remove carriage returns from supported languages file
2025-04-13 22:42:26 +02:00
Mr. M
394c2b54ce Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-04-13 18:04:53 +02:00
mr. m
7117f1ad62 Merge pull request #7588 from Slowlife01/fixshare 2025-04-13 19:59:06 +02:00
Slowlife01
713e267c16 fix(ZenMediaController): skip updaing share state when already showing 2025-04-14 00:55:52 +07:00
mr. m
3932ec21f5 Merge pull request #7587 from Slowlife01/fixmedia 2025-04-13 19:26:29 +02:00
Slowlife01
76dc50b052 fix(MediaController): more accurate sharing state 2025-04-14 00:24:24 +07:00
mr. m
73749aa34c fix(ZenGlance): update padding and element separation for zen-glance background
fix(ZenCompactMode): modify flashSidebarIfNecessary to recalculate URL height conditionally
2025-04-13 19:20:59 +02:00
Mr. M
897932f954 fix(build): clean up temporary files and update surfer dependency to 1.11.7 2025-04-13 18:04:47 +02:00
mr. m
5a2b469e8a fix(ZenCompactMode): refactor URL height recalculation to use dedicated method in ZenVerticalTabsManager 2025-04-13 17:52:45 +02:00
mr. m
ad38e6c15e fix(ZenCompactMode): update flashSidebarIfNecessary to recalculate URL height after exiting fullscreen 2025-04-13 17:46:55 +02:00
mr. m
f5c6fc13a8 Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-04-13 17:01:54 +02:00
mr. m
7c8625821a Enhance zen styles for split view and glance components with padding adjustments 2025-04-13 17:01:46 +02:00
Mr. M
8a696ad088 fix(ZenGlanceManager): update tab selection handling to remove sidebar highlight from previous tab 2025-04-13 12:31:24 +02:00
mr. m
3c1ca8b70f Merge pull request #7573 from Slowlife01/fixmedia
fix(MediaController): remove sharing state when hiding
2025-04-13 11:41:24 +02:00
Slowlife01
87b0cee53a chore: format 2025-04-13 16:35:41 +07:00
Slowlife01
a56aa7e308 fix(MediaController): remove sharing state when hiding 2025-04-13 16:29:59 +07:00
Mr. M
98220c5e74 Updated media controler call icons 2025-04-13 11:19:25 +02:00
mr. m
964c886fb6 Merge pull request #7569 from Slowlife01/mediadevice
feat(MediaController): controls for media devices
2025-04-13 10:31:38 +02:00
Mr. M
f6536aa1d2 Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-04-13 10:20:13 +02:00
Mr. M
ec1c861b13 Fix tab drag logic to allow dragging the last opened tab 2025-04-13 10:20:10 +02:00
Slowlife01
ae07ed9445 fix(MediaController): prevent media control actions when sharing 2025-04-13 15:00:04 +07:00
Slowlife01
82b94db408 feat(MediaController): controls for media devices 2025-04-13 14:47:56 +07:00
Mr. M
54d716e4b6 Refactor conditions for removing unnecessary files and uploading dist object in Windows release build 2025-04-13 07:55:46 +02:00
Mr. M
a0330465dd Formatted before release 2025-04-12 22:44:57 +02:00
Mr. M
af026cfe66 Improved signing strategy for windows by including files inside the installer (https://github.com/zen-browser/desktop/issues/37) 2025-04-12 22:41:31 +02:00
mr. m
b7d5f6655d Remove compact mode startup check if we arent using it anymore 2025-04-12 19:03:23 +02:00
mr. m
964dedba0f Update display versions in surfer.json and adjust compact mode styles and functionality 2025-04-12 18:29:22 +02:00
mr. m
f13537e812 Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-04-12 13:14:51 +02:00
mr. m
037f1bf09f Update session store to handle zen tab attributes and improve state management 2025-04-12 13:14:42 +02:00
mr. m
9ee4212060 Removed components on flatpak as it's already on base app
Signed-off-by: mr. m  <91018726+mauro-balades@users.noreply.github.com>
2025-04-12 11:51:38 +02:00
mr. m
e3c60cb4d8 Added extra components for flatpak
Signed-off-by: mr. m  <91018726+mauro-balades@users.noreply.github.com>
2025-04-11 15:47:13 -07:00
mr. m
6fa325065e Add x-checkers for flatpak builds manifests
Signed-off-by: mr. m  <91018726+mauro-balades@users.noreply.github.com>
2025-04-11 15:21:01 -07:00
Mr. M
cc88c99c45 Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-04-11 22:01:35 +02:00
Mr. M
9d36ed6b1b Updated signing script 2025-04-11 22:01:09 +02:00
mr. m
a6b8843c5c Update compact mode initialization to ensure tabs toolbar is updated after a delay 2025-04-11 17:02:02 +02:00
mr. m
9cf4dbd710 Initialize compact mode manager after delayed startup and update tabs toolbar 2025-04-11 16:55:48 +02:00
mr. m
589335f665 Avoid sidebar width re-caclulation when animating compact mode 2025-04-11 16:52:29 +02:00
mr. m
1a04cac47c Defer compact mode initialization until after delayed startup finishes and update CSS for hover state handling 2025-04-11 11:33:03 +02:00
mr. m
417c6d09bf Update compact mode preference handling and set attribute on initialization 2025-04-11 08:41:04 +02:00
mr. m
c36cb4a76a Initialize compact mode manager after browser layout and update tabs toolbar on compact mode activation 2025-04-11 01:32:42 +02:00
mr. m
e65b786b46 Adjust sidebar width calculation in non-compact mode and update compact mode CSS for proper width handling 2025-04-11 01:00:47 +02:00
mr. m
713f1486c3 Refactor sidebar width calculation in compact mode and update toolbar separator logic 2025-04-11 00:43:50 +02:00
mr. m
a0d3447202 Refactor compact mode logic and enhance pinned tab URL handling (closes https://github.com/zen-browser/desktop/issues/7453#issuecomment-2794479221) 2025-04-10 19:23:38 +02:00
mr. m
286999599a Initialize compact mode on MozBeforeInitialXULLayout event 2025-04-10 11:13:04 +02:00
mr. m
9b6fae2523 Remove sidebar margin properties after transition to ensure proper layout 2025-04-10 11:08:39 +02:00
Mr. M
c250279b46 Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-04-10 05:32:07 +02:00
mr. m
f687df335e Add opacity transition to sidebar during animation 2025-04-10 01:36:30 +02:00
Mr. M
aeec7866b4 Fixed windows signing script for future versions 2025-04-09 23:27:02 +02:00
mr. m
b49c47516e Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-04-09 19:15:05 +02:00
mr. m
3bf854c6c3 Fixed calculating compact mode overflow at startup 2025-04-09 19:14:56 +02:00
Mr. M
b55edb8ae9 Refactor tab retrieval logic in ZenWorkspaces to simplify session restore handling 2025-04-09 19:14:52 +02:00
Mr. M
78bc66668c Do not apply rounded corner hack if element separation is 0 2025-04-09 14:28:12 +02:00
Mr. M
f965abe7f1 Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-04-09 14:20:25 +02:00
mr. m
509cb2471d Refactor element separation handling in ZenThemeModifier and update references in ZenCompactMode and ZenViewSplitter 2025-04-09 14:04:24 +02:00
Mr. M
3c273d817b Fixed Transparent Url bar's background when clicking Ctrl+T while playing a video in fullscreen mode (closes https://github.com/zen-browser/desktop/issues/6996) 2025-04-09 13:47:11 +02:00
Mr. M
21817ca97a Fixed Browser breaks shortly after 'Close other tabs' (closes #7459) 2025-04-09 12:50:20 +02:00
mr. m
b31e712d2c Merge pull request #7464 from zen-browser/new-split-essentials
Allow splitting essentials and pinned tabs
2025-04-09 00:17:39 +02:00
Mr. M
8f1ee11ff2 Fix tab handling logic and update version details in surfer.json 2025-04-09 00:16:33 +02:00
mr. m
0cb80ace3f Add min-width to toolbox in compact mode styles 2025-04-08 23:53:34 +02:00
Mr. M
295a2bb8b8 Updated to firefox 137.0.1 2025-04-08 18:45:39 +02:00
mr. m
dd6757be5b Fixed opacity of #urlbar element is sometimes overwritten (closes https://github.com/zen-browser/desktop/issues/7454)
Signed-off-by: mr. m  <91018726+mauro-balades@users.noreply.github.com>
2025-04-08 18:26:01 +02:00
mr. m
e90e4b27a3 Do not animate mica panel windows
Signed-off-by: mr. m  <91018726+mauro-balades@users.noreply.github.com>
2025-04-08 18:08:07 +02:00
mr. m
2932ca6c2b Fixed linux transparency being on by default
Signed-off-by: mr. m  <91018726+mauro-balades@users.noreply.github.com>
2025-04-08 04:05:52 -07:00
mr. m
06a685fc31 Formatted the project after merge 2025-04-07 11:04:43 +02:00
mr. m
e06c20d2f6 Merge pull request #7396 from Slowlife01/pipeligibility
refactor(MediaController): check pip eligibility in class
2025-04-07 02:02:33 -07:00
mr. m
e5527cf825 Merge branch 'dev' into pipeligibility 2025-04-07 02:02:26 -07:00
mr. m
6864af1b2f Merge pull request #7400 from sporocyst/dev
Fix sidebar always stays left
2025-04-07 02:01:57 -07:00
mr. m
87ff59bfa7 Merge pull request #7397 from Lund1337/linux-tranparency
Added transparent browser background on linux
2025-04-07 02:01:28 -07:00
mr. m
ecd407d924 Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-04-07 11:00:26 +02:00
mr. m
ce55e7eed5 fix: simplify sidebar width calculation and remove unnecessary animated padding attribute 2025-04-07 11:00:19 +02:00
unknown
f9b3fed403 npm run pretty 2025-04-07 01:42:43 +08:00
Slowlife01
484f77bffc refactor(MediaController): check pip eligibility in class 2025-04-06 23:59:12 +07:00
Lund1337
814e697675 Added transparent browser background on linux 2025-04-06 19:34:46 +03:00
sporocyst
e469c04125 Fix sidebar always stays left
Signed-off-by: sporocyst <sporocyst.tw@gmail.com>
2025-04-06 23:54:14 +08:00
mr. m
a33e2cbd88 Merge pull request #7383 from Slowlife01/patch-1
fix: change const to let
2025-04-06 11:14:18 +02:00
Slowlife
4ecccd67bd fix: change const to let
Signed-off-by: Slowlife <slowlife1165@gmail.com>
2025-04-06 16:12:14 +07:00
mr. m
8af25b4c67 Merge pull request #7336 from Slowlife01/unloadtab
fix: unable to unload tab with auto tab unloader disabled
2025-04-06 10:24:44 +02:00
Slowlife01
d6c30caf1b fix: add timestamp check to prevent frequent array comparisons in arraysEqual 2025-04-06 09:22:49 +07:00
Slowlife01
7025efa6f8 refactor: move over excludedUrls 2025-04-06 08:42:40 +07:00
mr. m
d0877eb6bc Merge pull request #7366 from wwklnd/dev
Update Firefox version to 137.0 in README.md
2025-04-06 00:49:44 +02:00
W Wilja Wiklund
87c62b4319 Update Firefox version to 137.0 in README.md
Signed-off-by: W Wilja Wiklund <fillchiam@gmail.com>
2025-04-06 00:32:29 +02:00
Slowlife01
9d3382d773 fix: add default excluded URLs 2025-04-05 18:01:18 +07:00
Slowlife01
5333e92c42 fix: unable to unload tab with auto tab unloader disabled 2025-04-05 16:58:49 +07:00
mr. M
f2c6d0a6b9 fix: streamline style clearing in ZenGlanceManager and update version numbers in surfer.json 2025-04-05 04:15:18 +02:00
mr. m
a7e217152b fix: refine panel appearance and shadow properties for better consistency across platforms 2025-04-04 18:11:59 +02:00
mr. m
91c993da13 fix: adjust padding for right-side toolbar buttons when window buttons are not reversed 2025-04-04 16:58:12 +02:00
mr. m
5e7423bdce fix: correct artifact name formatting in Windows profile build workflow 2025-04-04 15:44:48 +02:00
mr. m
ba48e15f5f fix: update workspace directory handling in Windows profile build 2025-04-04 15:42:56 +02:00
mr. m
4e407fb0b9 Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-04-04 13:00:30 +02:00
mr. m
5d1963e0ec Implemented -zen-window-transform-origin attribute and applied it to the panels on the right side 2025-04-04 13:00:17 +02:00
mr. m
c9bb6b25e9 Merge pull request #7292 from Slowlife01/glance-permitunload
fix: skip permitUnload when fully opening glance
2025-04-04 12:06:00 +02:00
Slowlife01
3bf433992e style: format 2025-04-04 16:55:22 +07:00
Slowlife01
a3a82b9fe7 fix: skip permitUnload when fully opening glance 2025-04-04 16:54:20 +07:00
mr. m
513f04d41b Merge pull request #7288 from Slowlife01/tab-command
fix: update event handling for changing tab workspace
2025-04-04 10:34:18 +02:00
mr. m
5b318a8aaf Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-04-04 10:33:00 +02:00
mr. m
c75de7a096 fix: adjust margin-left in zen-compact-mode.css for improved layout 2025-04-04 10:32:37 +02:00
Slowlife01
2cd5140600 fix: update event handling for changing tab workspace 2025-04-04 15:06:51 +07:00
mr. m
eaca3d6cc8 Correctly redirect output on windows pgo steps
Signed-off-by: mr. m  <91018726+mauro-balades@users.noreply.github.com>
2025-04-04 08:25:56 +02:00
mr. m
2ce89bf24b fix: add !important to appearance property in ctrlTab.css for better styling control 2025-04-03 21:41:00 +02:00
mr. m
97cbd76e8e fix: change position from absolute to fixed in zen-compact-mode.css and update sidebar visibility logic in ToolbarContextMenu 2025-04-03 20:39:17 +02:00
mr. m
683bb7eb41 fix: update path for zen metainfo file in build workflow 2025-04-03 19:50:09 +02:00
mr. m
8b0fd0af85 Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-04-03 19:49:35 +02:00
mr. m
80d177aa92 fix: update template root path in build workflow configuration 2025-04-03 19:49:30 +02:00
mr. m
dea4ccbe58 Fixed flatpak upload path
Signed-off-by: mr. m  <91018726+mauro-balades@users.noreply.github.com>
2025-04-03 10:35:03 -07:00
258 changed files with 62508 additions and 5503 deletions

20
.formal-git/components Normal file
View File

@@ -0,0 +1,20 @@
split-view
kbs
folders
workspaces
mods
tests
glance
media
images
vendor
tabs
compact-mode
common
fonts
welcome
scripts
workflows
winsign
flatpak
configs

1
.formal-git/template Normal file
View File

@@ -0,0 +1 @@
{type}: {message}, b=({bugId}), c={components}

1
.gitattributes vendored
View File

@@ -1 +1,2 @@
*.patch linguist-language=C++
*.d.ts linguist-language=TypeScript

View File

@@ -503,7 +503,7 @@ jobs:
- name: Download object files
if: ${{ inputs.update_branch == 'release' }}
run: |
git clone https://github.com/zen-browser/windows-binaries.git .github/workflows/object
git clone https://github.com/zen-browser/windows-binaries.git .github/workflows/object --depth 1
- name: Copy update manifests
env:
@@ -645,7 +645,7 @@ jobs:
pwd
ls .
ls ..
mv releases.xml ./build/flatpak/app.zen_browser.zen.metainfo.xml
mv releases.xml ./flatpak/app.zen_browser.zen.metainfo.xml
# output the version to the file
echo -n ${{ needs.build-data.outputs.version }} > ./flatpak/version
@@ -707,7 +707,7 @@ jobs:
--linux-archive zen.linux-x86_64.tar.xz \
--linux-aarch64-archive zen.linux-aarch64.tar.xz \
--output app.zen_browser.zen.yml \
--template-root ./zen-browser/flatpak
--template-root ./zen-browser/build/flatpak
- name: Commit changes
run: |

View File

@@ -11,7 +11,7 @@ on:
- dev
jobs:
pr-test:
lint:
runs-on: ubuntu-latest
steps:
- name: Checkout repository

View File

@@ -24,7 +24,7 @@ on:
jobs:
mac-build:
name: Build macOS - ${{ matrix.arch }}
runs-on: ${{ inputs.release-branch == 'release' && 'macos-14' || 'macos-14' }}
runs-on: macos-15
strategy:
fail-fast: false
@@ -113,19 +113,20 @@ jobs:
- name: Download Firefox source and dependencies
run: npm run download
- name: Import
env:
SURFER_COMPAT: ${{ matrix.arch }}
run: npm run import -- --verbose
- name: Bootstrap
run: |
cd engine
export SURFER_PLATFORM="darwin"
export PATH="$(python3 -m site --user-base)/bin":$PATH
./mach --no-interactive bootstrap --application-choice browser --no-system-changes
# Always exist with 0, even if bootstrap fails
./mach --no-interactive bootstrap --application-choice browser --no-system-changes --exclude macos-sdk || true
cd ..
- name: Import
env:
SURFER_COMPAT: ${{ matrix.arch }}
run: npm run import -- --verbose
- name: Build language packs
run: sh scripts/download-language-packs.sh

View File

@@ -15,7 +15,7 @@ on:
jobs:
mac-build:
name: Unify macOS (Universal)
runs-on: 'macos-14'
runs-on: 'macos-15'
strategy:
fail-fast: false
@@ -83,7 +83,7 @@ jobs:
cd engine
export SURFER_PLATFORM="darwin"
export PATH="$(python3 -m site --user-base)/bin":$PATH
./mach --no-interactive bootstrap --application-choice browser --no-system-changes
./mach --no-interactive bootstrap --application-choice browser --no-system-changes || true
cd ..
- name: Import

View File

@@ -25,7 +25,7 @@ EOF
if [ "$RELEASE_BRANCH" = "release" ]; then
echo "${EXTRA_NOTES}" >> "release_notes.md"
if echo "$LATEST_RELEASE" | jq -e 'has("features")' > /dev/null; then
if echo "$LATEST_RELEASE" | jq -e '(.features // []) | length > 0' > /dev/null; then
cat << EOF >> "release_notes.md"
## New Features
@@ -33,7 +33,7 @@ $(echo "$LATEST_RELEASE" | jq -r '.features[] | "- " + .')
EOF
fi
if echo "$LATEST_RELEASE" | jq -e 'has("fixes")' > /dev/null; then
if echo "$LATEST_RELEASE" | jq -e '(.fixes // []) | length > 0' > /dev/null; then
cat << EOF >> "release_notes.md"
## Fixes
@@ -41,7 +41,7 @@ EOF
echo "$LATEST_RELEASE" | jq -r '.fixes[] | if type=="object" then "- " + .description + " ([#" + (.issue|tostring) + "](" + "https://github.com/zen-browser/desktop/issues/" + (.issue|tostring) + "))" else "- " + . end' >> "release_notes.md"
fi
if echo "$LATEST_RELEASE" | jq -e 'has("breakingChanges")' > /dev/null; then
if echo "$LATEST_RELEASE" | jq -e '(.breakingChanges // []) | length > 0' > /dev/null; then
cat << EOF >> "release_notes.md"
## Breaking Changes
@@ -49,7 +49,7 @@ EOF
echo "$LATEST_RELEASE" | jq -r '.breakingChanges[] | if type=="string" then "- " + . else "- " + .description + " [Learn more](" + .link + ")" end' >> "release_notes.md"
fi
if echo "$LATEST_RELEASE" | jq -e 'has("themeChanges")' > /dev/null; then
if echo "$LATEST_RELEASE" | jq -e '(.themeChanges // []) | length > 0' > /dev/null; then
cat << EOF >> "release_notes.md"
## Theme Changes

View File

@@ -3,7 +3,7 @@
set -xe
if command -v apt-get &> /dev/null; then
sudo add-apt-repository ppa:kisak/kisak-mesa
sudo apt-get install python3-launchpadlib
sudo apt-get update
sudo apt-get install -y xvfb libnvidia-egl-wayland1 mesa-utils libgl1-mesa-dri
fi

View File

@@ -10,11 +10,6 @@ on:
required: false
type: boolean
default: true
use-sccache:
description: 'Use sccache'
required: false
type: boolean
default: true
jobs:
twilight-release-schedule:
@@ -25,7 +20,7 @@ jobs:
with:
create_release: ${{ github.event_name != 'workflow_dispatch' && true || inputs.create_release }}
update_branch: twilight
use-sccache: ${{ github.event_name != 'workflow_dispatch' && false || inputs.use-sccache }}
use-sccache: false
update_version: false
post-build:

View File

@@ -65,7 +65,7 @@ jobs:
- name: Setup
run: |
(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
C:\MozillaBuildSetup-Latest.exe /S | out-null
- name: Download Firefox and dependencies
if: ${{ matrix.arch == 'x86_64' }}
@@ -82,15 +82,16 @@ jobs:
- name: Generate
if: ${{ matrix.arch == 'x86_64' }}
run: |
ls
$Env:USE_MINTTY = "0"
$workspace_dir_current = [regex]::replace($env:GITHUB_WORKSPACE, "^([A-Z]):", { "/" + $args.value.Substring(0, 1).toLower() }) -replace "\\", "/"
$workspace_dir = $workspace_dir_current + "/engine"
echo $workspace_dir
echo "cd $workspace_dir" '' >> mozilla-build-run.sh
echo 'export PATH=/c/mozilla-build/msys2/usr/bin:$PATH' '' >> mozilla-build-run.sh
echo './mach --no-interactive bootstrap --application-choice browser' '' >> mozilla-build-run.sh
echo 'LLVM_PROFDATA=/c/Users/runneradmin/.mozbuild/clang/bin/llvm-profdata.exe JARLOG_FILE=en-US.log ./mach python build/pgo/profileserver.py --binary /c/artifact/zen/zen.exe' '' >> mozilla-build-run.sh
echo 'Running Profile Build:'
C:\mozilla-build\start-shell.bat mozilla-build-run.sh
C:\mozilla-build\start-shell.bat $workspace_dir_current\mozilla-build-run.sh
- name: Move profile data
if: ${{ matrix.arch == 'x86_64' }}

View File

@@ -111,6 +111,7 @@ jobs:
set -x
mkdir -p ~/win-cross
cd engine/
sudo apt-get install python3-launchpadlib
sudo add-apt-repository ppa:savoury1/backports
sudo apt-get update
sudo apt-get install -y python3-pip autoconf \
@@ -161,6 +162,12 @@ jobs:
echo Setup Visual Studio
./mach python --virtualenv build taskcluster/scripts/misc/get_vs.py build/vs/vs2022.yaml ~/win-cross/vs2022
- name: Import
if: ${{ !(inputs.generate-gpo && matrix.arch == 'aarch64') }}
env:
SURFER_COMPAT: ${{ matrix.arch }}
run: npm run import -- --verbose
- name: Bootstrap
if: ${{ !(inputs.generate-gpo && matrix.arch == 'aarch64') }}
run: |
@@ -196,12 +203,6 @@ jobs:
echo "" >> ../configs/common/mozconfig
echo "export MOZ_WINDOWS_RS_DIR=$(pwd)/windows-0.58.0" >> ../configs/common/mozconfig
- name: Import
if: ${{ !(inputs.generate-gpo && matrix.arch == 'aarch64') }}
env:
SURFER_COMPAT: ${{ matrix.arch }}
run: npm run import -- --verbose
- name: Build language packs
if: ${{ !(inputs.generate-gpo && matrix.arch == 'aarch64') }}
run: sh scripts/download-language-packs.sh
@@ -280,21 +281,24 @@ jobs:
if: ${{ !inputs.generate-gpo }}
run: |
set -x
if test "${{ matrix.arch }}" = "aarch64"; then
find engine/obj-aarch64-pc-windows-msvc/ -mindepth 1 -maxdepth 1 -type d -not -name 'dist' -exec rm -rf {} \;
find engine/obj-aarch64-pc-windows-msvc/ -mindepth 1 -maxdepth 1 -type f -not -name 'dist' -exec rm -f {} \;
else
find engine/obj-x86_64-pc-windows-msvc/ -mindepth 1 -maxdepth 1 -type d -not -name 'dist' -exec rm -rf {} \;
find engine/obj-x86_64-pc-windows-msvc/ -mindepth 1 -maxdepth 1 -type f -not -name 'dist' -exec rm -f {} \;
fi
mkdir obj-${{ matrix.arch }}-pc-windows-msvc/
rm -rf engine/obj-${{ matrix.arch }}-pc-windows-msvc/_tests
rm -rf engine/obj-${{ matrix.arch }}-pc-windows-msvc/config/autoconf.mk
rm -rf engine/obj-${{ matrix.arch }}-pc-windows-msvc/config.statusd/substs/
rm -rf engine/obj-${{ matrix.arch }}-pc-windows-msvc/dist/install
find engine/obj-${{ matrix.arch }}-pc-windows-msvc/dist -maxdepth 1 -type f -name "*.zip" -delete
cp -r --no-dereference engine/obj-${{ matrix.arch }}-pc-windows-msvc/* obj-${{ matrix.arch }}-pc-windows-msvc/ || true
- name: Upload dist object
if: ${{ !inputs.generate-gpo }}
uses: actions/upload-artifact@v4
with:
retention-days: 5
retention-days: 2
name: windows-x64-obj-${{ matrix.arch == 'aarch64' && 'arm64' || matrix.arch }}
path: engine/obj-${{ matrix.arch == 'aarch64' && 'aarch64' || 'x86_64' }}-pc-windows-msvc/
path: obj-${{ matrix.arch }}-pc-windows-msvc
- name: Upload artifact (if Twilight branch, binary)
if: ${{ inputs.release-branch == 'twilight' && !inputs.generate-gpo }}

3
.gitignore vendored
View File

@@ -11,3 +11,6 @@ windsign-temp/
venv/
!firefox-cache/
win-cross/
!firefox-patches/

View File

@@ -22,9 +22,8 @@ docs/issue-metrics/*.md
# Some CSS files are preprocessed and prettier doesn't handle them well
# We also dont want to format the CSS files that are generated by the build
src/browser/base/content/zen-styles/zen-tabs/vertical-tabs.css
src/browser/base/content/zen-styles/zen-compact-mode.css
src/browser/base/zen-components/ZenEmojies.mjs
build/codesign/codesign.bash
src/zen/tabs/zen-tabs.css
src/zen/compact-mode/zen-compact-mode.css
src/zen/common/ZenEmojies.mjs
*.inc

View File

@@ -26,5 +26,6 @@
"system_error": "cpp",
"regex": "cpp",
"type_traits": "cpp"
}
},
"git.ignoreLimitWarning": true
}

View File

@@ -28,9 +28,9 @@
## 🖥️ Compatibility
Zen is currently built using Firefox version `136.0.2`! 🚀
Zen is currently built using Firefox version `138.0.1`! 🚀
- [`Zen Twilight`](https://zen-browser.app/download?twilight) - Is currently built using Firefox version `RC 136.0`!
- [`Zen Twilight`](https://zen-browser.app/download?twilight) - Is currently built using Firefox version `RC 138.0.1`!
- Check out the latest [release notes](https://zen-browser.app/release-notes)!
- Part of our mission is to keep Zen up-to-date with the latest version of Firefox, so you can enjoy the latest features and security updates!
@@ -57,10 +57,6 @@ Zen is divided into 2 main branches. We use `dev` for development and `stable` f
We divide into 2 branches in case there's any really important security update (for example) that needs to be released before the next stable release. This allows us to do patches without releasing unstable versions to the public.
## ⚡ Performance
Zen is built with performance in mind, and we have optimized the browser to be as fast as possible! Checkout the latest [performance benchmarks](https://docs.zen-browser.app/benchmarks)!
## 📥 Installation
### Supported Operating Systems
@@ -85,7 +81,7 @@ winget install --id Zen-Team.Zen-Browser
You can also install Zen using Homebrew:
```
brew install --cask zen-browser
brew install zen-browser
```
#### Linux
@@ -118,11 +114,11 @@ To upgrade the browser to a newer version, use the embedded update functionality
## 👨‍💻 Development and Contributing
Some components used by @zen-browser as an attempt to make firefox forks a better place, and for other to enjoy the beauty of OSS. You can find them [here](https://github.com/zen-browser/desktop/tree/dev/src/browser/base/zen-components).
Some components used by @zen-browser as an attempt to make Firefox forks a better place, and for other to enjoy the beauty of OSS. You can find them [here](https://github.com/zen-browser/desktop/tree/dev/src/zen).
#### `Run Locally`
In order to download and run Zen locally, please follow [these instructions](https://docs.zen-browser.app/building).
In order to download and run Zen locally, please follow [these instructions](https://docs.zen-browser.app/guides/building).
#### `Special Thanks`

3
babel.config.json Normal file
View File

@@ -0,0 +1,3 @@
{
"presets": ["@babel/preset-typescript"]
}

View File

@@ -1 +1 @@
e834aca3620253ea774e85826e43dd55e0c4f8b2
8113a66aeeec42dca9739c7b742a3408cb5b7cf7

View File

@@ -49,6 +49,12 @@ modules:
strip-components: 0
only-arches:
- x86_64
x-checker-data:
type: json
url: https://api.github.com/repos/zen-browser/desktop/releases/latest
version-query: .tag_name
url-query: .assets[] | select(.name=="zen.linux-x86_64.tar.xz") | .browser_download_url
is-main-source: true
- type: archive
url: https://github.com/zen-browser/desktop/releases/download/{version}/zen.linux-aarch64.tar.xz
@@ -56,6 +62,12 @@ modules:
strip-components: 0
only-arches:
- aarch64
x-checker-data:
type: json
url: https://api.github.com/repos/zen-browser/desktop/releases/latest
version-query: .tag_name
url-query: .assets[] | select(.name=="zen.linux-aarch64.tar.xz") | .browser_download_url
is-main-source: true
- type: archive
url: https://github.com/zen-browser/flatpak/releases/download/{version}/archive.tar

10
build/ts/transform-ts.js Normal file
View File

@@ -0,0 +1,10 @@
const fs = require('fs');
const MJS_FILES = ['src/zen/split-view/ZenViewSplitter.ts'];
for (const file of MJS_FILES) {
const code = fs.readFileSync(file, 'utf8');
require('@babel/core').transformSync(code, {
presets: ['@babel/preset-typescript'],
filename: file,
});
}

View File

@@ -0,0 +1,9 @@
(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
rustup target add aarch64-pc-windows-msvc
rustup target add x86_64-pc-windows-msvc
cd engine
./mach python --virtualenv build taskcluster/scripts/misc/get_vs.py build/vs/vs2022.yaml ../win-cross/vs2022
cd ..

View File

@@ -6,7 +6,7 @@ param(
$ErrorActionPreference = "Stop"
echo "Preparing environment"
git pull --recurse-submodules
git pull --recurse
mkdir windsign-temp -ErrorAction SilentlyContinue
# Download in parallel
@@ -19,40 +19,145 @@ mkdir windsign-temp -ErrorAction SilentlyContinue
# echo "Downloaded git objects repo to"
#} -Verbose -ArgumentList $PWD -Debug
gh run download $GithubRunId --name windows-x64-obj-arm64 -D windsign-temp\windows-x64-obj-arm64
echo "Downloaded arm64 artifacts"
gh run download $GithubRunId --name windows-x64-obj-x86_64 -D windsign-temp\windows-x64-obj-x86_64
echo "Downloaded x86_64 artifacts"
Start-Job -Name "DownloadGitl10n" -ScriptBlock {
param($PWD)
cd $PWD
$env:ZEN_L10N_CURR_DIR=[regex]::replace($PWD, "^([A-Z]):", { "/" + $args.value.Substring(0, 1).toLower() }) -replace "\\", "/"
C:\mozilla-build\start-shell.bat $PWD\scripts\download-language-packs.sh
echo "Fetched l10n and Firefox's one"
} -Verbose -ArgumentList $PWD -Debug
Start-Job -Name "SurferInit" -ScriptBlock {
param($PWD)
cd $PWD
surfer -- ci --brand release
npm run import -- --verbose
} -Verbose -ArgumentList $PWD -Debug
#Wait-Job -Name "DownloadGitObjectsRepo"
echo "Downloading artifacts info"
$artifactsInfo=gh api repos/zen-browser/desktop/actions/runs/$GithubRunId/artifacts
$token = gh auth token
function New-TemporaryDirectory {
$tmp = [System.IO.Path]::GetTempPath() # Not $env:TEMP, see https://stackoverflow.com/a/946017
$name = (New-Guid).ToString("N")
New-Item -ItemType Directory -Path (Join-Path $tmp $name)
}
function DownloadFile($url, $targetFile) {
$uri = New-Object "System.Uri" "$url"
$request = [System.Net.HttpWebRequest]::Create($uri)
$request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"
$request.Headers.Add("Authorization", "Bearer $token")
$response = $request.GetResponse()
$totalLength = [System.Math]::Floor($response.get_ContentLength()/1024)
$responseStream = $response.GetResponseStream()
$targetStream = New-Object -TypeName System.IO.FileStream -ArgumentList $targetFile, Create
$buffer = new-object byte[] 10KB
$count = $responseStream.Read($buffer,0,$buffer.length)
$downloadedBytes = $count
while ($count -gt 0) {
$targetStream.Write($buffer, 0, $count)
$count = $responseStream.Read($buffer,0,$buffer.length)
$downloadedBytes = $downloadedBytes + $count
Write-Progress -activity "Downloading file '$($url.split('/') | Select -Last 1)'" -status "Downloaded ($([System.Math]::Floor($downloadedBytes/1024))K of $($totalLength)K): " -PercentComplete ((([System.Math]::Floor($downloadedBytes/1024)) / $totalLength) * 100)
}
Write-Progress -activity "Finished downloading file '$($url.split('/') | Select -Last 1)'"
$targetStream.Flush()
$targetStream.Close()
$targetStream.Dispose()
$responseStream.Dispose()
}
function DownloadArtifacts($name) {
echo "Downloading artifacts for $name"
$artifactUrl=$($artifactsInfo | jq -r --arg NAME "windows-x64-obj-$name" '.artifacts[] | select(.name == $NAME) | .archive_download_url')
echo "Artifact URL: $artifactUrl"
# download the artifact
$outputPath="$PWD\windsign-temp\windows-x64-obj-$name"
$tempDir = New-TemporaryDirectory
$tempFile = Join-Path $tempDir "artifact-$($name).zip"
echo "Downloading artifact to $tempFile"
DownloadFile $artifactUrl $tempFile
Start-Job -Name "UnzipArtifact$name" -ScriptBlock {
param($tempFile, $outputPath)
echo "Unzipping artifact to $outputPath"
Expand-Archive -Path $tempFile -DestinationPath $outputPath -Force
echo "Unzipped artifact to $outputPath"
} -ArgumentList $tempFile, $outputPath -Verbose -Debug
}
DownloadArtifacts arm64
DownloadArtifacts x86_64
# Wait for the jobs to finish
Wait-Job -Name "UnzipArtifactarm64"
Wait-Job -Name "UnzipArtifactx86_64"
mkdir engine\obj-x86_64-pc-windows-msvc\ -ErrorAction SilentlyContinue
npm run surfer -- ci --brand release
# Collect all .exe and .dll files into a list
$files = Get-ChildItem windsign-temp\windows-x64-obj-x86_64\ -Recurse -Include *.exe
$files += Get-ChildItem windsign-temp\windows-x64-obj-x86_64\ -Recurse -Include *.dll
$files += Get-ChildItem windsign-temp\windows-x64-obj-arm64\ -Recurse -Include *.exe
$files += Get-ChildItem windsign-temp\windows-x64-obj-arm64\ -Recurse -Include *.dll
signtool.exe sign /n "$SignIdentity" /t http://time.certum.pl/ /fd sha256 /v $files
$env:ZEN_RELEASE="true"
$env:SURFER_SIGNING_MODE="true"
Wait-Job -Name "SurferInit"
Wait-Job -Name "DownloadGitl10n"
function SignAndPackage($name) {
echo "Executing on $name"
rmdir .\dist -Recurse -ErrorAction SilentlyContinue
rmdir engine\obj-x86_64-pc-windows-msvc\ -Recurse -ErrorAction SilentlyContinue
cp windsign-temp\windows-x64-obj-$name engine\obj-x86_64-pc-windows-msvc\ -Recurse
echo "Signing $name"
rmdir engine\obj-$name-pc-windows-msvc\ -Recurse -ErrorAction SilentlyContinue
$objName=$name
# instead of arm, use aarch64
if ($name -eq "arm64") {
$objName="aarch64"
}
# Collect all .exe and .dll files into a list
$files = Get-ChildItem engine\obj-x86_64-pc-windows-msvc\ -Recurse -Include *.exe
$files += Get-ChildItem engine\obj-x86_64-pc-windows-msvc\ -Recurse -Include *.dll
echo "Removing old obj dir"
rmdir engine\obj-$objName-pc-windows-msvc\ -Recurse -ErrorAction SilentlyContinue
signtool.exe sign /n "$SignIdentity" /t http://time.certum.pl/ /fd sha256 /v $files
echo "Packaging $name"
$env:SURFER_SIGNING_MODE="sign"
$env:MAR="$PWD\\build\\winsign\\mar.exe"
echo "Creating new obj dir"
cp windsign-temp\windows-x64-obj-$name engine\obj-$objName-pc-windows-msvc\ -Recurse
echo "Copying setup.exe into obj dir"
$env:ZEN_SETUP_EXE_PATH="$PWD\windsign-temp\windows-x64-obj-$name\browser\installer\windows\instgen\setup.exe"
if ($name -eq "arm64") {
$env:WIN32_REDIST_DIR="$PWD\win-cross\vs2022\VC\Redist\MSVC\14.38.33135\arm64\Microsoft.VC143.CRT"
} else {
$env:WIN32_REDIST_DIR="$PWD\win-cross\vs2022\VC\Redist\MSVC\14.38.33135\x64\Microsoft.VC143.CRT"
}
$env:MAR="..\\build\\winsign\\mar.exe"
if ($name -eq "arm64") {
$env:SURFER_COMPAT="aarch64"
} else {
$env:SURFER_COMPAT="x86_64"
}
echo "Compat Mode? $env:SURFER_COMPAT"
# Configure each time since we are cloning from a linux environment into
# a windows environment, and the build system is not smart enough to detect that
# we are on a different platform.
cd .\engine
echo "Configuring for $name"
.\mach configure
cd ..
echo "Packaging $name"
npm run package -- --verbose
# In the release script, we do the following:
@@ -62,7 +167,6 @@ function SignAndPackage($name) {
# - update_manifest/*
# - windows.mar
# - zen.installer.exe
# - zen.win-x86_64.zip
echo "Creating tar for $name"
rm .\windsign-temp\windows-x64-signed-$name -Recurse -ErrorAction SilentlyContinue
mkdir windsign-temp\windows-x64-signed-$name
@@ -83,30 +187,13 @@ function SignAndPackage($name) {
mv .\dist\zen.installer.exe windsign-temp\windows-x64-signed-$name\zen.installer.exe
}
# Move the zip
echo "Moving zip for $name"
if ($name -eq "arm64") {
mv (Get-Item .\dist\*.en-US.win64-aarch64.zip) windsign-temp\windows-x64-signed-$name\zen.win-arm64.zip
} else {
mv (Get-Item .\dist\*.en-US.win64.zip) windsign-temp\windows-x64-signed-$name\zen.win-$name.zip
}
# Extract the zip, sign everything inside, and repackage it
Expand-Archive -Path windsign-temp\windows-x64-signed-$name\zen.win-$name.zip -DestinationPath windsign-temp\windows-x64-signed-$name\zen.win-$name
rm windsign-temp\windows-x64-signed-$name\zen.win-$name.zip
$files = Get-ChildItem windsign-temp\windows-x64-signed-$name\zen.win-$name -Recurse -Include *.exe
$files += Get-ChildItem windsign-temp\windows-x64-signed-$name\zen.win-$name -Recurse -Include *.dll
signtool.exe sign /n "$SignIdentity" /t http://time.certum.pl/ /fd sha256 /v $files
Compress-Archive -Path windsign-temp\windows-x64-signed-$name\zen.win-$name -DestinationPath windsign-temp\windows-x64-signed-$name\zen.win-$name.zip
rmdir windsign-temp\windows-x64-signed-$name\zen.win-$name -Recurse -ErrorAction SilentlyContinue
# Move the manifest
mv .\dist\update\. windsign-temp\windows-x64-signed-$name\update_manifest
echo "Invoking tar for $name"
# note: We need to sign it into a parent folder, called windows-x64-signed-$name
rmdir .\windsign-temp\windows-binaries\windows-x64-signed-$name -Recurse -ErrorAction SilentlyContinue
mv windsign-temp\windows-x64-signed-$name .\windsign-temp\windows-binaries -Force
rmdir engine\obj-$objName-pc-windows-msvc\ -Recurse -ErrorAction SilentlyContinue
echo "Finished $name"
}
@@ -114,6 +201,9 @@ function SignAndPackage($name) {
SignAndPackage arm64
SignAndPackage x86_64
$files = Get-ChildItem .\windsign-temp\windows-binaries -Recurse -Include *.exe
signtool.exe sign /n "$SignIdentity" /t http://time.certum.pl/ /fd sha256 /v $files
echo "All artifacts signed and packaged, ready for release!"
echo "Commiting the changes to the repository"
cd windsign-temp\windows-binaries

View File

@@ -107,6 +107,9 @@ mk_add_options MOZ_DATA_REPORTING=
mk_add_options MOZ_SERVICES_HEALTHREPORT=
mk_add_options MOZ_TELEMETRY_REPORTING=
ac_add_options MOZ_DATA_REPORTING=
ac_add_options MOZ_TELEMETRY_REPORTING=
# Allow loading unsigned extensions
export MOZ_REQUIRE_SIGNING=
mk_add_options MOZ_REQUIRE_SIGNING=

View File

@@ -3,8 +3,6 @@ unset MOZ_STDCXX_COMPAT
ac_add_options --disable-dmd
ac_add_options --enable-eme=widevine
export MOZ_MACBUNDLE_ID=${appId}
# override LTO settings
# TODO: Dont use LTO for now, it's causing a lot of issues
export MOZ_LTO=cross,thin

View File

@@ -17,7 +17,6 @@ if test "$ZEN_CROSS_COMPILING"; then
else
export WIN32_REDIST_DIR="$(echo ~)/win-cross/vs2022/VC/Redist/MSVC/14.38.33135/x64/Microsoft.VC143.CRT"
fi
fi
#? https://bugzilla.mozilla.org/show_bug.cgi?id=1617793

View File

@@ -20,7 +20,7 @@
| video playing windows go blank for split second | https://github.com/zen-browser/desktop/issues/3313 | None | None |
| Light mode makes some buttons look disabled | https://github.com/zen-browser/desktop/issues/3312 | 0:40:59 | 20 days, 19:57:32 |
| Tabs unloading with the feature disabled | https://github.com/zen-browser/desktop/issues/3311 | None | None |
| Default browser settings changes to firefox when i close the Zen | https://github.com/zen-browser/desktop/issues/3310 | None | None |
| Default browser settings changes to Firefox when i close the Zen | https://github.com/zen-browser/desktop/issues/3310 | None | None |
| zen.source.tar.gz is incorrectly named, should be .tar.zst instead | https://github.com/zen-browser/desktop/issues/3308 | None | None |
| Tab temporarely is compacted to the width of my sidebar before loading in when switching from a split-view | https://github.com/zen-browser/desktop/issues/3307 | None | None |
| Pre-assigned url to a container, and associate a container to a workspace, but that chain is broken | https://github.com/zen-browser/desktop/issues/3306 | None | 9 days, 21:18:59 |

View File

@@ -251,7 +251,7 @@
| "Show all tabs" keyboard shortcut not working | https://github.com/zen-browser/desktop/issues/3765 | 4:43:13 | None |
| URL bar missing on windows of different workspaces | https://github.com/zen-browser/desktop/issues/3764 | 1 day, 12:20:03 | 9 days, 9:18:05 |
| The tab pane shakes in compact mode when hovering on the buttons | https://github.com/zen-browser/desktop/issues/3763 | None | 9 days, 3:05:22 |
| this last update is GARBAGE!!! why would you do that to the address bar when you click once it moves to the center. and the new logo sucks. im probably going back to firefox | https://github.com/zen-browser/desktop/issues/3762 | 2:15:10 | 17:24:07 |
| this last update is GARBAGE!!! why would you do that to the address bar when you click once it moves to the center. and the new logo sucks. im probably going back to Firefox | https://github.com/zen-browser/desktop/issues/3762 | 2:15:10 | 17:24:07 |
| Floating Web Panel Disappears When Clicking elsewhere on the Screen | https://github.com/zen-browser/desktop/issues/3759 | 18:57:22 | 18:57:22 |
| Visual problems occur when playing embedded videos on websites presented in picture-in-picture mode in zen browser using it under GNU/Linux. | https://github.com/zen-browser/desktop/issues/3758 | 21:40:26 | 1 day, 0:38:06 |
| URL Bar weird behaviour on compact mode and shortcuts | https://github.com/zen-browser/desktop/issues/3757 | 14:46:59 | 4 days, 21:05:40 |

View File

@@ -111,7 +111,7 @@
| Compact mode won't disable after changing which toolbars are hidden | https://github.com/zen-browser/desktop/issues/4649 | 16:26:34 | None |
| Problem with tab bar and top bar | https://github.com/zen-browser/desktop/issues/4648 | 7:28:57 | None |
| Excessive margin between bookmark sidebar and center pane | https://github.com/zen-browser/desktop/issues/4647 | 7:37:12 | None |
| I am not able to save my bookmarks of zen with the autoExportHTML flag, this works fine on firefox though. | https://github.com/zen-browser/desktop/issues/4646 | None | None |
| I am not able to save my bookmarks of zen with the autoExportHTML flag, this works fine on Firefox though. | https://github.com/zen-browser/desktop/issues/4646 | None | None |
| Dropdown input is not selected | https://github.com/zen-browser/desktop/issues/4645 | None | None |
| Toolbar becomes big after customizing the bookmarks placement | https://github.com/zen-browser/desktop/issues/4641 | None | None |
| Zen Mods are not properly installing | https://github.com/zen-browser/desktop/issues/4640 | None | None |
@@ -349,7 +349,7 @@
| Page refresh | https://github.com/zen-browser/desktop/issues/4338 | 11:57:25 | None |
| Expand Side's bar changes position of forward and backward buttons | https://github.com/zen-browser/desktop/issues/4336 | 12:19:39 | None |
| breaks after using rectify11 and mica for everyone | https://github.com/zen-browser/desktop/issues/4335 | None | 3:03:08 |
| Link "Zen support site" redirects to firefox support site | https://github.com/zen-browser/desktop/issues/4333 | 16:39:30 | 16:39:30 |
| Link "Zen support site" redirects to Firefox support site | https://github.com/zen-browser/desktop/issues/4333 | 16:39:30 | 16:39:30 |
| Opening discord keeps crashing the tab | https://github.com/zen-browser/desktop/issues/4332 | 0:24:48 | 0:24:48 |
| space between essentials/tabs and the workspace title is different for default vs others | https://github.com/zen-browser/desktop/issues/4329 | None | 1 day, 0:42:55 |
| Essential disappears, but it's still there | https://github.com/zen-browser/desktop/issues/4328 | 17:21:42 | 2 days, 3:52:35 |
@@ -362,7 +362,7 @@
| Slow scrolling speed on the vertical tab bar in 1.6b | https://github.com/zen-browser/desktop/issues/4321 | 1:18:21 | 1 day, 5:19:47 |
| browser.urlbar.suggest.topsites set to false make url cannot be edited | https://github.com/zen-browser/desktop/issues/4319 | 1 day, 3:38:03 | 2 days, 9:54:46 |
| Tab volume icon not showing in collapsed toolbar unless tab is active | https://github.com/zen-browser/desktop/issues/4316 | None | 0:08:41 |
| Profile avatar picture flashes and is overridden by firefox account avatar | https://github.com/zen-browser/desktop/issues/4315 | 8:16:31 | 8:16:31 |
| Profile avatar picture flashes and is overridden by Firefox account avatar | https://github.com/zen-browser/desktop/issues/4315 | 8:16:31 | 8:16:31 |
| Zen Browser Turn Light At Lost Focus | https://github.com/zen-browser/desktop/issues/4314 | 2 days, 4:11:22 | 5 days, 16:04:18 |
| "Log-in to this network" modal & button not interactible | https://github.com/zen-browser/desktop/issues/4313 | None | None |
| Sudden Crashes on Arch Linux with Multiple Tabs Opened | https://github.com/zen-browser/desktop/issues/4309 | 2:56:11 | None |

View File

@@ -516,7 +516,7 @@
| icon is in not visible in the toolbar | https://github.com/zen-browser/desktop/issues/5215 | 4 days, 19:21:15 | None |
| Issue: New Tab Not Opening When Searching in Korean | https://github.com/zen-browser/desktop/issues/5213 | 0:14:43 | 6 days, 13:05:20 |
| Right-Click Context Menu: Keyboard Shortcuts Require Enter to Activate | https://github.com/zen-browser/desktop/issues/5212 | None | None |
| Support daily.dev extension in zen browser. firefox doesn't. | https://github.com/zen-browser/desktop/issues/5211 | 0:05:56 | 0:05:56 |
| Support daily.dev extension in zen browser. Firefox doesn't. | https://github.com/zen-browser/desktop/issues/5211 | 0:05:56 | 0:05:56 |
| Error at the bottom right when opening a tab | https://github.com/zen-browser/desktop/issues/5210 | 0:28:59 | 0:28:59 |
| Pen Tablet Scrolling Not Working in Sidebar | https://github.com/zen-browser/desktop/issues/5209 | None | None |
| Essentials icons are off center | https://github.com/zen-browser/desktop/issues/5207 | 19:44:34 | 22:48:36 |

View File

@@ -83,7 +83,7 @@
| Some browser dialogs appear off-screen | https://github.com/zen-browser/desktop/issues/7076 | 1 day, 1:32:55 | None |
| Mouse over floating sidebar prevents hide | https://github.com/zen-browser/desktop/issues/7075 | None | None |
| CRX Installer Not working in Zen Browser. | https://github.com/zen-browser/desktop/issues/7074 | 2 days, 23:32:33 | 3 days, 2:39:52 |
| Cannot resize native firefox sidebar when positioned on the right after restarting the browser | https://github.com/zen-browser/desktop/issues/7073 | None | None |
| Cannot resize native Firefox sidebar when positioned on the right after restarting the browser | https://github.com/zen-browser/desktop/issues/7073 | None | None |
| compact mode color bug | https://github.com/zen-browser/desktop/issues/7068 | 0:19:56 | 2:12:33 |
| Unable to assign Cmd+Z for undo | https://github.com/zen-browser/desktop/issues/7067 | None | None |
| "change theme colors" cannot be undone and breaks other theming features | https://github.com/zen-browser/desktop/issues/7066 | None | None |
@@ -560,7 +560,7 @@
| New tab opens black page with only search option | https://github.com/zen-browser/desktop/issues/6418 | 1:30:09 | 1 day, 20:19:37 |
| Black text on dark theme | https://github.com/zen-browser/desktop/issues/6416 | 1 day, 0:41:57 | 16 days, 1:56:48 |
| Login pop-ups instant crashed. | https://github.com/zen-browser/desktop/issues/6414 | None | 3 days, 11:52:50 |
| Only last workspace tabs are synced via firefox account | https://github.com/zen-browser/desktop/issues/6413 | 3:29:46 | 16 days, 2:45:09 |
| Only last workspace tabs are synced via Firefox account | https://github.com/zen-browser/desktop/issues/6413 | 3:29:46 | 16 days, 2:45:09 |
| Open in split window in split window undefined behaviour | https://github.com/zen-browser/desktop/issues/6412 | 16 days, 2:55:23 | 16 days, 2:55:24 |
| Sidebar Stucked | https://github.com/zen-browser/desktop/issues/6411 | 16 days, 3:17:38 | 16 days, 3:17:39 |
| Keyboard shortcuts not working with non-English layouts (e.g., Turkish) | https://github.com/zen-browser/desktop/issues/6410 | 16 days, 3:27:56 | 16 days, 3:27:56 |
@@ -613,7 +613,7 @@
| mica broke again | https://github.com/zen-browser/desktop/issues/6346 | 17 days, 16:46:21 | 17 days, 16:46:21 |
| Search engine selector gone | https://github.com/zen-browser/desktop/issues/6345 | 4 days, 20:07:21 | 17 days, 17:17:10 |
| PDF files open to a blank page when Zen is closed | https://github.com/zen-browser/desktop/issues/6343 | 12:43:24 | 17 days, 18:13:02 |
| Tab peek controls overlap firefox ai chat sidebar | https://github.com/zen-browser/desktop/issues/6342 | 17 days, 18:38:25 | 17 days, 18:38:26 |
| Tab peek controls overlap Firefox ai chat sidebar | https://github.com/zen-browser/desktop/issues/6342 | 17 days, 18:38:25 | 17 days, 18:38:26 |
| Cant open a link with left click. | https://github.com/zen-browser/desktop/issues/6341 | 17 days, 18:56:56 | 17 days, 18:56:57 |
| Distorted UI during first use - fresh install | https://github.com/zen-browser/desktop/issues/6340 | 17 days, 19:04:58 | 17 days, 19:04:59 |
| Ctrl+Tab fails to switch tabs when dragging a file | https://github.com/zen-browser/desktop/issues/6339 | 17 days, 20:59:02 | 17 days, 20:59:03 |
@@ -758,7 +758,7 @@
| Extension icons hang off the side of the sidebar, and extension addition confirmation window hangs off the screen | https://github.com/zen-browser/desktop/issues/6135 | 18 days, 8:19:50 | 22 days, 6:38:20 |
| Settings show zen-split-view-modifier which is unclear, I think it should be with spaces? | https://github.com/zen-browser/desktop/issues/6134 | 22 days, 7:27:49 | 22 days, 7:27:50 |
| Grayish White Rounded Corners Visible when fullscreen in a video on youtube | https://github.com/zen-browser/desktop/issues/6132 | 8:50:42 | 22 days, 9:35:57 |
| Zen Browser local building and running shows firefox only not zen type visual | https://github.com/zen-browser/desktop/issues/6128 | None | 3 days, 10:31:16 |
| Zen Browser local building and running shows Firefox only not zen type visual | https://github.com/zen-browser/desktop/issues/6128 | None | 3 days, 10:31:16 |
| Cannot download files with the flatpak version of Zen | https://github.com/zen-browser/desktop/issues/6127 | 10:53:18 | 22 days, 18:27:20 |
| File Browser doesnt list user home directory files | https://github.com/zen-browser/desktop/issues/6126 | 22 days, 18:35:54 | 22 days, 18:35:55 |
| Dragging sidebar moves the window | https://github.com/zen-browser/desktop/issues/6125 | 19:01:23 | 22 days, 19:16:45 |
@@ -800,7 +800,7 @@
| YouTube not opening in theater mode | https://github.com/zen-browser/desktop/issues/6078 | 24 days, 1:55:03 | 24 days, 1:55:03 |
| Cannot Finish Initial Config due to missing Next Button on Color / Accent Chooser | https://github.com/zen-browser/desktop/issues/6076 | 24 days, 2:23:02 | 24 days, 2:23:02 |
| Unable to fully integrate GTK and QT themes | https://github.com/zen-browser/desktop/issues/6074 | 1 day, 4:58:09 | 24 days, 4:44:34 |
| can not install any firefox themes | https://github.com/zen-browser/desktop/issues/6073 | 18:28:31 | 18:28:31 |
| can not install any Firefox themes | https://github.com/zen-browser/desktop/issues/6073 | 18:28:31 | 18:28:31 |
| No icon on windows | https://github.com/zen-browser/desktop/issues/6071 | 0:12:31 | 0:23:42 |
| Twilight Browser: Unexpected Blur Transparency After Update | https://github.com/zen-browser/desktop/issues/6069 | 7:36:42 | 24 days, 11:03:57 |
| New tabs open as essentials; essentials do not retain order | https://github.com/zen-browser/desktop/issues/6068 | None | 1 day, 15:21:33 |

View File

@@ -0,0 +1,587 @@
# Issue Metrics
| Metric | Average | Median | 90th percentile |
| --- | --- | --- | ---: |
| Time to first response | 1 day, 10:58:31 | 4:19:41 | 4 days, 7:38:02 |
| Time to close | 2 days, 13:49:59 | 11:11:45 | 9 days, 19:10:27 |
| Metric | Count |
| --- | ---: |
| Number of items that remain open | 236 |
| Number of items closed | 333 |
| Total number of items created | 569 |
| Title | URL | Time to first response | Time to close |
| --- | --- | --- | --- |
| Cloudflare Turnstile can't be passed on Zen | https://github.com/zen-browser/desktop/issues/7948 | None | None |
| [Gecko engine] - Zen doesn't load a site (Doom loading) | https://github.com/zen-browser/desktop/issues/7946 | 0:09:25 | 0:09:25 |
| Unable to open URL bar when sidebar is unfocused | https://github.com/zen-browser/desktop/issues/7944 | 1:22:42 | None |
| Remove AutoPlay Icon | https://github.com/zen-browser/desktop/issues/7943 | None | None |
| "Prevent tab unload" doesn't save it's state on browser restart | https://github.com/zen-browser/desktop/issues/7942 | None | None |
| Unable to emoji picker when creating/editing workspace | https://github.com/zen-browser/desktop/issues/7940 | None | None |
| Tabs crash when loading any video stream. | https://github.com/zen-browser/desktop/issues/7939 | None | None |
| Resizing the window on MacOS triggers websites shortcuts | https://github.com/zen-browser/desktop/issues/7937 | None | None |
| MDN Search add-on does not work anymore | https://github.com/zen-browser/desktop/issues/7936 | 6:23:47 | None |
| Browser extensions often fail to work, randomly breaking in different workspaces. | https://github.com/zen-browser/desktop/issues/7934 | None | None |
| The Settings Page does not resize based on browser view size. | https://github.com/zen-browser/desktop/issues/7933 | None | None |
| Often Zen fills ram and makes computer unresponsive | https://github.com/zen-browser/desktop/issues/7931 | None | None |
| weird newtab behaviour in certain sites | https://github.com/zen-browser/desktop/issues/7930 | None | None |
| YouTube fails to load any content that is not specifically a video stream | https://github.com/zen-browser/desktop/issues/7929 | 11:28:37 | 18:24:51 |
| Empty url bar looses focus | https://github.com/zen-browser/desktop/issues/7926 | 0:33:26 | 3:02:07 |
| The toolbar is still unable to adapt with the rest of the theme | https://github.com/zen-browser/desktop/issues/7925 | None | None |
| Closing the frozen browser, deletes all tabs | https://github.com/zen-browser/desktop/issues/7923 | 0:45:02 | 0:45:02 |
| split tab shortcut is already taken by OS shortcut on macOS | https://github.com/zen-browser/desktop/issues/7922 | 15:41:24 | 15:41:24 |
| Zen not properly restoring previously opened tabs in the previous session (Only pinned tabs restored; potential container or Sidebery issue?) | https://github.com/zen-browser/desktop/issues/7920 | 3:01:11 | None |
| Help entrypoints in Help menu and About Zen go to Firefox docs | https://github.com/zen-browser/desktop/issues/7919 | None | None |
| "Split horizontal" shortcut conflicts with macOS default | https://github.com/zen-browser/desktop/issues/7918 | None | None |
| Zen not remembering where the tabs opened in the previous sessions. | https://github.com/zen-browser/desktop/issues/7916 | 15:46:31 | None |
| Incorrect behavior when pressing ctrl+enter in URL bar after typing a string | https://github.com/zen-browser/desktop/issues/7915 | 14:56:31 | 14:56:31 |
| Additional Zen icons added to Dock when links are opened | https://github.com/zen-browser/desktop/issues/7914 | None | None |
| New Tab Startup Opening | https://github.com/zen-browser/desktop/issues/7912 | 2:27:10 | 2:27:10 |
| Cannot scroll webpages using Wacom Pen tablet | https://github.com/zen-browser/desktop/issues/7911 | None | 1 day, 1:16:05 |
| When using Tabs on the Right, the Glance controls are on the wrong side | https://github.com/zen-browser/desktop/issues/7910 | None | None |
| Displaying the Wrong Information | https://github.com/zen-browser/desktop/issues/7909 | 19:28:41 | 19:28:41 |
| Compact mode doesn't hide sidebar | https://github.com/zen-browser/desktop/issues/7908 | 5:31:34 | None |
| Black content on extensions window | https://github.com/zen-browser/desktop/issues/7907 | 0:09:00 | 4:16:12 |
| Slash character (/) in URL field opens search bar and making it impossible to write https:// | https://github.com/zen-browser/desktop/issues/7906 | 1 day, 0:32:34 | None |
| After I delete everything in the address bar, I lose focus and have to click it again to type. Is there a way to fix this? | https://github.com/zen-browser/desktop/issues/7905 | None | 0:01:26 |
| Tabs not restored on startup under specific conditions | https://github.com/zen-browser/desktop/issues/7902 | 6:24:57 | 12:52:38 |
| Duplicating a renamed Pinned Tab causes the duplicated tab to be named "New Tab" instead of the website name | https://github.com/zen-browser/desktop/issues/7900 | None | 5:09:46 |
| When the theme is set to System theme - Auto and the System theme is Dark, the highlighted search suggestion is the wrong color | https://github.com/zen-browser/desktop/issues/7899 | None | None |
| Inconsistent/Incorrect behavior when using ctrl+enter from new tab addressbar | https://github.com/zen-browser/desktop/issues/7898 | 1 day, 16:47:43 | 3 days, 2:50:21 |
| [Twilight 1.11.5] Sizing issue with essentials in multi toolbar mode | https://github.com/zen-browser/desktop/issues/7897 | 1:40:18 | 5:03:44 |
| AWS Console Session/Credential Error "Missing credentials in config, if using AWS_CONFIG_FILE, set AWS_SDK_LOAD_CONFIG=1" | https://github.com/zen-browser/desktop/issues/7896 | None | None |
| Dark Mode not persistent | https://github.com/zen-browser/desktop/issues/7894 | None | None |
| pinned tabs closed via firefox on android open after restart | https://github.com/zen-browser/desktop/issues/7892 | None | None |
| Idle inhibit not released after fullscreen video finishes playing on Wayland | https://github.com/zen-browser/desktop/issues/7891 | None | 0:19:07 |
| Not every window in compact mode on startup if multiple window is open. | https://github.com/zen-browser/desktop/issues/7890 | None | 4:40:46 |
| ctrl+tab goes through essentials and pinned tabs | https://github.com/zen-browser/desktop/issues/7889 | 11:45:57 | 11:46:05 |
| Extensions only show a blank popup in full-screen | https://github.com/zen-browser/desktop/issues/7888 | None | 0:01:28 |
| Command+Option+[arrow key] switches tabs on Mac but not on Windows | https://github.com/zen-browser/desktop/issues/7886 | 15:40:50 | 15:40:50 |
| Dark mode (despite changing to light) | https://github.com/zen-browser/desktop/issues/7885 | 1 day, 20:57:57 | 1 day, 20:57:57 |
| Spotify seems broken on Zen browser | https://github.com/zen-browser/desktop/issues/7878 | 0:10:25 | 0:25:06 |
| ALT not being recognize when using the key | https://github.com/zen-browser/desktop/issues/7877 | 4 days, 2:54:12 | None |
| Tooltips and popups flickering on Zen / OS X | https://github.com/zen-browser/desktop/issues/7876 | 0:06:03 | 1:33:13 |
| Intermittent pink frame in YT videos | https://github.com/zen-browser/desktop/issues/7874 | 0:21:12 | None |
| Extensions view is blank when opened in taskbar | https://github.com/zen-browser/desktop/issues/7873 | 0:46:08 | 0:46:08 |
| SSL certificate error on trusted custom root CA: SEC_ERROR_UNKNOWN_ISSUER | https://github.com/zen-browser/desktop/issues/7872 | 10:27:53 | 10:27:53 |
| [BUG?] High RAM consumption | https://github.com/zen-browser/desktop/issues/7871 | None | 12:00:20 |
| Compact sidebar appearch when switching tabs with the shortcuts | https://github.com/zen-browser/desktop/issues/7870 | 3:10:22 | 14:26:17 |
| Horizontal Scrollbar Appears in Full-Screen Mode on YouTube | https://github.com/zen-browser/desktop/issues/7867 | 1 day, 1:53:22 | None |
| Tabs crashing after click Links in Thunderbird Mail | https://github.com/zen-browser/desktop/issues/7866 | 1 day, 0:14:36 | 2 days, 2:58:17 |
| Ctrl+Tab Cycling through tabs crashes if pressed without recent tabs | https://github.com/zen-browser/desktop/issues/7865 | None | 3:20:55 |
| Browser freezes when using Glance with webpages open in another workspace | https://github.com/zen-browser/desktop/issues/7864 | 1:54:48 | 3 days, 22:16:17 |
| youtube video flickers on nvidia gpu | https://github.com/zen-browser/desktop/issues/7860 | 0:58:00 | 1 day, 3:33:06 |
| Feedback on Tab and Sidebar Behavior | https://github.com/zen-browser/desktop/issues/7859 | 0:07:25 | 0:07:25 |
| YouTube Music Media Controller Pause Button has no Effect | https://github.com/zen-browser/desktop/issues/7858 | None | 0:04:51 |
| Text jitter in popup window on macOS | https://github.com/zen-browser/desktop/issues/7856 | 7:16:06 | None |
| Setting theme in Firefox also applies to Zen | https://github.com/zen-browser/desktop/issues/7855 | 7:45:30 | None |
| Clearing cookies fails when using the single toolbar layout | https://github.com/zen-browser/desktop/issues/7851 | None | None |
| Pinned Tabs: "open in new tab" from glance window places the tab into pinned tabs automatically | https://github.com/zen-browser/desktop/issues/7850 | None | 4:17:16 |
| Bug with enlarged extension icon after expanding and minimazing right sidebar. | https://github.com/zen-browser/desktop/issues/7848 | 0:09:31 | 0:13:57 |
| Running firefox in incognito mode makes Zen lose saved tabs (Windows) | https://github.com/zen-browser/desktop/issues/7847 | 1:51:53 | None |
| Picture-in-picture "Back to tab" button restores pin in the incorrect workspace | https://github.com/zen-browser/desktop/issues/7845 | 6:23:29 | 1 day, 7:14:12 |
| weird link opening behavior | https://github.com/zen-browser/desktop/issues/7844 | 6:08:34 | 6:18:12 |
| Linux-zen can not access directory page directly | https://github.com/zen-browser/desktop/issues/7841 | 11:54:43 | 11:54:43 |
| Moving a split screen tab across workspaces is broken | https://github.com/zen-browser/desktop/issues/7840 | 6:28:28 | 2 days, 10:33:34 |
| The web panel is gone? | https://github.com/zen-browser/desktop/issues/7839 | 0:02:32 | 0:02:32 |
| Tabs on right has an empty margin | https://github.com/zen-browser/desktop/issues/7838 | 4:55:32 | None |
| Twitch.tv - Zen Browser | https://github.com/zen-browser/desktop/issues/7837 | 1:55:02 | 1:55:02 |
| Zen Mod "Better Tab indicators v1.0.0" not function | https://github.com/zen-browser/desktop/issues/7833 | 0:41:23 | 0:45:22 |
| Pinned tabs remember scrolling position when unloaded and reset | https://github.com/zen-browser/desktop/issues/7830 | 0:30:46 | 6:04:50 |
| SponsorBlock Breaks the custom volume slider and theme. | https://github.com/zen-browser/desktop/issues/7829 | 5:24:28 | 5:24:29 |
| Problem with video uploads on Xiaohongshu's Creator Platform through Zen | https://github.com/zen-browser/desktop/issues/7828 | 3 days, 1:04:18 | 3 days, 2:55:43 |
| Cant click/open essentials | https://github.com/zen-browser/desktop/issues/7826 | 1 day, 15:20:15 | 1 day, 15:20:15 |
| [Twilight 1.11.5t] Tabs break and browser flickers after unloading pinned tabs | https://github.com/zen-browser/desktop/issues/7825 | 3 days, 3:19:07 | 3 days, 6:38:13 |
| [Twilight 1.11.5t] Close window button doesn't work. | https://github.com/zen-browser/desktop/issues/7824 | 2:28:27 | 1 day, 15:45:18 |
| iCloud Passwords broken with latest macOS | https://github.com/zen-browser/desktop/issues/7823 | None | None |
| Tab scrollbar dragging is broken again | https://github.com/zen-browser/desktop/issues/7821 | 1 day, 21:12:24 | None |
| "Unload tab" doesn't work when tabs are in Split Mode | https://github.com/zen-browser/desktop/issues/7819 | 22:02:39 | 22:02:39 |
| Compact mode single toolbar repeatedly goes from hidden to visible while using Raycast focus | https://github.com/zen-browser/desktop/issues/7818 | 0:22:13 | 1:20:26 |
| Performance benchmarks link in README.md is broken | https://github.com/zen-browser/desktop/issues/7817 | None | 0:07:57 |
| Google Meet Widget's Microphone and Camera Controls Have no Effects | https://github.com/zen-browser/desktop/issues/7815 | None | 0:02:32 |
| Every startup does not display the homepage | https://github.com/zen-browser/desktop/issues/7814 | 0:11:47 | 0:11:47 |
| Unable to click links from Thunderbird and other apps to jump to zen browser | https://github.com/zen-browser/desktop/issues/7813 | 0:26:55 | 0:27:32 |
| Suspicious New Tab in every startup | https://github.com/zen-browser/desktop/issues/7812 | 1:14:48 | 1:14:48 |
| Using private window always prompts the user to solve a Google CAPTCHA for "unusual traffic" | https://github.com/zen-browser/desktop/issues/7811 | 4:08:25 | 4:08:25 |
| No keyboard shortcut assigned, yet still error 'conflict with another shortcut' | https://github.com/zen-browser/desktop/issues/7810 | 7:33:18 | None |
| Show Bookmarks Toolbar shortcut not wroking in Single Toolbar Layout | https://github.com/zen-browser/desktop/issues/7809 | 0:48:50 | 10:04:21 |
| Cannot inject scripts into same-origin iframes | https://github.com/zen-browser/desktop/issues/7808 | 10:11:50 | 10:11:50 |
| Change Tab(s) to Workspace not working with split tabs | https://github.com/zen-browser/desktop/issues/7806 | 13:20:30 | 4 days, 9:18:08 |
| Reset and pin tab button doesn't work for local folder path | https://github.com/zen-browser/desktop/issues/7805 | None | None |
| Middle-click to open new tab unintentionally pastes clipboard contents into address bar | https://github.com/zen-browser/desktop/issues/7804 | 8:36:38 | None |
| Chinese Language in URL Bar Causes Zen to Soft-Freeze | https://github.com/zen-browser/desktop/issues/7803 | 6 days, 13:54:47 | None |
| "New Tab" button at bottom of tab list doesn't do... anything? | https://github.com/zen-browser/desktop/issues/7802 | None | 0:01:24 |
| Default Workspace not showing `Essentials` Tabs. | https://github.com/zen-browser/desktop/issues/7800 | 1:30:16 | 13:48:39 |
| Muting a tab from the media controller does not change the state of the "Mute Tab" button to "Unmute Tab" | https://github.com/zen-browser/desktop/issues/7798 | None | 3 days, 16:05:34 |
| "Expand Sidebar" button shifts slightly and when sidebar is toggled | https://github.com/zen-browser/desktop/issues/7797 | 10:56:40 | None |
| Zen doesn't remember selected tab between sessions | https://github.com/zen-browser/desktop/issues/7795 | 3:15:56 | 3 days, 3:12:31 |
| The app name in GNOME notifications is "Mozilla zen" | https://github.com/zen-browser/desktop/issues/7794 | 1:09:59 | 1:35:44 |
| ctrl+space shortcut white space | https://github.com/zen-browser/desktop/issues/7793 | None | None |
| Compact Mode Expand-on-Hover Single Toolbar Does Not Have Same Padding as Browser Viewport | https://github.com/zen-browser/desktop/issues/7792 | None | 0:00:18 |
| Zen Bar closing when changing language | https://github.com/zen-browser/desktop/issues/7791 | 2 days, 9:32:56 | None |
| Compact mode open/close animation bugged | https://github.com/zen-browser/desktop/issues/7789 | 0:07:52 | 3:17:28 |
| Bookmarks unaccessible when no tabs are open in compact mode | https://github.com/zen-browser/desktop/issues/7788 | None | 0:13:38 |
| Zen forgets named Tabs after reopening | https://github.com/zen-browser/desktop/issues/7787 | 1:26:39 | None |
| After adding the Bing search engine, searching in the address bar, the search prompt cannot be displayed | https://github.com/zen-browser/desktop/issues/7786 | 1:28:38 | 1 day, 1:15:18 |
| Watt Toolkit's Network routing service fails to accelerate zen browser access to github | https://github.com/zen-browser/desktop/issues/7785 | 4:45:53 | 4:45:53 |
| Terrible performance on Power Saving mode | https://github.com/zen-browser/desktop/issues/7784 | 1:03:17 | None |
| duplicate of 504 | https://github.com/zen-browser/desktop/issues/7781 | None | 2:30:56 |
| hitting `Ctrl+T` in Fullscreen mode opens new tab menu only when fullscreen mode is exited | https://github.com/zen-browser/desktop/issues/7779 | None | 9:22:25 |
| Button that works on Firefox does not work on Zen | https://github.com/zen-browser/desktop/issues/7778 | 0:45:05 | None |
| No homepage or totally blank homepage problem! | https://github.com/zen-browser/desktop/issues/7773 | 7:35:50 | 7:35:50 |
| Firefox multi-account container and browsing history | https://github.com/zen-browser/desktop/issues/7768 | 20:19:15 | None |
| The Extensions Not Work | https://github.com/zen-browser/desktop/issues/7766 | None | 0:26:32 |
| Bitwarden blank window after sign-in | https://github.com/zen-browser/desktop/issues/7763 | 10:45:22 | 7 days, 5:07:50 |
| The Facebook page turns pale white after open link. | https://github.com/zen-browser/desktop/issues/7760 | 7:32:21 | 6 days, 9:26:33 |
| Linux arm64 builds does neither have drm enable option nor detect widevine CDM in plugins | https://github.com/zen-browser/desktop/issues/7759 | 20:47:30 | 2 days, 13:42:10 |
| Spliting Essentials or Pinned Tabs is off | https://github.com/zen-browser/desktop/issues/7758 | 7:05:27 | 7:05:27 |
| Zen browser does not support higher refresh rates on macOS | https://github.com/zen-browser/desktop/issues/7757 | 16:41:57 | 2 days, 10:42:28 |
| Address bar loses focus when changing language in GNOME | https://github.com/zen-browser/desktop/issues/7756 | None | 1:48:13 |
| Customize Toolbar tab becomes transparent | https://github.com/zen-browser/desktop/issues/7755 | None | None |
| Auto-PIP was enabled by default and cant find how to turn it off | https://github.com/zen-browser/desktop/issues/7754 | 0:19:14 | 0:19:14 |
| Higher CPU Usage and Choppy Video Playback in Glance | https://github.com/zen-browser/desktop/issues/7753 | None | 0:04:19 |
| Auto-PIP does not work if the PIP button is disabled | https://github.com/zen-browser/desktop/issues/7752 | None | 0:11:15 |
| F1 TV bug | https://github.com/zen-browser/desktop/issues/7751 | 0:26:19 | 0:26:19 |
| Zen crashes after sometime while screensharing on discord web | https://github.com/zen-browser/desktop/issues/7750 | 17:39:57 | None |
| Picture-in-Picture auto-starts when changing tabs or workspaces | https://github.com/zen-browser/desktop/issues/7749 | 0:13:43 | 0:26:03 |
| Toolbar disappears | https://github.com/zen-browser/desktop/issues/7746 | 0:51:00 | None |
| [GNOME] changing keyboard layout while on the search bar makes the search bar disappear | https://github.com/zen-browser/desktop/issues/7744 | None | 0:12:23 |
| AI Chatbot selecting text shortcut open AI website in new tab instead of sidebar. | https://github.com/zen-browser/desktop/issues/7742 | 0:39:10 | None |
| switching workspaces focuses on the URL bar | https://github.com/zen-browser/desktop/issues/7741 | 0:49:53 | 1:10:53 |
| split tabs issue | https://github.com/zen-browser/desktop/issues/7736 | 1:40:14 | None |
| PIP video covers new tab | https://github.com/zen-browser/desktop/issues/7735 | 0:03:58 | 1:36:34 |
| After an update, Zen is installed twice. As visible in "Installed Apps" in Windows. | https://github.com/zen-browser/desktop/issues/7734 | None | None |
| CMD+T &#124; floating URL bar does not show | https://github.com/zen-browser/desktop/issues/7733 | 1:14:20 | 0:59:06 |
| The rounded corner theme affects the mouse's access to the scroll bar | https://github.com/zen-browser/desktop/issues/7732 | 3 days, 9:30:14 | 3 days, 10:14:34 |
| Menubar Text Turns Black in Dark Mode When Switching Apps via Stage Manager | https://github.com/zen-browser/desktop/issues/7731 | None | None |
| Epic Games Store - no audio in videos | https://github.com/zen-browser/desktop/issues/7730 | 2:21:02 | 4:06:29 |
| Wrong aspect ratio when opening on sway wm | https://github.com/zen-browser/desktop/issues/7729 | 12:23:25 | None |
| Moving cursor from addon popup to website keeps tab sidebar showing in compact mode | https://github.com/zen-browser/desktop/issues/7728 | None | None |
| URL bar not focused upon opening zen (with replace-newtab: false) | https://github.com/zen-browser/desktop/issues/7727 | None | 0:22:28 |
| Pop up video(PIP) window that won't go away (Facebook) | https://github.com/zen-browser/desktop/issues/7726 | 11:06:08 | 1 day, 12:17:11 |
| Zen does not use system theme setting | https://github.com/zen-browser/desktop/issues/7725 | 1:16:41 | 1:30:14 |
| Zen doesnt Display Proxmox WebUi correctly.... | https://github.com/zen-browser/desktop/issues/7724 | 12:19:36 | None |
| css attribute "breakout="true"" not persistant | https://github.com/zen-browser/desktop/issues/7722 | 0:08:57 | 0:08:57 |
| Media control incorrectly shows a duration for onging live stream on youtube | https://github.com/zen-browser/desktop/issues/7721 | None | None |
| Cannot copy selected text when right-clicking on the address bar in Linux Mint | https://github.com/zen-browser/desktop/issues/7719 | None | 0:58:16 |
| Zen freezes - nothing responds | https://github.com/zen-browser/desktop/issues/7718 | 2:01:46 | 2:41:50 |
| sidebar not hiding on blankpage | https://github.com/zen-browser/desktop/issues/7717 | 2:53:33 | 2:53:33 |
| Zen seems to crash randomly when switching tabs | https://github.com/zen-browser/desktop/issues/7716 | 1 day, 14:07:42 | 10 days, 18:03:06 |
| Invalid page background in dark themes | https://github.com/zen-browser/desktop/issues/7715 | 5:05:23 | 5:05:23 |
| Hardware Acceleration - Browser almost unusable without it | https://github.com/zen-browser/desktop/issues/7714 | 5:32:14 | 5:48:30 |
| Magic Mouse swipe does not change workspaces on macOS | https://github.com/zen-browser/desktop/issues/7713 | 5 days, 3:11:30 | None |
| Where is zen sidebar | https://github.com/zen-browser/desktop/issues/7712 | 1:06:23 | 5:59:31 |
| URL bar flashes when exiting fullscreen mode | https://github.com/zen-browser/desktop/issues/7711 | 1:31:07 | None |
| Inconsistent behaviour of reset button when tab is loading | https://github.com/zen-browser/desktop/issues/7710 | None | None |
| user.js | https://github.com/zen-browser/desktop/issues/7709 | 0:08:13 | 0:08:13 |
| Changing Zoom keybindings is not taking effect on windows | https://github.com/zen-browser/desktop/issues/7708 | None | None |
| Google Maps not showing route (the blue line) | https://github.com/zen-browser/desktop/issues/7707 | 3:34:36 | 2 days, 5:27:24 |
| Basic Authorization doesn't works on some websites | https://github.com/zen-browser/desktop/issues/7706 | 1:59:13 | 1:59:13 |
| Sometimes there are vertical black bars on the left/right size of picture in picture mini player | https://github.com/zen-browser/desktop/issues/7705 | None | None |
| Blank Extension Popup when activated using the keyboard shortcut | https://github.com/zen-browser/desktop/issues/7703 | None | 10:14:29 |
| Can no longer cycle through tabs in Macos using cmd+opt+right for seemingly no reason | https://github.com/zen-browser/desktop/issues/7702 | 1 day, 8:49:40 | 1 day, 8:49:40 |
| about:protections advertises "Zen for Android and iOS," links to Firefox | https://github.com/zen-browser/desktop/issues/7701 | None | None |
| In the new window, voice input is not working. This prevents me from writing in the browsers. | https://github.com/zen-browser/desktop/issues/7698 | None | None |
| picture in picture disappears | https://github.com/zen-browser/desktop/issues/7697 | 1 day, 13:00:12 | None |
| Tab Switching Unresponsive in Split View Mode | https://github.com/zen-browser/desktop/issues/7696 | 2:24:28 | None |
| content-element-separation=0 doesn't show browser windows controls | https://github.com/zen-browser/desktop/issues/7694 | None | 0:03:33 |
| last used tabs not in focus in startup | https://github.com/zen-browser/desktop/issues/7693 | 0:58:59 | 1:06:21 |
| Unexpected Behavior When Opening New Tab (CTRL + T) During YouTube Fullscreen Video | https://github.com/zen-browser/desktop/issues/7692 | 2:48:18 | 23:21:28 |
| Zen does not appear in Start Menu | https://github.com/zen-browser/desktop/issues/7691 | 0:17:52 | 1:41:13 |
| Unable to perform new update | https://github.com/zen-browser/desktop/issues/7689 | None | 1:46:21 |
| Bitwarden does not ask to save new passwords | https://github.com/zen-browser/desktop/issues/7687 | None | None |
| YouTube eventually gets very slow and sluggish to use | https://github.com/zen-browser/desktop/issues/7685 | 10 days, 7:27:25 | None |
| Small inconsistencies with zen.urlbar.replace-newtab disabled | https://github.com/zen-browser/desktop/issues/7684 | 0:39:19 | 1 day, 6:02:08 |
| Clicking New Tab multiple times briefly flickers the browser back to the previous tab. | https://github.com/zen-browser/desktop/issues/7683 | None | None |
| Compact mode not active for 2/3 windows on startup, switching to single toolbar and back again breaks layout | https://github.com/zen-browser/desktop/issues/7682 | 1 day, 2:24:51 | None |
| Zen did not auto update to 1.11.3b when I thought it did | https://github.com/zen-browser/desktop/issues/7681 | 1:36:45 | 1:36:45 |
| Text colors arent correctly visible while `zen.theme.gradient.show-custom-colors` is enabled | https://github.com/zen-browser/desktop/issues/7680 | 6:46:05 | 6:46:05 |
| Zen shows warning icon next to "This is a secure Zen page" | https://github.com/zen-browser/desktop/issues/7679 | 2:12:33 | None |
| Tabs alignment is off when the tab-bar is collapsed and there are enough tabs that they can be scrolled | https://github.com/zen-browser/desktop/issues/7678 | None | None |
| Zen using a lot of memory | https://github.com/zen-browser/desktop/issues/7673 | 0:08:16 | 9:36:13 |
| Cannot play DRM content (Specifcally crunchyroll.com) on Linux since 1.11.3b | https://github.com/zen-browser/desktop/issues/7671 | 1:10:45 | 10 days, 6:30:28 |
| zen seemingly tiling into 4 windows on hyprland | https://github.com/zen-browser/desktop/issues/7670 | None | None |
| Tabs are not opening on startup when closing using X button | https://github.com/zen-browser/desktop/issues/7669 | 2:08:51 | 1 day, 10:29:12 |
| When I hit ctrl+t for new tab, start writing url, change my mind and cancel it, then invoke it again, the typed text is still there | https://github.com/zen-browser/desktop/issues/7667 | 0:53:10 | 7:59:08 |
| URL Bar not showing on fullscreen mode and glitchin when exiting it | https://github.com/zen-browser/desktop/issues/7665 | 0:21:09 | None |
| Flatpak reverted to an older version today. | https://github.com/zen-browser/desktop/issues/7664 | 8:07:44 | 17:35:17 |
| Hyprland blur not working at the start | https://github.com/zen-browser/desktop/issues/7663 | 9:54:03 | None |
| Switch Profile Button Gone | https://github.com/zen-browser/desktop/issues/7662 | 10:56:49 | 1 day, 1:39:17 |
| Issue with Zen browser after unexpected PC crash. | https://github.com/zen-browser/desktop/issues/7661 | 7:06:45 | None |
| Zen tries to automatically download a PDF on sites that use iframe elements to embed a PDF | https://github.com/zen-browser/desktop/issues/7660 | 0:23:40 | 1:47:54 |
| [Twilight 1.11.3t] Essential/Pinned tabs reload when already loading. | https://github.com/zen-browser/desktop/issues/7659 | 15:23:47 | 1 day, 4:59:18 |
| Nvidia RTX video super resolution doesn't work in Zen | https://github.com/zen-browser/desktop/issues/7658 | 12:30:11 | 21:59:00 |
| "zen.view.grey-out-inactive-windows" is bugged on Windows | https://github.com/zen-browser/desktop/issues/7657 | 22:45:09 | None |
| Twitch not supported | https://github.com/zen-browser/desktop/issues/7656 | 1:28:28 | None |
| Tab unloading fails on tabs using the Glance view | https://github.com/zen-browser/desktop/issues/7655 | 0:57:35 | None |
| Renamed Tabs do not show up in URL Bar | https://github.com/zen-browser/desktop/issues/7654 | 0:17:42 | None |
| When a tab is not loaded, searching it via % clones it instead of switching to it | https://github.com/zen-browser/desktop/issues/7653 | 0:37:13 | None |
| If you clear the contents of the address bar, the focus of the address bar will be released. | https://github.com/zen-browser/desktop/issues/7651 | 1:48:28 | 11 days, 5:19:00 |
| New tab search, stay on right click. | https://github.com/zen-browser/desktop/issues/7650 | None | 0:22:00 |
| Context Menu Colors Incorrectly Follow Application Theme | https://github.com/zen-browser/desktop/issues/7649 | 11 days, 5:49:13 | 12 days, 1:15:41 |
| Screen Sharing Bug on Mac | https://github.com/zen-browser/desktop/issues/7648 | None | 0:01:19 |
| Scrolling on the tabs on a touch screen does nothing | https://github.com/zen-browser/desktop/issues/7647 | None | 0:00:58 |
| Scrollbar in tabs doesn't appear in collapsed toolbar layout | https://github.com/zen-browser/desktop/issues/7646 | 0:13:13 | 0:19:22 |
| Overflow menu icon missing in single sidebar view mode | https://github.com/zen-browser/desktop/issues/7644 | 0:01:07 | 0:01:07 |
| Zen browser doesnt show minimize button on linux | https://github.com/zen-browser/desktop/issues/7643 | 2:28:48 | 2:28:48 |
| Claude “App Integration” panel disappears instantly after click | https://github.com/zen-browser/desktop/issues/7642 | 1:32:22 | 1:32:22 |
| Unable to revert "On macos, you can now cycle through tabs with cmd+opt+UP or cmd+opt+DOWN" | https://github.com/zen-browser/desktop/issues/7640 | 3:46:56 | 3:46:55 |
| Missing .dll files after installation | https://github.com/zen-browser/desktop/issues/7638 | None | 0:14:40 |
| Webpage content overflow window region after initing Zen | https://github.com/zen-browser/desktop/issues/7637 | None | 0:04:41 |
| Mouse history back and history forward buttons change workspaces when not inside tab container | https://github.com/zen-browser/desktop/issues/7636 | 6 days, 12:45:14 | None |
| Spotify Skips and Only Plays 10 seconds of audio | https://github.com/zen-browser/desktop/issues/7635 | 2:06:02 | 2:06:02 |
| Add-ons GUIs are not loaded correctly | https://github.com/zen-browser/desktop/issues/7633 | 13:04:07 | None |
| Zen window gaining focus makes the hidden sidebar glitch | https://github.com/zen-browser/desktop/issues/7632 | 6:31:37 | 21:43:01 |
| Dragging a tab to essentials makes it disappear | https://github.com/zen-browser/desktop/issues/7631 | 0:15:33 | 23:19:25 |
| VC Runtime Errors in Installer | https://github.com/zen-browser/desktop/issues/7630 | 3:31:22 | 8:34:38 |
| Perform a component refactoring | https://github.com/zen-browser/desktop/issues/7628 | None | 0:23:06 |
| zen mods and Tag records | https://github.com/zen-browser/desktop/issues/7623 | None | None |
| Losing all tabs when closing the main window with the private one open | https://github.com/zen-browser/desktop/issues/7622 | 2:04:11 | 2:04:11 |
| Can't re-arrange essential Icons | https://github.com/zen-browser/desktop/issues/7617 | 0:09:59 | 5:01:31 |
| Sidebar breifly appears when exiting fullscreen video | https://github.com/zen-browser/desktop/issues/7615 | 0:57:48 | 2 days, 11:44:49 |
| Resetting the fixed tab is invalid, it is not possible to click the tab icon to reset the tab | https://github.com/zen-browser/desktop/issues/7614 | 7:47:12 | 21:41:31 |
| Ctrl+Tab Cycling preview is at desktop size instead of window size | https://github.com/zen-browser/desktop/issues/7612 | None | None |
| Synced containers disrupted in synced workspaces | https://github.com/zen-browser/desktop/issues/7611 | 3 days, 8:25:51 | None |
| [a11y] Yellow-on-white warning when rebinding keys | https://github.com/zen-browser/desktop/issues/7609 | 1:38:15 | None |
| missing workspace emojis | https://github.com/zen-browser/desktop/issues/7608 | None | None |
| Two workspace managers , I can't delete the lowest workspace manager, it takes up half the browser screen ,no option to change wokspace manager to "menu" type in settings anymore. | https://github.com/zen-browser/desktop/issues/7607 | 3:17:15 | None |
| Issues with Detaching Tabs from Parent Window | https://github.com/zen-browser/desktop/issues/7606 | 0:04:52 | None |
| New Window doesn't focus URL bar on compact mode | https://github.com/zen-browser/desktop/issues/7605 | 0:05:43 | 1 day, 18:08:01 |
| Unable to copy clean link | https://github.com/zen-browser/desktop/issues/7604 | 0:26:36 | 5:16:04 |
| Closing the last tab doesn't close the window | https://github.com/zen-browser/desktop/issues/7603 | None | 0:21:59 |
| split screen not working on draging the tabs | https://github.com/zen-browser/desktop/issues/7601 | 0:46:35 | None |
| Closing a pinned tab won't open it to the reset URL when opening it again | https://github.com/zen-browser/desktop/issues/7600 | 9:10:40 | 19:51:32 |
| Cannot Screenshare with Zen (Teams, Meet, Jitsi, and alike) | https://github.com/zen-browser/desktop/issues/7597 | 0:35:35 | None |
| Microsoft teams fails to initialize | https://github.com/zen-browser/desktop/issues/7596 | 3:00:35 | 2 days, 6:17:50 |
| Microsoft Word Online prevents Zen from opening split view | https://github.com/zen-browser/desktop/issues/7595 | 12 days, 5:47:57 | None |
| splitView.change-on-hover not working | https://github.com/zen-browser/desktop/issues/7594 | 7:21:42 | 7:21:42 |
| Transparent background on toolbar customization page on Linux (Fedora 42, GNOME 48) | https://github.com/zen-browser/desktop/issues/7593 | None | None |
| Compact mode state not being consistant to all workspaces | https://github.com/zen-browser/desktop/issues/7591 | 11:38:56 | None |
| Zen window gaining focus makes the hidden sidebar glitch | https://github.com/zen-browser/desktop/issues/7590 | 3:49:52 | None |
| youtube theater option not available | https://github.com/zen-browser/desktop/issues/7589 | None | 0:03:22 |
| Address Bar shifts slightly when selecting part of the URL, changing the selection | https://github.com/zen-browser/desktop/issues/7586 | 10:21:52 | None |
| "Profiles" Persists in Menu After Disabling `browser.profiles.enabled` | https://github.com/zen-browser/desktop/issues/7584 | 0:33:05 | 2:55:19 |
| Window Tab Managment breaks when using "Switch to Tab" with multiple windows | https://github.com/zen-browser/desktop/issues/7583 | 1 day, 19:13:20 | None |
| If You Open a Second Zen Browser Instance You Lose Your Split Tabs If You Close The Main Window First | https://github.com/zen-browser/desktop/issues/7582 | 10:22:23 | None |
| Dragging Tabs Quickly Causes Split Position to Lock Left Even When Hovering Right | https://github.com/zen-browser/desktop/issues/7581 | None | None |
| URL box in bookmark editing window is small | https://github.com/zen-browser/desktop/issues/7580 | 21:15:14 | None |
| Tabs crashed | https://github.com/zen-browser/desktop/issues/7577 | None | None |
| bug: modifying app-id with `--name` doesn't work anymore | https://github.com/zen-browser/desktop/issues/7576 | 9:00:29 | None |
| iCloud Password Firefox extension is not working! | https://github.com/zen-browser/desktop/issues/7575 | 0:34:42 | 0:34:42 |
| With firefox sidebar opened on left, glance view control botton floats over the sidebar | https://github.com/zen-browser/desktop/issues/7574 | 1 day, 2:06:38 | None |
| Flatpak version of Zen browser tries to upgrade to v1.7b instead of v1.11.2b | https://github.com/zen-browser/desktop/issues/7571 | 0:23:15 | 1:50:02 |
| no firefox labs button & feature highlight , Ai chatbot & picture in Picture on tab switch etc. | https://github.com/zen-browser/desktop/issues/7568 | None | 3:17:25 |
| 1.11.2b : no firefox labs button & feature highlight , Ai chatbot & picture in Picture on tab switch etc. | https://github.com/zen-browser/desktop/issues/7567 | None | 0:02:13 |
| Vieus IDP.HEUR.28 detected by Norton when trying to install Zen browser | https://github.com/zen-browser/desktop/issues/7565 | None | 0:55:15 |
| Alert box cutoff half way | https://github.com/zen-browser/desktop/issues/7564 | 5:12:02 | 13 days, 8:10:41 |
| Retaining pinned split essential tabs and changing layout for split essential tabs | https://github.com/zen-browser/desktop/issues/7563 | None | None |
| Horizontal splitting vertical split and closing split leaves page buggy | https://github.com/zen-browser/desktop/issues/7562 | None | None |
| Closing the tab shortcut doesn't close the window. | https://github.com/zen-browser/desktop/issues/7561 | 9:21:08 | 9:21:08 |
| Zen minimizes after closing download options | https://github.com/zen-browser/desktop/issues/7559 | 8:22:23 | 17:23:11 |
| URL Bar disappearing when no text is there even when behaviour is always floating. | https://github.com/zen-browser/desktop/issues/7558 | 8:30:20 | 11:46:40 |
| Updating Zen hides all my tabs in the tab list | https://github.com/zen-browser/desktop/issues/7557 | 0:12:37 | 0:15:56 |
| Zen is being updated by another instance | https://github.com/zen-browser/desktop/issues/7556 | 1:06:46 | None |
| URL bar in sidebar transitions faster than the sidebar itself when enabling compact mode without floating mode | https://github.com/zen-browser/desktop/issues/7554 | 2:25:13 | None |
| Can't display local files properly | https://github.com/zen-browser/desktop/issues/7553 | 2:48:35 | 2:48:35 |
| Drag & Drop Essentials To Split Incompatible With Mod "Bottom Essentials" | https://github.com/zen-browser/desktop/issues/7552 | None | 0:04:48 |
| Zen browser does not save a web page | https://github.com/zen-browser/desktop/issues/7551 | 2:45:42 | 5:12:17 |
| Workspace Bug | https://github.com/zen-browser/desktop/issues/7549 | 0:31:53 | 1 day, 5:23:29 |
| no sidebar in compact mode | https://github.com/zen-browser/desktop/issues/7548 | 6:22:41 | 17:25:22 |
| Deleted workspaces remain accessible and breaks the browser | https://github.com/zen-browser/desktop/issues/7547 | 2 days, 0:29:41 | None |
| Ukrainian language not available in "Translate Selection" menu despite being downloaded | https://github.com/zen-browser/desktop/issues/7546 | None | None |
| about:editprofile does not work | https://github.com/zen-browser/desktop/issues/7545 | 1:10:38 | 8:57:39 |
| Sidebar overflow on restart | https://github.com/zen-browser/desktop/issues/7544 | None | 2 days, 13:49:54 |
| Unable to resize the pane if it's on the right side | https://github.com/zen-browser/desktop/issues/7543 | 0:20:18 | 2 days, 8:54:19 |
| changing Workspace position doesn't work | https://github.com/zen-browser/desktop/issues/7542 | 1:54:30 | 4 days, 23:51:53 |
| Web Developer Toolbar in the Network tab does not show the response of streamed XHR calls | https://github.com/zen-browser/desktop/issues/7541 | 0:34:03 | 1:46:10 |
| Inconsistent Tab Unload When Disabled (Context Menu Item Missing) | https://github.com/zen-browser/desktop/issues/7539 | 0:31:50 | None |
| Button to switch between profiles has disappeared from the toolbar since 1.8.1b | https://github.com/zen-browser/desktop/issues/7538 | 1:38:27 | 5:12:38 |
| Icon on macOS:slightly alter the black background | https://github.com/zen-browser/desktop/issues/7537 | None | None |
| Delayed loading of secondary components on YouTube pages while main video loads immediately | https://github.com/zen-browser/desktop/issues/7536 | 2:21:49 | 5:27:13 |
| Closing an essential tab removes it from essentials | https://github.com/zen-browser/desktop/issues/7534 | 1:29:28 | 3:16:13 |
| What is "menu bar" | https://github.com/zen-browser/desktop/issues/7531 | 21:31:23 | 21:31:28 |
| unwanted corners rendering during fullscreen videos | https://github.com/zen-browser/desktop/issues/7530 | None | 0:21:41 |
| splitting tab with pip freezes browser | https://github.com/zen-browser/desktop/issues/7529 | None | 3 days, 2:31:32 |
| Toggle Floating Sidebar keyboard shortcut not working | https://github.com/zen-browser/desktop/issues/7528 | 22:40:20 | None |
| Windows 11 taskbar previewing all tabs instead of window instance and preview icon not shown | https://github.com/zen-browser/desktop/issues/7527 | 1:23:13 | 1:23:13 |
| Cant CTRL+T to open a new tab, while in fullscreen (e.g. YouTube Fullscreen) | https://github.com/zen-browser/desktop/issues/7526 | 2:21:27 | 13:13:36 |
| Cant scroll tab list on touch screen. | https://github.com/zen-browser/desktop/issues/7524 | None | None |
| Glance gets stuck in half-open state | https://github.com/zen-browser/desktop/issues/7522 | 14 days, 18:10:24 | 14 days, 18:10:24 |
| Restarting zen causes sidebar to not appear when hovered (compact mode, hide both) | https://github.com/zen-browser/desktop/issues/7521 | 6:01:35 | 9:15:43 |
| Facebook page goes all blue if I open one ot its links in Glance | https://github.com/zen-browser/desktop/issues/7520 | None | None |
| Sidebar action previews are glitchy when you hover (Extensions, Back button, Forward button, Tabs and etc) | https://github.com/zen-browser/desktop/issues/7518 | 0:49:25 | 10:15:00 |
| Youtube videos not loading if i update zen-browser: (1.10.3b-1 => 1.11.1b-1) | https://github.com/zen-browser/desktop/issues/7517 | None | 10:37:45 |
| If the download file is in Chinese, the file name encoding is incorrect | https://github.com/zen-browser/desktop/issues/7515 | 1:06:02 | None |
| Extensions are not getting pinned. | https://github.com/zen-browser/desktop/issues/7514 | 1 day, 14:33:37 | 16 days, 5:13:01 |
| The tab on the right displays an exception | https://github.com/zen-browser/desktop/issues/7513 | None | None |
| Sidebar tab UI breaks when dragging tab to pinned area during Glance preview | https://github.com/zen-browser/desktop/issues/7511 | 1:30:49 | None |
| The sidetab is bugged | https://github.com/zen-browser/desktop/issues/7510 | 7:06:42 | None |
| The pop-up window has two lines | https://github.com/zen-browser/desktop/issues/7509 | 1 day, 10:21:56 | 1 day, 10:21:56 |
| Delay in updating changes during web development on Windows 11 | https://github.com/zen-browser/desktop/issues/7508 | 11 days, 1:09:00 | None |
| Closing tabs is too slow when many tabs are open | https://github.com/zen-browser/desktop/issues/7507 | None | 6 days, 10:18:17 |
| Zen browser does not have rounded corners on the bottom | https://github.com/zen-browser/desktop/issues/7506 | 1 day, 11:22:11 | 1 day, 11:22:11 |
| Many keyboard shortctut stopped working | https://github.com/zen-browser/desktop/issues/7504 | None | 1 day, 13:16:17 |
| Keyboard Shortcuts Conflict with Polish Programmer Layout on Windows | https://github.com/zen-browser/desktop/issues/7502 | None | 1 day, 16:06:30 |
| "wheel" event does not fire for horizontal scrolling on web pages | https://github.com/zen-browser/desktop/issues/7499 | 0:23:12 | 1 day, 6:35:06 |
| handoffToAwesomebar set to false no longer works. | https://github.com/zen-browser/desktop/issues/7494 | 7:04:46 | 7:04:46 |
| Zen Sidebar got really big and I cannot use the browser | https://github.com/zen-browser/desktop/issues/7493 | 0:50:22 | 8:53:04 |
| Closing Glance from Essentials or Pinned tabs exits tab to blank screen | https://github.com/zen-browser/desktop/issues/7492 | 1 day, 13:50:43 | 1 day, 13:50:43 |
| logs off from every account on restart on MAC x64 | https://github.com/zen-browser/desktop/issues/7491 | 12 days, 4:18:12 | 12 days, 13:46:23 |
| Tab Preview not working | https://github.com/zen-browser/desktop/issues/7490 | 3:07:01 | 7:09:23 |
| [Twilight 1.11.2] Sidebar wont open in compact mode upon startup | https://github.com/zen-browser/desktop/issues/7489 | 12:38:26 | 21:42:47 |
| Zen specific Shortcut Keys not working | https://github.com/zen-browser/desktop/issues/7488 | 3 days, 1:42:36 | 6 days, 12:29:56 |
| Tabs not opening in startup | https://github.com/zen-browser/desktop/issues/7485 | 3:07:38 | 7 days, 2:44:07 |
| Incognito mode doent work | https://github.com/zen-browser/desktop/issues/7483 | None | 1 day, 23:03:21 |
| reddit comments can't be seen | https://github.com/zen-browser/desktop/issues/7482 | 3:00:09 | None |
| Multi-Containers add-on fails display setting sub-pages | https://github.com/zen-browser/desktop/issues/7481 | None | None |
| Essentials MAJOR layout shift when entering or exiting Compact Mode | https://github.com/zen-browser/desktop/issues/7480 | 8:02:54 | 2 days, 9:04:45 |
| Gnome Extensions addon not working | https://github.com/zen-browser/desktop/issues/7479 | 1 day, 0:41:57 | None |
| The Web Panel is missing (alt+p) | https://github.com/zen-browser/desktop/issues/7478 | 0:04:11 | 1:02:59 |
| Workspace icon not visible, unable to create new workspaces | https://github.com/zen-browser/desktop/issues/7476 | 9:46:52 | 9:46:53 |
| Sidebar option "Move sidebar to the right"/"Move sidebar to the left" stopped working. | https://github.com/zen-browser/desktop/issues/7474 | 0:39:39 | 0:39:39 |
| Unable to reorder essentials - dragging puts them at the end | https://github.com/zen-browser/desktop/issues/7473 | 5 days, 19:40:17 | None |
| Profile damaged after a power outage | https://github.com/zen-browser/desktop/issues/7472 | 2:36:37 | 2:36:37 |
| Refresh button going out of the single toolbar view (Tab) | https://github.com/zen-browser/desktop/issues/7469 | 1 day, 10:13:58 | None |
| Can't open Google page, but Edge can | https://github.com/zen-browser/desktop/issues/7468 | 3:34:47 | 7:01:59 |
| Tabs close when opening a private window | https://github.com/zen-browser/desktop/issues/7467 | 1:49:32 | 19:09:09 |
| Sidebar does not really hide properly and it still visible without tab bars | https://github.com/zen-browser/desktop/issues/7466 | 0:06:06 | 1:28:35 |
| In continuous loop of crashes after update | https://github.com/zen-browser/desktop/issues/7465 | 12:02:49 | None |
| Unable to produce videos from Disney and Netflix pages | https://github.com/zen-browser/desktop/issues/7463 | 0:40:20 | 12:38:43 |
| "Find in Settings" box can't type anything into | https://github.com/zen-browser/desktop/issues/7460 | None | 12:49:08 |
| Browser breaks shortly after 'Close other tabs' | https://github.com/zen-browser/desktop/issues/7459 | None | 17:27:47 |
| Split View fails when the history tab is open | https://github.com/zen-browser/desktop/issues/7458 | 8:04:46 | 16:12:37 |
| "The application has failed to start because its side-by-side configuration is incorrect." | https://github.com/zen-browser/desktop/issues/7457 | 0:54:42 | 4:45:02 |
| opacity of #urlbar element is sometimes overwritten | https://github.com/zen-browser/desktop/issues/7454 | None | 2:25:01 |
| Enable Restore pinned tabs to their originally pinned URL on startup setting does not work | https://github.com/zen-browser/desktop/issues/7453 | 2:00:44 | 9 days, 18:38:49 |
| misclick caused by tab context menu | https://github.com/zen-browser/desktop/issues/7452 | 0:56:17 | 0:56:17 |
| Cookie named SESS disappears after restart | https://github.com/zen-browser/desktop/issues/7451 | 3 days, 21:47:30 | None |
| Impossible to click "Add mailto handler" popup — only visible on hover and disappears immediately | https://github.com/zen-browser/desktop/issues/7450 | 6 days, 5:39:09 | None |
| pinned extensions appear visually bugged when activating 'toggle sidebars width' shortcut from single toolbar mode. | https://github.com/zen-browser/desktop/issues/7448 | 0:30:31 | 0:30:31 |
| URL only appears after typing even when set to Always Floating | https://github.com/zen-browser/desktop/issues/7446 | 0:47:21 | 2 days, 5:09:45 |
| Drag and drop files not working on Linux | https://github.com/zen-browser/desktop/issues/7445 | 1:14:52 | 10:51:52 |
| Tooltips flickering when there is a tab with a video(even if the video is paused) | https://github.com/zen-browser/desktop/issues/7444 | 0:05:12 | 0:08:28 |
| Zen URL Bar floats on New Tab with 'Floating Only When Typing' option | https://github.com/zen-browser/desktop/issues/7441 | 4:37:47 | None |
| Essentials Tab Confusing Right-Click Options (Close Tab & Remove from Essentails function exactly the same) | https://github.com/zen-browser/desktop/issues/7440 | 0:15:16 | 0:47:28 |
| Cannot close customize toolbar tab | https://github.com/zen-browser/desktop/issues/7438 | 9:45:55 | None |
| Miniplayer strange behaviour when redirecting to the music tab on another workspace | https://github.com/zen-browser/desktop/issues/7436 | None | None |
| Pinned Tab URL update toast being overlayed by container name | https://github.com/zen-browser/desktop/issues/7435 | None | None |
| "Open link in New Tab" does not follow the "Move the new tab button to the top" Setting | https://github.com/zen-browser/desktop/issues/7432 | 23:59:16 | None |
| Print Menu/Screen does not Adjust to Split Tabs | https://github.com/zen-browser/desktop/issues/7431 | 10 days, 16:43:02 | None |
| Mouse-over highlight colors in dropdown menus are virtually impossible to read. | https://github.com/zen-browser/desktop/issues/7430 | None | None |
| Sidebar padding takes space in full screen | https://github.com/zen-browser/desktop/issues/7429 | 2:42:13 | None |
| Passkey doesn't work on Windows Machine | https://github.com/zen-browser/desktop/issues/7428 | 3:55:01 | 4 days, 14:45:14 |
| Split button in search bar no longer present | https://github.com/zen-browser/desktop/issues/7427 | 4:46:19 | 1 day, 2:35:50 |
| Opening new window breaks essentials section | https://github.com/zen-browser/desktop/issues/7426 | 1 day, 20:57:12 | 2 days, 17:13:45 |
| Fixed split tabs don't preserve width after closing the browser | https://github.com/zen-browser/desktop/issues/7425 | 14 days, 19:41:02 | 18 days, 21:07:37 |
| Tab Hover Text Flickering | https://github.com/zen-browser/desktop/issues/7424 | 0:44:39 | 21:20:07 |
| Customise toolbar: Transparent background | https://github.com/zen-browser/desktop/issues/7423 | 2 days, 0:20:25 | None |
| The split-view view mode switch button is gone | https://github.com/zen-browser/desktop/issues/7422 | 0:24:53 | 1:15:04 |
| Close button bug on windows | https://github.com/zen-browser/desktop/issues/7421 | 3:16:32 | 6:04:38 |
| Button to manage split view no longer exists after recent update | https://github.com/zen-browser/desktop/issues/7420 | 0:07:59 | 1:47:42 |
| Right Click on tab spawns dropdown menu under mouse cursor leading to instantly chosing menu item. | https://github.com/zen-browser/desktop/issues/7419 | None | None |
| File Handler Dialog not opening in Archlinux (Hyprland) | https://github.com/zen-browser/desktop/issues/7418 | 14 days, 20:46:21 | None |
| New Tab UI Issue When Fullscreen | https://github.com/zen-browser/desktop/issues/7416 | 3:16:51 | 1 day, 10:25:21 |
| Re-arranging essentials tabs doesn't work as expected | https://github.com/zen-browser/desktop/issues/7415 | 8 days, 14:53:44 | None |
| Moderate hardening causes new tab functionality to break | https://github.com/zen-browser/desktop/issues/7414 | 1:28:39 | 1:45:02 |
| Mute icon of tab are clipped in compact mode | https://github.com/zen-browser/desktop/issues/7413 | 13:32:26 | 5 days, 9:41:24 |
| Terrible video playback performance, stuttering, freezing | https://github.com/zen-browser/desktop/issues/7412 | 7:19:05 | 9 days, 0:12:29 |
| Firefox notes doesn't open on the right even though that setting is toggled | https://github.com/zen-browser/desktop/issues/7411 | 2:24:04 | 11:55:33 |
| Popping sound when skipping/exiting YouTube videos | https://github.com/zen-browser/desktop/issues/7410 | None | None |
| 1.8b new Color Picker always clears custom colors after switching workspaces | https://github.com/zen-browser/desktop/issues/7409 | 2 days, 5:06:41 | 2 days, 11:01:52 |
| [Regression 1.8b+] Tab session extensions cannot record across workspaces anymore | https://github.com/zen-browser/desktop/issues/7408 | None | 5 days, 11:39:13 |
| While watching product videos on Temu.com, most of the time it does not open. | https://github.com/zen-browser/desktop/issues/7406 | 0:35:26 | None |
| search shortcut issues | https://github.com/zen-browser/desktop/issues/7405 | 0:59:18 | 2 days, 21:18:57 |
| Moving sidebar to right dosen't work | https://github.com/zen-browser/desktop/issues/7404 | 0:40:33 | 0:40:35 |
| Change tab to workspace doesn't work | https://github.com/zen-browser/desktop/issues/7403 | 0:54:36 | 5:40:26 |
| Closing the right hand side of a split tab shows the next tab, rather than the left side of the split. | https://github.com/zen-browser/desktop/issues/7402 | None | None |
| Search engines in search box selector gone | https://github.com/zen-browser/desktop/issues/7401 | 0:26:12 | 1:42:08 |
| Update Container while switching tab to another workspace | https://github.com/zen-browser/desktop/issues/7399 | 1:37:45 | 3:02:04 |
| Tooltips flickering | https://github.com/zen-browser/desktop/issues/7395 | 1 day, 8:58:26 | 1 day, 17:13:03 |
| Unable to render page when closing last tab with Ctrl+F4 | https://github.com/zen-browser/desktop/issues/7392 | None | None |
| Zen does not respect `gtk-application-prefer-dark-theme` | https://github.com/zen-browser/desktop/issues/7391 | 21:15:24 | 9 days, 9:00:51 |
| alt is not being recognize | https://github.com/zen-browser/desktop/issues/7390 | None | None |
| Zen HSTS Security Issue on genuine Websites | https://github.com/zen-browser/desktop/issues/7389 | None | None |
| Tiktok gives error while using | https://github.com/zen-browser/desktop/issues/7388 | 0:40:53 | 9 days, 11:10:46 |
| With v1.11b upgrade Firefox v137 but Not group tabs | https://github.com/zen-browser/desktop/issues/7387 | 0:47:12 | 0:51:31 |
| Alt + Clicking a link to open it in glance mode does not work in http pages | https://github.com/zen-browser/desktop/issues/7386 | 5 days, 9:24:16 | 5 days, 9:24:16 |
| URL click selects entire url instead of placing cursor at the clicked position | https://github.com/zen-browser/desktop/issues/7385 | 6 days, 1:13:15 | None |
| Close Window Keyboard Shortcut does nothing (due to conflict with Toggle DOM shortcut) | https://github.com/zen-browser/desktop/issues/7384 | 16 days, 14:22:58 | None |
| Bookmark/side bar aligns left when set to right | https://github.com/zen-browser/desktop/issues/7382 | 0:12:08 | 5 days, 0:06:03 |
| Opening the Web Inspector destroys Zen's layout in an unrecoverable manner with letterboxing | https://github.com/zen-browser/desktop/issues/7380 | 2 days, 10:03:45 | None |
| Extension Popout not Working on Multiple Toolbar View | https://github.com/zen-browser/desktop/issues/7379 | None | None |
| Extension background remains while extension window closes when moving main window | https://github.com/zen-browser/desktop/issues/7378 | 10:05:14 | 9 days, 2:14:11 |
| Firefox Labs Missing in 1.11.1b | https://github.com/zen-browser/desktop/issues/7377 | 1 day, 7:24:11 | None |
| Crashing of zen, reopening as a new browser every time | https://github.com/zen-browser/desktop/issues/7376 | 4:07:26 | 16 days, 7:00:23 |
| COMPLETE COLLAPSED TOOLBAR DISAPPERED | https://github.com/zen-browser/desktop/issues/7375 | 0:02:50 | 3:15:12 |
| Sidebar Scroll undraggable by mouse | https://github.com/zen-browser/desktop/issues/7374 | None | 9 days, 12:16:46 |
| Unload Tab Doesn't Release Resources | https://github.com/zen-browser/desktop/issues/7373 | 7:19:58 | 10 days, 9:05:02 |
| Tabs sent to another device go to the default workspace | https://github.com/zen-browser/desktop/issues/7371 | None | None |
| Color gradient window glitching when windowing browser | https://github.com/zen-browser/desktop/issues/7370 | None | 8:53:18 |
| (Gradient) Custom colors multiplying their instance in 1.11.1 | https://github.com/zen-browser/desktop/issues/7369 | 0:37:52 | 3 days, 12:39:46 |
| Opening in new tab from a Glance window opens under unloaded tabs instead of the current tab | https://github.com/zen-browser/desktop/issues/7368 | None | None |
| Extremely annoying update popups | https://github.com/zen-browser/desktop/issues/7367 | None | None |
| Unload Tabs Showing in Tab Cycling | https://github.com/zen-browser/desktop/issues/7365 | None | 9 days, 19:18:22 |
| Restoring previous session puts Zen into broken state | https://github.com/zen-browser/desktop/issues/7364 | 17 days, 21:23:34 | None |
| Unable to use split view with essentials | https://github.com/zen-browser/desktop/issues/7363 | 8:30:43 | 11:11:45 |
| Blurry text on ultrawide resolutions | https://github.com/zen-browser/desktop/issues/7362 | 0:06:03 | 23 days, 11:20:05 |
| Floating URL bar disappears on right click | https://github.com/zen-browser/desktop/issues/7361 | None | 7 days, 3:53:43 |
| Extension thinks it is always running in a private window | https://github.com/zen-browser/desktop/issues/7358 | None | None |
| All tabs keep crashing | https://github.com/zen-browser/desktop/issues/7356 | 1:29:18 | None |
| Error building Zen browser from AUR repositories | https://github.com/zen-browser/desktop/issues/7354 | 0:39:39 | 4:20:43 |
| Reproducable softlock on moving workspace | https://github.com/zen-browser/desktop/issues/7353 | 20:45:28 | None |
| Notifications appear as dialogue boxes | https://github.com/zen-browser/desktop/issues/7352 | 2:49:03 | None |
| Quiting browser closes all tabs when pressing the red close button (top left mac) | https://github.com/zen-browser/desktop/issues/7351 | 2:01:54 | 17:06:35 |
| YouTube player sometimes incorrectly opens in fullscreen mode | https://github.com/zen-browser/desktop/issues/7350 | None | None |
| Youtube video playback hangs when switching audio device | https://github.com/zen-browser/desktop/issues/7349 | 2:28:29 | None |
| AppImage GearLever updates broken since v1.11 | https://github.com/zen-browser/desktop/issues/7348 | None | None |
| On launch and changing workspace, will open first tab in tab list | https://github.com/zen-browser/desktop/issues/7347 | 22:54:43 | None |
| Subtitle in the Picture-In-Picture mode does not work properly | https://github.com/zen-browser/desktop/issues/7346 | None | 0:11:37 |
| Opening Findbar shifts main browser windows content up for a split second | https://github.com/zen-browser/desktop/issues/7345 | None | None |
| Bookmarks not showing in full-screen mode. | https://github.com/zen-browser/desktop/issues/7344 | 2 days, 21:14:21 | None |
| Cannot change sidebar location | https://github.com/zen-browser/desktop/issues/7342 | None | 0:02:42 |
| Workspace switch keyboard shortcut not working | https://github.com/zen-browser/desktop/issues/7341 | 7:44:33 | 10 days, 22:57:22 |
| The split tabs from glance aren't restored after browser restarted | https://github.com/zen-browser/desktop/issues/7340 | None | None |
| In split view, top bar onHover response is inconsistent | https://github.com/zen-browser/desktop/issues/7339 | 1:20:40 | 21 days, 0:00:20 |
| "Learn more" hyperlink leads to broken releases URL | https://github.com/zen-browser/desktop/issues/7338 | None | None |
| Flickering unusable menus if `widget.wayland.fractional-scale.enabled` is enabled | https://github.com/zen-browser/desktop/issues/7337 | None | None |
| Web Panel is missing and sidebar cant move to right side | https://github.com/zen-browser/desktop/issues/7335 | 0:32:24 | 1 day, 5:28:09 |
| Got IDBDatabase.transaction error when I tried to import Yomitan's dictionary | https://github.com/zen-browser/desktop/issues/7334 | 9:27:22 | 9:27:22 |
| Vsync is broken (Linux) | https://github.com/zen-browser/desktop/issues/7333 | 1:43:20 | 2:45:25 |
| Sidebar layout takes space when switching to fullscreen in compact mode | https://github.com/zen-browser/desktop/issues/7332 | 15:21:13 | 6 days, 1:37:58 |
| Input type `number` accept string | https://github.com/zen-browser/desktop/issues/7330 | 4 days, 5:56:33 | 4 days, 5:56:33 |
| Blur is no longer working on Linux | https://github.com/zen-browser/desktop/issues/7329 | 12:53:00 | 18:37:20 |
| Black text in right click menu | https://github.com/zen-browser/desktop/issues/7328 | 4 days, 9:19:32 | None |
| Window does not close with last tab, even with `browser.tabs.closeWindowWithLastTab` set to true | https://github.com/zen-browser/desktop/issues/7327 | 2 days, 23:22:12 | None |
| zen minimal exit buttons become square on new update | https://github.com/zen-browser/desktop/issues/7325 | 6:01:23 | None |
| Grey flash under mica context menus when clicked | https://github.com/zen-browser/desktop/issues/7324 | 4 days, 11:00:40 | 4 days, 11:00:40 |
| Zen Browser Releases replaced | https://github.com/zen-browser/desktop/issues/7322 | 0:13:52 | 0:13:54 |
| Tab Restore failed on Automatic Update | https://github.com/zen-browser/desktop/issues/7321 | 0:20:15 | None |
| Can't move sidebar to the right? | https://github.com/zen-browser/desktop/issues/7320 | 0:15:28 | 1 day, 9:22:24 |
| Glance Broken on Pinned Tabs | https://github.com/zen-browser/desktop/issues/7318 | 2:30:41 | 23:13:21 |
| Sidebar width becomes thinner in compact upon startup (doesn't retain predetermined width) | https://github.com/zen-browser/desktop/issues/7316 | 0:04:57 | 6 days, 2:27:44 |
| Greyed out part of URL sometimes turns back to white incosistently | https://github.com/zen-browser/desktop/issues/7315 | None | None |
| Dynamic theme mode not working | https://github.com/zen-browser/desktop/issues/7313 | 1 day, 2:42:51 | 2 days, 15:43:17 |
| Reading mode button is missing in single sidebar mode | https://github.com/zen-browser/desktop/issues/7312 | None | None |
| The sidebar is a little smaller, than its set size on startup in compact mode. | https://github.com/zen-browser/desktop/issues/7311 | 0:17:43 | 0:22:32 |
| Online TV doesn't show picture, there's only sound | https://github.com/zen-browser/desktop/issues/7309 | None | None |
| Glance window expand button doesn't work | https://github.com/zen-browser/desktop/issues/7308 | 2:01:15 | 2:01:15 |
| Resizing windows is broken when "privacy.resistfingerprinting" enabled and set to 1920x1080 | https://github.com/zen-browser/desktop/issues/7307 | 4 days, 0:12:26 | None |
| Going to the next or previous workspace using keyboard shortcuts is not working when the current tab has figma open | https://github.com/zen-browser/desktop/issues/7306 | None | None |
| Profile badge no longer shows up on taskbar icon | https://github.com/zen-browser/desktop/issues/7305 | None | 21 days, 20:20:01 |
| Unable to change how the new tab works | https://github.com/zen-browser/desktop/issues/7304 | 14:37:11 | 5 days, 22:16:36 |
| Bookmarks won't open when current container tab is not the default container of the workspace | https://github.com/zen-browser/desktop/issues/7303 | None | None |
| Extension view not rendered in single toolbar view | https://github.com/zen-browser/desktop/issues/7301 | 1:02:07 | None |
| scroll icon not working | https://github.com/zen-browser/desktop/issues/7299 | None | 1 day, 5:21:02 |
| see through background or grey. | https://github.com/zen-browser/desktop/issues/7298 | None | None |
| Glance split view button opens full page | https://github.com/zen-browser/desktop/issues/7297 | 8:01:18 | 14:37:04 |
| No split view icon in urlbar | https://github.com/zen-browser/desktop/issues/7296 | 2:35:01 | 12:19:25 |
| Workspaces temporarily inherit essential tabs from the source workspace a container tab was switched from | https://github.com/zen-browser/desktop/issues/7295 | 7 days, 16:30:59 | 11 days, 23:18:33 |
| UI misalignments in sidebar | https://github.com/zen-browser/desktop/issues/7294 | None | 1 day, 12:20:56 |
| Single Toolbar icons shuffle position on restart | https://github.com/zen-browser/desktop/issues/7293 | None | None |
| Fix for #7078 has broken zen workspaces (upon restart) | https://github.com/zen-browser/desktop/issues/7289 | 0:19:19 | 2 days, 0:09:09 |
| Anthropic's Claude freezes only on Zen browser | https://github.com/zen-browser/desktop/issues/7287 | 0:53:16 | 1:25:34 |
| Unable to change tabs in the certificate manager. | https://github.com/zen-browser/desktop/issues/7286 | 0:29:07 | 5:25:58 |
| Cyrillic display problem | https://github.com/zen-browser/desktop/issues/7285 | None | None |
| Panel goes off the screen when adding new extension | https://github.com/zen-browser/desktop/issues/7281 | None | 1 day, 2:35:00 |
| XDG Base Directory support, and/or data directory environment variable | https://github.com/zen-browser/desktop/issues/7280 | 2 days, 10:45:19 | None |
| Short width and fixed Side Bar | https://github.com/zen-browser/desktop/issues/7279 | 1:29:03 | 1 day, 2:14:11 |
| Switch to tab not working if tab is unloaded | https://github.com/zen-browser/desktop/issues/7278 | 1 day, 11:01:11 | None |
| Incorrect Cedilla Input Rendering | https://github.com/zen-browser/desktop/issues/7276 | None | None |
| Key bindings without modifier still apply when typing in to input fields | https://github.com/zen-browser/desktop/issues/7275 | None | None |
| MX Master 3 Forward/Back Mouse Buttons Don't Work For Switching Workspaces While Logi Options+ is Installed | https://github.com/zen-browser/desktop/issues/7274 | 12:18:06 | 13 days, 10:49:45 |
| Tab preview on hover doesn't work | https://github.com/zen-browser/desktop/issues/7273 | None | 0:03:37 |
| Change Tab(s) To Workspace broken in 1.11b | https://github.com/zen-browser/desktop/issues/7272 | 10:07:25 | 11:07:25 |
| Bookmarks don't open in new tab when using new tab | https://github.com/zen-browser/desktop/issues/7271 | 1:24:44 | None |
| Portable Installation Mode will no longer exist and will not be updated? | https://github.com/zen-browser/desktop/issues/7270 | 16:31:52 | 11 days, 17:33:57 |
| Split glance tab button opens in new tab when opened from Essentials tab | https://github.com/zen-browser/desktop/issues/7269 | 11 days, 17:48:17 | 11 days, 17:48:17 |
| Open animation for menus start from the wrong side | https://github.com/zen-browser/desktop/issues/7267 | 11 days, 18:21:58 | 11 days, 18:21:58 |
| There is no workspaces in fresh Zen install.. | https://github.com/zen-browser/desktop/issues/7266 | 0:16:38 | 14:56:31 |
| Extension Settings not displaying when no tab is selected | https://github.com/zen-browser/desktop/issues/7265 | 6 days, 14:56:37 | None |
| Modal window for a "New Tab" dissapears when switching language using Win + Space on Linux Mint | https://github.com/zen-browser/desktop/issues/7264 | 11 days, 19:09:08 | 11 days, 19:09:08 |
| Glance not works on local http pages | https://github.com/zen-browser/desktop/issues/7263 | 0:39:34 | 11 days, 19:55:22 |
| Compact mode leaves empty space after sidebar disappeared | https://github.com/zen-browser/desktop/issues/7262 | 0:10:52 | 15 days, 8:01:40 |
| In WIN10, when browser is maximized, an autohide taskbar cannot unhide | https://github.com/zen-browser/desktop/issues/7261 | None | 3 days, 7:50:43 |
| "Move sidebar to right" is not working | https://github.com/zen-browser/desktop/issues/7260 | 3:02:35 | 4 days, 3:22:44 |
| Side by side view leaves a gap in the tabs at the side bar | https://github.com/zen-browser/desktop/issues/7258 | None | None |
| White text in right click menu on browser chrome in light mode | https://github.com/zen-browser/desktop/issues/7257 | 8 days, 21:19:48 | None |
| URL always focused when I open a new tab. | https://github.com/zen-browser/desktop/issues/7255 | 5:53:57 | 9 days, 23:59:28 |
| Essential tabs. Glance window expanding event trigger the Leave event of the Google Meet stream | https://github.com/zen-browser/desktop/issues/7254 | 5:29:41 | 18:32:56 |
| IDN address shows punny code in URL | https://github.com/zen-browser/desktop/issues/7253 | None | None |
| UI display exception in right tab mode | https://github.com/zen-browser/desktop/issues/7252 | 18:35:56 | None |
| Bugs in Tiktok web site | https://github.com/zen-browser/desktop/issues/7250 | None | None |
| Pinned sidebar overlaps bookmarks bar in compact mode with no tabs open | https://github.com/zen-browser/desktop/issues/7249 | 1:14:48 | 13 days, 2:45:51 |
| Search Window Closes When Switching Keyboard Language in GNOME | https://github.com/zen-browser/desktop/issues/7248 | None | None |
| The Window Control Buttons sometimes are unavailable after screen sharing. | https://github.com/zen-browser/desktop/issues/7247 | None | None |
| [BUG] Extensions become huge after collapsing the side bar | https://github.com/zen-browser/desktop/issues/7246 | 0:05:27 | None |
| Essential tabs do not auto-load when opened after reopening Zen | https://github.com/zen-browser/desktop/issues/7245 | None | None |
| Azure Devops Server not loading properly | https://github.com/zen-browser/desktop/issues/7244 | None | None |
| Image Previews Not Displaying in Google Chat on Zen Browser | https://github.com/zen-browser/desktop/issues/7243 | 0:02:08 | None |
| [Twilight 1.11] Janky rendering behaviour with split view | https://github.com/zen-browser/desktop/issues/7242 | None | 1 day, 14:55:44 |
| INSANE MEMORY LEAK THAT YOU KEEP CLOSING & IGNORING | https://github.com/zen-browser/desktop/issues/7240 | 0:10:04 | 2:32:53 |
| --zen-sidebar-width not set correctly when opening Zen with compact mode enabled | https://github.com/zen-browser/desktop/issues/7239 | 7:28:04 | 7:56:39 |
| Ctrl + T and Ctrl + L popup address bar only shows up after starting to type | https://github.com/zen-browser/desktop/issues/7238 | None | None |
| Some Shortcuts not working in some keyboard layouts. | https://github.com/zen-browser/desktop/issues/7237 | 13 days, 9:31:33 | 13 days, 9:31:33 |
| Re-Opening: Stopping YouTube video on Zen forcing Alcove (dynamic island app) to quit and cannot be launched again | https://github.com/zen-browser/desktop/issues/7235 | None | None |
| Thumbwheel MX Master 3s to switch a workspace | https://github.com/zen-browser/desktop/issues/7234 | 14 days, 15:00:31 | None |
| Browser unsupported error on Google Docs | https://github.com/zen-browser/desktop/issues/7233 | None | None |
| Previous windows and tabs are not reopened on Zen for mac | https://github.com/zen-browser/desktop/issues/7232 | None | None |
| Keyboard shortcut binding: Recieve keys as accent characters | https://github.com/zen-browser/desktop/issues/7230 | 10 days, 2:40:15 | 13 days, 14:20:32 |
| Cannot login to Syncthing GUI with username/password | https://github.com/zen-browser/desktop/issues/7228 | 4 days, 11:35:55 | None |
| Minimize to taskbar and full screen buttons not showing up - Linux | https://github.com/zen-browser/desktop/issues/7227 | None | None |
| Zen makes PC completely unresponsive | https://github.com/zen-browser/desktop/issues/7226 | 1 day, 20:39:55 | 11 days, 16:18:54 |
| Bookmark Manager: Workspace not populated nor editable | https://github.com/zen-browser/desktop/issues/7225 | 2:56:17 | 2:56:17 |
| Twilight and Zen side by side install bugged on macOS | https://github.com/zen-browser/desktop/issues/7224 | None | None |
| Element.io: clicking on link can steal focus, dim page | https://github.com/zen-browser/desktop/issues/7222 | 22:41:10 | None |
| Essential tabs disappear if they are assigned to different containers | https://github.com/zen-browser/desktop/issues/7220 | 20:50:53 | None |
| Pages Not Loading Only Works in Private Mode | https://github.com/zen-browser/desktop/issues/7219 | 15:48:55 | 7 days, 12:35:00 |
| Youtube Audio Jitters while i play league of legends | https://github.com/zen-browser/desktop/issues/7217 | None | None |
| Split tabs resizing bar shows through Side web panels | https://github.com/zen-browser/desktop/issues/7216 | None | None |
| Close button hover makes browser have an epileptic attack | https://github.com/zen-browser/desktop/issues/7215 | None | None |
| Zen Support Link in Settings menu links to Mozilla instead of Zen | https://github.com/zen-browser/desktop/issues/7214 | None | None |
| Editing a URL always opens a new tab | https://github.com/zen-browser/desktop/issues/7213 | 19:28:32 | 20:39:12 |
| Keeps logging out of my accounts | https://github.com/zen-browser/desktop/issues/7212 | 20 days, 0:43:00 | None |
| Split View - Grid: When reopening Zen, grid layout is "forgotten" and reset back to default | https://github.com/zen-browser/desktop/issues/7211 | 16 days, 1:00:24 | None |
| iCloud Password Extension Bug on Mac 15.4 - This extension requires Sonoma or above / Verification Code does not appear | https://github.com/zen-browser/desktop/issues/7210 | 1 day, 8:30:59 | None |
| Status bar graphical issue/glitch | https://github.com/zen-browser/desktop/issues/7208 | 20:10:21 | 9 days, 12:31:32 |
| When restoring session manually, It always creates extra window apart from the previous session | https://github.com/zen-browser/desktop/issues/7207 | None | None |
| Split view bugs out when open a pop up page | https://github.com/zen-browser/desktop/issues/7206 | 0:48:48 | None |
| Can't Switch Profile | https://github.com/zen-browser/desktop/issues/7205 | 1:13:14 | 1:13:14 |
| start too slowly | https://github.com/zen-browser/desktop/issues/7204 | 0:29:57 | 1:43:28 |
| [twilight 1.10.3] can't create workspaces at all | https://github.com/zen-browser/desktop/issues/7203 | 1:36:25 | 2:02:36 |
| Zen ignores system trusted certs when run in flatpak | https://github.com/zen-browser/desktop/issues/7202 | 2:03:40 | None |
| Google Docs stops accepting keyboard input | https://github.com/zen-browser/desktop/issues/7201 | 1 day, 6:00:18 | None |
| Default Profile Cannot be Deleted | https://github.com/zen-browser/desktop/issues/7200 | 5:20:28 | 5 days, 16:04:35 |
| Zen not respecting system theme | https://github.com/zen-browser/desktop/issues/7199 | 3:10:26 | 4:25:44 |
| Opening multiple tabs to Zen Mods site to try multiple mods overwrites all new mods except the most recent | https://github.com/zen-browser/desktop/issues/7198 | None | None |
| INSANE MEMORY LEAK THAT YOU KEEP CLOSING & IGNORING | https://github.com/zen-browser/desktop/issues/7197 | 0:30:36 | 6:55:54 |
| ETP icon missing | https://github.com/zen-browser/desktop/issues/7195 | 0:05:14 | 8:42:37 |
| Any web page is not displayed | https://github.com/zen-browser/desktop/issues/7194 | 8:23:51 | 5 days, 1:34:24 |
| Window buttons aren't filled to the top right. | https://github.com/zen-browser/desktop/issues/7193 | 11:18:10 | 11:18:10 |
| Cursor not hiding when entering fullscreen playback on MacOS | https://github.com/zen-browser/desktop/issues/7192 | 0:02:58 | None |
| Crash on wayland when using discrete GPU | https://github.com/zen-browser/desktop/issues/7190 | None | 24 days, 7:14:40 |
| Web panel does not obey default zoom | https://github.com/zen-browser/desktop/issues/7189 | None | 3 days, 9:18:34 |
| Compact mode does not show popup/redirect warnings | https://github.com/zen-browser/desktop/issues/7188 | 14 days, 19:04:37 | None |
| Using lots of ram on mac | https://github.com/zen-browser/desktop/issues/7187 | 4:56:02 | 16:12:58 |
| Background goes gray when I maximize the window | https://github.com/zen-browser/desktop/issues/7185 | None | None |
| Level1techs forum loads VERY slowly only on Zen | https://github.com/zen-browser/desktop/issues/7184 | 5:43:12 | 17 days, 4:27:11 |
| After deleting the non-deafult workspaces, any reference to workspaces disappeared | https://github.com/zen-browser/desktop/issues/7183 | 10 days, 20:48:36 | 14 days, 6:48:03 |
| Essentials and pinned tabs get stuck in a half-glance state if a glance window is forced into a new container tab | https://github.com/zen-browser/desktop/issues/7182 | 7:36:25 | None |
| Workspace navigation emojis should be emojis at all times | https://github.com/zen-browser/desktop/issues/7181 | 5:37:07 | 21 days, 20:30:16 |
| Closing glance view with escape minimizes Zen on MacOS | https://github.com/zen-browser/desktop/issues/7179 | 7 days, 19:04:25 | None |
| Thick Border around the context menus | https://github.com/zen-browser/desktop/issues/7177 | 12 days, 0:26:31 | None |
| Sidebar popup doesn't work if running new tab from link on webpage | https://github.com/zen-browser/desktop/issues/7175 | 10 days, 10:52:50 | 15 days, 2:43:49 |
| Slow startup on Windows | https://github.com/zen-browser/desktop/issues/7174 | None | None |
| Glance opens on magnet links | https://github.com/zen-browser/desktop/issues/7173 | 23:54:11 | 1 day, 23:56:02 |
| WebGL isn't supported | https://github.com/zen-browser/desktop/issues/7172 | 4 days, 9:42:07 | 4 days, 9:42:07 |
| Cursor Auto-Highlight on Ctrl+Tab Disrupts Tab Cycling | https://github.com/zen-browser/desktop/issues/7170 | 11:18:59 | None |
| Confirmation dialog before quitting prevents unattended macOS updates | https://github.com/zen-browser/desktop/issues/7169 | None | None |
| Extension's options pop-up in the address after switching between single and multiple toolbars | https://github.com/zen-browser/desktop/issues/7168 | None | None |
| Lag and auto-scroll upon switching from a workspace that has split tabs open | https://github.com/zen-browser/desktop/issues/7167 | None | None |
| Essentials turning into pinned tab in new window | https://github.com/zen-browser/desktop/issues/7166 | None | None |
| Option "Open links in tabs instead of new windows" unchecked after restart browser | https://github.com/zen-browser/desktop/issues/7165 | 4:30:57 | None |
| Massive Screen Time spikes on MacOS | https://github.com/zen-browser/desktop/issues/7163 | 17 days, 15:28:42 | None |
| Split screen weird behaviour | https://github.com/zen-browser/desktop/issues/7162 | 2 days, 7:25:53 | None |
_This report was generated with the [Issue Metrics Action](https://github.com/github/issue-metrics)_
Search query used to find these items: `repo:zen-browser/desktop is:issue created:2025-04-01..2025-04-30`

View File

@@ -16,4 +16,4 @@
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.
We will make use of Firefox's builtin session restore feature to save the tabs and windows after the user closes the browser.

2
l10n

Submodule l10n updated: 950562cd71...9a673b4339

753
package-lock.json generated
View File

@@ -9,15 +9,544 @@
"version": "1.0.0",
"license": "MPL-2.0",
"dependencies": {
"@zen-browser/surfer": "^1.11.6"
"@zen-browser/surfer": "^1.11.11"
},
"devDependencies": {
"@babel/preset-typescript": "^7.27.0",
"formal-git": "^1.1.5",
"husky": "^9.1.7",
"lint-staged": "^15.3.0",
"prettier": "^3.4.2",
"prettier-plugin-sh": "^0.14.0"
}
},
"node_modules/@ampproject/remapping": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
"integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
"dev": true,
"license": "Apache-2.0",
"peer": true,
"dependencies": {
"@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.24"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@babel/code-frame": {
"version": "7.26.2",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz",
"integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-validator-identifier": "^7.25.9",
"js-tokens": "^4.0.0",
"picocolors": "^1.0.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/compat-data": {
"version": "7.26.8",
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz",
"integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==",
"dev": true,
"license": "MIT",
"peer": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/core": {
"version": "7.26.10",
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz",
"integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@ampproject/remapping": "^2.2.0",
"@babel/code-frame": "^7.26.2",
"@babel/generator": "^7.26.10",
"@babel/helper-compilation-targets": "^7.26.5",
"@babel/helper-module-transforms": "^7.26.0",
"@babel/helpers": "^7.26.10",
"@babel/parser": "^7.26.10",
"@babel/template": "^7.26.9",
"@babel/traverse": "^7.26.10",
"@babel/types": "^7.26.10",
"convert-source-map": "^2.0.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
"json5": "^2.2.3",
"semver": "^6.3.1"
},
"engines": {
"node": ">=6.9.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/babel"
}
},
"node_modules/@babel/core/node_modules/semver": {
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true,
"license": "ISC",
"peer": true,
"bin": {
"semver": "bin/semver.js"
}
},
"node_modules/@babel/generator": {
"version": "7.27.0",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.0.tgz",
"integrity": "sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/parser": "^7.27.0",
"@babel/types": "^7.27.0",
"@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.25",
"jsesc": "^3.0.2"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-annotate-as-pure": {
"version": "7.25.9",
"resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz",
"integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/types": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-compilation-targets": {
"version": "7.27.0",
"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.0.tgz",
"integrity": "sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@babel/compat-data": "^7.26.8",
"@babel/helper-validator-option": "^7.25.9",
"browserslist": "^4.24.0",
"lru-cache": "^5.1.1",
"semver": "^6.3.1"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-compilation-targets/node_modules/semver": {
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true,
"license": "ISC",
"peer": true,
"bin": {
"semver": "bin/semver.js"
}
},
"node_modules/@babel/helper-create-class-features-plugin": {
"version": "7.27.0",
"resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.0.tgz",
"integrity": "sha512-vSGCvMecvFCd/BdpGlhpXYNhhC4ccxyvQWpbGL4CWbvfEoLFWUZuSuf7s9Aw70flgQF+6vptvgK2IfOnKlRmBg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.25.9",
"@babel/helper-member-expression-to-functions": "^7.25.9",
"@babel/helper-optimise-call-expression": "^7.25.9",
"@babel/helper-replace-supers": "^7.26.5",
"@babel/helper-skip-transparent-expression-wrappers": "^7.25.9",
"@babel/traverse": "^7.27.0",
"semver": "^6.3.1"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0"
}
},
"node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": {
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true,
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
}
},
"node_modules/@babel/helper-member-expression-to-functions": {
"version": "7.25.9",
"resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz",
"integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/traverse": "^7.25.9",
"@babel/types": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-imports": {
"version": "7.25.9",
"resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz",
"integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/traverse": "^7.25.9",
"@babel/types": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-transforms": {
"version": "7.26.0",
"resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz",
"integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-module-imports": "^7.25.9",
"@babel/helper-validator-identifier": "^7.25.9",
"@babel/traverse": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0"
}
},
"node_modules/@babel/helper-optimise-call-expression": {
"version": "7.25.9",
"resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz",
"integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/types": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-plugin-utils": {
"version": "7.26.5",
"resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz",
"integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-replace-supers": {
"version": "7.26.5",
"resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz",
"integrity": "sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-member-expression-to-functions": "^7.25.9",
"@babel/helper-optimise-call-expression": "^7.25.9",
"@babel/traverse": "^7.26.5"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0"
}
},
"node_modules/@babel/helper-skip-transparent-expression-wrappers": {
"version": "7.25.9",
"resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz",
"integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/traverse": "^7.25.9",
"@babel/types": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-string-parser": {
"version": "7.25.9",
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz",
"integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-identifier": {
"version": "7.25.9",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
"integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-option": {
"version": "7.25.9",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz",
"integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helpers": {
"version": "7.27.0",
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.0.tgz",
"integrity": "sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@babel/template": "^7.27.0",
"@babel/types": "^7.27.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/parser": {
"version": "7.27.0",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz",
"integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/types": "^7.27.0"
},
"bin": {
"parser": "bin/babel-parser.js"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@babel/plugin-syntax-jsx": {
"version": "7.25.9",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz",
"integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-syntax-typescript": {
"version": "7.25.9",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz",
"integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-modules-commonjs": {
"version": "7.26.3",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz",
"integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-module-transforms": "^7.26.0",
"@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-typescript": {
"version": "7.27.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.27.0.tgz",
"integrity": "sha512-fRGGjO2UEGPjvEcyAZXRXAS8AfdaQoq7HnxAbJoAoW10B9xOKesmmndJv+Sym2a+9FHWZ9KbyyLCe9s0Sn5jtg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.25.9",
"@babel/helper-create-class-features-plugin": "^7.27.0",
"@babel/helper-plugin-utils": "^7.26.5",
"@babel/helper-skip-transparent-expression-wrappers": "^7.25.9",
"@babel/plugin-syntax-typescript": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/preset-typescript": {
"version": "7.27.0",
"resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.27.0.tgz",
"integrity": "sha512-vxaPFfJtHhgeOVXRKuHpHPAOgymmy8V8I65T1q53R7GCZlefKeCaTyDs3zOPHTTbmquvNlQYC5klEvWsBAtrBQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.26.5",
"@babel/helper-validator-option": "^7.25.9",
"@babel/plugin-syntax-jsx": "^7.25.9",
"@babel/plugin-transform-modules-commonjs": "^7.26.3",
"@babel/plugin-transform-typescript": "^7.27.0"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/template": {
"version": "7.27.0",
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz",
"integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.26.2",
"@babel/parser": "^7.27.0",
"@babel/types": "^7.27.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/traverse": {
"version": "7.27.0",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.0.tgz",
"integrity": "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.26.2",
"@babel/generator": "^7.27.0",
"@babel/parser": "^7.27.0",
"@babel/template": "^7.27.0",
"@babel/types": "^7.27.0",
"debug": "^4.3.1",
"globals": "^11.1.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/types": {
"version": "7.27.0",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz",
"integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-string-parser": "^7.25.9",
"@babel/helper-validator-identifier": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@jridgewell/gen-mapping": {
"version": "0.3.8",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz",
"integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/set-array": "^1.2.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
"@jridgewell/trace-mapping": "^0.3.24"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/resolve-uri": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
"integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/set-array": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
"integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/sourcemap-codec": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
"integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
"dev": true,
"license": "MIT"
},
"node_modules/@jridgewell/trace-mapping": {
"version": "0.3.25",
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
"integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/resolve-uri": "^3.1.0",
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
"node_modules/@oozcitak/dom": {
"version": "1.15.10",
"resolved": "https://registry.npmjs.org/@oozcitak/dom/-/dom-1.15.10.tgz",
@@ -288,9 +817,10 @@
"license": "MIT"
},
"node_modules/@zen-browser/surfer": {
"version": "1.11.6",
"resolved": "https://registry.npmjs.org/@zen-browser/surfer/-/surfer-1.11.6.tgz",
"integrity": "sha512-oKYjpNTPZV3vRxDf7r7pkvYlyNwL8cpsVbVzlb57xCwn7lamXsUioh1mLCSounJ+8cl8bWXhezrnXKXbVjyGww==",
"version": "1.11.11",
"resolved": "https://registry.npmjs.org/@zen-browser/surfer/-/surfer-1.11.11.tgz",
"integrity": "sha512-n5t25jjG77/rg1HETQBloriCc4GVlHaGWDTNdOxU35Y2qqokcSU+3mPP2cy8u/GBfF0AS6YQmCjE2636tbZkRA==",
"license": "MPL-2.0",
"dependencies": {
"@resvg/resvg-js": "^1.4.0",
"async-icns": "^1.0.2",
@@ -495,6 +1025,40 @@
"node": ">=8"
}
},
"node_modules/browserslist": {
"version": "4.24.4",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz",
"integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==",
"dev": true,
"funding": [
{
"type": "opencollective",
"url": "https://opencollective.com/browserslist"
},
{
"type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/browserslist"
},
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
"license": "MIT",
"peer": true,
"dependencies": {
"caniuse-lite": "^1.0.30001688",
"electron-to-chromium": "^1.5.73",
"node-releases": "^2.0.19",
"update-browserslist-db": "^1.1.1"
},
"bin": {
"browserslist": "cli.js"
},
"engines": {
"node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
}
},
"node_modules/buffer": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
@@ -556,6 +1120,28 @@
"node": ">=0.8"
}
},
"node_modules/caniuse-lite": {
"version": "1.0.30001715",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001715.tgz",
"integrity": "sha512-7ptkFGMm2OAOgvZpwgA4yjQ5SQbrNVGdRjzH0pBdy1Fasvcr+KAeECmbCAECzTuDuoX0FCY8KzUxjf9+9kfZEw==",
"dev": true,
"funding": [
{
"type": "opencollective",
"url": "https://opencollective.com/browserslist"
},
{
"type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/caniuse-lite"
},
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
"license": "CC-BY-4.0",
"peer": true
},
"node_modules/chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -717,6 +1303,14 @@
"node": ">= 0.6"
}
},
"node_modules/convert-source-map": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
"integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
"dev": true,
"license": "MIT",
"peer": true
},
"node_modules/core-js-pure": {
"version": "3.41.0",
"resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.41.0.tgz",
@@ -825,6 +1419,14 @@
"node": ">= 6"
}
},
"node_modules/electron-to-chromium": {
"version": "1.5.139",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.139.tgz",
"integrity": "sha512-GGnRYOTdN5LYpwbIr0rwP/ZHOQSvAF6TG0LSzp28uCBb9JiXHJGmaaKw29qjNJc5bGnnp6kXJqRnGMQoELwi5w==",
"dev": true,
"license": "ISC",
"peer": true
},
"node_modules/emoji-regex": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
@@ -853,6 +1455,17 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/escalade": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
"integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
"dev": true,
"license": "MIT",
"peer": true,
"engines": {
"node": ">=6"
}
},
"node_modules/esprima": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
@@ -1027,6 +1640,17 @@
}
}
},
"node_modules/formal-git": {
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/formal-git/-/formal-git-1.1.5.tgz",
"integrity": "sha512-cSPoV0+/LFdUsE+fCGxCOK/eJNZeWj5c+6IxB3PP3QkeWIgdQFgw+RObnnpG/0KOsXy8mFrsD6tkEHbGjNGMpQ==",
"dev": true,
"license": "ISC",
"bin": {
"fo": "lib/main.js",
"formal-git": "lib/main.js"
}
},
"node_modules/fs-constants": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
@@ -1047,6 +1671,17 @@
"node": ">=12"
}
},
"node_modules/gensync": {
"version": "1.0.0-beta.2",
"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
"integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
"dev": true,
"license": "MIT",
"peer": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/get-caller-file": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
@@ -1087,6 +1722,16 @@
"integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==",
"license": "MIT"
},
"node_modules/globals": {
"version": "11.12.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
"integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/globalyzer": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz",
@@ -1305,6 +1950,13 @@
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
"license": "ISC"
},
"node_modules/js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
"dev": true,
"license": "MIT"
},
"node_modules/js-yaml": {
"version": "3.14.1",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
@@ -1318,6 +1970,33 @@
"js-yaml": "bin/js-yaml.js"
}
},
"node_modules/jsesc": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
"integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
"dev": true,
"license": "MIT",
"bin": {
"jsesc": "bin/jsesc"
},
"engines": {
"node": ">=6"
}
},
"node_modules/json5": {
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
"integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
"dev": true,
"license": "MIT",
"peer": true,
"bin": {
"json5": "lib/cli.js"
},
"engines": {
"node": ">=6"
}
},
"node_modules/jsonfile": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
@@ -1649,6 +2328,17 @@
"url": "https://github.com/chalk/slice-ansi?sponsor=1"
}
},
"node_modules/lru-cache": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
"integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
"dev": true,
"license": "ISC",
"peer": true,
"dependencies": {
"yallist": "^3.0.2"
}
},
"node_modules/merge-stream": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
@@ -1804,6 +2494,14 @@
"integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==",
"license": "MIT"
},
"node_modules/node-releases": {
"version": "2.0.19",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz",
"integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==",
"dev": true,
"license": "MIT",
"peer": true
},
"node_modules/normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
@@ -1884,6 +2582,13 @@
"node": ">=8"
}
},
"node_modules/picocolors": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
"integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
"dev": true,
"license": "ISC"
},
"node_modules/picomatch": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
@@ -2765,6 +3470,38 @@
"node": ">= 10.0.0"
}
},
"node_modules/update-browserslist-db": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz",
"integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==",
"dev": true,
"funding": [
{
"type": "opencollective",
"url": "https://opencollective.com/browserslist"
},
{
"type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/browserslist"
},
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
"license": "MIT",
"peer": true,
"dependencies": {
"escalade": "^3.2.0",
"picocolors": "^1.1.1"
},
"bin": {
"update-browserslist-db": "cli.js"
},
"peerDependencies": {
"browserslist": ">= 4.21.0"
}
},
"node_modules/util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
@@ -2872,6 +3609,14 @@
"node": ">=0.4"
}
},
"node_modules/yallist": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
"dev": true,
"license": "ISC",
"peer": true
},
"node_modules/yaml": {
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz",

View File

@@ -40,9 +40,11 @@
},
"homepage": "https://github.com/zen-browser/desktop#readme",
"dependencies": {
"@zen-browser/surfer": "^1.11.6"
"@zen-browser/surfer": "^1.11.11"
},
"devDependencies": {
"@babel/preset-typescript": "^7.27.0",
"formal-git": "^1.1.5",
"husky": "^9.1.7",
"lint-staged": "^15.3.0",
"prettier": "^3.4.2",

View File

@@ -1,4 +1,12 @@
set -ex
set -x
if ! [ -z "$ZEN_L10N_CURR_DIR" ]; then
cd $ZEN_L10N_CURR_DIR
fi
# remove "\r" from ./l10n/supported-languages
# note: it's fine if it fails
sed -i 's/\r$//' ./l10n/supported-languages
CURRENT_DIR=$(pwd)
@@ -17,6 +25,16 @@ cd firefox-l10n
git checkout $LAST_FIREFOX_L10N_COMMIT
cd $CURRENT_DIR
rsyncExists=$(command -v rsync)
if [ -z "$rsyncExists" ]; then
echo "rsync not found, using cp instead"
else
echo "rsync found!"
fi
set -e
update_language() {
langId=$1
cd ./l10n
@@ -24,7 +42,13 @@ update_language() {
echo "Updating $langId"
# move the contents from ../firefox-l10n/$langId to ./l10n/$langId
rsync -av --progress ../firefox-l10n/$langId/ . --exclude .git
# if rsync exists, use it
# if not, use cp
if [ -z "$rsyncExists" ]; then
cp -r $CURRENT_DIR/l10n/firefox-l10n/$langId/* .
else
rsync -av --progress ../firefox-l10n/$langId/ . --exclude .git
fi
cd $CURRENT_DIR
}

View File

@@ -0,0 +1,30 @@
#!/bin/bash
set -e
COMPONENT_ROOT=$(pwd)/src/zen
EXTRA_COMPONENTS=(
"scripts"
"workflows"
"winsign"
"flatpak"
"configs"
)
echo "" > .formal-git/components
# iterate top directories and adding the base name to .formal-git/components
for dir in $(find $COMPONENT_ROOT -maxdepth 1 -type d | grep -v '\.git' | grep -v 'node_modules' | grep -v 'engine'); do
if [ "$dir" != "$COMPONENT_ROOT" ]; then
echo "$(basename $dir)" >> .formal-git/components
fi
done
# iterate over the extra components and adding them to .formal-git/components
for extra in "${EXTRA_COMPONENTS[@]}"; do
echo "$extra" >> .formal-git/components
done
# remove all empty lines
sed -i '/^$/d' .formal-git/components

View File

@@ -0,0 +1,43 @@
import os
FILES = [
"index.d.ts",
"lib.gecko.darwin.d.ts",
"lib.gecko.dom.d.ts",
"lib.gecko.glean.d.ts",
"lib.gecko.linux.d.ts",
"lib.gecko.modules.d.ts",
"lib.gecko.nsresult.d.ts",
"lib.gecko.services.d.ts",
"lib.gecko.tweaks.d.ts",
"lib.gecko.win32.d.ts",
"lib.gecko.xpcom.d.ts",
"lib.gecko.xpidl.d.ts",
]
ENGINE_PATH = os.path.join("engine", "tools", "@types")
SRC_PATH = os.path.join("src", "zen", "@types")
def update_ts_types():
os.system("cd engine && ./mach ts build && ./mach ts update")
# copy the files from engine/tools/@types to src/@types
for file in FILES:
src_file = os.path.join(ENGINE_PATH, file)
dest_file = os.path.join(SRC_PATH, file)
if os.path.exists(src_file):
os.system(f"cp {src_file} {dest_file}")
else:
print(f"File {src_file} does not exist.")
# add zen.d.ts to the end of index.d.ts
with open(os.path.join(SRC_PATH, "index.d.ts"), "a") as f:
f.write("\n")
f.write('/// <reference types="./zen.d.ts" />\n')
f.write('\n')
if __name__ == "__main__":
update_ts_types()
print("Updated TypeScript types.")

View File

@@ -1,8 +1,8 @@
diff --git a/Cargo.lock b/Cargo.lock
index c91f39b3afbe712355194593ae39514a83de6605..e6c2b77a69d9274ff1c7578ab4df4f07533f7441 100644
index 38508fffccbce801a02d4a4211f368674307c4d3..5ce56c36da2e242ad81621c2032eb68dcd26e960 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -3850,8 +3850,6 @@ dependencies = [
@@ -3931,8 +3931,6 @@ dependencies = [
[[package]]
name = "mime_guess"
version = "2.0.4"

View File

@@ -1,14 +1,14 @@
diff --git a/Cargo.toml b/Cargo.toml
index a99b447250d36dd0146e031fa22503bc88eeae39..86829fc7075054f832a04825c98325a925cf5b0f 100644
index d3d529b487f80d4b4f3bfa13cdd3f62946352db8..b35a9e0e3339d48d1cd0cab7b22d030f330e40d1 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -205,6 +205,9 @@ rure = { path = "third_party/rust/rure" }
@@ -217,6 +217,9 @@ rure = { path = "third_party/rust/rure" }
# Patch `plist` to work with `indexmap` 2.*
plist = { path = "third_party/rust/plist" }
+# Patch mime_guess to add missing mime types
+mime_guess = { path = "third_party/rust/mime_guess" }
+
# To-be-published changes.
unicode-bidi = { git = "https://github.com/servo/unicode-bidi", rev = "ca612daf1c08c53abe07327cb3e6ef6e0a760f0c" }
nss-gk-api = { git = "https://github.com/beurdouche/nss-gk-api", rev = "e48a946811ffd64abc78de3ee284957d8d1c0d63" }
# Patch `unicode-width` 0.1.* to 0.2.
unicode-width = { path = "build/rust/unicode-width" }

View File

@@ -0,0 +1,12 @@
diff --git a/browser/actors/WebRTCParent.sys.mjs b/browser/actors/WebRTCParent.sys.mjs
index 40e3a057a1d4b2f9bcfb73fa5ff96b2555865434..a92bed06766dd930bd336d56cd9ddcf3c6c0eeca 100644
--- a/browser/actors/WebRTCParent.sys.mjs
+++ b/browser/actors/WebRTCParent.sys.mjs
@@ -152,6 +152,7 @@ export class WebRTCParent extends JSWindowActorParent {
let tabbrowser = browser.ownerGlobal.gBrowser;
if (tabbrowser) {
+ browser.ownerGlobal.gZenMediaController.updateMediaSharing(state);
tabbrowser.updateBrowserSharing(browser, {
webRTC: state,
});

View File

@@ -1,8 +1,8 @@
diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
index 97acbf826f9427b06e0a54679b30269ce7b695f5..aeadcd0c72816612cd5c1ca1199fe2a363c637f4 100644
index 89b8b830e8f53582dd9910b0172098d31a8d8967..51bdc847823cb95f811b7e9d2d864b9aacf0e364 100644
--- a/browser/app/profile/firefox.js
+++ b/browser/app/profile/firefox.js
@@ -3362,3 +3362,5 @@ pref("toolkit.contentRelevancy.enabled", false);
@@ -3375,3 +3375,5 @@ pref("toolkit.contentRelevancy.enabled", false);
pref("toolkit.contentRelevancy.ingestEnabled", false);
// Pref to enable extra logging for the content relevancy feature
pref("toolkit.contentRelevancy.log", false);

View File

@@ -19,6 +19,7 @@ pref("intl.multilingual.downloadEnabled", false);
// Restore session on startup
pref("browser.startup.page", 3);
pref("browser.sessionstore.restore_pinned_tabs_on_demand", true);
// Theme
pref('toolkit.legacyUserProfileCustomizations.stylesheets', true);
@@ -26,6 +27,11 @@ pref('browser.compactmode.show', true);
#ifdef XP_WIN
pref("browser.privateWindowSeparation.enabled", false);
// Mica
pref("widget.windows.mica", true);
pref("widget.windows.mica.popups", true);
pref("widget.windows.mica.toplevel-backdrop", 2);
#endif
pref('browser.newtabpage.activity-stream.newtabWallpapers.enabled', true);
@@ -52,7 +58,6 @@ pref('browser.newtabpage.activity-stream.feeds.section.topstories', false);
pref("browser.topsites.contile.enabled", true);
// Pdf
pref('browser.download.open_pdf_attachments_inline', true);
pref('pdfjs.enableHighlightEditor', true);
pref('pdfjs.enableHighlightFloatingButton', true);
@@ -115,7 +120,7 @@ pref('zen.theme.color-prefs.use-workspace-colors', true);
pref('zen.view.compact.hide-tabbar', true);
pref('zen.view.compact.hide-toolbar', false);
pref('zen.view.compact.toolbar-flash-popup', true);
pref('zen.view.compact.toolbar-flash-popup', false);
pref('zen.view.compact.toolbar-flash-popup.duration', 800);
pref('zen.view.compact.toolbar-hide-after-hover.duration', 1000);
pref('zen.view.compact.color-toolbar', true);
@@ -137,10 +142,6 @@ pref('zen.view.experimental-rounded-view', false);
pref('zen.view.experimental-rounded-view', true);
#endif
#ifdef XP_WIN
pref('zen.widget.windows.acrylic', true);
#endif
// Glance
pref('zen.glance.enabled', true);
pref('zen.glance.hold-duration', 300); // in ms
@@ -192,15 +193,17 @@ pref('zen.splitView.enable-tab-drop', true);
pref('zen.splitView.min-resize-width', 7);
pref('zen.splitView.rearrange-hover-size', 24);
// Zen Download Animations
pref('zen.downloads.download-animation', true);
pref('zen.downloads.download-animation-duration', 1000); // ms
// Startup flags
pref('zen.startup.smooth-scroll-in-tabs', true);
// Zen Workspaces
pref('zen.workspaces.disabled_for_testing', false);
pref('zen.workspaces.hide-default-container-indicator', true);
pref('zen.workspaces.force-container-workspace', false);
pref('zen.workspaces.open-new-tab-if-last-unpinned-tab-is-closed', false);
pref('zen.workspaces.show-workspace-indicator', true);
pref('zen.workspaces.swipe-actions', true);
pref('zen.workspaces.wrap-around-navigation', true);
pref('zen.workspaces.natural-scroll', false);
@@ -222,9 +225,6 @@ pref('zen.watermark.enabled', false, sticky);
pref('dom.private-attribution.submission.enabled', false);
pref('dom.security.https_only_mode', true);
// Enable EME
pref('media.eme.enabled', true);
// Crash reports
pref("breakpad.reportURL", "");
pref("browser.tabs.crashReporting.sendReport", false);
@@ -270,13 +270,11 @@ pref("pdfjs.enableScripting", false);
pref("extensions.postDownloadThirdPartyPrompt", false);
// Downloads
pref("browser.download.always_ask_before_handling_new_types", true);
pref("browser.download.manager.addToRecentDocs", false);
pref('browser.download.open_pdf_attachments_inline', true);
pref('browser.download.alwaysOpenPanel', false);
// Tracking protection
pref("urlclassifier.trackingSkipURLs", "*.reddit.com, *.x.com, *.twimg.com, *.tiktok.com");
pref("urlclassifier.features.socialtracking.skipURLs", "*.instagram.com, *.x.com, *.twimg.com");
pref("network.cookie.sameSite.noneRequiresSecure", true);
pref("browser.helperApps.deleteTempFileOnExit", true);
pref("browser.uitour.enabled", false);
@@ -294,6 +292,8 @@ pref('image.jxl.enabled', true, locked);
pref("svg.context-properties.content.enabled", true);
pref("image.avif.enabled", true, locked);
pref("media.eme.enabled", true);
// Smooth scrolling
#ifndef XP_MACOSX
pref("apz.overscroll.enabled", true);
@@ -312,11 +312,14 @@ pref("mousewheel.default.delta_multiplier_y", 200);
#endif
#if defined(XP_WIN)
pref("dom.ipc.processPriorityManager.backgroundUsesEcoQoS", false);
pref("dom.ipc.processPriorityManager.backgroundUsesEcoQoS", false);
#endif
pref('browser.sessionstore.restore_pinned_tabs_on_demand', true);
pref('browser.newtabpage.activity-stream.system.showWeather', true);
#ifdef UNIX_BUT_NOT_MAC
pref("widget.gtk.rounded-bottom-corners.enabled", true);
#endif
pref('browser.newtabpage.activity-stream.system.showWeather', false);
// Enable experimental settings page (Used for Zen Labs)
pref('browser.preferences.experimental', true);
@@ -324,17 +327,11 @@ pref('browser.preferences.experimental', true);
// Prefetching:
pref("network.dns.disablePrefetch", false);
pref("network.prefetch-next", true);
pref("network.predictor.enabled", true);
pref("network.dns.disablePrefetchFromHTTPS", false);
pref("network.predictor.enable-hover-on-ssl", true);
pref("network.http.speculative-parallel-limit", 10);
pref("network.http.rcwn.enabled", false);
// Enable Browser Toolbox, Ctrl+Shift+Alt+I for debugging and modifying UI
pref("devtools.debugger.remote-enabled", false);
pref("devtools.chrome.enabled", true);
// Disable firefox's revamp
// Disable Firefox's revamp
pref("sidebar.revamp", false, locked);
pref("sidebar.verticalTabs", false, locked);
@@ -380,15 +377,20 @@ pref('widget.macos.titlebar-blend-mode.behind-window', true);
pref('zen.widget.macos.window-material', 3);
#endif
// Enable transparent background for linux
#ifdef MOZ_WIDGET_GTK
pref('zen.widget.linux.transparency', false);
#endif
// Urlbar and autocomplete
pref("browser.urlbar.maxRichResults", 6);
pref("browser.urlbar.maxRichResults", 8);
pref("browser.urlbar.trimHttps", true);
pref("browser.search.separatePrivateDefault.ui.enabled", true);
pref("browser.urlbar.update2.engineAliasRefresh", true);
pref("browser.search.suggest.enabled", false);
pref("browser.urlbar.quicksuggest.enabled", false);
pref("browser.urlbar.suggest.quicksuggest.sponsored", false);
pref("browser.urlbar.suggest.quicksuggest.nonsponsored", false);
pref("browser.urlbar.quicksuggest.enabled", false, locked);
pref("browser.urlbar.suggest.quicksuggest.sponsored", false, locked);
pref("browser.urlbar.suggest.quicksuggest.nonsponsored", false, locked);
pref("browser.urlbar.groupLabels.enabled", false);
pref("browser.urlbar.keepPanelOpenDuringImeComposition", true); // IMPORTANT: Fixes closing the urlbar when on some languages
pref("browser.formfill.enable", false);
@@ -444,10 +446,6 @@ pref("browser.ml.chat.sidebar", false);
pref("browser.ml.enable", false);
// ---- Experimental settings to try make zen faster
pref("gfx.canvas.accelerated.cache-items", 32768);
pref("gfx.canvas.accelerated.cache-size", 256);
pref("gfx.content.skia-font-cache-size", 80);
pref("media.memory_cache_max_size", 1048576);
pref("media.cache_readahead_limit", 9000);
pref("media.cache_resume_threshold", 3600);
@@ -459,3 +457,11 @@ pref("image.mem.decode_bytes_at_a_time", 32768);
pref("gfx.canvas.accelerated", true);
pref("media.hardware-video-decoding.enabled", true);
pref("layers.gpu-process.enabled", true);
// Picture-in-picture
pref("media.videocontrols.picture-in-picture.video-toggle.enabled", true);
// TODO: Enable once we have a proper settings page
pref("media.videocontrols.picture-in-picture.enable-when-switching-tabs.enabled", false);
// More Privacy
pref("extensions.getAddons.cache.enabled", false);

View File

@@ -1,14 +1,14 @@
diff --git a/browser/base/content/browser-box.inc.xhtml b/browser/base/content/browser-box.inc.xhtml
index 2ca8bdd2674fb4addf3bbf94ff17abc5c93c6293..dd965d8d190e8cdacbeb3d80995ad1a906e64079 100644
index 7d7e8697f02f90d4f336c9ab0a73a89848e0c21c..d113b439888d26629ce5f6b5d35f8fa12249774b 100644
--- a/browser/base/content/browser-box.inc.xhtml
+++ b/browser/base/content/browser-box.inc.xhtml
@@ -26,7 +26,13 @@
<splitter id="sidebar-splitter" class="chromeclass-extrachrome sidebar-splitter" resizebefore="sibling" resizeafter="none" hidden="true"/>
<box id="after-splitter"></box>
</div>
@@ -23,7 +23,13 @@
<browser id="sidebar" autoscroll="false" disablehistory="true" disablefullscreen="true" tooltip="aHTMLTooltip"/>
</vbox>
<splitter id="sidebar-splitter" class="chromeclass-extrachrome sidebar-splitter" resizebefore="sibling" resizeafter="none" hidden="true"/>
+<vbox flex="1" id="zen-appcontent-wrapper">
+<html:div id="zen-appcontent-navbar-container"></html:div>
+<hbox id="zen-tabbox-wrapper" flex="1">
+ <html:div id="zen-appcontent-navbar-container"></html:div>
+ <hbox id="zen-tabbox-wrapper" flex="1">
<tabbox id="tabbrowser-tabbox" flex="1" tabcontainer="tabbrowser-tabs">
+#include zen-tabbrowser-elements.inc.xhtml
<tabpanels id="tabbrowser-tabpanels" flex="1" selectedIndex="0"/>

View File

@@ -1,5 +1,5 @@
diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js
index b89846a1103827b7e65c0b6c9197e80761e3f5c0..cc7205765244738743db92bfcafc1f288919ae0d 100644
index ea79d296e7dd0f8fd812b0677a252af5cf7ad26e..bd95ef5d6b99399c859af1cf71d9d62477f4ac2b 100644
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -33,6 +33,7 @@ ChromeUtils.defineESModuleGetters(this, {
@@ -10,7 +10,7 @@ index b89846a1103827b7e65c0b6c9197e80761e3f5c0..cc7205765244738743db92bfcafc1f28
DevToolsSocketStatus:
"resource://devtools/shared/security/DevToolsSocketStatus.sys.mjs",
DownloadUtils: "resource://gre/modules/DownloadUtils.sys.mjs",
@@ -2698,6 +2699,11 @@ var XULBrowserWindow = {
@@ -2338,6 +2339,11 @@ var XULBrowserWindow = {
AboutReaderParent.updateReaderButton(gBrowser.selectedBrowser);
TranslationsParent.onLocationChange(gBrowser.selectedBrowser);
@@ -22,7 +22,7 @@ index b89846a1103827b7e65c0b6c9197e80761e3f5c0..cc7205765244738743db92bfcafc1f28
PictureInPicture.updateUrlbarToggle(gBrowser.selectedBrowser);
if (!gMultiProcessBrowser) {
@@ -5194,7 +5200,7 @@ function switchToTabHavingURI(
@@ -4814,7 +4820,7 @@ function switchToTabHavingURI(
ignoreQueryString || replaceQueryString,
ignoreFragmentWhenComparing
);
@@ -31,7 +31,7 @@ index b89846a1103827b7e65c0b6c9197e80761e3f5c0..cc7205765244738743db92bfcafc1f28
for (let i = 0; i < browsers.length; i++) {
let browser = browsers[i];
let browserCompare = cleanURL(
@@ -5235,7 +5241,7 @@ function switchToTabHavingURI(
@@ -4857,7 +4863,7 @@ function switchToTabHavingURI(
}
if (!doAdopt) {

View File

@@ -1,5 +1,5 @@
diff --git a/browser/base/content/browser.xhtml b/browser/base/content/browser.xhtml
index 0d0a559a6473149b50f4bf18d059e86907c4acd3..a5a48ba1d50b3bf74dec3f3d371a76228e246a9e 100644
index 51a25aaa5558e6e17246d54a7ed95d5ddf3ecdab..b49984c8711fc9f5f19f0cf6ecca07a8cca0d125 100644
--- a/browser/base/content/browser.xhtml
+++ b/browser/base/content/browser.xhtml
@@ -26,6 +26,7 @@
@@ -10,37 +10,28 @@ index 0d0a559a6473149b50f4bf18d059e86907c4acd3..a5a48ba1d50b3bf74dec3f3d371a7622
persist="screenX screenY width height sizemode"
data-l10n-sync="true">
<head>
@@ -104,6 +105,8 @@
@@ -104,8 +105,11 @@
<title data-l10n-id="browser-main-window-default-title"></title>
+#include zen-preloaded.inc.xhtml
+
# All JS files which are needed by browser.xhtml and other top level windows to
# support MacOS specific features *must* go into the global-scripts.inc file so
# that they can be shared with macWindow.inc.xhtml.
@@ -148,6 +151,7 @@
window.addEventListener("DOMContentLoaded",
gBrowserInit.onDOMContentLoaded.bind(gBrowserInit), { once: true });
</script>
<script src="chrome://browser/content/global-scripts.js"></script>
<script src="chrome://browser/content/browser-main.js"></script>
+#include zen-assets.inc.xhtml
</head>
<html:body xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
# All sets except for popupsets (commands, keys, and stringbundles)
@@ -169,9 +173,13 @@
@@ -127,9 +131,12 @@
</vbox>
</html:template>
-#include navigator-toolbox.inc.xhtml
-
-#include browser-box.inc.xhtml
+ <hbox id="zen-main-app-wrapper" flex="1" persist="zen-compact-mode">
+ <vbox id="zen-toast-container"></vbox>
+ #include navigator-toolbox.inc.xhtml
+ <html:span id="zen-sidebar-box-container">
+ </html:span>
+ #include browser-box.inc.xhtml
+ </hbox>
+<hbox id="zen-main-app-wrapper" flex="1" persist="zen-compact-mode">
+ <vbox id="zen-toast-container"></vbox>
#include navigator-toolbox.inc.xhtml
#include browser-box.inc.xhtml
+</hbox>
<html:template id="customizationPanel">
<box id="customization-container" flex="1" hidden="true"><![CDATA[

View File

@@ -1,5 +1,5 @@
diff --git a/browser/base/content/navigator-toolbox.inc.xhtml b/browser/base/content/navigator-toolbox.inc.xhtml
index feb9e4ef7e872b4cfbf0d55f24a34db275951c66..3ce9b9919ff736885b8aa8943bbbce3c5d0f33a6 100644
index 00c8976d3e258c0875d7da2f3ec823d8907a84c9..b5735712aaa7c2ae2baa4b858e735413b130ca94 100644
--- a/browser/base/content/navigator-toolbox.inc.xhtml
+++ b/browser/base/content/navigator-toolbox.inc.xhtml
@@ -2,7 +2,7 @@
@@ -11,46 +11,29 @@ index feb9e4ef7e872b4cfbf0d55f24a34db275951c66..3ce9b9919ff736885b8aa8943bbbce3c
<script src="chrome://browser/content/navigator-toolbox.js" />
<!-- Menu -->
@@ -17,9 +17,8 @@
@@ -17,9 +17,9 @@
#include browser-menubar.inc
</toolbaritem>
<spacer flex="1" skipintoolbarset="true" style="order: 1000;"/>
-#include titlebar-items.inc.xhtml
</toolbar>
-
+<hbox id="titlebar">
<toolbar id="TabsToolbar"
class="browser-toolbar browser-titlebar"
fullscreentoolbar="true"
@@ -32,7 +31,7 @@
<hbox class="titlebar-spacer" type="pre-tabs"/>
- <hbox flex="1" align="end" class="toolbar-items">
+ <hbox flex="1" align="start" class="toolbar-items">
<toolbartabstop/>
<hbox id="TabsToolbar-customization-target" flex="1">
<toolbarbutton id="firefox-view-button"
@@ -40,6 +39,7 @@
data-l10n-id="toolbar-button-firefox-view-2"
role="button"
aria-pressed="false"
+ hidden="true"
cui-areatype="toolbar"
removable="true"/>
@@ -50,6 +50,10 @@
tooltip="tabbrowser-tab-tooltip"
orient="horizontal"
stopwatchid="FX_TAB_CLICK_MS">
+<html:div id="zen-essentials-container" skipintoolbarset="true"></html:div>
stopwatchid="tabClick">
+<html:div id="zen-essentials-wrapper" skipintoolbarset="true"></html:div>
+<hbox id="zen-current-workspace-indicator-container"></hbox>
+<html:div id="zen-tabs-wrapper">
+<html:div id="zen-browser-tabs-container">
<hbox class="tab-drop-indicator" hidden="true"/>
<html:span id="tab-drag-empty-feedback" role="presentation"/>
# If the name (tabbrowser-arrowscrollbox) or structure of this changes
# significantly, there is an optimization in
@@ -75,6 +79,8 @@
@@ -76,6 +80,8 @@
tooltip="dynamic-shortcut-tooltip"
data-l10n-id="tabs-toolbar-new-tab"/>
<html:span id="tabbrowser-tab-a11y-desc" hidden="true"/>
@@ -59,7 +42,7 @@ index feb9e4ef7e872b4cfbf0d55f24a34db275951c66..3ce9b9919ff736885b8aa8943bbbce3c
</tabs>
<toolbarbutton id="new-tab-button"
@@ -100,10 +106,10 @@
@@ -101,9 +107,10 @@
#include private-browsing-indicator.inc.xhtml
<toolbarbutton class="content-analysis-indicator toolbarbutton-1 content-analysis-indicator-icon"/>
@@ -67,20 +50,7 @@ index feb9e4ef7e872b4cfbf0d55f24a34db275951c66..3ce9b9919ff736885b8aa8943bbbce3c
+#include zen-sidebar-icons.inc.xhtml
</toolbar>
-
+</hbox>
<toolbar id="nav-bar"
class="browser-toolbar chromeclass-location"
data-l10n-id="navbar-accessible"
@@ -489,10 +495,10 @@
consumeanchor="PanelUI-button"
data-l10n-id="appmenu-menu-button-closed2"/>
</toolbaritem>
+#include titlebar-items.inc.xhtml
<hbox class="titlebar-spacer" type="post-tabs"/>
#include private-browsing-indicator.inc.xhtml
<toolbarbutton class="content-analysis-indicator toolbarbutton-1 content-analysis-indicator-icon"/>
-#include titlebar-items.inc.xhtml
</toolbar>
<toolbar id="PersonalToolbar"

View File

@@ -1,16 +1,11 @@
diff --git a/browser/base/content/nsContextMenu.sys.mjs b/browser/base/content/nsContextMenu.sys.mjs
index 94d3c2bb401c2e4246340a6c2d63c9d3561ff5e1..62c599f78748e708c8f36c05935822e8808996b5 100644
index 3bd0ee8af8b696161d18fd2a978f9e25972ed3ad..9e602a942271bd54231dc66363f8db51aea9e78a 100644
--- a/browser/base/content/nsContextMenu.sys.mjs
+++ b/browser/base/content/nsContextMenu.sys.mjs
@@ -1109,6 +1109,13 @@ export class nsContextMenu {
@@ -1111,6 +1111,8 @@ export class nsContextMenu {
!this.isSecureAboutPage()
);
+ this.showItem(
+ "context-zenAddToWebPanel",
+ this.onLink && !this.onMailtoLink && !this.onTelLink
+ );
+
+ this.showItem("context-zenSplitLink", this.onLink && !this.onMailtoLink && !this.onTelLink);
+
let canNotStrip =

View File

@@ -10,7 +10,6 @@
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-tabs.css" />
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-browser-ui.css" />
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-gradient-generator.css" />
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-rices.css" />
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-panel-ui.css" />
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-single-components.css" />
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-browser-container.css" />
@@ -19,7 +18,6 @@
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-decks.css" />
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-folders.css" />
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-glance.css" />
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-sidebar-panels.css" />
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-popup.css" />
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-compact-mode.css" />
@@ -27,15 +25,16 @@
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-branding.css" />
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-welcome.css" />
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-media-controls.css" />
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-download-box-animation.css" />
</linkset>
# Scripts used all over the browser
<script>
Services.scriptloader.loadSubScript("chrome://browser/content/ZenUIManager.mjs", this);
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenFolders.mjs", this);
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenThemesCommon.mjs", this);
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenThemesImporter.mjs", this);
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenCompactMode.mjs", this);
Services.scriptloader.loadSubScript("chrome://browser/content/ZenUIManager.mjs", this);
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenTabUnloader.mjs", this);
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenPinnedTabsStorage.mjs", this);
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenWorkspacesStorage.mjs", this);
@@ -44,7 +43,5 @@ Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/Zen
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenViewSplitter.mjs", this);
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenGlanceManager.mjs", this);
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenMediaController.mjs", this);
// Unimportant scripts
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenRices.mjs", this);
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenDownloadAnimation.mjs", this);
</script>

View File

@@ -1,83 +1,106 @@
content/browser/zenThemeModifier.js (content/zenThemeModifier.js)
content/browser/ZenStartup.mjs (content/ZenStartup.mjs)
content/browser/zen-sets.js (content/zen-sets.js)
content/browser/ZenUIManager.mjs (content/ZenUIManager.mjs)
content/browser/ZenCustomizableUI.sys.mjs (content/ZenCustomizableUI.sys.mjs)
content/browser/zen-components/ZenUIMigration.mjs (zen-components/ZenUIMigration.mjs)
content/browser/zen-components/ZenCompactMode.mjs (zen-components/ZenCompactMode.mjs)
content/browser/zen-components/ZenViewSplitter.mjs (zen-components/ZenViewSplitter.mjs)
content/browser/zen-components/ZenThemesCommon.mjs (zen-components/ZenThemesCommon.mjs)
content/browser/zen-components/ZenWorkspaces.mjs (zen-components/ZenWorkspaces.mjs)
content/browser/zen-components/ZenWorkspacesStorage.mjs (zen-components/ZenWorkspacesStorage.mjs)
content/browser/zen-components/ZenWorkspacesSync.mjs (zen-components/ZenWorkspacesSync.mjs)
content/browser/zen-components/ZenKeyboardShortcuts.mjs (zen-components/ZenKeyboardShortcuts.mjs)
content/browser/zen-components/ZenThemesImporter.mjs (zen-components/ZenThemesImporter.mjs)
content/browser/zen-components/ZenTabUnloader.mjs (zen-components/ZenTabUnloader.mjs)
content/browser/zen-components/ZenPinnedTabsStorage.mjs (zen-components/ZenPinnedTabsStorage.mjs)
content/browser/zen-components/ZenPinnedTabManager.mjs (zen-components/ZenPinnedTabManager.mjs)
content/browser/zen-components/ZenCommonUtils.mjs (zen-components/ZenCommonUtils.mjs)
content/browser/zen-components/ZenGradientGenerator.mjs (zen-components/ZenGradientGenerator.mjs)
content/browser/zen-components/ZenGlanceManager.mjs (zen-components/ZenGlanceManager.mjs)
content/browser/zen-components/ZenFolders.mjs (zen-components/ZenFolders.mjs)
content/browser/zen-components/ZenActorsManager.mjs (zen-components/ZenActorsManager.mjs)
content/browser/zen-components/ZenRices.mjs (zen-components/ZenRices.mjs)
content/browser/zen-components/ZenEmojies.mjs (zen-components/ZenEmojies.mjs)
content/browser/zen-components/ZenWelcome.mjs (zen-components/ZenWelcome.mjs)
content/browser/zen-components/ZenMediaController.mjs (zen-components/ZenMediaController.mjs)
content/browser/zenThemeModifier.js (../../zen/common/zenThemeModifier.js)
content/browser/ZenStartup.mjs (../../zen/common/ZenStartup.mjs)
content/browser/zen-sets.js (../../zen/common/zen-sets.js)
content/browser/ZenUIManager.mjs (../../zen/common/ZenUIManager.mjs)
content/browser/zen-components/ZenActorsManager.mjs (../../zen/common/ZenActorsManager.mjs)
content/browser/zen-components/ZenEmojies.mjs (../../zen/common/ZenEmojies.mjs)
content/browser/ZenCustomizableUI.sys.mjs (../../zen/common/ZenCustomizableUI.sys.mjs)
content/browser/zen-components/ZenUIMigration.mjs (../../zen/common/ZenUIMigration.mjs)
content/browser/zen-components/ZenCommonUtils.mjs (../../zen/common/ZenCommonUtils.mjs)
content/browser/zen-styles/zen-theme.css (content/zen-styles/zen-theme.css)
content/browser/zen-styles/zen-buttons.css (content/zen-styles/zen-buttons.css)
content/browser/zen-styles/zen-tabs.css (content/zen-styles/zen-tabs.css)
* content/browser/zen-styles/zen-tabs/vertical-tabs.css (content/zen-styles/zen-tabs/vertical-tabs.css)
content/browser/zen-styles/zen-tabs/horizontal-tabs.css (content/zen-styles/zen-tabs/horizontal-tabs.css)
content/browser/zen-styles/zen-browser-ui.css (content/zen-styles/zen-browser-ui.css)
content/browser/zen-styles/zen-animations.css (content/zen-styles/zen-animations.css)
content/browser/zen-styles/zen-panel-ui.css (content/zen-styles/zen-panel-ui.css)
content/browser/zen-styles/zen-single-components.css (content/zen-styles/zen-single-components.css)
content/browser/zen-styles/zen-sidebar.css (content/zen-styles/zen-sidebar.css)
content/browser/zen-styles/zen-toolbar.css (content/zen-styles/zen-toolbar.css)
content/browser/zen-styles/zen-decks.css (content/zen-styles/zen-decks.css)
content/browser/zen-styles/zen-folders.css (content/zen-styles/zen-folders.css)
content/browser/zen-styles/zen-glance.css (content/zen-styles/zen-glance.css)
content/browser/zen-styles/zen-browser-container.css (content/zen-styles/zen-browser-container.css)
content/browser/zen-styles/zen-workspaces.css (content/zen-styles/zen-workspaces.css)
content/browser/zen-styles/zen-urlbar.css (content/zen-styles/zen-urlbar.css)
content/browser/zen-styles/zen-popup.css (content/zen-styles/zen-popup.css)
content/browser/zen-styles/zen-sidebar-panels.css (content/zen-styles/zen-sidebar-panels.css)
content/browser/zen-styles/zen-gradient-generator.css (content/zen-styles/zen-gradient-generator.css)
content/browser/zen-styles/zen-rices.css (content/zen-styles/zen-rices.css)
content/browser/zen-styles/zen-branding.css (content/zen-styles/zen-branding.css)
content/browser/zen-styles/zen-welcome.css (content/zen-styles/zen-welcome.css)
content/browser/zen-styles/zen-media-controls.css (content/zen-styles/zen-media-controls.css)
content/browser/zen-styles/zen-theme.css (../../zen/common/styles/zen-theme.css)
content/browser/zen-styles/zen-buttons.css (../../zen/common/styles/zen-buttons.css)
content/browser/zen-styles/zen-browser-ui.css (../../zen/common/styles/zen-browser-ui.css)
content/browser/zen-styles/zen-animations.css (../../zen/common/styles/zen-animations.css)
content/browser/zen-styles/zen-panel-ui.css (../../zen/common/styles/zen-panel-ui.css)
content/browser/zen-styles/zen-single-components.css (../../zen/common/styles/zen-single-components.css)
content/browser/zen-styles/zen-sidebar.css (../../zen/common/styles/zen-sidebar.css)
content/browser/zen-styles/zen-toolbar.css (../../zen/common/styles/zen-toolbar.css)
content/browser/zen-styles/zen-browser-container.css (../../zen/common/styles/zen-browser-container.css)
content/browser/zen-styles/zen-urlbar.css (../../zen/common/styles/zen-urlbar.css)
content/browser/zen-styles/zen-popup.css (../../zen/common/styles/zen-popup.css)
content/browser/zen-styles/zen-branding.css (../../zen/common/styles/zen-branding.css)
content/browser/zen-styles/zen-panels/bookmarks.css (content/zen-styles/zen-panels/bookmarks.css)
content/browser/zen-styles/zen-panels/extensions.css (content/zen-styles/zen-panels/extensions.css)
content/browser/zen-styles/zen-panels/print.css (content/zen-styles/zen-panels/print.css)
content/browser/zen-styles/zen-panels/dialog.css (content/zen-styles/zen-panels/dialog.css)
content/browser/zen-styles/zen-panels/bookmarks.css (../../zen/common/styles/zen-panels/bookmarks.css)
content/browser/zen-styles/zen-panels/extensions.css (../../zen/common/styles/zen-panels/extensions.css)
content/browser/zen-styles/zen-panels/print.css (../../zen/common/styles/zen-panels/print.css)
content/browser/zen-styles/zen-panels/dialog.css (../../zen/common/styles/zen-panels/dialog.css)
* content/browser/zen-styles/zen-compact-mode.css (content/zen-styles/zen-compact-mode.css)
content/browser/zen-components/ZenCompactMode.mjs (../../zen/compact-mode/ZenCompactMode.mjs)
* content/browser/zen-styles/zen-compact-mode.css (../../zen/compact-mode/zen-compact-mode.css)
# Images
content/browser/zen-images/gradient.png (content/zen-images/gradient.png)
content/browser/zen-images/brand-header.svg (content/zen-images/brand-header.svg)
content/browser/zen-images/layouts/collapsed.png (content/zen-images/layouts/collapsed.png)
content/browser/zen-images/layouts/multiple-toolbar.png (content/zen-images/layouts/multiple-toolbar.png)
content/browser/zen-images/layouts/single-toolbar.png (content/zen-images/layouts/single-toolbar.png)
content/browser/zen-images/grain-bg.png (content/zen-images/grain-bg.png)
content/browser/zen-images/note-indicator.svg (content/zen-images/note-indicator.svg)
content/browser/zen-components/ZenViewSplitter.mjs (../../zen/split-view/ZenViewSplitter.mjs)
content/browser/zen-styles/zen-decks.css (../../zen/split-view/zen-decks.css)
# Actors
content/browser/zen-components/actors/ZenThemeMarketplaceParent.sys.mjs (zen-components/actors/ZenThemeMarketplaceParent.sys.mjs)
content/browser/zen-components/actors/ZenThemeMarketplaceChild.sys.mjs (zen-components/actors/ZenThemeMarketplaceChild.sys.mjs)
content/browser/zen-components/actors/ZenGlanceChild.sys.mjs (zen-components/actors/ZenGlanceChild.sys.mjs)
content/browser/zen-components/actors/ZenGlanceParent.sys.mjs (zen-components/actors/ZenGlanceParent.sys.mjs)
content/browser/zen-components/ZenThemesCommon.mjs (../../zen/mods/ZenThemesCommon.mjs)
content/browser/zen-components/ZenThemesImporter.mjs (../../zen/mods/ZenThemesImporter.mjs)
content/browser/zen-components/actors/ZenThemeMarketplaceParent.sys.mjs (../../zen/mods/actors/ZenThemeMarketplaceParent.sys.mjs)
content/browser/zen-components/actors/ZenThemeMarketplaceChild.sys.mjs (../../zen/mods/actors/ZenThemeMarketplaceChild.sys.mjs)
# Fonts
content/browser/zen-fonts/JunicodeVF-Italic.woff2 (content/zen-fonts/JunicodeVF-Italic.woff2)
content/browser/zen-fonts/JunicodeVF-Roman.woff2 (content/zen-fonts/JunicodeVF-Roman.woff2)
content/browser/zen-components/ZenWorkspaces.mjs (../../zen/workspaces/ZenWorkspaces.mjs)
content/browser/zen-components/ZenWorkspacesStorage.mjs (../../zen/workspaces/ZenWorkspacesStorage.mjs)
content/browser/zen-components/ZenWorkspacesSync.mjs (../../zen/workspaces/ZenWorkspacesSync.mjs)
content/browser/zen-components/ZenGradientGenerator.mjs (../../zen/workspaces/ZenGradientGenerator.mjs)
content/browser/zen-styles/zen-workspaces.css (../../zen/workspaces/zen-workspaces.css)
content/browser/zen-styles/zen-gradient-generator.css (../../zen/workspaces/zen-gradient-generator.css)
content/browser/zen-components/ZenKeyboardShortcuts.mjs (../../zen/kbs/ZenKeyboardShortcuts.mjs)
content/browser/zen-components/ZenTabUnloader.mjs (../../zen/tabs/ZenTabUnloader.mjs)
content/browser/zen-components/ZenPinnedTabsStorage.mjs (../../zen/tabs/ZenPinnedTabsStorage.mjs)
content/browser/zen-components/ZenPinnedTabManager.mjs (../../zen/tabs/ZenPinnedTabManager.mjs)
* content/browser/zen-styles/zen-tabs.css (../../zen/tabs/zen-tabs.css)
content/browser/zen-styles/zen-tabs/vertical-tabs.css (../../zen/tabs/zen-tabs/vertical-tabs.css)
content/browser/zen-components/ZenGlanceManager.mjs (../../zen/glance/ZenGlanceManager.mjs)
content/browser/zen-styles/zen-glance.css (../../zen/glance/zen-glance.css)
content/browser/zen-components/actors/ZenGlanceChild.sys.mjs (../../zen/glance/actors/ZenGlanceChild.sys.mjs)
content/browser/zen-components/actors/ZenGlanceParent.sys.mjs (../../zen/glance/actors/ZenGlanceParent.sys.mjs)
content/browser/zen-components/ZenFolders.mjs (../../zen/folders/ZenFolders.mjs)
content/browser/zen-styles/zen-folders.css (../../zen/folders/zen-folders.css)
content/browser/zen-components/ZenWelcome.mjs (../../zen/welcome/ZenWelcome.mjs)
content/browser/zen-styles/zen-welcome.css (../../zen/welcome/zen-welcome.css)
content/browser/zen-components/ZenMediaController.mjs (../../zen/media/ZenMediaController.mjs)
content/browser/zen-styles/zen-media-controls.css (../../zen/media/zen-media-controls.css)
content/browser/zen-components/ZenDownloadAnimation.mjs (../../zen/downloads/ZenDownloadAnimation.mjs)
content/browser/zen-styles/zen-download-arc-animation.css (../../zen/downloads/zen-download-arc-animation.css)
content/browser/zen-styles/zen-download-box-animation.css (../../zen/downloads/zen-download-box-animation.css)
# Images
content/browser/zen-images/gradient.png (../../zen/images/gradient.png)
content/browser/zen-images/brand-header.svg (../../zen/images/brand-header.svg)
content/browser/zen-images/layouts/collapsed.png (../../zen/images/layouts/collapsed.png)
content/browser/zen-images/layouts/multiple-toolbar.png (../../zen/images/layouts/multiple-toolbar.png)
content/browser/zen-images/layouts/single-toolbar.png (../../zen/images/layouts/single-toolbar.png)
content/browser/zen-images/grain-bg.png (../../zen/images/grain-bg.png)
content/browser/zen-images/note-indicator.svg (../../zen/images/note-indicator.svg)
content/browser/zen-images/downloads/download.svg (../../zen/images/downloads/download.svg)
content/browser/zen-images/downloads/archive.svg (../../zen/images/downloads/archive.svg)
# Fonts
content/browser/zen-fonts/JunicodeVF-Italic.woff2 (../../zen/fonts/JunicodeVF-Italic.woff2)
content/browser/zen-fonts/JunicodeVF-Roman.woff2 (../../zen/fonts/JunicodeVF-Roman.woff2)
# JS Vendor
content/browser/zen-vendor/tsparticles.confetti.bundle.min.js (content/zen-vendor/tsparticles.confetti.bundle.min.js)
content/browser/zen-vendor/motion.min.mjs (content/zen-vendor/motion.min.mjs)
content/browser/zen-vendor/tsparticles.confetti.bundle.min.js (../../zen/vendor/tsparticles.confetti.bundle.min.js)
content/browser/zen-vendor/motion.min.mjs (../../zen/vendor/motion.min.mjs)
# FavIcons for startup
content/browser/zen-images/favicons/calendar.ico (../../zen/images/favicons/calendar.ico)
content/browser/zen-images/favicons/discord.ico (../../zen/images/favicons/discord.ico)
content/browser/zen-images/favicons/figma.ico (../../zen/images/favicons/figma.ico)
content/browser/zen-images/favicons/github.ico (../../zen/images/favicons/github.ico)
content/browser/zen-images/favicons/notion.ico (../../zen/images/favicons/notion.ico)
content/browser/zen-images/favicons/obsidian.ico (../../zen/images/favicons/obsidian.ico)
content/browser/zen-images/favicons/slack.ico (../../zen/images/favicons/slack.ico)
content/browser/zen-images/favicons/reddit.ico (../../zen/images/favicons/reddit.ico)
content/browser/zen-images/favicons/x.ico (../../zen/images/favicons/x.ico)
content/browser/zen-images/favicons/trello.ico (../../zen/images/favicons/trello.ico)

View File

@@ -2,6 +2,9 @@
<command id="cmd_zenCompactModeToggle" />
<command id="cmd_zenCompactModeShowSidebar" />
<command id="cmd_zenCompactModeShowToolbar" />
<command id="cmd_zenCompactModeHideSidebar" />
<command id="cmd_zenCompactModeHideToolbar" />
<command id="cmd_zenCompactModeHideBoth" />
<command id="cmd_zenWorkspaceForward" />
<command id="cmd_zenWorkspaceBackward" />
@@ -11,6 +14,7 @@
<command id="cmd_zenSplitViewHorizontal" />
<command id="cmd_zenSplitViewUnsplit" />
<command id="cmd_zenSplitViewLinkInNewTab" />
<command id="cmd_zenSplitViewContextMenu" />
<!-- Workspace commands -->
<command id="cmd_zenWorkspaceSwitch1" />
@@ -25,7 +29,7 @@
<command id="cmd_zenWorkspaceSwitch10" />
<command id="cmd_zenOpenZenThemePicker" />
<command id="cmd_zenChangeWorkspaceTabColor" />
<command id="cmd_zenChangeWorkspaceTab" />
<command id="cmd_zenToggleTabsOnRight" />
<command id="cmd_zenReplacePinnedUrlWithCurrent" />

View File

@@ -1,5 +1,5 @@
<panel flip="side" type="arrow" orient="vertical" id="PanelUI-zen-gradient-generator" position="bottomright topright" mainview="true" side="left" onpopuphidden="gZenThemePicker.handlePanelClose();" onpopupshowing="gZenThemePicker.handlePanelOpen();">
<panel flip="side" type="arrow" orient="vertical" id="PanelUI-zen-gradient-generator" position="bottomright topright" mainview="true" side="left">
<panelmultiview id="PanelUI-zen-gradient-generator-multiview" mainViewId="PanelUI-zen-gradient-generator-view">
<panelview id="PanelUI-zen-gradient-generator-view" class="PanelUI-subView zen-theme-picker" role="document" mainview-with-header="true" has-custom-header="true">
<hbox>
@@ -34,7 +34,7 @@
<hbox id="PanelUI-zen-gradient-colors-wrapper">
<vbox flex="1">
<label data-l10n-id="zen-panel-ui-gradient-generator-opacity-text"></label>
<html:input type="range" min="0" max="1" value="0.5" step="0.05" oninput="gZenThemePicker.onOpacityChange(event);" id="PanelUI-zen-gradient-generator-opacity" />
<html:input type="range" min="0" max="1" value="0.5" step="0.05" id="PanelUI-zen-gradient-generator-opacity" />
</vbox>
<vbox id="PanelUI-zen-gradient-generator-texture-wrapper">
</vbox>
@@ -45,7 +45,7 @@
<label data-l10n-id="zen-panel-ui-gradient-generator-custom-color"></label>
<hbox>
<html:input type="text" placeholder="#000000" id="PanelUI-zen-gradient-generator-custom-input" />
<toolbarbutton id="PanelUI-zen-gradient-generator-color-custom-add" class="subviewbutton" oncommand="gZenThemePicker.addCustomColor();" data-l10n-id="zen-panel-ui-gradient-generator-custom-color-add">
<toolbarbutton id="PanelUI-zen-gradient-generator-color-custom-add" class="subviewbutton" data-l10n-id="zen-panel-ui-gradient-generator-custom-color-add">
<image></image>
</toolbarbutton>
</hbox>
@@ -57,16 +57,16 @@
</panelmultiview>
</panel>
<panel flip="slide" type="arrow" orient="vertical" id="PanelUI-zen-workspaces" position="bottomright topright" mainview="true" side="left" onpopuphidden="ZenWorkspaces.handlePanelHidden();">
<panel flip="slide" type="arrow" orient="vertical" id="PanelUI-zen-workspaces" position="bottomright topright" mainview="true" side="left">
<panelmultiview id="PanelUI-zen-workspaces-multiview" mainViewId="PanelUI-zen-workspaces-view">
<panelview id="PanelUI-zen-workspaces-view" class="PanelUI-subView" role="document" mainview-with-header="true" has-custom-header="true" closemenu="none">
<vbox>
<hbox>
<h3 data-l10n-id="zen-panel-ui-workspaces-text" id="PanelUI-zen-workspaces-header"></h3>
<toolbarbutton id="PanelUI-zen-workspaces-reorder-mode" oncommand="ZenWorkspaces.toggleReorderMode();" class="subviewbutton">
<toolbarbutton id="PanelUI-zen-workspaces-reorder-mode" class="subviewbutton">
<image></image>
</toolbarbutton>
<toolbarbutton id="PanelUI-zen-workspaces-new" oncommand="ZenWorkspaces.openSaveDialog();" class="subviewbutton">
<toolbarbutton id="PanelUI-zen-workspaces-new" class="subviewbutton">
<image></image>
</toolbarbutton>
</hbox>
@@ -78,14 +78,14 @@
<vbox class="PanelUI-zen-workspaces-user-create">
<h1 data-l10n-id="zen-panel-ui-workspaces-create-text"></h1>
<hbox class="PanelUI-zen-workspaces-creation-wraper">
<hbox class="PanelUI-zen-workspaces-icons-container create" onclick="ZenWorkspaces.onWorkspaceIconContainerClick(event);"></hbox>
<html:input autofocus="true" id="PanelUI-zen-workspaces-create-input" type="text" placeholder="Enter workspace name" oninput="ZenWorkspaces.onWorkspaceCreationNameChange(this);" />
<hbox class="PanelUI-zen-workspaces-icons-container create"></hbox>
<html:input autofocus="true" id="PanelUI-zen-workspaces-create-input" type="text" placeholder="Enter workspace name" />
</hbox>
</vbox>
<html:moz-button-group class="panel-footer" id="PanelUI-zen-workspaces-create-footer">
<button disabled="true" default="true" slot="primary" id="PanelUI-zen-workspaces-create-save" oncommand="ZenWorkspaces.saveWorkspaceFromCreate();" class="footer-button" data-l10n-id="zen-panel-ui-workspaces-create-save">
<button disabled="true" default="true" slot="primary" id="PanelUI-zen-workspaces-create-save" class="footer-button" data-l10n-id="zen-panel-ui-workspaces-create-save">
</button>
<button id="PanelUI-zen-workspaces-create-cancel" oncommand="ZenWorkspaces.closeWorkspacesSubView();" class="footer-button" data-l10n-id="zen-panel-ui-workspaces-create-cancel">
<button id="PanelUI-zen-workspaces-create-cancel" class="footer-button" data-l10n-id="zen-panel-ui-workspaces-create-cancel">
</button>
</html:moz-button-group>
</panelview>
@@ -93,43 +93,39 @@
<vbox class="PanelUI-zen-workspaces-user-create">
<h1 data-l10n-id="zen-panel-ui-workspaces-edit-text"></h1>
<hbox class="PanelUI-zen-workspaces-creation-wraper">
<hbox class="PanelUI-zen-workspaces-icons-container edit" onclick="ZenWorkspaces.onWorkspaceIconContainerClick(event);"></hbox>
<html:input autofocus="true" id="PanelUI-zen-workspaces-edit-input" type="text" placeholder="Enter workspace name" oninput="ZenWorkspaces.onWorkspaceEditChange();" />
<hbox class="PanelUI-zen-workspaces-icons-container edit"></hbox>
<html:input autofocus="true" id="PanelUI-zen-workspaces-edit-input" type="text" placeholder="Enter workspace name" />
</hbox>
</vbox>
<html:moz-button-group class="panel-footer" id="PanelUI-zen-workspaces-edit-footer">
<button disabled="true" default="true" slot="primary" id="PanelUI-zen-workspaces-edit-save" oncommand="ZenWorkspaces.saveWorkspaceFromEdit();" class="footer-button" data-l10n-id="zen-panel-ui-workspaces-edit-save">
<button disabled="true" default="true" slot="primary" id="PanelUI-zen-workspaces-edit-save" class="footer-button" data-l10n-id="zen-panel-ui-workspaces-edit-save">
</button>
<button id="PanelUI-zen-workspaces-edit-cancel" oncommand="ZenWorkspaces.closeWorkspacesSubView();" class="footer-button" data-l10n-id="zen-panel-ui-workspaces-edit-cancel">
<button id="PanelUI-zen-workspaces-edit-cancel" class="footer-button" data-l10n-id="zen-panel-ui-workspaces-edit-cancel">
</button>
</html:moz-button-group>
</panelview>
<panelview id="PanelUI-zen-workspaces-icon-picker" class="PanelUI-subView" role="document" mainview-with-header="true" has-custom-header="true">
<vbox id="PanelUI-zen-workspaces-icon-picker-wrapper">
<html:div id="PanelUI-zen-workspaces-icon-search-bar">
<html:input autofocus="true" type="text" id="PanelUI-zen-workspaces-icon-search-input" oninput="ZenWorkspaces.conductSearch();"/>
<html:input autofocus="true" type="text" id="PanelUI-zen-workspaces-icon-search-input"/>
</html:div>
</vbox>
</panelview>
</panelmultiview>
</panel>
<menupopup id="zenWorkspaceActionsMenu"
onpopupshowing="ZenWorkspaces.updateContextMenu(this);"
onpopuphidden="if (event.target == this) ZenWorkspaces.onContextMenuClose();">
<menuitem id="context_zenOpenWorkspace" oncommand="ZenWorkspaces.openWorkspace();" data-l10n-id="zen-workspaces-panel-context-open"/>
<menupopup id="zenWorkspaceActionsMenu">
<menuitem id="context_zenOpenWorkspace" data-l10n-id="zen-workspaces-panel-context-open"/>
<menuseparator/>
<menuitem id="context_zenSetAsDefaultWorkspace" oncommand="ZenWorkspaces.setDefaultWorkspace();" data-l10n-id="zen-workspaces-panel-context-set-default"/>
<menuitem id="context_zenEditWorkspace" oncommand="ZenWorkspaces.contextEdit(event);" data-l10n-id="zen-workspaces-panel-context-edit"/>
<menuitem id="context_zenEditWorkspace" data-l10n-id="zen-workspaces-panel-context-edit"/>
<menu id="context_zenWorkspacesOpenInContainerTab"
data-l10n-id="zen-workspaces-panel-context-open-in-container-tab"
selection-type="single"
node-type="link"
hide-if-private-browsing="true"
hide-if-usercontext-disabled="true">
<menupopup oncommand="ZenWorkspaces.contextChangeContainerTab(event);"
onpopupshowing="return ZenWorkspaces.createContainerTabMenu(event);" />
<menupopup />
</menu>
<menuseparator/>
<menuitem id="context_zenDeleteWorkspace" oncommand="ZenWorkspaces.contextDelete(event);" data-l10n-id="zen-workspaces-panel-context-delete"/>
<menuitem id="context_zenDeleteWorkspace" data-l10n-id="zen-workspaces-panel-context-delete"/>
</menupopup>

View File

@@ -1,4 +1,4 @@
#include zen-media-player.inc.xhtml
#include ../../../zen/media/zen-media-controls.inc.xhtml
<toolbar brighttext="true"
id="zen-sidebar-bottom-buttons"
fullscreentoolbar="true"
@@ -8,6 +8,6 @@
skipintoolbarset="true"
context="toolbar-context-menu"
mode="icons">
<toolbarbutton removable="true" class="chromeclass-toolbar-additional toolbarbutton-1 zen-sidebar-action-button" id="zen-expand-sidebar-button" data-l10n-id="sidebar-zen-expand" cui-areatype="toolbar" oncommand="gZenVerticalTabsManager.toggleExpand();"></toolbarbutton>
<toolbarbutton removable="true" class="chromeclass-toolbar-additional toolbarbutton-1 zen-sidebar-action-button" id="zen-expand-sidebar-button" command="cmd_zenToggleSidebar" data-l10n-id="sidebar-zen-expand" cui-areatype="toolbar"></toolbarbutton>
<toolbarbutton id="zen-workspaces-button" class="chromeclass-toolbar-additional" overflows="false" removable="false"></toolbarbutton>
</toolbar>

View File

@@ -1,393 +0,0 @@
/*
* 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/.
*/
/* All overrides for compact mode go here */
:root[zen-compact-mode='true']:not([customizing]):not([inDOMFullscreen='true']) {
%include zen-tabs/vertical-tabs-topbuttons-fix.css
@media -moz-pref('zen.view.compact.hide-tabbar') or -moz-pref('zen.view.use-single-toolbar') {
#zen-sidebar-web-panel-wrapper:has(#zen-sidebar-web-panel[pinned='true']) {
margin-left: var(--zen-sidebar-web-panel-spacing) !important;
}
#zen-tabbox-wrapper {
/* Remove extra 1px of margine we have to add to the tabbox */
margin-left: var(--zen-element-separation) !important;
margin-right: var(--zen-element-separation) !important;
}
#zen-appcontent-wrapper {
& #tabbrowser-tabbox {
margin-left: 0 !important;
}
}
#zen-sidebar-top-buttons-customization-target {
padding-inline-start: calc(var(--zen-toolbox-padding) - var(--toolbarbutton-outer-padding)) !important;
}
#zen-sidebar-splitter {
display: none !important;
}
&:not([zen-window-buttons-reversed='true']) #zen-appcontent-navbar-container #nav-bar {
margin-left: var(--zen-element-separation) !important;
}
&[zen-window-buttons-reversed='true'] #zen-appcontent-navbar-container #nav-bar {
margin-right: var(--zen-element-separation) !important;
}
#navigator-toolbox {
--zen-toolbox-max-width: 64px !important;
--zen-compact-float: var(--zen-element-separation);
/* Initial padding for when we are animating */
padding: 0 0 0 var(--zen-toolbox-padding) !important;
&:not([animate='true']) {
position: absolute;
z-index: 10;
transition:
left 0.15s ease,
right 0.15s ease,
opacity 1.5s ease;
top: 0;
bottom: var(--zen-element-separation);
padding: 0 var(--zen-compact-float) !important;
opacity: 0;
:root[zen-single-toolbar='true'] & {
top: calc(var(--zen-element-separation) / 2);
height: calc(100% - var(--zen-element-separation));
}
& #zen-sidebar-top-buttons {
margin: 0 0 calc(var(--zen-toolbox-padding) / 2) 0;
}
}
&:not([zen-right-side='true']) #nav-bar {
margin-left: 0 !important;
}
}
&:not([zen-right-side='true']) #navigator-toolbox {
left: calc(-1 * var(--actual-zen-sidebar-width) + 1px);
}
/* When we have multiple toolbars and the top-toolbar is NOT being hidden,
* we need to adjust the top-padding of the toolbox to account for the
* extra toolbar height. */
@media not -moz-pref('zen.view.compact.hide-toolbar') {
&:not([zen-single-toolbar='true']) {
#navigator-toolbox:not([animate='true']) {
margin-top: var(--zen-toolbar-height) !important;
}
}
}
&[zen-right-side='true'] {
& #navigator-toolbox {
--zen-compact-float: calc(var(--zen-element-separation) + 1px);
&:not([animate='true']) {
right: calc(-1 * var(--actual-zen-sidebar-width) + 1px);
}
}
& .browserSidebarContainer {
margin-left: 0 !important;
margin-right: 0 !important;
}
}
#navigator-toolbox:not([animate='true']) #titlebar {
box-shadow: var(--zen-big-shadow);
border-radius: calc(var(--zen-native-inner-radius) + var(--zen-element-separation) / 4);
padding: var(--zen-toolbox-padding) !important;
position: relative;
background: var(--zen-dialog-background);
outline: 1px solid var(--zen-colors-border-contrast);
outline-offset: -1px;
/* times 4 because we have the inner padding and the outter padding to consider */
:root[zen-sidebar-expanded='true'] & {
&[has-animated-padding='true'] {
width: calc(var(--zen-sidebar-width) + var(--zen-toolbox-padding));
}
&:not([has-animated-padding='true']) {
width: calc(var(--zen-sidebar-width) - var(--zen-toolbox-padding));
}
}
:root[zen-single-toolbar='true'] {
padding-top: 0 !important;
margin-left: 0 !important;
}
@media -moz-pref('zen.view.compact.color-sidebar') {
background: var(--zen-main-browser-background-toolbar) !important;
background-attachment: fixed !important;
background-size: 2000px !important; /* Dont ask me why */
/* NOTE: We MUST not add a backdrop-filter if we want the URL
* bar to be floating correctly:
* https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_display/Containing_block#identifying_the_containing_block */
}
& #urlbar[open][zen-floating-urlbar='true'] {
transition: left 0.05s ease;
visibility: visible;
#navigator-toolbox:has(&) {
opacity: 1;
}
}
&::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-image: url(chrome://browser/content/zen-images/grain-bg.png);
pointer-events: none;
z-index: 0;
opacity: var(--zen-grainy-background-opacity, 0);
mix-blend-mode: overlay;
}
}
#navigator-toolbox[zen-has-hover]:not(:has(#urlbar[zen-floating-urlbar='true']:hover)),
#navigator-toolbox[zen-user-show],
#navigator-toolbox[zen-has-empty-tab],
#navigator-toolbox[flash-popup],
#navigator-toolbox[has-popup-menu],
#navigator-toolbox[movingtab],
#navigator-toolbox:has(.tabbrowser-tab:active),
&[zen-renaming-tab='true'] #navigator-toolbox,
#navigator-toolbox:has(
*:is([panelopen='true'], [open='true'], #urlbar:focus-within):not(#urlbar[zen-floating-urlbar='true']):not(tab):not(.zen-compact-mode-ignore)
) {
&:not([animate='true']) {
--zen-compact-mode-func: linear(
0 0%,
0.002748 1%,
0.010544 2%,
0.022757 3%,
0.038804 4%,
0.058151 5%,
0.080308 6%,
0.104828 7.000000000000001%,
0.131301 8%,
0.159358 9%,
0.188662 10%,
0.21891 11%,
0.249828 12%,
0.281172 13%,
0.312724 14.000000000000002%,
0.344288 15%,
0.375693 16%,
0.40679 17%,
0.437447 18%,
0.467549 19%,
0.497 20%,
0.525718 21%,
0.553633 22%,
0.580688 23%,
0.60684 24%,
0.632052 25%,
0.656298 26%,
0.679562 27%,
0.701831 28.000000000000004%,
0.723104 28.999999999999996%,
0.743381 30%,
0.76267 31%,
0.780983 32%,
0.798335 33%,
0.814744 34%,
0.830233 35%,
0.844826 36%,
0.858549 37%,
0.87143 38%,
0.883498 39%,
0.894782 40%,
0.905314 41%,
0.915125 42%,
0.924247 43%,
0.93271 44%,
0.940547 45%,
0.947787 46%,
0.954463 47%,
0.960603 48%,
0.966239 49%,
0.971397 50%,
0.976106 51%,
0.980394 52%,
0.984286 53%,
0.987808 54%,
0.990984 55.00000000000001%,
0.993837 56.00000000000001%,
0.99639 56.99999999999999%,
0.998664 57.99999999999999%,
1.000679 59%,
1.002456 60%,
1.004011 61%,
1.005363 62%,
1.006528 63%,
1.007522 64%,
1.008359 65%,
1.009054 66%,
1.009618 67%,
1.010065 68%,
1.010405 69%,
1.010649 70%,
1.010808 71%,
1.01089 72%,
1.010904 73%,
1.010857 74%,
1.010757 75%,
1.010611 76%,
1.010425 77%,
1.010205 78%,
1.009955 79%,
1.009681 80%,
1.009387 81%,
1.009077 82%,
1.008754 83%,
1.008422 84%,
1.008083 85%,
1.00774 86%,
1.007396 87%,
1.007052 88%,
1.00671 89%,
1.006372 90%,
1.00604 91%,
1.005713 92%,
1.005394 93%,
1.005083 94%,
1.004782 95%,
1.004489 96%,
1.004207 97%,
1.003935 98%,
1.003674 99%,
1.003423 100%
);
transition:
left 0.25s var(--zen-compact-mode-func),
right 0.25s var(--zen-compact-mode-func);
opacity: 1;
&:not([supress-primary-adjustment='true']) {
left: calc(var(--zen-element-separation) / -2);
:root[zen-right-side='true'] & {
right: calc(var(--zen-element-separation) / -2);
left: auto;
}
}
}
}
}
@media -moz-pref('zen.view.compact.hide-toolbar') {
&:not([zen-single-toolbar='true']) {
& #navigator-toolbox {
top: 0;
}
& #navigator-toolbox {
--zen-toolbox-top-align: var(--zen-element-separation);
}
& #sidebar-box,
& #titlebar,
& #zen-appcontent-wrapper,
& #zen-sidebar-web-panel-wrapper:has(#zen-sidebar-web-panel:not([pinned='true'])) {
margin-top: var(--zen-element-separation) !important;
}
& #zen-appcontent-wrapper {
z-index: 3 !important;
}
& #zen-sidebar-web-panel-wrapper:has(#zen-sidebar-web-panel[pinned='true']) {
margin-top: calc(var(--zen-element-separation) * 2) !important;
}
& #zen-appcontent-navbar-container {
--zen-compact-toolbar-offset: 5px;
position: absolute;
top: calc((-1 * var(--zen-toolbar-height)) + var(--zen-element-separation) + 1px);
left: 0;
z-index: 20;
box-shadow: 0 0 1px 1px rgba(0, 0, 0, 0.3) !important;
border-bottom-left-radius: var(--zen-border-radius);
border-bottom-right-radius: var(--zen-border-radius);
border-top-left-radius: env(-moz-gtk-csd-titlebar-radius);
border-top-right-radius: env(-moz-gtk-csd-titlebar-radius);
transition: all 0.15s ease;
width: 100%;
opacity: 0;
background: var(--zen-dialog-background);
max-height: var(--zen-toolbar-height);
overflow: hidden;
& > * {
position: relative !important;
}
& #urlbar {
opacity: 0;
}
@media -moz-pref('zen.view.compact.color-toolbar') {
background-attachment: fixed;
background: var(--zen-main-browser-background-toolbar);
background-size: 100% 2000px;
border-bottom: 1px solid var(--zen-colors-border);
}
}
& #zen-appcontent-navbar-container[zen-has-hover],
& #zen-appcontent-navbar-container:focus-within,
& #zen-appcontent-navbar-container[zen-user-show],
& #zen-appcontent-navbar-container[has-popup-menu],
& #zen-appcontent-navbar-container:has(*:is([panelopen='true'], [open='true']):not(.zen-compact-mode-ignore)) {
opacity: 1;
border-top-width: 1px;
top: -1px;
overflow: initial;
max-height: unset;
&::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-image: url(chrome://browser/content/zen-images/grain-bg.png);
pointer-events: none;
z-index: 0;
opacity: var(--zen-grainy-background-opacity, 0);
mix-blend-mode: overlay;
}
& #urlbar {
opacity: 1;
}
& #urlbar[breakout-extend='true']:not([zen-floating-urlbar='true']) {
top: 2px !important;
opacity: 1;
}
}
}
}
}

View File

@@ -1,226 +0,0 @@
#zen-rice-share-dialog-overlay:not([hidden]) {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.5);
z-index: 3;
display: flex;
justify-content: center;
align-items: center;
}
#zen-rice-share-dialog,
#zen-rice-share-dialog-notice {
color: var(--panel-color);
background: var(--arrowpanel-background);
border-radius: var(--zen-native-inner-radius);
box-shadow: 0 0 1px 1px hsla(0, 0%, 0%, 0.2);
border: var(--zen-appcontent-border);
overflow: hidden;
animation: zen-jello-animation-large 0.4s ease;
max-width: 400px;
&[animate='true'] {
animation: zen-rice-submit-animation 1s cubic-bezier(0.77, 0, 0.18, 1);
}
& .zen-rice-share-content {
padding: 10px 0;
border-top: var(--zen-appcontent-border);
background: var(--arrowpanel-background);
position: relative;
align-items: center;
min-height: 50px;
&:has(#zen-rice-share-first-form:not([fade-out])),
&:has(#zen-rice-share-success) {
padding-top: 20px;
}
& > vbox {
width: 100%;
padding: 0 10px;
}
& #zen-rice-share-first-form input[type='text'] {
width: 100%;
padding: 1px 2px;
border: 0;
border-bottom: 1px solid var(--zen-appcontent-border);
background: transparent;
font-style: italic;
font-weight: 600;
}
& #zen-rice-share-name {
font-style: normal !important;
font-size: 24px;
margin-left: 1px;
}
& .indent {
margin-left: 30px;
}
}
& .zen-rice-share-header {
height: 200px;
margin-bottom: -20px;
}
& #zen-rice-share-options {
padding: 10px 0;
max-height: 30px;
overflow: hidden;
transition:
max-height 0.3s ease,
height 0.3s ease;
&[zen-collapsed='false'] {
max-height: 350px;
}
& > .options-header {
font-weight: 600;
margin-bottom: 5px;
position: relative;
cursor: pointer;
align-items: center;
color: inherit;
-moz-context-properties: fill, fill-opacity;
fill: var(--toolbarbutton-icon-fill);
& label {
width: fit-content;
cursor: pointer;
}
}
& > .options-header image {
transition: transform 0.3s ease;
width: 15px;
height: 15px;
}
&[zen-collapsed='false'] > .options-header image {
transform: rotate(90deg);
}
& > checkbox {
margin-left: 15px;
}
}
& .panel-footer {
margin: 0;
margin-top: 10px;
& button {
justify-content: center;
}
}
#zen-rice-share-error {
border: 1px solid rgba(255, 0, 0, 0.5);
background: rgba(255, 0, 0, 0.1);
padding: 5px;
transition: opacity 0.3s ease;
border-radius: var(--zen-native-inner-radius);
@starting-style {
opacity: 0;
}
& button {
margin-left: auto;
margin-top: 2px;
}
}
/* Animations */
#zen-rice-share-first-form[fade-out] {
position: absolute;
transform: translateX(-100%);
pointer-events: none;
animation: zen-rice-form-out 0.5s ease;
}
#zen-rice-share-second-form {
animation: zen-rice-form-in 0.5s ease forwards;
justify-content: center;
& > hbox {
width: 100%;
height: 5px;
border-radius: 100px;
border: 1px solid var(--zen-colors-border);
position: relative;
overflow: hidden;
&::before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: var(--zen-primary-color);
transition: width 4s cubic-bezier(1, 0, 0, 1);
@starting-style {
width: 0;
}
}
}
&[fade-out] {
position: absolute !important;
animation: zen-rice-form-out 0.5s ease forwards;
}
}
#zen-rice-share-success {
overflow-y: hidden;
max-height: 0px;
animation: zen-rice-form-in-2 0.5s ease forwards;
& > h1 {
margin: 0;
font-size: 20px;
}
& > p {
color: var(--text-color-deemphasized);
}
& label {
margin: 0;
margin-top: 15px;
font-weight: 600;
margin-bottom: 5px;
}
}
}
#zen-rice-share-dialog-notice {
padding: 15px;
& br {
margin-bottom: 10px;
}
& > p {
color: var(--text-color-deemphasized);
margin-top: 10px;
}
.panel-footer {
margin-top: 10px;
align-items: center;
}
}

View File

@@ -1,306 +0,0 @@
/*
* 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/.
*/
#zen-sidebar-panels-wrapper {
/*min-height: 500px;*/
display: flex;
align-items: center;
justify-content: space-between;
align-content: center;
}
#zen-sidebar-panels-sites {
background: transparent;
max-width: 1px;
display: flex;
}
#zen-sidebar-add-panel-button:not(:hover) image,
.zen-sidebar-panel-button:not([selected='true'], #zen-sidebar-add-panel-button) image {
background: transparent !important;
}
.zen-sidebar-panel-button {
width: var(--zen-sidebar-action-button-width);
height: var(--zen-sidebar-action-button-width);
max-height: var(--zen-sidebar-action-button-width);
padding: 0 3px !important;
margin: 0;
justify-content: center;
align-items: center;
cursor: pointer;
}
.zen-sidebar-panel-button image {
border-radius: 10px !important;
border: 2px solid transparent;
}
.zen-sidebar-panel-button:hover image {
background: color-mix(in srgb, var(--toolbarbutton-hover-background) 12%, transparent);
}
.zen-sidebar-panel-button[selected='true'] image {
border-color: var(--zen-primary-color);
}
/** Sidebar view */
#zen-sidebar-web-panel-wrapper {
--zen-default-sidebar-width: 300px;
--zen-sidebar-web-panel-spacing: var(--zen-element-separation);
position: relative;
margin-right: 0;
display: flex;
pointer-events: none;
transition: width 0.3s ease-in-out;
}
#zen-sidebar-web-panel-wrapper:has(#zen-sidebar-web-panel[hidden='true']) {
max-width: 0;
padding: 0;
margin: 0;
display: none;
}
#zen-sidebar-web-panel-wrapper:has(#zen-sidebar-web-panel[pinned='true']) {
position: absolute;
z-index: 1;
width: calc(100% - var(--zen-sidebar-web-panel-spacing) * 3);
margin: var(--zen-sidebar-web-panel-spacing);
/* Why times 3?
* + 1 for the top margin, making the element overflow the view.
* + 1 for the margin we want to add at the bottom
* + 1 so that the panel can be correctly spaced from the border of the webview
*/
height: calc(100% - var(--zen-sidebar-web-panel-spacing) * 4);
}
#zen-sidebar-web-panel {
border-radius: var(--zen-native-inner-radius);
z-index: 2;
box-shadow: var(--zen-big-shadow);
background: var(--zen-colors-tertiary);
opacity: 0;
animation-delay: 0.1s;
flex-direction: column;
min-width: var(--zen-default-sidebar-width);
max-width: 720px;
min-height: var(--zen-default-sidebar-width);
width: calc(var(--zen-default-sidebar-width) + 200px);
pointer-events: all;
height: calc(100% - 20px);
}
#zen-sidebar-web-panel:not([pinned='true']) {
/* We need to always override the height */
height: unset !important;
}
.zen-sidebar-web-panel-splitter,
.zen-split-view-splitter[orient='vertical'],
#zen-sidebar-splitter {
position: absolute;
top: 0;
left: 0;
height: 100%;
width: var(--zen-element-separation);
background: transparent;
border: none;
cursor: ew-resize;
z-index: 3;
&:is(.zen-split-view-splitter[orient='vertical']) {
/* Bit of a hacky solution, but it works */
width: var(--zen-split-row-gap);
margin-left: calc(var(--zen-element-separation) * -1 - 1px);
height: unset;
cursor: ew-resize;
}
&::before {
height: 50px;
width: 2px;
background: var(--button-primary-bgcolor);
border-radius: 2px;
content: '';
position: absolute;
top: 50%;
left: 50%;
opacity: 0;
transition: opacity 0.1s ease-in-out;
pointer-events: none;
}
&:hover::before {
opacity: 1;
}
}
.zen-sidebar-web-panel-splitter[side='right'] {
left: 100%;
}
.zen-sidebar-web-panel-splitter[side='left'] {
right: 100%;
}
.zen-sidebar-web-panel-splitter[orient='horizontal'] {
width: 100%;
height: 7px;
cursor: ns-resize;
&::before {
display: none;
}
}
.zen-sidebar-web-panel-splitter[side='bottom'] {
top: initial;
bottom: -2px;
}
#zen-sidebar-web-panel[hidden='true'] .zen-sidebar-web-panel-splitter,
#zen-sidebar-web-panel-wrapper[hidden='true'] + .zen-sidebar-web-panel-splitter,
#zen-sidebar-web-panel:not([pinned='true']) .zen-sidebar-web-panel-splitter[orient='horizontal'],
#zen-sidebar-web-panel:not([pinned='true']) .zen-sidebar-web-panel-splitter[side='left'] {
display: none;
margin: 0;
}
#main-window[customizing='true'] #zen-sidebar-web-panel-wrapper {
display: none !important;
}
#zen-sidebar-web-panel:not([hidden='true']) {
display: flex;
}
#zen-sidebar-web-panel[pinned='true'] {
position: absolute;
z-index: 1;
max-height: 100%;
}
#zen-sidebar-web-panel[hidden='true'][pinned='true'] {
display: flex;
pointer-events: none;
}
#zen-sidebar-web-header,
#zen-sidebar-panels-wrapper {
width: 100%;
min-height: var(--zen-toolbar-height) !important;
display: flex;
align-items: center;
padding: 0 5px;
border: var(--zen-appcontent-border);
border-width: 0 !important;
border-bottom-width: 1px !important;
background: transparent;
position: relative;
color-scheme: var(--toolbar-color-scheme);
-moz-window-dragging: no-drag;
--toolbarbutton-inner-padding: var(--zen-toolbar-button-inner-padding) !important;
}
#zen-sidebar-web-header {
justify-content: space-between;
}
#zen-sidebar-web-header toolbarbutton {
fill: color-mix(in srgb, var(--toolbarbutton-icon-fill) 70%, transparent);
}
#zen-sidebar-panels-wrapper {
border-top-width: 1px !important;
border-bottom-width: 0px !important;
}
#zen-sidebar-web-panel-browser-containers {
height: 100%;
position: relative;
}
#zen-sidebar-introduction-panel {
height: 100%;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
margin: 0 auto;
width: 70%;
}
#zen-sidebar-introduction-panel[hidden='true'] {
display: none;
}
#zen-sidebar-introduction-panel h1 {
font-size: 1.5em;
font-weight: 600;
margin: 0;
margin-bottom: 2px;
}
#zen-sidebar-introduction-panel p {
opacity: 0.7;
text-align: center;
}
#zen-sidebar-web-panel browser[zen-sidebar-id] {
height: 100%;
}
#zen-sidebar-web-panel-title {
font-size: 0.9em;
font-weight: 600;
margin: 0 10px;
padding: 0;
color: var(--text-color-deemphasized);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
width: -moz-available;
text-align: center;
display: block;
}
#zen-sidebar-web-panel[pinned] {
transform-origin: 50% 20%;
}
#zen-sidebar-web-panel[pinned]:not([hidden]) {
animation: better-sidebar-pinned-show 0.15s ease-in-out forwards !important;
}
#zen-sidebar-web-panel[pinned][hidden] {
animation: better-sidebar-pinned-hide 0.15s ease-in-out forwards !important;
}
/** UNPINNED **/
#zen-sidebar-web-panel {
/* Sets perspective */
transform-origin: 50% 20%;
}
#zen-sidebar-web-panel:not([hidden]) #zen-sidebar-introduction-panel * {
opacity: 0;
animation: better-sidebar-intro-show 0.5s 0.4s ease-out forwards !important;
}
#zen-sidebar-web-panel:not([hidden]) #zen-sidebar-introduction-panel p {
animation: better-sidebar-intro-show 0.5s 0.8s ease-out forwards !important;
}
#zen-sidebar-web-panel:not([hidden]) {
animation: better-sidebar-show 0.15s ease-in-out forwards !important;
}
#zen-sidebar-web-panel[hidden] {
animation: better-sidebar-hide 0.15s ease-in-out forwards !important;
}

View File

@@ -1,19 +0,0 @@
/*
* 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/.
*/
/* Styles for both vertical and horizontal tabs */
@import url('chrome://browser/content/zen-styles/zen-tabs/vertical-tabs.css');
@import url('chrome://browser/content/zen-styles/zen-tabs/horizontal-tabs.css');
#zen-tabbox-wrapper {
position: relative;
z-index: 0;
}
@media -moz-pref('zen.workspaces.hide-default-container-indicator') {
.tabbrowser-tab[zenDefaultUserContextId='true'] .tab-context-line {
display: none !important;
}
}

View File

@@ -1,335 +0,0 @@
/*
* 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/.
*/
@media not -moz-pref('zen.tabs.vertical') {
:root #browser {
display: flex !important;
flex-direction: column !important;
}
& #navigator-toolbox {
display: flex !important;
flex-direction: row !important;
max-width: unset !important;
min-width: unset !important;
width: 100% !important;
padding: var(--zen-toolbox-padding) !important;
}
#tabbrowser-tabs {
display: -webkit-box !important;
-webkit-box-orient: horizontal;
-webkit-box-pack: start;
max-width: 10000px !important;
--tabstrip-min-height: calc(var(--tab-min-height) - 4 * var(--tab-block-margin));
--tab-min-height: 10px !important;
}
.vertical-pinned-tabs-container-separator {
display: none !important;
}
#zen-essentials-container,
#vertical-pinned-tabs-container,
#tabbrowser-arrowscrollbox {
-webkit-box-flex: 1;
}
#vertical-pinned-tabs-container:empty {
-webkit-box-flex: 0 !important;
width: 0 !important;
padding: 0 !important;
margin: 0 !important;
border: none !important;
visibility: collapse !important;
}
#navigator-toolbox {
flex-direction: row !important;
align-items: center;
}
#titlebar {
flex-direction: row !important;
width: 100%;
height: 36px !important;
}
#zen-essentials-container {
--tab-min-height: 36px !important;
display: flex !important;
flex-direction: row !important;
padding-inline-end: 0 !important;
}
#vertical-pinned-tabs-container {
display: flex !important;
flex-direction: row !important;
padding-inline-end: 0 !important;
}
#zen-essentials-container .tabbrowser-tab {
width: 0% !important;
}
#vertical-pinned-tabs-container .tabbrowser-tab {
width: 0% !important;
}
.tabbrowser-tab[zen-glance-tab='true'] {
.tab-label-container {
display: none !important;
width: 0px !important;
max-width: 0px !important;
}
}
#tabbrowser-arrowscrollbox {
display: flex !important;
max-width: -moz-available;
overflow: hidden !important;
}
#TabsToolbar {
flex-direction: row !important;
gap: 8px;
overflow: hidden !important;
display: flex !important;
}
#TabsToolbar-customization-target {
flex-direction: row !important;
}
#tabbrowser-tabs[orient='vertical'] {
flex-direction: row !important;
}
tabs {
flex-direction: row !important;
}
#zen-essentials-container {
container-name: tab-container;
container-type: normal;
max-width: 36px !important;
flex: 1 1 36px !important;
}
#vertical-pinned-tabs-container {
container-name: tab-container;
container-type: normal;
max-width: 36px !important;
min-width: 36px !important;
flex: 1 1 36px !important;
}
#vertical-pinned-tabs-container .tab-close-button {
display: none !important;
}
#vertical-pinned-tabs-container .tab-reset-button {
display: none !important;
}
#vertical-pinned-tabs-container .tab-label-container {
display: none !important;
}
#vertical-pinned-tabs-container .tab-icon-image {
margin: 0 !important;
}
.tabbrowser-tab {
container-name: tab-container;
container-type: normal;
min-width: 40px !important;
flex: 1 1 150px !important;
width: -moz-available;
&:is(:hover, [visuallyselected]) .tab-close-button {
display: block;
--tab-inline-padding: 0; /* Avoid weird padding */
margin-inline-end: 0 !important;
}
}
.tabbrowser-tab[selected] {
flex: 2 0 150px !important;
}
@container tab-container (max-width: 80px) {
.tab-close-button {
margin-right: 0px !important;
}
.tab-icon-image {
padding: 0 !important;
margin-left: min(2.5px, 5%) !important;
margin-right: min(10px, 5%) !important;
}
.tab-label-container,
.tab-content {
margin: 0 !important;
padding-left: min(8px, 5%) !important;
padding-right: min(8px, 5%) !important;
}
}
@container tab-container (max-width: 44px) {
.tab-label-container {
display: none !important;
}
.tab-content {
justify-content: space-around !important;
}
.tab-close-button {
display: none !important;
}
.tabbrowser-tab[selected] {
& .tab-icon-image,
.tab-icon-stack {
display: none !important;
}
& .tab-content {
justify-content: space-around !important;
padding: 0 !important;
}
.tab-close-button {
display: block !important;
}
}
}
#vertical-pinned-tabs-container::after {
z-index: -1;
content: '';
position: absolute;
right: 0;
width: 1px;
height: 45%;
top: 50%;
transform: translateY(-50%);
background: hsl(255, 10%, 100%);
}
/* Other UI Elements */
.zen-current-workspace-indicator {
display: none !important;
}
#zen-sidebar-splitter {
display: none !important;
}
#tabbrowser-tabpanels {
padding-left: var(--zen-element-separation) !important;
}
#appcontent * {
overflow: visible !important;
}
#TabsToolbar-customization-target::after {
display: none !important;
}
#zen-sidebar-bottom-buttons {
width: auto !important;
padding: 0 !important;
}
/* Height Adjustments */
#vertical-pinned-tabs-container,
#zen-essentials-container,
#tabbrowser-arrowscrollbox {
max-height: none !important;
}
#PanelUI-zen-gradient-generator {
min-width: 390px !important;
}
#zen-essentials-container:not(:empty),
#vertical-pinned-tabs-container:not(:empty),
#tabbrowser-arrowscrollbox {
-webkit-box-flex: 1;
min-width: min-content;
width: auto !important;
}
#vertical-pinned-tabs-container:not(:empty) {
display: -webkit-box !important;
-webkit-box-orient: horizontal;
min-width: fit-content !important;
width: fit-content !important;
position: relative;
margin-right: -1px !important;
}
#vertical-pinned-tabs-container:not(:empty) .tabbrowser-tab {
position: relative;
display: -webkit-box !important;
}
#tabbrowser-arrowscrollbox {
margin-left: 0 !important;
}
#vertical-pinned-tabs-container:empty,
#zen-essentials-container:empty {
-webkit-box-flex: 0 !important;
width: 0 !important;
min-width: 0 !important;
padding: 0 !important;
margin: 0 !important;
border: none !important;
visibility: collapse !important;
}
#nav-bar {
width: unset !important;
min-width: 500px !important;
}
#tabbrowser-arrowscrollbox-periphery {
margin: 0 !important;
}
hbox#nav-bar-customization-target toolbarbutton.chromeclass-toolbar-additional:nth-of-type(1) {
padding-inline-start: var(--toolbar-start-end-padding) !important;
}
toolbar#PersonalToolbar {
padding-left: 6px !important;
}
.tab-context-line {
width: 100% !important;
height: 3px !important;
}
.tabbrowser-tab[zen-glance-tab='true'] {
flex-basis: fit-content !important;
max-width: 36px !important;
}
#zen-essentials-container .tabbrowser-tab[zen-glance-tab='true'] {
left: 2px;
}
#vertical-pinned-tabs-container .tabbrowser-tab[zen-glance-tab='true'] {
position: absolute !important;
}
#TabsToolbar-customization-target toolbarbutton,
#TabsToolbar-customization-target toolbarpaletteitem {
-webkit-box-flex: 0 !important;
min-width: min-content;
width: auto !important;
.toolbarbutton-text {
display: none !important;
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,2 +1,2 @@
#include zen-splitview-overlay.inc.xhtml
#include zen-glance.inc.xhtml
#include ../../../zen/split-view/zen-splitview-overlay.inc.xhtml
#include ../../../zen/glance/zen-glance.inc.xhtml

File diff suppressed because one or more lines are too long

View File

@@ -1,8 +1,8 @@
diff --git a/browser/base/jar.mn b/browser/base/jar.mn
index 824c5df20ee13af7af2ce8657506f6f3f457aafc..6ef49535676325768497c1804f91c9e93959199a 100644
index 4401c78d34007fa7481f8b8eeb070d17110821ae..064f14a7adf4ce1b98d58302998272444466c3ee 100644
--- a/browser/base/jar.mn
+++ b/browser/base/jar.mn
@@ -103,3 +103,5 @@ browser.jar:
@@ -105,3 +105,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/base/moz.build b/browser/base/moz.build
index 636e0841786735a63ddea00e819c0b6f0b8a5d4d..6685d857180944d68bf4f049919f81361084c481 100644
index 636e0841786735a63ddea00e819c0b6f0b8a5d4d..62e4531bd19caf098fd76c69b213fa32d62546a6 100644
--- a/browser/base/moz.build
+++ b/browser/base/moz.build
@@ -87,3 +87,5 @@ if CONFIG["MOZ_WIDGET_TOOLKIT"] in ("windows", "gtk"):
@@ -7,4 +7,4 @@ index 636e0841786735a63ddea00e819c0b6f0b8a5d4d..6685d857180944d68bf4f049919f8136
JAR_MANIFESTS += ["jar.mn"]
+
+DIRS += ["zen-components"]
+DIRS += ["../../zen"]

View File

@@ -1,533 +0,0 @@
class ZenMediaController {
_currentMediaController = null;
_currentBrowser = null;
_mediaUpdateInterval = null;
mediaTitle = null;
mediaArtist = null;
mediaControlBar = null;
mediaProgressBar = null;
mediaCurrentTime = null;
mediaDuration = null;
mediaFocusButton = null;
mediaProgressBarContainer = null;
supportedKeys = ['playpause', 'previoustrack', 'nexttrack'];
pipEligibilityMap = new Map();
mediaControllersMap = new Map();
_tabTimeout = null;
_controllerSwitchTimeout = null;
init() {
if (!Services.prefs.getBoolPref('zen.mediacontrols.enabled', true)) return;
this.mediaTitle = document.querySelector('#zen-media-title');
this.mediaArtist = document.querySelector('#zen-media-artist');
this.mediaControlBar = document.querySelector('#zen-media-controls-toolbar');
this.mediaProgressBar = document.querySelector('#zen-media-progress-bar');
this.mediaCurrentTime = document.querySelector('#zen-media-current-time');
this.mediaDuration = document.querySelector('#zen-media-duration');
this.mediaFocusButton = document.querySelector('#zen-media-focus-button');
this.mediaProgressBarContainer = document.querySelector('#zen-media-progress-hbox');
this.onPositionstateChange = this._onPositionstateChange.bind(this);
this.onPlaybackstateChange = this._onPlaybackstateChange.bind(this);
this.onSupportedKeysChange = this._onSupportedKeysChange.bind(this);
this.onMetadataChange = this._onMetadataChange.bind(this);
this.onDeactivated = this._onDeactivated.bind(this);
this.onPipModeChange = this._onPictureInPictureModeChange.bind(this);
this.#initEventListeners();
}
#initEventListeners() {
this.mediaControlBar.addEventListener('command', (event) => {
const button = event.target.closest('toolbarbutton');
if (!button) return;
switch (button.id) {
case 'zen-media-pip-button':
this.onMediaPip();
break;
case 'zen-media-close-button':
this.onControllerClose();
break;
case 'zen-media-focus-button':
this.onMediaFocus();
break;
case 'zen-media-mute-button':
this.onMediaMute();
break;
case 'zen-media-previoustrack-button':
this.onMediaPlayPrev();
break;
case 'zen-media-nexttrack-button':
this.onMediaPlayNext();
break;
case 'zen-media-playpause-button':
this.onMediaToggle();
break;
}
});
this.mediaProgressBar.addEventListener('input', this.onMediaSeekDrag.bind(this));
this.mediaProgressBar.addEventListener('change', this.onMediaSeekComplete.bind(this));
window.addEventListener('TabSelect', (event) => {
const linkedBrowser = event.target.linkedBrowser;
this.switchController();
if (this._currentBrowser) {
if (linkedBrowser.browserId === this._currentBrowser.browserId) {
if (this._tabTimeout) {
clearTimeout(this._tabTimeout);
this._tabTimeout = null;
}
this.hideMediaControls();
} else {
this._tabTimeout = setTimeout(() => {
if (!this.mediaControlBar.hasAttribute('pip')) this.showMediaControls();
else this._tabTimeout = null;
}, 500);
}
}
});
const onTabDiscardedOrClosed = this.onTabDiscardedOrClosed.bind(this);
window.addEventListener('TabClose', onTabDiscardedOrClosed);
window.addEventListener('DOMAudioPlaybackStarted', (event) => {
setTimeout(() => {
if (
this._currentMediaController?.isPlaying &&
this.mediaControlBar.hasAttribute('hidden') &&
!this.mediaControlBar.hasAttribute('pip')
) {
const { selectedBrowser } = gBrowser;
if (selectedBrowser.browserId !== this._currentBrowser.browserId) {
this.showMediaControls();
}
}
}, 1000);
this.activateMediaControls(event.target.browsingContext.mediaController, event.target);
});
window.addEventListener('DOMAudioPlaybackStopped', () => this.updateMuteState());
}
onTabDiscardedOrClosed(event) {
const linkedBrowser = event.target.linkedBrowser;
if (!linkedBrowser?.browsingContext?.mediaController) return;
this.deinitMediaController(
linkedBrowser.browsingContext.mediaController,
true,
linkedBrowser.browserId === this._currentBrowser?.browserId,
true
);
}
async deinitMediaController(mediaController, shouldForget = true, shouldOverride = true, shouldHide = true) {
if (!mediaController) return;
const retrievedMediaController = this.mediaControllersMap.get(mediaController.id);
if (shouldForget) {
mediaController.removeEventListener('pictureinpicturemodechange', this.onPipModeChange);
mediaController.removeEventListener('positionstatechange', this.onPositionstateChange);
mediaController.removeEventListener('playbackstatechange', this.onPlaybackstateChange);
mediaController.removeEventListener('supportedkeyschange', this.onSupportedKeysChange);
mediaController.removeEventListener('metadatachange', this.onMetadataChange);
mediaController.removeEventListener('deactivated', this.onDeactivated);
this.mediaControllersMap.delete(mediaController.id);
this.pipEligibilityMap.delete(retrievedMediaController?.browser?.browserId);
}
if (shouldOverride) {
this._currentMediaController = null;
this._currentBrowser = null;
if (this._mediaUpdateInterval) {
clearInterval(this._mediaUpdateInterval);
this._mediaUpdateInterval = null;
}
if (shouldHide) await this.hideMediaControls();
this.mediaControlBar.removeAttribute('muted');
this.mediaControlBar.classList.remove('playing');
}
}
hideMediaControls() {
if (this.mediaControlBar.hasAttribute('hidden')) return;
return gZenUIManager.motion
.animate(
this.mediaControlBar,
{
opacity: [1, 0],
y: [0, 10],
},
{
duration: 0.1,
}
)
.then(() => {
this.mediaControlBar.setAttribute('hidden', 'true');
gZenUIManager.updateTabsToolbar();
gZenUIManager.restoreScrollbarState();
});
}
showMediaControls() {
if (!this._currentMediaController) return;
if (this._currentMediaController.isBeingUsedInPIPModeOrFullscreen) return this.hideMediaControls();
if (!this.mediaControlBar.hasAttribute('hidden')) return;
this.updatePipButton();
const mediaInfoElements = [this.mediaTitle, this.mediaArtist];
for (const element of mediaInfoElements) {
element.removeAttribute('overflow'); // So we can properly recalculate the overflow
}
this.mediaControlBar.removeAttribute('hidden');
window.requestAnimationFrame(() => {
this.mediaControlBar.style.height =
this.mediaControlBar.querySelector('toolbaritem').getBoundingClientRect().height + 'px';
this.mediaControlBar.style.opacity = 0;
gZenUIManager.updateTabsToolbar();
gZenUIManager.restoreScrollbarState();
gZenUIManager.motion.animate(
this.mediaControlBar,
{
opacity: [0, 1],
y: [10, 0],
},
{}
);
this.addLabelOverflows(mediaInfoElements);
});
}
addLabelOverflows(elements) {
for (const element of elements) {
const parent = element.parentElement;
if (element.scrollWidth > parent.clientWidth) {
element.setAttribute('overflow', '');
} else {
element.removeAttribute('overflow');
}
}
}
setupMediaController(mediaController, browser) {
this._currentMediaController = mediaController;
this._currentBrowser = browser;
this.updatePipButton();
}
setupMediaControlUI(metadata, positionState) {
this.updatePipButton();
if (!this.mediaControlBar.classList.contains('playing') && this._currentMediaController.isPlaying) {
this.mediaControlBar.classList.add('playing');
}
const iconURL = this._currentBrowser.mIconURL || `page-icon:${this._currentBrowser.currentURI.spec}`;
this.mediaFocusButton.style.listStyleImage = `url(${iconURL})`;
this.mediaTitle.textContent = metadata.title || '';
this.mediaArtist.textContent = metadata.artist || '';
gZenUIManager.updateTabsToolbar();
gZenUIManager.restoreScrollbarState();
this._currentPosition = positionState.position;
this._currentDuration = positionState.duration;
this._currentPlaybackRate = positionState.playbackRate;
this.updateMediaPosition();
for (const key of this.supportedKeys) {
const button = this.mediaControlBar.querySelector(`#zen-media-${key}-button`);
button.disabled = !this._currentMediaController.supportedKeys.includes(key);
}
}
activateMediaControls(mediaController, browser) {
this.updateMuteState();
this.switchController();
if (!mediaController.isActive || this._currentBrowser?.browserId === browser.browserId) return;
const metadata = mediaController.getMetadata();
const positionState = mediaController.getPositionState();
this.mediaControllersMap.set(mediaController.id, {
controller: mediaController,
browser,
position: positionState.position,
duration: positionState.duration,
playbackRate: positionState.playbackRate,
lastUpdated: Date.now(),
});
if (!this._currentBrowser) {
this.setupMediaController(mediaController, browser);
this.setupMediaControlUI(metadata, positionState);
}
mediaController.addEventListener('pictureinpicturemodechange', this.onPipModeChange);
mediaController.addEventListener('positionstatechange', this.onPositionstateChange);
mediaController.addEventListener('playbackstatechange', this.onPlaybackstateChange);
mediaController.addEventListener('supportedkeyschange', this.onSupportedKeysChange);
mediaController.addEventListener('metadatachange', this.onMetadataChange);
mediaController.addEventListener('deactivated', this.onDeactivated);
}
updatePipEligibility(browser, isEligible) {
this.pipEligibilityMap.set(browser.browserId, isEligible);
}
_onDeactivated(event) {
this.deinitMediaController(event.target, true, event.target.id === this._currentMediaController.id, true);
this.switchController();
}
_onPlaybackstateChange() {
if (this._currentMediaController?.isPlaying) {
this.mediaControlBar.classList.add('playing');
} else {
this.switchController();
this.mediaControlBar.classList.remove('playing');
}
}
_onSupportedKeysChange(event) {
if (event.target.id !== this._currentMediaController?.id) return;
for (const key of this.supportedKeys) {
const button = this.mediaControlBar.querySelector(`#zen-media-${key}-button`);
button.disabled = !event.target.supportedKeys.includes(key);
}
}
_onPositionstateChange(event) {
const mediaController = this.mediaControllersMap.get(event.target.id);
this.mediaControllersMap.set(event.target.id, {
...mediaController,
position: event.position,
duration: event.duration,
playbackRate: event.playbackRate,
lastUpdated: Date.now(),
});
if (event.target.id !== this._currentMediaController?.id) return;
this._currentPosition = event.position;
this._currentDuration = event.duration;
this._currentPlaybackRate = event.playbackRate;
this.updateMediaPosition();
}
switchController(force = false) {
let timeout = 3000;
if (this._controllerSwitchTimeout) {
clearTimeout(this._controllerSwitchTimeout);
this._controllerSwitchTimeout = null;
}
if (this.mediaControllersMap.size === 1) timeout = 0;
this._controllerSwitchTimeout = setTimeout(() => {
if (!this._currentMediaController?.isPlaying || force) {
const nextController = Array.from(this.mediaControllersMap.values())
.filter(
(ctrl) =>
ctrl.controller.isPlaying &&
gBrowser.selectedBrowser.browserId !== ctrl.browser.browserId &&
ctrl.controller.id !== this._currentMediaController?.id
)
.sort((a, b) => b.lastUpdated - a.lastUpdated)
.shift();
if (nextController) {
this.deinitMediaController(this._currentMediaController, false, true).then(() => {
this.setupMediaController(nextController.controller, nextController.browser);
const elapsedTime = Math.floor((Date.now() - nextController.lastUpdated) / 1000);
this.setupMediaControlUI(nextController.controller.getMetadata(), {
position: nextController.position + (nextController.controller.isPlaying ? elapsedTime : 0),
duration: nextController.duration,
playbackRate: nextController.playbackRate,
});
this.showMediaControls();
});
}
}
this._controllerSwitchTimeout = null;
}, timeout);
}
updateMediaPosition() {
if (this._mediaUpdateInterval) {
clearInterval(this._mediaUpdateInterval);
this._mediaUpdateInterval = null;
}
if (this._currentDuration >= 900_000) return this.mediaControlBar.setAttribute('media-position-hidden', 'true');
else this.mediaControlBar.removeAttribute('media-position-hidden');
if (!this._currentDuration) return;
this.mediaCurrentTime.textContent = this.formatSecondsToTime(this._currentPosition);
this.mediaDuration.textContent = this.formatSecondsToTime(this._currentDuration);
this.mediaProgressBar.value = (this._currentPosition / this._currentDuration) * 100;
this._mediaUpdateInterval = setInterval(() => {
if (this._currentMediaController?.isPlaying) {
this._currentPosition += 1 * this._currentPlaybackRate;
if (this._currentPosition > this._currentDuration) {
this._currentPosition = this._currentDuration;
}
this.mediaCurrentTime.textContent = this.formatSecondsToTime(this._currentPosition);
this.mediaProgressBar.value = (this._currentPosition / this._currentDuration) * 100;
} else {
clearInterval(this._mediaUpdateInterval);
this._mediaUpdateInterval = null;
}
}, 1000);
}
formatSecondsToTime(seconds) {
if (!seconds || isNaN(seconds)) return '0:00';
const totalSeconds = Math.max(0, Math.ceil(seconds));
const hours = Math.floor(totalSeconds / 3600);
const minutes = Math.floor((totalSeconds % 3600) / 60).toString();
const secs = (totalSeconds % 60).toString();
if (hours > 0) {
return `${hours}:${minutes.padStart(2, '0')}:${secs.padStart(2, '0')}`;
}
return `${minutes}:${secs.padStart(2, '0')}`;
}
_onMetadataChange(event) {
if (event.target.id !== this._currentMediaController?.id) return;
this.updatePipButton();
const metadata = event.target.getMetadata();
this.mediaTitle.textContent = metadata.title || '';
this.mediaArtist.textContent = metadata.artist || '';
const mediaInfoElements = [this.mediaTitle, this.mediaArtist];
for (const element of mediaInfoElements) {
element.removeAttribute('overflow');
}
this.addLabelOverflows(mediaInfoElements);
}
_onPictureInPictureModeChange(event) {
if (event.target.id !== this._currentMediaController?.id) return;
if (event.target.isBeingUsedInPIPModeOrFullscreen) {
this.hideMediaControls();
this.mediaControlBar.setAttribute('pip', '');
} else {
const { selectedBrowser } = gBrowser;
if (selectedBrowser.browserId !== this._currentBrowser.browserId) {
this.showMediaControls();
}
this.mediaControlBar.removeAttribute('pip');
}
}
onMediaPlayPrev() {
if (this._currentMediaController?.supportedKeys.includes('previoustrack')) {
this._currentMediaController.prevTrack();
}
}
onMediaPlayNext() {
if (this._currentMediaController?.supportedKeys.includes('nexttrack')) {
this._currentMediaController.nextTrack();
}
}
onMediaSeekDrag(event) {
this._currentMediaController?.pause();
const newTime = (event.target.value / 100) * this._currentDuration;
this.mediaCurrentTime.textContent = this.formatSecondsToTime(newTime);
}
onMediaSeekComplete(event) {
const newPosition = (event.target.value / 100) * this._currentDuration;
if (this._currentMediaController?.supportedKeys.includes('seekto')) {
this._currentMediaController.seekTo(newPosition);
this._currentMediaController.play();
}
}
onMediaFocus() {
if (!this._currentBrowser) return;
this._currentMediaController?.focus();
}
onMediaMute() {
if (!this.mediaControlBar.hasAttribute('muted')) {
this._currentBrowser.mute();
this.mediaControlBar.setAttribute('muted', '');
} else {
this._currentBrowser.unmute();
this.mediaControlBar.removeAttribute('muted');
}
}
onMediaToggle() {
if (this.mediaControlBar.classList.contains('playing')) {
this._currentMediaController?.pause();
} else {
this._currentMediaController?.play();
}
}
onControllerClose() {
this._currentMediaController?.pause();
this.switchController(true);
this.deinitMediaController(this._currentMediaController);
}
onMediaPip() {
this._currentBrowser.browsingContext.currentWindowGlobal
.getActor('PictureInPictureLauncher')
.sendAsyncMessage('PictureInPicture:KeyToggle');
}
updateMuteState() {
if (!this._currentBrowser) return;
if (this._currentBrowser._audioMuted) {
this.mediaControlBar.setAttribute('muted', '');
} else {
this.mediaControlBar.removeAttribute('muted');
}
}
updatePipButton() {
if (!this._currentBrowser) return;
const isPipEligible = this.pipEligibilityMap.get(this._currentBrowser.browserId);
if (isPipEligible) this.mediaControlBar.setAttribute('can-pip', '');
else this.mediaControlBar.removeAttribute('can-pip');
}
}
window.gZenMediaController = new ZenMediaController();

View File

@@ -1,428 +0,0 @@
{
const ZEN_RICE_API = Services.prefs.getStringPref('zen.rice.api.url', '');
class ZenRiceCollector {
constructor() {}
clear() {
this._userChrome = null;
this._userContent = null;
this._enabledMods = null;
this._preferences = null;
this._workspaceThemes = null;
}
async gatherAll({
userUserChrome = true,
userContent = true,
enabledMods = true,
preferences = true,
modPrefs = true,
workspaceThemes = true,
} = {}) {
this.clear();
// Get the mods first, as they may be needed for the preferences
if (enabledMods) {
await this.gatherEnabledMods();
}
await Promise.all([
userUserChrome && this.gatherUserChrome(),
userContent && this.gatherUserContent(),
preferences && this.gatherPreferences({ modPrefs }),
workspaceThemes && this.gatherWorkspaceThemes(),
]);
}
get profileDir() {
return PathUtils.profileDir;
}
async gatherUserChrome() {
try {
const path = PathUtils.join(this.profileDir, 'chrome', 'userChrome.css');
this._userChrome = await IOUtils.readUTF8(path);
} catch (e) {
console.warn('[ZenRiceCollector]: Error reading userChrome.css: ', e);
return null;
}
}
async gatherUserContent() {
try {
const path = PathUtils.join(this.profileDir, 'chrome', 'userContent.css');
this._userContent = await IOUtils.readUTF8(path);
} catch (e) {
console.warn('[ZenRiceCollector]: Error reading userContent.css: ', e);
return null;
}
}
async gatherEnabledMods() {
const activeThemes = await gZenThemesImporter.getEnabledThemes();
if (activeThemes.length === 0) {
return;
}
this._enabledMods = activeThemes;
}
_getThemePrefValue(theme, pref) {
if (pref.type === 'checkbox') {
return Services.prefs.getBoolPref(pref.property);
}
return Services.prefs.getStringPref(pref.property);
}
async gatherPreferences({ modPrefs = true } = {}) {
this._preferences = {};
if (modPrefs && this._enabledMods) {
for (const theme of this._enabledMods) {
const prefs = await ZenThemesCommon.getThemePreferences(theme);
for (const pref of prefs) {
this._preferences[pref.property] = this._getThemePrefValue(theme, pref);
}
}
}
const boolPrefsToCollect = [
'zen.view.use-single-toolbar',
'zen.view.sidebar-expanded',
'zen.tabs.vertical.right-side',
'zen.view.experimental-no-window-controls',
'zen.view.hide-window-controls',
...(gZenOperatingSystemCommonUtils.currentOperatingSystem === 'windows' ? ['widget.windows.mica'] : []),
...(gZenOperatingSystemCommonUtils.currentOperatingSystem === 'macos'
? ['widget.macos.titlebar-blend-mode.behind-window']
: []),
];
const stringPrefsToCollect = ['browser.uiCustomization.state'];
for (const pref of boolPrefsToCollect) {
this._preferences[pref] = Services.prefs.getBoolPref(pref);
}
for (const pref of stringPrefsToCollect) {
this._preferences[pref] = Services.prefs.getStringPref(pref);
}
}
async gatherWorkspaceThemes() {
const workspaces = (await ZenWorkspaces._workspaces()).workspaces;
this._workspaceThemes = workspaces.map((w) => w.theme);
}
async packRice(...args) {
await this.gatherAll(...args);
const rice = {
userChrome: this._userChrome,
userContent: this._userContent,
enabledMods: this._enabledMods?.map((t) => t.id),
preferences: this._preferences,
workspaceThemes: this._workspaceThemes,
};
return rice;
}
}
class ZenRiceManager {
constructor() {
this._collector = new ZenRiceCollector();
}
init() {}
get conffettiWrapper() {
if (!this.confetti) {
Services.scriptloader.loadSubScript('chrome://browser/content/zen-vendor/tsparticles.confetti.bundle.min.js', this);
}
return this.confetti;
}
async packRice() {
return await this._collector.packRice();
}
get shareDialog() {
if (this._shareDialog) {
return this._shareDialog;
}
this._shareDialog = window.MozXULElement.parseXULToFragment(`
<vbox id="zen-rice-share-dialog-overlay" hidden="true">
<vbox id="zen-rice-share-dialog-notice">
<h1 data-l10n-id="zen-rice-share-notice" />
<p data-l10n-id="zen-rice-share-notice-description" />
<html:moz-button-group class="panel-footer">
<html:a href="https://docs.zen-browser.app/guides/" target="_blank" data-l10n-id="zen-learn-more-text" onclick="gZenThemePicker.riceManager.openLink(event)" />
<button onclick="gZenThemePicker.riceManager.acceptNotice()" class="footer-button" data-l10n-id="zen-rice-share-accept" slot="primary" default="true" />
</html:moz-button-group>
</vbox>
<vbox id="zen-rice-share-dialog" hidden="true">
<html:img src="chrome://browser/content/zen-images/brand-header.svg" class="zen-rice-share-header" />
<hbox class="zen-rice-share-content">
<vbox id="zen-rice-share-first-form">
<html:input type="text" data-l10n-id="zen-rice-share-name" id="zen-rice-share-name" oninput="gZenThemePicker.riceManager.validateShareDialog()" />
<hbox class="zen-rice-share-author">
<label data-l10n-id="zen-rice-share-author" />
<html:input type="text" data-l10n-id="zen-rice-share-author-input" id="zen-rice-share-author" oninput="gZenThemePicker.riceManager.validateShareDialog();" />
</hbox>
<vbox zen-collapsed="true" id="zen-rice-share-options" onclick="gZenThemePicker.riceManager.toggleOptions(event)">
<hbox class="options-header">
<label data-l10n-id="zen-rice-share-include" />
<image></image>
</hbox>
<checkbox data-l10n-id="zen-rice-share-include-userchrome" id="zen-rice-share-include-userchrome" />
<checkbox data-l10n-id="zen-rice-share-include-usercontent" id="zen-rice-share-include-usercontent" />
<checkbox data-l10n-id="zen-rice-share-include-mods" id="zen-rice-share-include-mods" />
<vbox class="indent">
<checkbox data-l10n-id="zen-rice-share-include-mod-prefs" id="zen-rice-share-include-mod-prefs" />
</vbox>
<checkbox data-l10n-id="zen-rice-share-include-preferences" id="zen-rice-share-include-preferences" />
<checkbox data-l10n-id="zen-rice-share-include-workspace-themes" id="zen-rice-share-include-workspace-themes" />
</vbox>
<html:moz-button-group class="panel-footer">
<button onclick="gZenThemePicker.riceManager.cancel()" class="footer-button" data-l10n-id="zen-general-cancel" />
<button onclick="gZenThemePicker.riceManager.submit()" class="footer-button" data-l10n-id="zen-rice-share-save" default="true" slot="primary" id="zen-rice-share-save" disabled="true" />
</html:moz-button-group>
</vbox>
<vbox id="zen-rice-share-second-form" hidden="true">
<hbox></hbox>
<vbox id="zen-rice-share-error" hidden="true">
<label data-l10n-id="zen-rice-share-error" />
<button onclick="gZenThemePicker.riceManager.resetShareDialog()" data-l10n-id="zen-close-label" class="footer-button" />
</vbox>
</vbox>
<vbox id="zen-rice-share-success" hidden="true">
<h1 data-l10n-id="zen-rice-share-success" />
<p data-l10n-id="zen-rice-share-succes-details" />
<label data-l10n-id="zen-rice-share-success-link" />
<html:input type="text" readonly="true" id="zen-rice-share-success-link" onclick="this.select()" />
<html:moz-button-group class="panel-footer">
<button onclick="gZenThemePicker.riceManager.resetShareDialog()" data-l10n-id="zen-close-label" class="footer-button" slot="primary" default="true" />
</html:moz-button-group>
</vbox>
</hbox>
</vbox>
</vbox>
`);
document.getElementById('zen-main-app-wrapper').appendChild(this._shareDialog);
this._shareDialog = document.getElementById('zen-rice-share-dialog-overlay');
return this._shareDialog;
}
get hasAcceptedNotice() {
return Services.prefs.getBoolPref('zen.rice.share.notice.accepted', false);
}
set hasAcceptedNotice(value) {
Services.prefs.setBoolPref('zen.rice.share.notice.accepted', value);
}
openLink(event) {
event.stopPropagation();
this.cancel();
gZenUIManager.openAndChangeToTab('https://docs.zen-browser.app/guides/');
}
acceptNotice() {
this.hasAcceptedNotice = true;
const notice = document.getElementById('zen-rice-share-dialog-notice');
notice.setAttribute('hidden', 'true');
this.openShareDialog();
}
toggleOptions(event) {
if (event.originalTarget.closest('.options-header')) {
const options = document.getElementById('zen-rice-share-options');
options.setAttribute('zen-collapsed', options.getAttribute('zen-collapsed') === 'true' ? 'false' : 'true');
}
this.validateShareDialog();
}
openShareDialog() {
window.docShell.treeOwner.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIAppWindow).rollupAllPopups();
const dialog = this.shareDialog;
dialog.removeAttribute('hidden');
if (!this.hasAcceptedNotice) {
const notice = document.getElementById('zen-rice-share-dialog-notice');
notice.removeAttribute('hidden');
return;
}
document.getElementById('zen-rice-share-dialog').removeAttribute('hidden');
document.getElementById('zen-rice-share-dialog-notice').setAttribute('hidden', 'true');
document.getElementById('zen-rice-share-name').focus();
// Initialize the dialog with the current values
this.validateShareDialog();
}
resetShareDialog() {
const dialog = this.shareDialog;
dialog.setAttribute('hidden', 'true');
document.getElementById('zen-rice-share-dialog').removeAttribute('animate');
document.getElementById('zen-rice-share-name').value = '';
document.getElementById('zen-rice-share-author').value = '';
document.getElementById('zen-rice-share-save').disabled = true;
document.getElementById('zen-rice-share-first-form').removeAttribute('fade-out');
document.getElementById('zen-rice-share-second-form').setAttribute('hidden', 'true');
document.getElementById('zen-rice-share-second-form').removeAttribute('fade-out');
document.getElementById('zen-rice-share-error').setAttribute('hidden', 'true');
document.getElementById('zen-rice-share-success').setAttribute('hidden', 'true');
document.getElementById('zen-rice-share-options').setAttribute('zen-collapsed', 'true');
// Remove confetti module from memory
this.confetti = null;
}
cancel() {
this.resetShareDialog();
}
getAllowedRice() {
return {
userChrome: document.getElementById('zen-rice-share-include-userchrome').checked,
userContent: document.getElementById('zen-rice-share-include-usercontent').checked,
mods: document.getElementById('zen-rice-share-include-mods').checked,
modPrefs: document.getElementById('zen-rice-share-include-mod-prefs').checked,
preferences: document.getElementById('zen-rice-share-include-preferences').checked,
workspaceThemes: document.getElementById('zen-rice-share-include-workspace-themes').checked,
};
}
get userAgent() {
return `ZenBrowser/${Services.appinfo.version} (${gZenOperatingSystemCommonUtils.currentOperatingSystem})`;
}
canShareRice() {
const allowedRice = this.getAllowedRice();
const modsPrefs = document.getElementById('zen-rice-share-include-mod-prefs');
// remove "share mod prefs" if mods are not included
if (!allowedRice.mods) {
allowedRice.modPrefs = false;
modsPrefs.disabled = true;
}
modsPrefs.disabled = !allowedRice.mods;
return Object.values(allowedRice).some((v) => v);
}
validateShareDialog() {
const saveButton = document.getElementById('zen-rice-share-save');
const authorInput = document.getElementById('zen-rice-share-author');
const input = document.getElementById('zen-rice-share-name');
saveButton.disabled =
!this.canShareRice() ||
input.value.trim().length < 3 ||
input.value.trim().length > 30 ||
authorInput.value.trim().length < 3 ||
authorInput.value.trim().length > 15;
}
async submit() {
const firstForm = document.getElementById('zen-rice-share-first-form');
const secondForm = document.getElementById('zen-rice-share-second-form');
firstForm.setAttribute('fade-out', 'true');
secondForm.removeAttribute('hidden');
await this._submit();
}
async _submit() {
const allowedRice = this.getAllowedRice();
const rice = await this._collector.packRice(allowedRice);
const name = document.getElementById('zen-rice-share-name').value;
const author = document.getElementById('zen-rice-share-author').value;
const response = await this._sendRice({ name, author, rice });
if (response) {
this.showSuccessDialog(response);
}
}
async _sendRice({ name, author, rice }) {
const headers = new Headers();
headers.append('X-Zen-Rice-Name', name);
headers.append('X-Zen-Rice-Author', author);
headers.append('User-Agent', this.userAgent);
headers.append('Content-Type', 'application/json');
headers.append('Accept', 'application/json');
let response;
try {
response = await fetch(`${ZEN_RICE_API}/rices`, {
method: 'POST',
headers,
body: JSON.stringify(rice),
});
} catch (e) {
this.showErrorMessage('An error occurred while sharing your rice. Please try again later.');
console.error(e);
return null;
}
// Here, response will never be a null object
return await this._verifyResponse(response);
}
async _verifyResponse(response) {
const json = await response.json();
if (!response.ok) {
const message = json.message || 'An error occurred while sharing your rice.';
this.showErrorMessage(message);
console.error(json);
return null;
}
return json;
}
showErrorMessage(message) {
const errorBox = document.getElementById('zen-rice-share-error');
errorBox.removeAttribute('hidden');
errorBox.querySelector('label').textContent = message;
}
showSuccessDialog(riceInfo) {
const { slug, token } = riceInfo;
// 'token' is like some sort of password to edit the rice, do NOT expose it
setTimeout(() => {
document.getElementById('zen-rice-share-dialog').setAttribute('animate', 'true');
const successBox = document.getElementById('zen-rice-share-success');
document.getElementById('zen-rice-share-second-form').setAttribute('fade-out', 'true');
successBox.removeAttribute('hidden');
const link = document.getElementById('zen-rice-share-success-link');
link.value = `${ZEN_RICE_API}/rices/${slug}`;
this.showConffetti();
}, 2000);
}
showConffetti() {
const end = Date.now() + 2500;
function frame() {
this.conffettiWrapper({
angle: 135,
spread: 55,
particleCount: 5,
startVelocity: 55,
origin: { y: 0.6 },
});
this.conffettiWrapper({
angle: 45,
spread: 55,
particleCount: 5,
startVelocity: 55,
origin: { y: 0.6 },
});
this.conffettiWrapper({
angle: 90,
spread: 55,
particleCount: 5,
startVelocity: 55,
origin: { y: 0.6 },
});
if (Date.now() < end) {
requestAnimationFrame(frame.bind(this));
}
}
frame.call(this);
}
openRicePage({ name, id, author }) {
console.log('Opening rice page: ', name, id, author);
gBrowser.removeTab(gBrowser.selectedTab);
}
}
window.ZenRiceManager = ZenRiceManager;
}

View File

@@ -1,11 +0,0 @@
BROWSER_CHROME_MANIFESTS += [
"tests/browser.toml",
]
FINAL_TARGET_FILES.actors += [
"actors/ZenGlanceChild.sys.mjs",
"actors/ZenGlanceParent.sys.mjs",
"actors/ZenThemeMarketplaceChild.sys.mjs",
"actors/ZenThemeMarketplaceParent.sys.mjs",
]

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/BrowserContentHandler.sys.mjs b/browser/components/BrowserContentHandler.sys.mjs
index 7747d90981aea9437bf2d9cf46ec17be0b9ad64c..656d640da0efeb59a4037bb450e0cb1f69dda0ba 100644
index 5911b276fdc9889d3cb61bac3d302ec5239e4a90..a405f8a0204e98fa9de08f1cd7b6761f0fc6198e 100644
--- a/browser/components/BrowserContentHandler.sys.mjs
+++ b/browser/components/BrowserContentHandler.sys.mjs
@@ -1270,6 +1270,7 @@ function maybeRecordToHandleTelemetry(uri, isLaunch) {

View File

@@ -1,20 +1,19 @@
diff --git a/browser/components/BrowserGlue.sys.mjs b/browser/components/BrowserGlue.sys.mjs
index b8b6d30f0b3c968a8615ca601e06e50261d0dae6..5c2b718b902aed2ef8d7a4b622ba882ee937c655 100644
index a6a7f9165aece774c3f1c15f7e352b11a4bf90f4..a4b6124b85f099c6f12d297fc26f2040370c337c 100644
--- a/browser/components/BrowserGlue.sys.mjs
+++ b/browser/components/BrowserGlue.sys.mjs
@@ -106,6 +106,7 @@ ChromeUtils.defineESModuleGetters(lazy, {
WindowsGPOParser: "resource://gre/modules/policies/WindowsGPOParser.sys.mjs",
clearTimeout: "resource://gre/modules/Timer.sys.mjs",
setTimeout: "resource://gre/modules/Timer.sys.mjs",
+ gZenUIMigration: "chrome://browser/content/zen-components/ZenUIMigration.mjs",
});
@@ -8,6 +8,7 @@ import { XPCOMUtils } from "resource://gre/modules/XPCOMUtils.sys.mjs";
const lazy = {};
XPCOMUtils.defineLazyServiceGetters(lazy, {
@@ -1896,7 +1897,7 @@ BrowserGlue.prototype = {
lazy.TabCrashHandler.init();
ChromeUtils.defineESModuleGetters(lazy, {
+ gZenUIMigration: "chrome://browser/content/zen-components/ZenUIMigration.mjs",
AboutHomeStartupCache: "resource:///modules/AboutHomeStartupCache.sys.mjs",
AboutNewTab: "resource:///modules/AboutNewTab.sys.mjs",
AWToolbarButton: "resource:///modules/aboutwelcome/AWToolbarUtils.sys.mjs",
@@ -1886,6 +1887,7 @@ BrowserGlue.prototype = {
lazy.ProcessHangMonitor.init();
-
+ lazy.gZenUIMigration.init(this._isNewProfile, aWindow);
// A channel for "remote troubleshooting" code...
let channel = new lazy.WebChannel(

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/customizableui/CustomizableUI.sys.mjs b/browser/components/customizableui/CustomizableUI.sys.mjs
index 9392b42a1de7310719a6cc8aaf11bd857e8fa69a..24dc9acd733ae401f8cdfb2351a7275d16ee46c8 100644
index 91088fab1759b9af908912648d28daa5938a29c9..3f52ee8cd77ac171fd2cbf355ade1371e57d0db5 100644
--- a/browser/components/customizableui/CustomizableUI.sys.mjs
+++ b/browser/components/customizableui/CustomizableUI.sys.mjs
@@ -13,6 +13,7 @@ ChromeUtils.defineESModuleGetters(lazy, {
@@ -19,7 +19,7 @@ index 9392b42a1de7310719a6cc8aaf11bd857e8fa69a..24dc9acd733ae401f8cdfb2351a7275d
const kSpecialWidgetPfx = "customizableui-special-";
@@ -317,13 +318,11 @@ var CustomizableUIInternal = {
@@ -338,13 +339,11 @@ var CustomizableUIInternal = {
"vertical-spacer",
"urlbar-container",
"spring",
@@ -35,7 +35,7 @@ index 9392b42a1de7310719a6cc8aaf11bd857e8fa69a..24dc9acd733ae401f8cdfb2351a7275d
this.registerArea(
CustomizableUI.AREA_NAVBAR,
{
@@ -331,7 +330,6 @@ var CustomizableUIInternal = {
@@ -352,7 +351,6 @@ var CustomizableUIInternal = {
overflowable: true,
defaultPlacements: navbarPlacements,
verticalTabsDefaultPlacements: [
@@ -43,7 +43,7 @@ index 9392b42a1de7310719a6cc8aaf11bd857e8fa69a..24dc9acd733ae401f8cdfb2351a7275d
"alltabs-button",
],
defaultCollapsed: false,
@@ -356,10 +354,7 @@ var CustomizableUIInternal = {
@@ -377,10 +375,7 @@ var CustomizableUIInternal = {
{
type: CustomizableUI.TYPE_TOOLBAR,
defaultPlacements: [
@@ -54,7 +54,7 @@ index 9392b42a1de7310719a6cc8aaf11bd857e8fa69a..24dc9acd733ae401f8cdfb2351a7275d
],
verticalTabsDefaultPlacements: [],
defaultCollapsed: null,
@@ -422,6 +417,7 @@ var CustomizableUIInternal = {
@@ -462,6 +457,7 @@ var CustomizableUIInternal = {
CustomizableUI.AREA_NAVBAR,
CustomizableUI.AREA_BOOKMARKS,
CustomizableUI.AREA_TABSTRIP,
@@ -62,7 +62,7 @@ index 9392b42a1de7310719a6cc8aaf11bd857e8fa69a..24dc9acd733ae401f8cdfb2351a7275d
]);
if (AppConstants.platform != "macosx") {
toolbars.add(CustomizableUI.AREA_MENUBAR);
@@ -1151,6 +1147,9 @@ var CustomizableUIInternal = {
@@ -1262,6 +1258,9 @@ var CustomizableUIInternal = {
placements = gPlacements.get(area);
}
@@ -72,7 +72,7 @@ index 9392b42a1de7310719a6cc8aaf11bd857e8fa69a..24dc9acd733ae401f8cdfb2351a7275d
// For toolbars that need it, mark as dirty.
let defaultPlacements = areaProperties.get("defaultPlacements");
if (
@@ -1564,7 +1563,7 @@ var CustomizableUIInternal = {
@@ -1769,7 +1768,7 @@ var CustomizableUIInternal = {
lazy.log.info(
"Widget " + aWidgetId + " not found, unable to remove from " + aArea
);
@@ -81,7 +81,7 @@ index 9392b42a1de7310719a6cc8aaf11bd857e8fa69a..24dc9acd733ae401f8cdfb2351a7275d
}
this.notifyDOMChange(widgetNode, null, container, true, () => {
@@ -1574,7 +1573,7 @@ var CustomizableUIInternal = {
@@ -1779,7 +1778,7 @@ var CustomizableUIInternal = {
// We also need to remove the panel context menu if it's there:
this.ensureButtonContextMenu(widgetNode);
if (gPalette.has(aWidgetId) || this.isSpecialWidget(aWidgetId)) {
@@ -90,7 +90,7 @@ index 9392b42a1de7310719a6cc8aaf11bd857e8fa69a..24dc9acd733ae401f8cdfb2351a7275d
} else {
window.gNavToolbox.palette.appendChild(widgetNode);
}
@@ -1704,16 +1703,16 @@ var CustomizableUIInternal = {
@@ -1947,16 +1946,16 @@ var CustomizableUIInternal = {
elem.setAttribute("skipintoolbarset", "true");
}
}
@@ -110,18 +110,18 @@ index 9392b42a1de7310719a6cc8aaf11bd857e8fa69a..24dc9acd733ae401f8cdfb2351a7275d
// Handle initial state of vertical tabs.
if (isVerticalTabs) {
// Show the vertical tabs toolbar
@@ -1873,6 +1872,10 @@ var CustomizableUIInternal = {
},
insertWidgetBefore(aNode, aNextNode, aContainer, aArea) {
+ if (aArea === CustomizableUI.AREA_NAVBAR && aNode.ownerGlobal.gZenVerticalTabsManager._hasSetSingleToolbar) {
@@ -2198,6 +2197,10 @@ var CustomizableUIInternal = {
* The identifier string of the area that aNode is being inserted into.
*/
insertWidgetBefore(aNode, aNextNode, aContainer, aAreaId) {
+ if (aAreaId === CustomizableUI.AREA_NAVBAR && aNode.ownerGlobal.gZenVerticalTabsManager._hasSetSingleToolbar) {
+ aContainer = aNode.ownerDocument.getElementById("zen-sidebar-top-buttons-customization-target");
+ aArea = "zen-sidebar-top-buttons";
+ aAreaId = "zen-sidebar-top-buttons";
+ }
this.notifyDOMChange(aNode, aNextNode, aContainer, false, () => {
this.setLocationAttributes(aNode, aArea);
this.setLocationAttributes(aNode, aAreaId);
aContainer.insertBefore(aNode, aNextNode);
@@ -2744,7 +2747,6 @@ var CustomizableUIInternal = {
@@ -3321,7 +3324,6 @@ var CustomizableUIInternal = {
if (!this.isWidgetRemovable(aWidgetId)) {
return;
}
@@ -129,16 +129,16 @@ index 9392b42a1de7310719a6cc8aaf11bd857e8fa69a..24dc9acd733ae401f8cdfb2351a7275d
let placements = gPlacements.get(oldPlacement.area);
let position = placements.indexOf(aWidgetId);
if (position != -1) {
@@ -3735,7 +3737,7 @@ var CustomizableUIInternal = {
}
},
@@ -4556,7 +4558,7 @@ var CustomizableUIInternal = {
* For all registered areas, builds those areas to reflect the current
* placement state of all widgets.
*/
- _rebuildRegisteredAreas() {
+ _rebuildRegisteredAreas(zenDontRebuildCollapsed = false) {
for (let [areaId, areaNodes] of gBuildAreas) {
let placements = gPlacements.get(areaId);
let isFirstChangedToolbar = true;
@@ -3746,7 +3748,7 @@ var CustomizableUIInternal = {
@@ -4567,7 +4569,7 @@ var CustomizableUIInternal = {
if (area.get("type") == CustomizableUI.TYPE_TOOLBAR) {
let defaultCollapsed = area.get("defaultCollapsed");
let win = areaNode.ownerGlobal;
@@ -147,7 +147,7 @@ index 9392b42a1de7310719a6cc8aaf11bd857e8fa69a..24dc9acd733ae401f8cdfb2351a7275d
win.setToolbarVisibility(
areaNode,
typeof defaultCollapsed == "string"
@@ -4923,6 +4925,7 @@ export var CustomizableUI = {
@@ -5858,6 +5860,7 @@ export var CustomizableUI = {
unregisterArea(aName, aDestroyPlacements) {
CustomizableUIInternal.unregisterArea(aName, aDestroyPlacements);
},
@@ -155,7 +155,7 @@ index 9392b42a1de7310719a6cc8aaf11bd857e8fa69a..24dc9acd733ae401f8cdfb2351a7275d
/**
* Add a widget to an area.
* If the area to which you try to add is not known to CustomizableUI,
@@ -6916,11 +6919,11 @@ class OverflowableToolbar {
@@ -7905,11 +7908,11 @@ class OverflowableToolbar {
parseFloat(style.paddingLeft) -
parseFloat(style.paddingRight) -
toolbarChildrenWidth;
@@ -169,7 +169,7 @@ index 9392b42a1de7310719a6cc8aaf11bd857e8fa69a..24dc9acd733ae401f8cdfb2351a7275d
});
lazy.log.debug(
@@ -6930,7 +6933,8 @@ class OverflowableToolbar {
@@ -7919,7 +7922,8 @@ class OverflowableToolbar {
// If the target has min-width: 0, their children might actually overflow
// it, so check for both cases explicitly.
let targetContentWidth = Math.max(targetWidth, targetChildrenWidth);
@@ -179,7 +179,7 @@ index 9392b42a1de7310719a6cc8aaf11bd857e8fa69a..24dc9acd733ae401f8cdfb2351a7275d
return { isOverflowing, targetContentWidth, totalAvailWidth };
}
@@ -7024,7 +7028,7 @@ class OverflowableToolbar {
@@ -8013,7 +8017,7 @@ class OverflowableToolbar {
}
}
if (!inserted) {
@@ -188,13 +188,12 @@ index 9392b42a1de7310719a6cc8aaf11bd857e8fa69a..24dc9acd733ae401f8cdfb2351a7275d
}
child.removeAttribute("cui-anchorid");
child.removeAttribute("overflowedItem");
@@ -7186,6 +7190,9 @@ class OverflowableToolbar {
* @param {MouseEvent} aEvent the click event.
*/
#onClickDefaultListButton(aEvent) {
+ if (aEvent.view.gZenVerticalTabsManager._hasSetSingleToolbar && this.#toolbar.id == 'nav-bar') {
+ return;
+ }
if (this.#defaultListButton.open) {
this.#defaultListButton.open = false;
lazy.PanelMultiView.hidePopup(this.#defaultListPanel);
@@ -8358,7 +8362,7 @@ class OverflowableToolbar {
break;
}
case "mousedown": {
- if (aEvent.button != 0) {
+ if (aEvent.button != 0 || this.#toolbar.id == "zen-sidebar-top-buttons") { // Fix https://github.com/zen-browser/desktop/issues/7718
break;
}
if (aEvent.target == this.#defaultListButton) {

View File

@@ -1,9 +1,9 @@
diff --git a/browser/components/customizableui/CustomizeMode.sys.mjs b/browser/components/customizableui/CustomizeMode.sys.mjs
index c9bdc165ff9afc8c3e43ed2cda0612b32a55450f..34f8af56753e2a898f49247036d47973c70543a9 100644
index 619bb2af5a3a0995fc93fa040696dd2854848ab5..bbc6bad906e9ccaf668ca99f4a0411f564ef1e56 100644
--- a/browser/components/customizableui/CustomizeMode.sys.mjs
+++ b/browser/components/customizableui/CustomizeMode.sys.mjs
@@ -357,7 +357,7 @@ CustomizeMode.prototype = {
this._transitioning = true;
@@ -500,7 +500,7 @@ export class CustomizeMode {
this.#transitioning = true;
let customizer = document.getElementById("customization-container");
- let browser = document.getElementById("browser");
@@ -11,7 +11,7 @@ index c9bdc165ff9afc8c3e43ed2cda0612b32a55450f..34f8af56753e2a898f49247036d47973
browser.hidden = true;
customizer.hidden = false;
@@ -488,7 +488,7 @@ CustomizeMode.prototype = {
@@ -637,7 +637,7 @@ export class CustomizeMode {
}
let customizer = document.getElementById("customization-container");
@@ -20,9 +20,9 @@ index c9bdc165ff9afc8c3e43ed2cda0612b32a55450f..34f8af56753e2a898f49247036d47973
customizer.hidden = true;
browser.hidden = false;
@@ -2397,6 +2397,20 @@ CustomizeMode.prototype = {
@@ -3125,6 +3125,20 @@ export class CustomizeMode {
if (makeSpaceImmediately) {
aItem.setAttribute("notransition", "true");
aDraggedOverItem.setAttribute("notransition", "true");
}
+ if (aItem.parentElement.id === "TabsToolbar-customization-target") {
+ // We change the border values so we can properly implement the native vertical tabs
@@ -38,6 +38,6 @@ index c9bdc165ff9afc8c3e43ed2cda0612b32a55450f..34f8af56753e2a898f49247036d47973
+ aItem.style.borderBottomStyle = "solid";
+ }
+ }
aItem.style[prop] = borderWidth + "px";
aItem.style.removeProperty(otherProp);
aDraggedOverItem.style[prop] = borderWidth + "px";
aDraggedOverItem.style.removeProperty(otherProp);
if (makeSpaceImmediately) {

View File

@@ -1,13 +1,15 @@
diff --git a/browser/components/customizableui/ToolbarContextMenu.sys.mjs b/browser/components/customizableui/ToolbarContextMenu.sys.mjs
index af22f766a052372a68faca139161cccbf0d768f0..ceff0576321f880c71ce301e537f4d03ccca8a73 100644
index b88b0166fb99bc3d44a2e05798650b8ad6ab9a46..2e66c8294f0ef4f91ae160bd55b7417b55e9f5b2 100644
--- a/browser/components/customizableui/ToolbarContextMenu.sys.mjs
+++ b/browser/components/customizableui/ToolbarContextMenu.sys.mjs
@@ -241,7 +241,7 @@ export var ToolbarContextMenu = {
@@ -240,8 +240,8 @@ export var ToolbarContextMenu = {
// Show/hide sidebar and vertical tabs menu items
let sidebarRevampEnabled = Services.prefs.getBoolPref("sidebar.revamp");
let showSidebarActions =
["tabbrowser-tabs", "sidebar-button"].includes(toolbarItem?.id) ||
- ["tabbrowser-tabs", "sidebar-button"].includes(toolbarItem?.id) ||
- toolbarItem?.localName == "toolbarspring";
+ toolbarItem?.localName == "toolbarspring" && false;
+ (["tabbrowser-tabs", "sidebar-button"].includes(toolbarItem?.id) ||
+ toolbarItem?.localName == "toolbarspring") && false;
let toggleVerticalTabsItem = document.getElementById(
"toolbar-context-toggle-vertical-tabs"
);

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/customizableui/content/panelUI.js b/browser/components/customizableui/content/panelUI.js
index 010d0813557efd6d5a3a84ea589989f6e9ff195a..e26cc1be1f56919e6ec5f2432854b284837671ac 100644
index ec52437dba30633a374299a46c856e1df05dec0e..48617e32d56c3b3f525557ddeac6297555c48c04 100644
--- a/browser/components/customizableui/content/panelUI.js
+++ b/browser/components/customizableui/content/panelUI.js
@@ -515,8 +515,7 @@ const PanelUI = {
@@ -12,7 +12,7 @@ index 010d0813557efd6d5a3a84ea589989f6e9ff195a..e26cc1be1f56919e6ec5f2432854b284
.appendChild(tempPanel);
let multiView = document.createXULElement("panelmultiview");
@@ -960,7 +959,7 @@ const PanelUI = {
@@ -957,7 +956,7 @@ const PanelUI = {
el.removeAttribute("data-lazy-l10n-id");
});

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/places/PlacesUIUtils.sys.mjs b/browser/components/places/PlacesUIUtils.sys.mjs
index fbdd6a34b12d4d957f7a2d9d95df0bfd65ba3f61..baaf34536f557c69fce3cc43e6f12658514db39f 100644
index 1f5e163bae58f3f1cac750ca32846cc8a80bd2ca..16034842b4ca5295aa3c9237db55035ecc4016d2 100644
--- a/browser/components/places/PlacesUIUtils.sys.mjs
+++ b/browser/components/places/PlacesUIUtils.sys.mjs
@@ -58,6 +58,7 @@ class BookmarkState {
@@ -59,6 +59,7 @@ class BookmarkState {
info,
tags = "",
keyword = "",
@@ -10,7 +10,7 @@ index fbdd6a34b12d4d957f7a2d9d95df0bfd65ba3f61..baaf34536f557c69fce3cc43e6f12658
isFolder = false,
children = [],
autosave = false,
@@ -82,12 +83,18 @@ class BookmarkState {
@@ -83,12 +84,18 @@ class BookmarkState {
keyword,
parentGuid: info.parentGuid,
index,
@@ -29,7 +29,7 @@ index fbdd6a34b12d4d957f7a2d9d95df0bfd65ba3f61..baaf34536f557c69fce3cc43e6f12658
/**
* Save edited title for the bookmark
*
@@ -181,6 +188,14 @@ class BookmarkState {
@@ -182,6 +189,14 @@ class BookmarkState {
"BookmarkState::createBookmark"
);
this._guid = results?.[0];
@@ -44,7 +44,7 @@ index fbdd6a34b12d4d957f7a2d9d95df0bfd65ba3f61..baaf34536f557c69fce3cc43e6f12658
return this._guid;
}
@@ -214,6 +229,14 @@ class BookmarkState {
@@ -215,6 +230,14 @@ class BookmarkState {
"BookmarkState::save::createFolder"
);
this._guid = results[0];
@@ -59,7 +59,7 @@ index fbdd6a34b12d4d957f7a2d9d95df0bfd65ba3f61..baaf34536f557c69fce3cc43e6f12658
return this._guid;
}
@@ -300,11 +323,97 @@ class BookmarkState {
@@ -301,11 +324,97 @@ class BookmarkState {
await lazy.PlacesTransactions.batch(transactions, "BookmarkState::save");
}
@@ -157,7 +157,7 @@ index fbdd6a34b12d4d957f7a2d9d95df0bfd65ba3f61..baaf34536f557c69fce3cc43e6f12658
/**
* Append transactions to update tags by given information.
*
@@ -902,8 +1011,15 @@ export var PlacesUIUtils = {
@@ -903,8 +1012,15 @@ export var PlacesUIUtils = {
aNode,
aWhere,
aWindow,

View File

@@ -1,10 +1,10 @@
diff --git a/browser/components/preferences/jar.mn b/browser/components/preferences/jar.mn
index 3b60d18e483bc3c4e9b4309f0dc1e4231b7116b1..e5b679b25941a7f1ed52db9fa3f7740a7220b9e4 100644
index 118709048e7de13f6ac10d0047e446b72303428f..c8cc2d7ee551b96be668a7844dab1db5abc9d684 100644
--- a/browser/components/preferences/jar.mn
+++ b/browser/components/preferences/jar.mn
@@ -23,3 +23,5 @@ browser.jar:
content/browser/preferences/more-from-mozilla-qr-code-simple-cn.svg
content/browser/preferences/web-appearance-dark.svg
content/browser/preferences/web-appearance-light.svg
@@ -26,3 +26,5 @@ browser.jar:
content/browser/preferences/widgets/setting-control.mjs (widgets/setting-control/setting-control.mjs)
content/browser/preferences/widgets/setting-group.mjs (widgets/setting-group/setting-group.mjs)
content/browser/preferences/widgets/setting-group.css (widgets/setting-group/setting-group.css)
+
+ content/browser/preferences/zen-settings.js

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/preferences/main.js b/browser/components/preferences/main.js
index 8f6f78419a0876ebe6d0967a88ef03e464dbbd23..9339085014b797033c4ee1ed2e40f2506d1e9797 100644
index aa339be9ba94ed776fa25f2d72f9e6b25dc86cd3..4c6c725942b3d6f2a42938d444ac7645526623cc 100644
--- a/browser/components/preferences/main.js
+++ b/browser/components/preferences/main.js
@@ -218,7 +218,7 @@ function getBundleForLocales(newLocales) {
@@ -389,7 +389,7 @@ function getBundleForLocales(newLocales) {
])
);
return new Localization(

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/preferences/preferences.js b/browser/components/preferences/preferences.js
index 6386773b287ca6d06a0abe928850c5bb465828ed..b3459a2abcac5f21a5b24189ec1dc88e24626687 100644
index e4746e3408e68273126e6d2baf5afcf80721674b..e478aaf6bfefa6acd9062aeb3e4709ca0d5d779c 100644
--- a/browser/components/preferences/preferences.js
+++ b/browser/components/preferences/preferences.js
@@ -118,6 +118,7 @@ ChromeUtils.defineLazyGetter(this, "gSubDialog", function () {

View File

@@ -1,30 +1,29 @@
diff --git a/browser/components/preferences/preferences.xhtml b/browser/components/preferences/preferences.xhtml
index 951af951598c3edc9bc431dd106e68d006ec4316..eb420d6c5ea346639eee531805aabbe7726c7769 100644
index 43be2b6ac84827bd13723e0211a3ade401934591..513584d7e720451efdb87350ac07d8b2590c1705 100644
--- a/browser/components/preferences/preferences.xhtml
+++ b/browser/components/preferences/preferences.xhtml
@@ -43,6 +43,8 @@
/>
@@ -44,6 +44,8 @@
<link rel="stylesheet" href="chrome://browser/skin/preferences/privacy.css" />
<link rel="stylesheet" href="chrome://browser/content/preferences/widgets/setting-group.css" />
+#include zen-preferences-links.xhtml
+
<link rel="localization" href="branding/brand.ftl"/>
<link rel="localization" href="browser/browser.ftl"/>
<!-- Used by fontbuilder.js -->
@@ -98,6 +100,12 @@
@@ -105,6 +107,11 @@
<hbox flex="1">
<vbox class="navigation">
+ <search-textbox
+ id="searchInput"
+ data-l10n-id="search-input-box2"
+ data-l10n-attrs="placeholder, style"
+ />
+
+ id="searchInput"
+ data-l10n-id="search-input-box2"
+ data-l10n-attrs="placeholder, style"
+ />
<!-- category list -->
<richlistbox id="categories" data-l10n-id="category-list" data-l10n-attrs="aria-label">
<richlistitem id="category-general"
@@ -111,6 +119,50 @@
@@ -117,6 +124,50 @@
<label class="category-name" flex="1" data-l10n-id="pane-general-title"></label>
</richlistitem>
@@ -75,21 +74,19 @@ index 951af951598c3edc9bc431dd106e68d006ec4316..eb420d6c5ea346639eee531805aabbe7
<richlistitem id="category-home"
class="category"
value="paneHome"
@@ -229,11 +281,13 @@
@@ -228,11 +279,6 @@
<html:a href="about:policies" target="_blank" data-l10n-id="managed-notice"/>
</hbox>
</hbox>
+#if 0
<search-textbox
id="searchInput"
data-l10n-id="search-input-box2"
data-l10n-attrs="placeholder, style"
/>
+#endif
- <search-textbox
- id="searchInput"
- data-l10n-id="search-input-box2"
- data-l10n-attrs="placeholder, style"
- />
</hbox>
</hbox>
<vbox id="mainPrefPane">
@@ -247,6 +301,10 @@
@@ -246,6 +292,10 @@
#include sync.inc.xhtml
#include experimental.inc.xhtml
#include moreFromMozilla.inc.xhtml

View File

@@ -16,6 +16,8 @@ var gZenMarketplaceManager = {
header.appendChild(this._initDisableAll());
this._initImportExport();
this.__hasInitializedEvents = true;
await this._buildThemesList();
@@ -56,6 +58,23 @@ var gZenMarketplaceManager = {
});
},
_initImportExport() {
const importButton = document.getElementById('zenThemeMarketplaceImport');
const exportButton = document.getElementById('zenThemeMarketplaceExport');
if (importButton) {
importButton.addEventListener('click', async () => {
await this._importThemes();
});
}
if (exportButton) {
exportButton.addEventListener('click', async () => {
await this._exportThemes();
});
}
},
_initDisableAll() {
const areThemesDisabled = Services.prefs.getBoolPref('zen.themes.disable-all', false);
const browser = ZenThemesCommon.currentBrowser;
@@ -153,6 +172,96 @@ var gZenMarketplaceManager = {
this.triggerThemeUpdate();
},
async _importThemes() {
const errorBox = document.getElementById('zenThemeMarketplaceImportFailure');
const successBox = document.getElementById('zenThemeMarketplaceImportSuccess');
successBox.hidden = true;
errorBox.hidden = true;
const input = document.createElement('input');
input.type = 'file';
input.accept = '.json';
input.style.display = 'none';
input.setAttribute('moz-accept', '.json');
input.setAttribute('accept', '.json');
let timeout;
const filePromise = new Promise((resolve) => {
input.addEventListener('change', (event) => {
if (timeout) clearTimeout(timeout);
const file = event.target.files[0];
resolve(file);
});
timeout = setTimeout(() => {
console.warn('[ZenThemeMarketplaceParent:settings]: Import timeout reached, aborting.');
resolve(null);
}, 60000);
});
input.click();
try {
const file = await filePromise;
if (!file) {
return;
}
const content = await file.text();
const themes = JSON.parse(content);
const existingThemes = await ZenThemesCommon.getThemes();
const uniqueThemes = { ...themes, ...existingThemes };
console.log(`[ZenThemeMarketplaceParent:settings]: Importing ${Object.keys(themes).length} themes`);
await IOUtils.writeJSON(ZenThemesCommon.themesDataFile, uniqueThemes);
this.triggerThemeUpdate();
successBox.hidden = false;
let buttonIndex = await confirmRestartPrompt(true, 1, true, true);
if (buttonIndex == CONFIRM_RESTART_PROMPT_RESTART_NOW) {
Services.startup.quit(Ci.nsIAppStartup.eAttemptQuit | Ci.nsIAppStartup.eRestart);
}
} catch (error) {
console.error('[ZenThemeMarketplaceParent:settings]: Error while importing themes:', error);
errorBox.hidden = false;
} finally {
if (input) input.remove();
}
},
async _exportThemes() {
const errorBox = document.getElementById('zenThemeMarketplaceExportFailure');
const successBox = document.getElementById('zenThemeMarketplaceExportSuccess');
successBox.hidden = true;
errorBox.hidden = true;
let a, url;
try {
const themes = await ZenThemesCommon.getThemes();
const themesJson = JSON.stringify(themes, null, 2);
const blob = new Blob([themesJson], { type: 'application/json' });
url = URL.createObjectURL(blob);
// Creating a link to download the JSON file
a = document.createElement('a');
a.href = url;
a.download = 'zen-themes-export.json';
document.body.appendChild(a);
a.click();
a.remove();
successBox.hidden = false;
} catch (error) {
console.error('[ZenThemeMarketplaceParent:settings]: Error while exporting themes:', error);
errorBox.hidden = false;
} finally {
if (a) {
a.remove();
}
if (url) {
URL.revokeObjectURL(url);
}
}
},
async _buildThemesList() {
if (!this.themesList) {
return;
@@ -170,7 +279,6 @@ var gZenMarketplaceManager = {
for (const theme of Object.values(themes).sort((a, b) => a.name.localeCompare(b.name))) {
const sanitizedName = `theme-${theme.name?.replaceAll(/\s/g, '-')?.replaceAll(/[^A-z_-]+/g, '')}`;
const isThemeEnabled = theme.enabled === undefined || theme.enabled;
const fragment = window.MozXULElement.parseXULToFragment(`
<vbox class="zenThemeMarketplaceItem">
<vbox class="zenThemeMarketplaceItemContent">
@@ -181,6 +289,7 @@ var gZenMarketplaceManager = {
</vbox>
<hbox class="zenThemeMarketplaceItemActions">
${theme.preferences ? `<button id="zenThemeMarketplaceItemConfigureButton-${sanitizedName}" class="zenThemeMarketplaceItemConfigureButton" hidden="true"></button>` : ''}
${theme.homepage ? `<button id="zenThemeMarketplaceItemHomePageLink-${sanitizedName}" class="zenThemeMarketplaceItemHomepageButton" zen-theme-id="${theme.id}"></button>` : ''}
<button class="zenThemeMarketplaceItemUninstallButton" data-l10n-id="zen-theme-marketplace-remove-button" zen-theme-id="${theme.id}"></button>
</hbox>
</vbox>
@@ -274,6 +383,16 @@ var gZenMarketplaceManager = {
await this.removeTheme(event.target.getAttribute('zen-theme-id'));
});
if (theme.homepage) {
const homepageButton = fragment.querySelector('.zenThemeMarketplaceItemHomepageButton');
homepageButton.addEventListener('click', () => {
// open the homepage url in a new tab
const url = theme.homepage;
window.open(url, '_blank');
});
}
if (theme.preferences) {
fragment.querySelector('.zenThemeMarketplaceItemConfigureButton').addEventListener('click', () => {
dialog.showModal();
@@ -623,11 +742,13 @@ var gZenWorkspacesSettings = {
};
Services.prefs.addObserver('zen.tab-unloader.enabled', tabsUnloaderPrefListener);
Services.prefs.addObserver('zen.glance.enabled', tabsUnloaderPrefListener); // We can use the same listener for both prefs
Services.prefs.addObserver('zen.workspaces.container-specific-essentials-enabled', tabsUnloaderPrefListener);
Services.prefs.addObserver('zen.glance.activation-method', tabsUnloaderPrefListener);
window.addEventListener('unload', () => {
Services.prefs.removeObserver('zen.tab-unloader.enabled', tabsUnloaderPrefListener);
Services.prefs.removeObserver('zen.glance.enabled', tabsUnloaderPrefListener);
Services.prefs.removeObserver('zen.glance.activation-method', tabsUnloaderPrefListener);
Services.prefs.removeObserver('zen.workspaces.container-specific-essentials-enabled', tabsUnloaderPrefListener);
});
},
};
@@ -1024,4 +1145,9 @@ Preferences.addAll([
type: 'bool',
default: true,
},
{
id: 'media.videocontrols.picture-in-picture.enabled',
type: 'bool',
default: true,
},
]);

View File

@@ -16,12 +16,20 @@
<description class="description-deemphasized" data-l10n-id="zen-theme-marketplace-description" />
<hbox class="indent">
<html:a id="zenThemeMarketplaceLink" href="https://zen-browser.app/mods/" target="_blank" data-l10n-id="zen-theme-marketplace-link" />
<button id="zenThemeMarketplaceImport" data-l10n-id="zen-theme-marketplace-import-button" />
<button id="zenThemeMarketplaceExport" data-l10n-id="zen-theme-marketplace-export-button" />
<button id="zenThemeMarketplaceCheckForUpdates" data-l10n-id="zen-theme-marketplace-check-for-updates-button" />
</hbox>
<description class="description-deemphasized" data-l10n-id="zen-theme-marketplace-updates-success" hidden="true" id="zenThemeMarketplaceUpdatesSuccess" />
<description class="description-deemphasized" data-l10n-id="zen-theme-marketplace-updates-failure" hidden="true" id="zenThemeMarketplaceUpdatesFailure" />
<description class="description-deemphasized" data-l10n-id="zen-theme-marketplace-import-success" hidden="true" id="zenThemeMarketplaceImportSuccess" />
<description class="description-deemphasized" data-l10n-id="zen-theme-marketplace-import-failure" hidden="true" id="zenThemeMarketplaceImportFailure" />
<description class="description-deemphasized" data-l10n-id="zen-theme-marketplace-export-success" hidden="true" id="zenThemeMarketplaceExportSuccess" />
<description class="description-deemphasized" data-l10n-id="zen-theme-marketplace-export-failure" hidden="true" id="zenThemeMarketplaceExportFailure" />
<vbox id="zenThemeMarketplaceList"></vbox>
</groupbox>

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/search/SearchOneOffs.sys.mjs b/browser/components/search/SearchOneOffs.sys.mjs
index 4810eca0825f9a6f07f242e804de2edb7bd697d8..fd4e7661c93be528c2766e27fe22403d3d495292 100644
index c1f8fd1225cfc47c2e171361aa6069d3cbaf3afb..b32a2cf621022a500a2efc7777b4379347dcf353 100644
--- a/browser/components/search/SearchOneOffs.sys.mjs
+++ b/browser/components/search/SearchOneOffs.sys.mjs
@@ -443,7 +443,7 @@ export class SearchOneOffs {
@@ -444,7 +444,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,8 +1,8 @@
diff --git a/browser/components/sessionstore/SessionStore.sys.mjs b/browser/components/sessionstore/SessionStore.sys.mjs
index 6e2973abf428b110bfc553522723f327ee84c028..668cc147a1bf158bc42a7baf2a5549049d060899 100644
index 5633e5032f5d50c70512187d27e045b579978927..dd7aa4827eaa809dadc7e1fe6cdd1083e79f383a 100644
--- a/browser/components/sessionstore/SessionStore.sys.mjs
+++ b/browser/components/sessionstore/SessionStore.sys.mjs
@@ -3186,7 +3186,7 @@ var SessionStoreInternal = {
@@ -3202,7 +3202,7 @@ var SessionStoreInternal = {
if (!isPrivateWindow && tabState.isPrivate) {
return;
}
@@ -11,15 +11,17 @@ index 6e2973abf428b110bfc553522723f327ee84c028..668cc147a1bf158bc42a7baf2a554904
return;
}
@@ -3895,6 +3895,7 @@ var SessionStoreInternal = {
@@ -3911,6 +3911,9 @@ var SessionStoreInternal = {
Math.min(tabState.index, tabState.entries.length)
);
tabState.pinned = false;
+ tabState.zenEssential = undefined;
+ tabState.zenEssential = false;
+ tabState.zenPinnedId = null;
+ tabState.zenHasStaticLabel = false;
if (inBackground === false) {
aWindow.gBrowser.selectedTab = newTab;
@@ -5399,14 +5400,15 @@ var SessionStoreInternal = {
@@ -5416,14 +5419,15 @@ var SessionStoreInternal = {
}
let tabbrowser = aWindow.gBrowser;
@@ -37,7 +39,7 @@ index 6e2973abf428b110bfc553522723f327ee84c028..668cc147a1bf158bc42a7baf2a554904
continue;
}
let tabData = lazy.TabState.collect(tab, TAB_CUSTOM_VALUES.get(tab));
@@ -5425,7 +5427,7 @@ var SessionStoreInternal = {
@@ -5442,7 +5446,7 @@ var SessionStoreInternal = {
// We don't store the Firefox View tab in Session Store, so if it was the last selected "tab" when
// 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).
@@ -46,7 +48,7 @@ index 6e2973abf428b110bfc553522723f327ee84c028..668cc147a1bf158bc42a7baf2a554904
selectedIndex = 1;
winData.title = tabbrowser.tabs[0].label;
}
@@ -5582,6 +5584,7 @@ var SessionStoreInternal = {
@@ -5599,6 +5603,7 @@ var SessionStoreInternal = {
winData.tabs,
winData.groups ?? []
);
@@ -54,7 +56,7 @@ index 6e2973abf428b110bfc553522723f327ee84c028..668cc147a1bf158bc42a7baf2a554904
this._log.debug(
`restoreWindow, createTabsForSessionRestore returned ${tabs.length} tabs`
);
@@ -6130,8 +6133,23 @@ var SessionStoreInternal = {
@@ -6148,8 +6153,23 @@ var SessionStoreInternal = {
// Most of tabData has been restored, now continue with restoring
// attributes that may trigger external events.

View File

@@ -1,13 +1,13 @@
diff --git a/browser/components/sidebar/browser-sidebar.js b/browser/components/sidebar/browser-sidebar.js
index 371190c058fa1eed91dc91b58608c934100e3a1b..440fe6fb403c3e78b3bfe68fb747d000b4a27521 100644
index 178c05099b671c4ec8d4c225955e65cff73824e2..6abb0ee2d4be94f997ee8d4bc755a393d9759099 100644
--- a/browser/components/sidebar/browser-sidebar.js
+++ b/browser/components/sidebar/browser-sidebar.js
@@ -718,7 +718,7 @@ var SidebarController = {
}
});
} else {
- let browser = document.getElementById("browser");
+ let browser = document.getElementById("tabbrowser-tabbox");
[...browser.children].forEach((node, i) => {
node.style.order = i + 1;
});
@@ -729,7 +729,7 @@ var SidebarController = {
setPosition() {
// First reset all ordinals to match DOM ordering.
let contentArea = document.getElementById("tabbrowser-tabbox");
- let browser = document.getElementById("browser");
+ let browser = document.getElementById("tabbrowser-tabbox");
[...browser.children].forEach((node, i) => {
node.style.order = i + 1;
});

View File

@@ -1,7 +1,16 @@
diff --git a/browser/components/tabbrowser/content/browser-ctrlTab.js b/browser/components/tabbrowser/content/browser-ctrlTab.js
index e5d16e605b7edf11fc9f52b93e415087b76398f1..40b6e29d26c7f8d692a2a9a7d924b289ec7a3d03 100644
index 6753641cb579032306453be3f5054d7bc7661e8c..436ee8940c8a73d238a7aed10768a0a752a3f119 100644
--- a/browser/components/tabbrowser/content/browser-ctrlTab.js
+++ b/browser/components/tabbrowser/content/browser-ctrlTab.js
@@ -252,7 +252,7 @@ var ctrlTab = {
},
get tabList() {
- return this._recentlyUsedTabs;
+ return this._recentlyUsedTabs.filter(tab => !tab.hasAttribute("pending"));
},
init: function ctrlTab_init() {
@@ -459,7 +459,7 @@ var ctrlTab = {
// If the tab is hidden, don't add it to the list unless it's selected
// (Normally hidden tabs would be unhidden when selected, but that doesn't
@@ -11,6 +20,15 @@ index e5d16e605b7edf11fc9f52b93e415087b76398f1..40b6e29d26c7f8d692a2a9a7d924b289
return;
}
@@ -483,7 +483,7 @@ var ctrlTab = {
},
open: function ctrlTab_open() {
- if (this.isOpen) {
+ if (this.isOpen || !this.tabCount) {
return;
}
@@ -761,7 +761,7 @@ var ctrlTab = {
_initRecentlyUsedTabs() {
this._recentlyUsedTabs = Array.prototype.filter.call(

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/tabbrowser/content/tab.js b/browser/components/tabbrowser/content/tab.js
index fc3a9730b394341843cfa9f559a792acb34c7d29..18d5fdb6e3368e21c68269c48cf22ac96fd868da 100644
index dc92771ebc65095dfebbddc238ee6d4fffd897bf..ae9120f7cc8989cf625ac101d053d82582e32009 100644
--- a/browser/components/tabbrowser/content/tab.js
+++ b/browser/components/tabbrowser/content/tab.js
@@ -16,6 +16,7 @@
@@ -21,6 +21,7 @@
<hbox class="tab-group-line"/>
</vbox>
<hbox class="tab-content" align="center">
@@ -10,7 +10,7 @@ index fc3a9730b394341843cfa9f559a792acb34c7d29..18d5fdb6e3368e21c68269c48cf22ac9
<stack class="tab-icon-stack">
<hbox class="tab-throbber"/>
<hbox class="tab-icon-pending"/>
@@ -32,8 +33,10 @@
@@ -37,8 +38,10 @@
<hbox class="tab-secondary-label">
<label class="tab-icon-sound-label tab-icon-sound-pip-label" data-l10n-id="browser-tab-audio-pip" role="presentation"/>
</hbox>
@@ -21,7 +21,7 @@ index fc3a9730b394341843cfa9f559a792acb34c7d29..18d5fdb6e3368e21c68269c48cf22ac9
</hbox>
</stack>
`;
@@ -167,7 +170,7 @@
@@ -175,7 +178,7 @@
}
set _visuallySelected(val) {
@@ -30,7 +30,7 @@ index fc3a9730b394341843cfa9f559a792acb34c7d29..18d5fdb6e3368e21c68269c48cf22ac9
return;
}
@@ -203,7 +206,7 @@
@@ -211,7 +214,7 @@
}
get visible() {
@@ -39,7 +39,7 @@ index fc3a9730b394341843cfa9f559a792acb34c7d29..18d5fdb6e3368e21c68269c48cf22ac9
}
get hidden() {
@@ -274,7 +277,7 @@
@@ -282,7 +285,7 @@
return false;
}
@@ -48,7 +48,7 @@ index fc3a9730b394341843cfa9f559a792acb34c7d29..18d5fdb6e3368e21c68269c48cf22ac9
}
get lastAccessed() {
@@ -446,6 +449,8 @@
@@ -454,6 +457,8 @@
this.style.MozUserFocus = "ignore";
} else if (
event.target.classList.contains("tab-close-button") ||
@@ -57,15 +57,15 @@ index fc3a9730b394341843cfa9f559a792acb34c7d29..18d5fdb6e3368e21c68269c48cf22ac9
event.target.classList.contains("tab-icon-overlay") ||
event.target.classList.contains("tab-audio-button")
) {
@@ -544,6 +549,7 @@
if (this.multiselected) {
gBrowser.removeMultiSelectedTabs();
@@ -554,6 +559,7 @@
telemetrySource: lazy.TabMetrics.METRIC_SOURCE.TAB_STRIP,
});
} else {
+ gZenPinnedTabManager._removePinnedAttributes(this, true);
gBrowser.removeTab(this, {
animate: true,
triggeringEvent: event,
@@ -553,6 +559,14 @@
@@ -564,6 +570,14 @@
// (see tabbrowser-tabs 'click' handler).
gBrowser.tabContainer._blockDblClick = true;
}
@@ -80,7 +80,7 @@ index fc3a9730b394341843cfa9f559a792acb34c7d29..18d5fdb6e3368e21c68269c48cf22ac9
}
on_dblclick(event) {
@@ -576,6 +590,8 @@
@@ -587,6 +601,8 @@
animate: true,
triggeringEvent: event,
});

View File

@@ -1,22 +1,13 @@
diff --git a/browser/components/tabbrowser/content/tabbrowser.js b/browser/components/tabbrowser/content/tabbrowser.js
index 5f406ea5d09273c9b70b84eee24c6267f88692f8..70cde185cb560a325f894c0ce79f1344b86e2a7c 100644
index 6dece2b9d0462d90a28e75350ce983d87816ef73..4cc07f008d99138a76c8e9813c857c352b425006 100644
--- a/browser/components/tabbrowser/content/tabbrowser.js
+++ b/browser/components/tabbrowser/content/tabbrowser.js
@@ -424,11 +424,67 @@
@@ -415,11 +415,58 @@
return this.tabContainer.visibleTabs;
}
+ get _numVisiblePinTabs() {
+ let i = 0;
+ for (let tab of this.tabs) {
+ if (!tab.pinned && !tab.hasAttribute("zen-glance-tab")) {
+ break;
+ }
+ if (!tab.hidden) {
+ i += !tab.hasAttribute("zen-glance-tab");
+ }
+ }
+ return i;
+ zenInsertTabAtIndex(...args) {
+ return this.#insertTabAtElementIndex(...args);
+ }
+
+ get _numVisiblePinTabsWithoutCollapsed() {
@@ -72,15 +63,15 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..70cde185cb560a325f894c0ce79f1344
}
return i;
}
@@ -558,6 +614,7 @@
@@ -571,6 +618,7 @@
this.tabpanels.appendChild(panel);
let tab = this.tabs[0];
+ ZenWorkspaces.handleInitialTab(tab, (!remoteType || remoteType === E10SUtils.PRIVILEGEDABOUT_REMOTE_TYPE) && !Services.prefs.getBoolPref('zen.workspaces.disable_empty_state_for_testing', false));
+ ZenWorkspaces.handleInitialTab(tab, (!remoteType || remoteType === E10SUtils.PRIVILEGEDABOUT_REMOTE_TYPE) && !gZenUIManager.testingEnabled);
tab.linkedPanel = uniqueId;
this._selectedTab = tab;
this._selectedBrowser = browser;
@@ -823,11 +880,13 @@
@@ -836,11 +884,13 @@
}
this.showTab(aTab);
@@ -90,14 +81,14 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..70cde185cb560a325f894c0ce79f1344
+ if (this.tabContainer.verticalMode && !handled) {
this.#handleTabMove(aTab, () =>
- this.verticalPinnedTabsContainer.appendChild(aTab)
+ aTab.hasAttribute("zen-essential") ? document.getElementById("zen-essentials-container").appendChild(aTab) : this.verticalPinnedTabsContainer.insertBefore(aTab, this.verticalPinnedTabsContainer.lastChild)
+ aTab.hasAttribute("zen-essential") ? ZenWorkspaces.getEssentialsSection(aTab).appendChild(aTab) : this.verticalPinnedTabsContainer.insertBefore(aTab, this.verticalPinnedTabsContainer.lastChild)
);
- } else {
+ } else if (!handled) {
this.moveTabTo(aTab, this.pinnedTabCount, { forceStandaloneTab: true });
}
aTab.setAttribute("pinned", "true");
@@ -841,12 +900,15 @@
this.moveTabTo(aTab, {
tabIndex: this.pinnedTabCount,
forceUngrouped: true,
@@ -857,12 +907,15 @@
}
if (this.tabContainer.verticalMode) {
@@ -113,8 +104,8 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..70cde185cb560a325f894c0ce79f1344
+ }
});
} else {
this.moveTabTo(aTab, this.pinnedTabCount - 1, {
@@ -1029,6 +1091,8 @@
this.moveTabTo(aTab, {
@@ -1046,6 +1099,8 @@
let LOCAL_PROTOCOLS = ["chrome:", "about:", "resource:", "data:"];
@@ -123,7 +114,7 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..70cde185cb560a325f894c0ce79f1344
if (
aIconURL &&
!aLoadingPrincipal &&
@@ -1039,6 +1103,9 @@
@@ -1056,6 +1111,9 @@
);
return;
}
@@ -133,7 +124,7 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..70cde185cb560a325f894c0ce79f1344
let browser = this.getBrowserForTab(aTab);
browser.mIconURL = aIconURL;
@@ -1287,6 +1354,7 @@
@@ -1305,6 +1363,7 @@
if (!this._previewMode) {
newTab.recordTimeFromUnloadToReload();
newTab.updateLastAccessed();
@@ -141,7 +132,7 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..70cde185cb560a325f894c0ce79f1344
oldTab.updateLastAccessed();
// if this is the foreground window, update the last-seen timestamps.
if (this.ownerGlobal == BrowserWindowTracker.getTopWindow()) {
@@ -1439,6 +1507,9 @@
@@ -1457,6 +1516,9 @@
}
let activeEl = document.activeElement;
@@ -151,25 +142,26 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..70cde185cb560a325f894c0ce79f1344
// If focus is on the old tab, move it to the new tab.
if (activeEl == oldTab) {
newTab.focus();
@@ -1762,7 +1833,7 @@
@@ -1780,7 +1842,8 @@
}
_setTabLabel(aTab, aLabel, { beforeTabOpen, isContentTitle, isURL } = {}) {
- if (!aLabel || aLabel.includes("about:reader?")) {
+ gZenPinnedTabManager.onTabLabelChanged(aTab);
+ if (!aLabel || aLabel.includes("about:reader?") || aTab.hasAttribute("zen-has-static-label")) {
return false;
}
@@ -1865,7 +1936,7 @@
@@ -1888,7 +1951,7 @@
newIndex = this.selectedTab._tPos + 1;
}
- if (replace) {
+ if (replace && !(!targetTab && this.selectedTab?.hasAttribute('zen-empty-tab'))) {
let browser;
if (targetTab) {
browser = this.getBrowserForTab(targetTab);
@@ -2122,6 +2193,7 @@
if (this.isTabGroupLabel(targetTab)) {
throw new Error(
"Replacing a tab group label with a tab is not supported"
@@ -2152,6 +2215,7 @@
uriIsAboutBlank,
userContextId,
skipLoad,
@@ -177,7 +169,7 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..70cde185cb560a325f894c0ce79f1344
} = {}) {
let b = document.createXULElement("browser");
// Use the JSM global to create the permanentKey, so that if the
@@ -2195,8 +2267,7 @@
@@ -2225,8 +2289,7 @@
// we use a different attribute name for this?
b.setAttribute("name", name);
}
@@ -187,7 +179,7 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..70cde185cb560a325f894c0ce79f1344
b.setAttribute("transparent", "true");
}
@@ -2373,7 +2444,7 @@
@@ -2391,7 +2454,7 @@
let panel = this.getPanel(browser);
let uniqueId = this._generateUniquePanelID();
@@ -196,7 +188,7 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..70cde185cb560a325f894c0ce79f1344
aTab.linkedPanel = uniqueId;
// Inject the <browser> into the DOM if necessary.
@@ -2432,8 +2503,8 @@
@@ -2450,8 +2513,8 @@
// If we transitioned from one browser to two browsers, we need to set
// hasSiblings=false on both the existing browser and the new browser.
if (this.tabs.length == 2) {
@@ -207,7 +199,7 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..70cde185cb560a325f894c0ce79f1344
} else {
aTab.linkedBrowser.browsingContext.hasSiblings = this.tabs.length > 1;
}
@@ -2655,6 +2726,7 @@
@@ -2679,6 +2742,7 @@
schemelessInput,
hasValidUserGestureActivation = false,
textDirectiveUserActivation = false,
@@ -215,7 +207,7 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..70cde185cb560a325f894c0ce79f1344
} = {}
) {
// all callers of addTab that pass a params object need to pass
@@ -2665,6 +2737,12 @@
@@ -2689,6 +2753,12 @@
);
}
@@ -228,7 +220,7 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..70cde185cb560a325f894c0ce79f1344
if (!UserInteraction.running("browser.tabs.opening", window)) {
UserInteraction.start("browser.tabs.opening", "initting", window);
}
@@ -2728,6 +2806,16 @@
@@ -2752,6 +2822,16 @@
noInitialLabel,
skipBackgroundNotify,
});
@@ -243,17 +235,17 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..70cde185cb560a325f894c0ce79f1344
+ t.setAttribute("zen-empty-tab", "true");
+ }
if (insertTab) {
// insert the tab into the tab container in the correct position
this._insertTabAtIndex(t, {
@@ -2752,6 +2840,7 @@
initialBrowsingContextGroupId,
if (typeof index == "number") {
elementIndex = this.#tabIndexToElementIndex(index);
@@ -2779,6 +2859,7 @@
openWindowInfo,
skipLoad,
triggeringRemoteType,
+ _forZenEmptyTab,
}));
if (focusUrlBar) {
@@ -2871,6 +2960,9 @@
@@ -2898,6 +2979,9 @@
}
}
@@ -263,7 +255,7 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..70cde185cb560a325f894c0ce79f1344
// Additionally send pinned tab events
if (pinned) {
this._notifyPinnedStatus(t);
@@ -2891,12 +2983,15 @@
@@ -2945,12 +3029,15 @@
* @param {string} [label=]
* @returns {MozTabbrowserTabGroup}
*/
@@ -280,15 +272,15 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..70cde185cb560a325f894c0ce79f1344
return group;
}
@@ -2937,6 +3032,7 @@
@@ -2993,6 +3080,7 @@
insertBefore = null,
isUserCreated = false,
isUserTriggered = false,
telemetryUserCreateSource = "unknown",
+ forSplitView = false,
} = {}
) {
if (!tabs?.length) {
@@ -2951,7 +3047,12 @@
@@ -3011,7 +3099,12 @@
id = `${Date.now()}-${Math.round(Math.random() * 100)}`;
}
let group = this._createTabGroup(id, color, false, label);
@@ -302,15 +294,15 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..70cde185cb560a325f894c0ce79f1344
group,
insertBefore?.group ?? insertBefore
);
@@ -3268,6 +3369,7 @@
initialBrowsingContextGroupId,
@@ -3342,6 +3435,7 @@
openWindowInfo,
skipLoad,
triggeringRemoteType,
+ _forZenEmptyTab
}
) {
// If we don't have a preferred remote type, and we have a remote
@@ -3331,6 +3433,7 @@
// If we don't have a preferred remote type (or it is `NOT_REMOTE`), and
@@ -3411,6 +3505,7 @@
openWindowInfo,
name,
skipLoad,
@@ -318,7 +310,7 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..70cde185cb560a325f894c0ce79f1344
});
}
@@ -3509,6 +3612,27 @@
@@ -3589,6 +3684,27 @@
) {
tabWasReused = true;
tab = this.selectedTab;
@@ -346,15 +338,7 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..70cde185cb560a325f894c0ce79f1344
if (!tabData.pinned) {
this.unpinTab(tab);
} else {
@@ -3522,6 +3646,7 @@
restoreTabsLazily && !select && !tabData.pinned;
let url = "about:blank";
+ gZenPinnedTabManager.resetPinnedTabData(tabData);
if (tabData.entries?.length) {
let activeIndex = (tabData.index || tabData.entries.length) - 1;
// Ensure the index is in bounds.
@@ -3557,7 +3682,27 @@
@@ -3637,7 +3753,27 @@
skipLoad: true,
preferredRemoteType,
});
@@ -383,18 +367,7 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..70cde185cb560a325f894c0ce79f1344
if (select) {
tabToSelect = tab;
}
@@ -3570,8 +3715,8 @@
// inserted in the DOM. If the tab is not yet in the DOM,
// just insert it in the right place from the start.
if (!tab.parentNode) {
- tab._tPos = this.pinnedTabCount;
- this.tabContainer.insertBefore(tab, this.tabs[this.pinnedTabCount]);
+ tab._tPos = this._numVisiblePinTabs;
+ this.tabContainer.insertBefore(tab, this.tabs[this._numVisiblePinTabs]);
tab.toggleAttribute("pinned", true);
this.tabContainer._invalidateCachedTabs();
// Then ensure all the tab open/pinning information is sent.
@@ -3581,7 +3726,8 @@
@@ -3661,7 +3797,8 @@
// needs calling:
shouldUpdateForPinnedTabs = true;
}
@@ -404,7 +377,7 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..70cde185cb560a325f894c0ce79f1344
let { groupId } = tabData;
const tabGroup = tabGroupWorkingData.get(groupId);
// if a tab refers to a tab group we don't know, skip any group
@@ -3595,7 +3741,10 @@
@@ -3675,7 +3812,10 @@
tabGroup.stateData.id,
tabGroup.stateData.color,
tabGroup.stateData.collapsed,
@@ -416,17 +389,23 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..70cde185cb560a325f894c0ce79f1344
);
tabsFragment.appendChild(tabGroup.node);
}
@@ -3646,6 +3795,9 @@
@@ -3723,8 +3863,15 @@
// to remove the old selected tab.
if (tabToSelect) {
let leftoverTab = this.selectedTab;
+ if (tabToSelect.pinned) {
+ ZenWorkspaces._tabToRemoveForEmpty = leftoverTab;
+ } else {
this.selectedTab = tabToSelect;
this.removeTab(leftoverTab);
}
+ }
+ }
+ else {
+ this.selectedTab._possiblyEmpty = this.selectedTab.isEmpty; // Not needed, but just in case.
+ }
}
if (tabs.length > 1 || !tabs[0].selected) {
this._updateTabsAfterInsert();
@@ -3830,7 +3982,7 @@
@@ -3912,7 +4059,7 @@
// Ensure we have an index if one was not provided.
if (typeof index != "number") {
// Move the new tab after another tab if needed, to the end otherwise.
@@ -435,7 +414,7 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..70cde185cb560a325f894c0ce79f1344
if (
!bulkOrderedOpen &&
((openerTab &&
@@ -3876,18 +4028,18 @@
@@ -3958,18 +4105,18 @@
// Ensure index is within bounds.
if (tab.pinned) {
@@ -445,39 +424,55 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..70cde185cb560a325f894c0ce79f1344
+ index = Math.min(index, tab.hasAttribute("zen-essential") ? this._numZenEssentials : this.pinnedTabCount);
} else {
index = Math.max(index, this.pinnedTabCount);
index = Math.min(index, this.tabs.length);
index = Math.min(index, this.tabContainer.ariaFocusableItems.length);
}
/** @type {MozTabbrowserTab|undefined} */
- let tabAfter = this.tabs.at(index);
+ let tabAfter = this.tabs.filter(tab => !tab.hasAttribute("zen-glance-tab")).at(index);
- let itemAfter = this.tabContainer.ariaFocusableItems.at(index);
+ let itemAfter = this.tabContainer.ariaFocusableItems.filter(tab => !tab.hasAttribute("zen-glance-tab")).at(index);
this.tabContainer._invalidateCachedTabs();
- if (tabGroup) {
+ if (tabGroup && !tabGroup.hasAttribute("split-view-group")) {
if (tabAfter && tabAfter.group == tabGroup) {
if (this.isTab(itemAfter) && itemAfter.group == tabGroup) {
// Place at the front of, or between tabs in, the same tab group
this.tabContainer.insertBefore(tab, tabAfter);
@@ -4199,6 +4351,9 @@
this.tabContainer.insertBefore(tab, itemAfter);
@@ -4290,6 +4437,9 @@
return;
}
+ for (let tab of selectedTabs) {
+ gZenPinnedTabManager._removePinnedAttributes(tab, true);
+ }
this.removeTabs(selectedTabs);
this.removeTabs(selectedTabs, { telemetrySource });
}
@@ -4556,6 +4711,7 @@
skipSessionStore,
@@ -4542,6 +4692,7 @@
telemetrySource,
} = {}
) {
+ tabs = tabs.filter(tab => !tab.hasAttribute("zen-empty-tab"));
// When 'closeWindowWithLastTab' pref is enabled, closing all tabs
// can be considered equivalent to closing the window.
if (
@@ -4626,6 +4777,7 @@
if (lastToClose) {
this.removeTab(lastToClose, aParams);
}
+ gZenUIManager.onTabClose(undefined);
} catch (e) {
console.error(e);
}
@@ -4650,6 +4802,7 @@
telemetrySource,
} = {}
) {
+ gZenUIManager.saveScrollbarState();
if (UserInteraction.running("browser.tabs.opening", window)) {
UserInteraction.finish("browser.tabs.opening", window);
}
@@ -4572,6 +4728,12 @@
TelemetryStopwatch.start("FX_TAB_CLOSE_TIME_NO_ANIM_MS", aTab);
@@ -4663,6 +4816,12 @@
aTab._closeTimeNoAnimTimerId = Glean.browserTabclose.timeNoAnim.start();
}
+ if (ZenWorkspaces.workspaceEnabled) {
@@ -489,7 +484,7 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..70cde185cb560a325f894c0ce79f1344
// Handle requests for synchronously removing an already
// asynchronously closing tab.
if (!animate && aTab.closing) {
@@ -4586,7 +4748,9 @@
@@ -4677,7 +4836,9 @@
// frame created for it (for example, by updating the visually selected
// state).
let tabWidth = window.windowUtils.getBoundsWithoutFlushing(aTab).width;
@@ -500,32 +495,16 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..70cde185cb560a325f894c0ce79f1344
if (
!this._beginRemoveTab(aTab, {
closeWindowFastpath: true,
@@ -4600,7 +4764,6 @@
TelemetryStopwatch.cancel("FX_TAB_CLOSE_TIME_NO_ANIM_MS", aTab);
return;
}
-
let lockTabSizing =
!this.tabContainer.verticalMode &&
!aTab.pinned &&
@@ -4739,14 +4902,14 @@
!!this.tabsInCollapsedTabGroups.length;
if (
aTab.visible &&
- this.visibleTabs.length == 1 &&
+ this.visibleTabs.length == 1 && !aTab._closingGlance &&
!anyRemainingTabsInCollapsedTabGroups
) {
closeWindow =
@@ -4840,7 +5001,7 @@
closeWindowWithLastTab != null
? closeWindowWithLastTab
: !window.toolbar.visible ||
- Services.prefs.getBoolPref("browser.tabs.closeWindowWithLastTab");
+ Services.prefs.getBoolPref("browser.tabs.closeWindowWithLastTab") && !ZenWorkspaces._isClosingWindow && !ZenWorkspaces._removedByStartupPage;
+ Services.prefs.getBoolPref("browser.tabs.closeWindowWithLastTab") && !ZenWorkspaces._isClosingWindow && !ZenWorkspaces._removedByStartupPage;
if (closeWindow) {
// We've already called beforeunload on all the relevant tabs if we get here,
@@ -4770,6 +4933,7 @@
@@ -4864,6 +5025,7 @@
newTab = true;
}
@@ -533,7 +512,7 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..70cde185cb560a325f894c0ce79f1344
aTab._endRemoveArgs = [closeWindow, newTab];
// swapBrowsersAndCloseOther will take care of closing the window without animation.
@@ -4810,9 +4974,7 @@
@@ -4903,9 +5065,7 @@
aTab._mouseleave();
if (newTab) {
@@ -544,7 +523,7 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..70cde185cb560a325f894c0ce79f1344
} else {
TabBarVisibility.update();
}
@@ -4941,6 +5103,8 @@
@@ -5034,6 +5194,8 @@
this.tabs[i]._tPos = i;
}
@@ -553,7 +532,7 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..70cde185cb560a325f894c0ce79f1344
if (!this._windowIsClosing) {
if (wasPinned) {
this.tabContainer._positionPinnedTabs();
@@ -5064,8 +5228,8 @@
@@ -5159,8 +5321,8 @@
return closedCount;
}
@@ -564,7 +543,15 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..70cde185cb560a325f894c0ce79f1344
if (unloadBlocked) {
return;
}
@@ -5159,7 +5323,7 @@
@@ -5248,6 +5410,7 @@
}
let excludeTabs = new Set(aExcludeTabs);
+ ZenWorkspaces.getTabsToExclude(aTab).forEach(tab => excludeTabs.add(tab));
// If this tab has a successor, it should be selectable, since
// hiding or closing a tab removes that tab as a successor.
@@ -5260,13 +5423,13 @@
!excludeTabs.has(aTab.owner) &&
Services.prefs.getBoolPref("browser.tabs.selectOwnerOnClose")
) {
@@ -573,7 +560,14 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..70cde185cb560a325f894c0ce79f1344
}
// Try to find a remaining tab that comes after the given tab
@@ -5181,7 +5345,7 @@
let remainingTabs = Array.prototype.filter.call(
this.visibleTabs,
- tab => !excludeTabs.has(tab)
+ tab => !excludeTabs.has(tab) && ZenWorkspaces._shouldChangeToTab(tab)
);
let tab = this.tabContainer.findNextTab(aTab, {
@@ -5282,7 +5445,7 @@
}
if (tab) {
@@ -582,7 +576,16 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..70cde185cb560a325f894c0ce79f1344
}
// If no qualifying visible tab was found, see if there is a tab in
@@ -5599,10 +5763,10 @@
@@ -5303,7 +5466,7 @@
});
}
- return tab;
+ return ZenWorkspaces.findTabToBlur(tab);
}
_blurTab(aTab) {
@@ -5704,10 +5867,10 @@
SessionStore.deleteCustomTabValue(aTab, "hiddenBy");
}
@@ -595,69 +598,68 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..70cde185cb560a325f894c0ce79f1344
aTab.selected ||
aTab.closing ||
// Tabs that are sharing the screen, microphone or camera cannot be hidden.
@@ -5838,7 +6002,7 @@
moveTabTo(aTab, aIndex, { forceStandaloneTab = false } = {}) {
// Don't allow mixing pinned and unpinned tabs.
if (aTab.pinned) {
- aIndex = Math.min(aIndex, this.pinnedTabCount - 1);
+ aIndex = aTab.hasAttribute('zen-essential') ? Math.min(aIndex, this._numZenEssentials - 1) : Math.min(aIndex, this.pinnedTabCount - 1);
} else {
aIndex = Math.max(aIndex, this.pinnedTabCount);
}
@@ -5848,10 +6012,17 @@
@@ -6001,7 +6164,7 @@
this.#handleTabMove(aTab, () => {
let neighbor = this.tabs[aIndex];
- if (forceStandaloneTab && neighbor.group) {
+ const _tPos = aTab._tPos;
+ if ((forceStandaloneTab && neighbor.group) || neighbor.group?.hasAttribute("split-view-group")) {
neighbor = neighbor.group;
// Don't allow mixing pinned and unpinned tabs.
if (this.isTab(element) && element.pinned) {
- tabIndex = Math.min(tabIndex, this.pinnedTabCount - 1);
+ tabIndex = element.hasAttribute('zen-essential') ? Math.min(tabIndex, this._numZenEssentials - 1) : Math.min(tabIndex, this.pinnedTabCount - 1);
} else {
tabIndex = Math.max(tabIndex, this.pinnedTabCount);
}
@@ -6028,9 +6191,16 @@
element,
() => {
let neighbor = this.tabs[tabIndex];
- if (forceUngrouped && neighbor.group) {
+ const _tPos = element._tPos;
+ if ((forceUngrouped && neighbor?.group) || neighbor?.group?.hasAttribute("split-view-group")) {
neighbor = neighbor.group;
}
+ if (element.group?.hasAttribute("split-view-group")) {
+ element = element.group;
+ }
+ if (element.group?.hasAttribute("split-view-group") && neighbor == element.group) {
+ return;
+ }
if (neighbor && this.isTab(element) && tabIndex > element._tPos) {
neighbor.after(element);
} else {
@@ -6099,7 +6269,9 @@
targetElement = targetElement.group;
}
- if (neighbor && aIndex > aTab._tPos) {
+ if (aTab.group?.hasAttribute("split-view-group")) {
+ aTab = aTab.group;
+ }
+ if (aTab.group?.hasAttribute("split-view-group") && neighbor == aTab.group) {
+ return;
+ }
+ if (neighbor && aIndex >= _tPos) {
neighbor.after(aTab);
} else {
this.tabContainer.insertBefore(aTab, neighbor);
@@ -5901,13 +6072,22 @@
* Bug 1955388 - prevent pinned tabs from commingling with non-pinned tabs
* when there are hidden tabs present
*/
+ if (tab.group?.hasAttribute("split-view-group")) {
+ tab = tab.group;
+ }
+
if (tab.pinned && !targetElement?.pinned) {
// prevent pinned tab from being dragged past a non-pinned tab
targetElement = this.tabs[this.pinnedTabCount - 1];
moveBefore = false;
}
-
+ if (element.group?.hasAttribute("split-view-group")) {
+ element = element.group;
+ }
// Don't allow mixing pinned and unpinned tabs.
if (element.pinned && !targetElement?.pinned) {
targetElement = this.tabs[this.pinnedTabCount - 1];
@@ -6109,7 +6281,13 @@
moveBefore = true;
}
+ if (targetElement?.group?.hasAttribute("split-view-group")) {
+ targetElement = targetElement.group;
+ }
let getContainer = () => {
+ if (tab.hasAttribute("zen-essential")) {
+ return document.getElementById("zen-essentials-container");
+ if (element.hasAttribute("zen-essential")) {
+ return ZenWorkspaces.getEssentialsSection(element);
+ }
if (tab.pinned && this.tabContainer.verticalMode) {
if (element.pinned && this.tabContainer.verticalMode) {
return this.tabContainer.verticalPinnedTabsContainer;
}
@@ -5937,7 +6117,7 @@
}
moveTabToGroup(aTab, aGroup) {
@@ -6169,7 +6347,7 @@
if (!this.isTab(aTab)) {
throw new Error("Can only move a tab into a tab group");
}
- if (aTab.pinned) {
+ if (aTab.pinned != !!aGroup.pinned) {
return;
}
if (aTab.group && aTab.group.id === aGroup.id) {
@@ -5961,6 +6141,10 @@
@@ -6263,6 +6441,10 @@
moveActionCallback();
@@ -668,16 +670,7 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..70cde185cb560a325f894c0ce79f1344
// Clear tabs cache after moving nodes because the order of tabs may have
// changed.
this.tabContainer._invalidateCachedTabs();
@@ -6015,7 +6199,7 @@
createLazyBrowser,
};
- let numPinned = this.pinnedTabCount;
+ let numPinned = this._numVisiblePinTabs;
if (aIndex < numPinned || (aTab.pinned && aIndex == numPinned)) {
params.pinned = true;
}
@@ -6765,7 +6949,7 @@
@@ -7080,7 +7262,7 @@
// preventDefault(). It will still raise the window if appropriate.
break;
}
@@ -686,7 +679,7 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..70cde185cb560a325f894c0ce79f1344
window.focus();
aEvent.preventDefault();
break;
@@ -7671,6 +7855,7 @@
@@ -7981,6 +8163,7 @@
aWebProgress.isTopLevel
) {
this.mTab.setAttribute("busy", "true");
@@ -694,7 +687,7 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..70cde185cb560a325f894c0ce79f1344
gBrowser._tabAttrModified(this.mTab, ["busy"]);
this.mTab._notselectedsinceload = !this.mTab.selected;
}
@@ -8640,7 +8825,7 @@ var TabContextMenu = {
@@ -8954,7 +9137,7 @@ var TabContextMenu = {
);
contextUnpinSelectedTabs.hidden =
!this.contextTab.pinned || !this.multiselected;
@@ -703,20 +696,11 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..70cde185cb560a325f894c0ce79f1344
// Move Tab items
let contextMoveTabOptions = document.getElementById(
"context_moveTabOptions"
@@ -8674,7 +8859,7 @@ var TabContextMenu = {
let isFirstTab =
!this.contextTabs[0].group &&
(this.contextTabs[0] == visibleTabs[0] ||
- this.contextTabs[0] == visibleTabs[gBrowser.pinnedTabCount]);
+ this.contextTabs[0] == visibleTabs[gBrowser._numVisiblePinTabs]);
contextMoveTabToStart.disabled = isFirstTab && allSelectedTabsAdjacent;
document.getElementById("context_openTabInWindow").disabled =
@@ -8904,6 +9089,7 @@ var TabContextMenu = {
if (this.contextTab.multiselected) {
gBrowser.removeMultiSelectedTabs();
@@ -9223,6 +9406,7 @@ var TabContextMenu = {
telemetrySource: gBrowser.TabMetrics.METRIC_SOURCE.TAB_STRIP,
});
} else {
+ gZenPinnedTabManager._removePinnedAttributes(this.contextTab, true);
gBrowser.removeTab(this.contextTab, { animate: true });
}
},
gBrowser.removeTab(this.contextTab, {
animate: true,
telemetrySource: gBrowser.TabMetrics.METRIC_SOURCE.TAB_STRIP,

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/tabbrowser/content/tabs.js b/browser/components/tabbrowser/content/tabs.js
index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..0d3919b288afefb05e3ec54ddfa90f001dd4c3b1 100644
index ef9c0389ec926e6bc01c0dc3b883beceaf1f7d43..2885d896c4026278dfcb309f12230d6f86275ada 100644
--- a/browser/components/tabbrowser/content/tabs.js
+++ b/browser/components/tabbrowser/content/tabs.js
@@ -93,7 +93,7 @@
@@ -83,7 +83,7 @@
};
this.arrowScrollbox._canScrollToElement = element => {
if (isTab(element)) {
@@ -11,7 +11,7 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..0d3919b288afefb05e3ec54ddfa90f00
}
return true;
};
@@ -347,7 +347,7 @@
@@ -342,7 +342,7 @@
// and we're not hitting the scroll buttons.
if (
event.button != 0 ||
@@ -20,7 +20,7 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..0d3919b288afefb05e3ec54ddfa90f00
event.composedTarget.localName == "toolbarbutton"
) {
return;
@@ -396,6 +396,7 @@
@@ -391,6 +391,7 @@
// Reset the "ignored click" flag
target._ignoredCloseButtonClicks = false;
}
@@ -28,8 +28,8 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..0d3919b288afefb05e3ec54ddfa90f00
}
/* Protects from close-tab-button errant doubleclick:
@@ -693,7 +694,7 @@
if (this.#isContainerVerticalPinnedExpanded(tab)) {
@@ -692,7 +693,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
- let pinnedTabs = this.visibleTabs.slice(0, gBrowser.pinnedTabCount);
@@ -37,7 +37,16 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..0d3919b288afefb05e3ec54ddfa90f00
let tabsPerRow = 0;
let position = 0;
for (let pinnedTab of pinnedTabs) {
@@ -899,6 +900,10 @@
@@ -764,7 +765,7 @@
} else if (isTabGroupLabel(tab) && !tab.group.collapsed) {
this._lockTabSizing();
this.#keepTabSizeLocked = true;
- tab.group.collapsed = true;
+ tab.group.collapsed = !tab.group.hasAttribute("split-view-group");
expandGroupOnDrop = true;
}
}
@@ -913,6 +914,10 @@
}
let draggedTab = event.dataTransfer.mozGetDataAt(TAB_DROP_TYPE, 0);
@@ -47,8 +56,8 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..0d3919b288afefb05e3ec54ddfa90f00
+ }
if (
(effects == "move" || effects == "copy") &&
this == draggedTab.container &&
@@ -1012,6 +1017,18 @@
document == draggedTab.ownerDocument &&
@@ -1069,6 +1074,18 @@
this._tabDropIndicator.hidden = true;
event.stopPropagation();
@@ -60,14 +69,14 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..0d3919b288afefb05e3ec54ddfa90f00
+ let moved = gZenPinnedTabManager.moveToAnotherTabContainerIfNecessary(event, movingTabs);
+
+ if (moved) {
+ this._finishMoveTogetherSelectedTabs(draggedTab);
+ this.finishMoveTogetherSelectedTabs(draggedTab);
+ return;
+ }
+ }
if (draggedTab && dropEffect == "copy") {
// copy the dropped tab (wherever it's from)
let newIndex = this._getDropIndex(event);
@@ -1050,10 +1067,11 @@
let duplicatedDraggedTab;
let duplicatedTabs = [];
@@ -1108,10 +1125,11 @@
}
} else {
let isPinned = draggedTab.pinned;
@@ -83,8 +92,8 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..0d3919b288afefb05e3ec54ddfa90f00
);
let size = this.verticalMode ? "height" : "width";
let screenAxis = this.verticalMode ? "screenY" : "screenX";
@@ -1129,7 +1147,7 @@
tab.removeAttribute("tabdrop-samewindow");
@@ -1203,7 +1221,7 @@
item.removeAttribute("tabdrop-samewindow");
resolve();
};
- if (gReduceMotion) {
@@ -92,42 +101,33 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..0d3919b288afefb05e3ec54ddfa90f00
postTransitionCleanup();
} else {
let onTransitionEnd = transitionendEvent => {
@@ -1246,7 +1264,7 @@
return;
}
}
-
@@ -1327,6 +1345,7 @@
let nextItem = this.ariaFocusableItems[newIndex];
let tabGroup = isTab(nextItem) && nextItem.group;
+ if (gZenViewSplitter.handleTabDrop(event, urls, replace, inBackground)) return;
gBrowser.loadTabs(urls, {
inBackground,
replace,
@@ -1276,13 +1294,23 @@
return;
}
- this._finishMoveTogetherSelectedTabs(draggedTab);
this._finishAnimateTabMove();
@@ -1359,6 +1378,17 @@
this.finishMoveTogetherSelectedTabs(draggedTab);
this.finishAnimateTabMove();
+
+ if (!dt.mozUserCancelled && dt.dropEffect == "none" && !this._isCustomizing) {
+ const moved = gZenViewSplitter.moveTabToSplitView(event, draggedTab);
+ if (moved) {
+ delete draggedTab._dragData;
+ return;
+ }
+ } else if (dt.mozUserCancelled) {
+ if (gZenViewSplitter._lastOpenedTab) gZenViewSplitter._lastOpenedTab._visuallySelected = false;
+ }
+
+ this._finishMoveTogetherSelectedTabs(draggedTab);
+
this.#expandGroupOnDrop(draggedTab);
if (
dt.mozUserCancelled ||
dt.dropEffect != "none" ||
- this._isCustomizing
+ this._isCustomizing ||
+ draggedTab.pinned
) {
delete draggedTab._dragData;
return;
@@ -1504,7 +1532,7 @@
@@ -1582,7 +1612,7 @@
}
get newTabButton() {
@@ -136,7 +136,7 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..0d3919b288afefb05e3ec54ddfa90f00
}
get verticalMode() {
@@ -1524,29 +1552,41 @@
@@ -1606,29 +1636,41 @@
if (this.#allTabs) {
return this.#allTabs;
}
@@ -156,7 +156,7 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..0d3919b288afefb05e3ec54ddfa90f00
this.#allTabs = [
- ...this.verticalPinnedTabsContainer.children,
+ ...document.getElementById("zen-essentials-container").children, ...this.verticalPinnedTabsContainer.children,
+ ...ZenWorkspaces.getCurrentEssentialsContainer().children, ...this.verticalPinnedTabsContainer.children,
...children,
];
+ const lastPinnedTabIdx = gBrowser.pinnedTabCount;
@@ -186,7 +186,7 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..0d3919b288afefb05e3ec54ddfa90f00
}
/**
@@ -1566,7 +1606,7 @@
@@ -1648,7 +1690,7 @@
*/
get visibleTabs() {
if (!this.#visibleTabs) {
@@ -195,7 +195,7 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..0d3919b288afefb05e3ec54ddfa90f00
}
return this.#visibleTabs;
}
@@ -1601,23 +1641,18 @@
@@ -1683,23 +1725,18 @@
}
let elementIndex = 0;
@@ -211,7 +211,7 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..0d3919b288afefb05e3ec54ddfa90f00
let focusableItems = [];
- for (let child of children) {
+ for (let child of [...document.getElementById("zen-essentials-container").children, ...verticalPinnedTabsContainer.children, ...children]) {
+ for (let child of [...ZenWorkspaces.getCurrentEssentialsContainer().children, ...verticalPinnedTabsContainer.children, ...children]) {
if (isTab(child) && child.visible) {
child.elementIndex = elementIndex++;
focusableItems.push(child);
@@ -223,8 +223,15 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..0d3919b288afefb05e3ec54ddfa90f00
let visibleTabsInGroup = child.tabs.filter(tab => tab.visible);
visibleTabsInGroup.forEach(tab => {
tab.elementIndex = elementIndex++;
@@ -1627,10 +1662,7 @@
@@ -1707,12 +1744,14 @@
focusableItems.push(...visibleTabsInGroup);
}
}
+ let glanceTab = child.querySelector("tab[zen-glance-tab]");
+ if (isTab(child) && glanceTab) {
+ glanceTab.elementIndex = elementIndex++;
+ focusableItems.push(glanceTab);
+ }
}
- this.#focusableItems = [
@@ -235,7 +242,7 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..0d3919b288afefb05e3ec54ddfa90f00
return this.#focusableItems;
}
@@ -1638,6 +1670,7 @@
@@ -1720,6 +1759,7 @@
_invalidateCachedTabs() {
this.#allTabs = null;
this._invalidateCachedVisibleTabs();
@@ -243,18 +250,18 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..0d3919b288afefb05e3ec54ddfa90f00
}
_invalidateCachedVisibleTabs() {
@@ -1652,8 +1685,8 @@
#isContainerVerticalPinnedExpanded(tab) {
@@ -1734,8 +1774,8 @@
#isContainerVerticalPinnedGrid(tab) {
return (
this.verticalMode &&
- tab.hasAttribute("pinned") &&
- this.hasAttribute("expanded")
- this.hasAttribute("expanded") &&
+ (tab.hasAttribute("zen-essential")) &&
+ (this.hasAttribute("expanded") || document.documentElement.hasAttribute("zen-sidebar-expanded"))
+ (this.hasAttribute("expanded") || document.documentElement.hasAttribute("zen-sidebar-expanded")) &&
!this.expandOnHover
);
}
@@ -1668,7 +1701,7 @@
@@ -1751,7 +1791,7 @@
if (node == null) {
// We have a container for non-tab elements at the end of the scrollbox.
@@ -263,7 +270,7 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..0d3919b288afefb05e3ec54ddfa90f00
}
node.before(tab);
@@ -1763,7 +1796,7 @@
@@ -1846,7 +1886,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.
@@ -272,16 +279,7 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..0d3919b288afefb05e3ec54ddfa90f00
const newTab2 = this.newTabButton;
const newTabVertical = document.getElementById(
"vertical-tabs-newtab-button"
@@ -1846,7 +1879,7 @@
let rect = ele => {
return window.windowUtils.getBoundsWithoutFlushing(ele);
};
- let tab = this.visibleTabs[gBrowser.pinnedTabCount];
+ let tab = this.visibleTabs[gBrowser._numVisiblePinTabs];
if (tab && rect(tab).width <= this._tabClipWidth) {
this.setAttribute("closebuttons", "activetab");
} else {
@@ -1858,10 +1891,12 @@
@@ -1941,10 +1981,12 @@
_handleTabSelect(aInstant) {
let selectedTab = this.selectedItem;
@@ -294,34 +292,7 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..0d3919b288afefb05e3ec54ddfa90f00
selectedTab._notselectedsinceload = false;
}
@@ -1873,7 +1908,7 @@
return;
}
- let tabs = this.visibleTabs;
+ let tabs = this.visibleTabs.filter(tab => !tab.hasAttribute("zen-glance-tab"));
if (!tabs.length) {
return;
}
@@ -1909,7 +1944,7 @@
if (isEndTab && !this._hasTabTempMaxWidth) {
return;
}
- let numPinned = gBrowser.pinnedTabCount;
+ let numPinned = gBrowser._numVisiblePinTabs;
// Force tabs to stay the same width, unless we're closing the last tab,
// which case we need to let them expand just enough so that the overall
// tabbar width is the same.
@@ -1924,7 +1959,7 @@
let tabsToReset = [];
for (let i = numPinned; i < tabs.length; i++) {
let tab = tabs[i];
- tab.style.setProperty("max-width", aTabWidth, "important");
+ //tab.style.setProperty("max-width", aTabWidth, "important");
if (!isEndTab) {
// keep tabs the same width
tab.style.transition = "none";
@@ -1990,16 +2025,15 @@
@@ -2085,16 +2127,15 @@
// Move pinned tabs to another container when the tabstrip is toggled to vertical
// and when session restore code calls _positionPinnedTabs; update styling whenever
// the number of pinned tabs changes.
@@ -335,16 +306,16 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..0d3919b288afefb05e3ec54ddfa90f00
- let tabs = this.visibleTabs;
+ if (!ZenWorkspaces._hasInitializedTabsStrip) return;
+ let count = ZenWorkspaces.makeSurePinTabIsInCorrectPosition();
+ if (gBrowser.pinnedTabCount !== (verticalTabsContainer.children.length - count - 1 + document.getElementById("zen-essentials-container").children.length)) {
+ if (gBrowser.pinnedTabCount !== (verticalTabsContainer.children.length - count - 1 + ZenWorkspaces.getCurrentEssentialsContainer().children.length)) {
+ let tabs = this.allTabs.filter(tab => !tab.hasAttribute("zen-glance-tab"));
for (let i = 0; i < numPinned; i++) {
tabs[i].style.marginInlineStart = "";
- verticalTabsContainer.appendChild(tabs[i]);
+ tabs[i].hasAttribute("zen-essential") ? document.getElementById("zen-essentials-container").appendChild(tabs[i].group?.hasAttribute("split-view-group") ? tabs[i].group : tabs[i]) : verticalTabsContainer.insertBefore(tabs[i].group?.hasAttribute("split-view-group") ? tabs[i].group : tabs[i], verticalTabsContainer.lastChild);
+ tabs[i].hasAttribute("zen-essential") ? ZenWorkspaces.getCurrentEssentialsContainer().appendChild(tabs[i].group?.hasAttribute("split-view-group") ? tabs[i].group : tabs[i]) : verticalTabsContainer.insertBefore(tabs[i].group?.hasAttribute("split-view-group") ? tabs[i].group : tabs[i], verticalTabsContainer.lastChild);
}
}
@@ -2007,9 +2041,7 @@
@@ -2102,9 +2143,7 @@
}
_resetVerticalPinnedTabs() {
@@ -355,18 +326,16 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..0d3919b288afefb05e3ec54ddfa90f00
if (!verticalTabsContainer.children.length) {
return;
@@ -2022,8 +2054,8 @@
@@ -2117,7 +2156,7 @@
}
_positionPinnedTabs() {
- let tabs = this.visibleTabs;
- let numPinned = gBrowser.pinnedTabCount;
+ let tabs = this.visibleTabs.filter(tab => !tab.hasAttribute("zen-glance-tab"));
+ let numPinned = gBrowser._numVisiblePinTabs;
let numPinned = gBrowser.pinnedTabCount;
let absPositionHorizontalTabs =
this.overflowing && tabs.length > numPinned && numPinned > 0;
@@ -2032,7 +2064,7 @@
@@ -2127,7 +2166,7 @@
if (this.verticalMode) {
this._updateVerticalPinnedTabs();
@@ -375,7 +344,7 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..0d3919b288afefb05e3ec54ddfa90f00
let layoutData = this._pinnedTabsLayoutCache;
let uiDensity = document.documentElement.getAttribute("uidensity");
if (!layoutData || layoutData.uiDensity != uiDensity) {
@@ -2104,7 +2136,7 @@
@@ -2191,7 +2230,7 @@
return;
}
@@ -384,7 +353,7 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..0d3919b288afefb05e3ec54ddfa90f00
let directionX = screenX > dragData.animLastScreenX;
let directionY = screenY > dragData.animLastScreenY;
@@ -2112,7 +2144,7 @@
@@ -2199,7 +2238,7 @@
dragData.animLastScreenX = screenX;
let { width: tabWidth, height: tabHeight } =
@@ -393,14 +362,16 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..0d3919b288afefb05e3ec54ddfa90f00
let shiftSizeX = tabWidth * movingTabs.length;
let shiftSizeY = tabHeight;
dragData.tabWidth = tabWidth;
@@ -2296,11 +2328,15 @@
@@ -2374,12 +2413,16 @@
this.#clearDragOverCreateGroupTimer();
let isPinned = draggedTab.pinned;
- let isPinned = draggedTab.pinned;
- let numPinned = gBrowser.pinnedTabCount;
- let tabs = this.ariaFocusableItems.slice(
- isPinned ? 0 : numPinned,
- isPinned ? numPinned : undefined
+ let isPinned = draggedTab?.group ? draggedTab.group.pinned : draggedTab.pinned;
+ let numPinned = gBrowser._numVisiblePinTabsWithoutCollapsed;
+ let essential = draggedTab.hasAttribute("zen-essential");
+ let tabs = this.ariaFocusableItems.filter(tab => !tab.hasAttribute("zen-glance-tab")).slice(
@@ -413,7 +384,7 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..0d3919b288afefb05e3ec54ddfa90f00
if (this.#rtlMode) {
tabs.reverse();
@@ -2314,7 +2350,7 @@
@@ -2393,7 +2436,7 @@
let size = this.verticalMode ? "height" : "width";
let translateAxis = this.verticalMode ? "translateY" : "translateX";
let scrollDirection = this.verticalMode ? "scrollTop" : "scrollLeft";
@@ -422,7 +393,7 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..0d3919b288afefb05e3ec54ddfa90f00
let translateX = event.screenX - dragData.screenX;
let translateY = event.screenY - dragData.screenY;
@@ -2328,6 +2364,12 @@
@@ -2407,10 +2450,19 @@
let lastTab = tabs.at(-1);
let lastMovingTab = movingTabs.at(-1);
let firstMovingTab = movingTabs[0];
@@ -435,20 +406,24 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..0d3919b288afefb05e3ec54ddfa90f00
let endEdge = ele => ele[screenAxis] + bounds(ele)[size];
let lastMovingTabScreen = endEdge(lastMovingTab);
let firstMovingTabScreen = firstMovingTab[screenAxis];
@@ -2348,7 +2390,11 @@
translate = Math.min(Math.max(translate, firstBound), lastBound);
for (let tab of movingTabs) {
- tab.style.transform = `${translateAxis}(${translate}px)`;
+ if (tab.group?.hasAttribute("split-view-group")) {
+ tab.group.style.transform = `${translateAxis}(${translate}px)`;
+ } else {
+ tab.style.transform = `${translateAxis}(${translate}px)`;
let shiftSize = lastMovingTabScreen - firstMovingTabScreen;
+ if (firstMovingTab.hasAttribute("split-view-group")) {
+ shiftSize += 5; // A hack to allow more space for the group
+ }
let translate = screen - dragData[screenAxis];
if (!isPinned) {
translate +=
@@ -2431,6 +2483,9 @@
// Shift the `.tab-group-label-container` to shift the label element.
item = item.parentElement;
}
+ if (item.parentElement?.hasAttribute("split-view-group")) {
+ item = item.parentElement;
+ }
item.style.transform = `${translateAxis}(${translate}px)`;
}
dragData.translatePos = translate;
@@ -2485,6 +2531,9 @@
@@ -2568,6 +2623,9 @@
break;
}
let element = tabs[mid];
@@ -458,7 +433,7 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..0d3919b288afefb05e3ec54ddfa90f00
let elementForSize = isTabGroupLabel(element)
? element.parentElement
: element;
@@ -2507,6 +2556,10 @@
@@ -2590,6 +2648,10 @@
if (!dropElement) {
dropElement = this.ariaFocusableItems[oldDropElementIndex];
}
@@ -469,7 +444,7 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..0d3919b288afefb05e3ec54ddfa90f00
let newDropElementIndex = dropElement
? dropElement.elementIndex
: oldDropElementIndex;
@@ -2515,7 +2568,7 @@
@@ -2598,7 +2660,7 @@
let shouldCreateGroupOnDrop;
let dropBefore;
if (dropElement) {
@@ -478,11 +453,11 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..0d3919b288afefb05e3ec54ddfa90f00
? dropElement.parentElement
: dropElement;
@@ -2566,12 +2619,12 @@
@@ -2660,12 +2722,12 @@
}
}
- if (gBrowser._tabGroupsEnabled && !isPinned) {
- if (gBrowser._tabGroupsEnabled && isTab(draggedTab) && !isPinned) {
+ if (true) {
let dragOverGroupingThreshold = 1 - moveOverThreshold;
@@ -493,7 +468,7 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..0d3919b288afefb05e3ec54ddfa90f00
dropElement != draggedTab &&
isTab(dropElement) &&
!dropElement?.group &&
@@ -2639,7 +2692,7 @@
@@ -2735,7 +2797,7 @@
// Shift background tabs to leave a gap where the dragged tab
// would currently be dropped.
for (let item of tabs) {
@@ -502,7 +477,7 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..0d3919b288afefb05e3ec54ddfa90f00
continue;
}
@@ -2648,6 +2701,9 @@
@@ -2744,6 +2806,9 @@
if (isTabGroupLabel(item)) {
// Shift the `.tab-group-label-container` to shift the label element.
item = item.parentElement;
@@ -512,19 +487,19 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..0d3919b288afefb05e3ec54ddfa90f00
}
item.style.transform = transform;
}
@@ -2697,8 +2753,9 @@
@@ -2796,8 +2861,9 @@
);
}
- _finishAnimateTabMove() {
- if (!this.hasAttribute("movingtab")) {
+ _finishAnimateTabMove(always = false) {
- finishAnimateTabMove() {
- if (!this.#isMovingTab()) {
+ finishAnimateTabMove(always = false) {
+ gZenPinnedTabManager.removeTabContainersDragoverClass();
+ if (!this.hasAttribute("movingtab") && !always) {
+ if (!this.#isMovingTab() && !always) {
return;
}
@@ -2711,6 +2768,12 @@
@@ -2809,6 +2875,12 @@
item = item.parentElement;
}
item.style.transform = "";
@@ -537,7 +512,7 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..0d3919b288afefb05e3ec54ddfa90f00
item.removeAttribute("dragover-createGroup");
}
this.removeAttribute("movingtab-createGroup");
@@ -2754,7 +2817,7 @@
@@ -2855,7 +2927,7 @@
let postTransitionCleanup = () => {
movingTab._moveTogetherSelectedTabsData.animate = false;
};
@@ -546,7 +521,7 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..0d3919b288afefb05e3ec54ddfa90f00
postTransitionCleanup();
} else {
let onTransitionEnd = transitionendEvent => {
@@ -2924,7 +2987,7 @@
@@ -3028,7 +3100,7 @@
}
_notifyBackgroundTab(aTab) {
@@ -555,3 +530,13 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..0d3919b288afefb05e3ec54ddfa90f00
return;
}
@@ -3154,6 +3226,9 @@
return null;
}
}
+ if (target?.group?.hasAttribute("split-view-group")) {
+ target = target.group.labelElement;
+ }
return target;
}

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/urlbar/UrlbarInput.sys.mjs b/browser/components/urlbar/UrlbarInput.sys.mjs
index 6de4c2ac873b1424abee118a143ac377f26beb80..3b41d52c8e00860ce9913a334f15f70e1db08a7c 100644
index 4b69136aa31bfef3a1d3b57ad0c75fe07fa26be0..f001ffe262b26389c5af68e29d0785500969c344 100644
--- a/browser/components/urlbar/UrlbarInput.sys.mjs
+++ b/browser/components/urlbar/UrlbarInput.sys.mjs
@@ -67,6 +67,13 @@ XPCOMUtils.defineLazyPreferenceGetter(
@@ -68,6 +68,13 @@ XPCOMUtils.defineLazyPreferenceGetter(
false
);
@@ -16,19 +16,24 @@ index 6de4c2ac873b1424abee118a143ac377f26beb80..3b41d52c8e00860ce9913a334f15f70e
const DEFAULT_FORM_HISTORY_NAME = "searchbar-history";
const SEARCH_BUTTON_CLASS = "urlbar-search-button";
@@ -348,7 +355,11 @@ export class UrlbarInput {
@@ -349,7 +356,16 @@ export class UrlbarInput {
// See _on_select(). HTMLInputElement.select() dispatches a "select"
// event but does not set the primary selection.
this._suppressPrimaryAdjustment = true;
+ this.document.getElementById("navigator-toolbox").setAttribute("supress-primary-adjustment", !this.document.getElementById("navigator-toolbox").hasAttribute("zen-has-hover"));
+ const zenToolbox = this.document.getElementById("navigator-toolbox");
+ zenToolbox.setAttribute("supress-primary-adjustment", !(
+ zenToolbox.hasAttribute("zen-has-hover") ||
+ zenToolbox.hasAttribute("zen-has-empty-tab") ||
+ zenToolbox.hasAttribute("zen-user-show")
+ ));
this.inputField.select();
+ this.document.ownerGlobal.setTimeout(() => {
+ this.document.getElementById("navigator-toolbox").removeAttribute("supress-primary-adjustment");
+ }, 100);
+ zenToolbox.removeAttribute("supress-primary-adjustment");
+ }, 1000);
this._suppressPrimaryAdjustment = false;
}
@@ -424,6 +435,10 @@ export class UrlbarInput {
@@ -425,6 +441,10 @@ export class UrlbarInput {
hideSearchTerms = false,
isSameDocument = false
) {
@@ -39,44 +44,38 @@ index 6de4c2ac873b1424abee118a143ac377f26beb80..3b41d52c8e00860ce9913a334f15f70e
// We only need to update the searchModeUI on tab switch conditionally
// as we only persist searchMode with ScotchBonnet enabled.
if (
@@ -697,8 +712,11 @@ export class UrlbarInput {
@@ -698,8 +718,16 @@ export class UrlbarInput {
return;
}
}
-
+ this.document.getElementById("navigator-toolbox").setAttribute("supress-primary-adjustment", !this.document.getElementById("navigator-toolbox").hasAttribute("zen-has-hover"));
+ const zenToolbox = this.document.getElementById("navigator-toolbox");
+ zenToolbox.setAttribute("supress-primary-adjustment", !(
+ zenToolbox.hasAttribute("zen-has-hover") ||
+ zenToolbox.hasAttribute("zen-has-empty-tab") ||
+ zenToolbox.hasAttribute("zen-user-show")
+ ));
this.handleNavigation({ event });
+ this.document.ownerGlobal.setTimeout(() => {
+ this.document.getElementById("navigator-toolbox").removeAttribute("supress-primary-adjustment");
+ }, 200);
+ zenToolbox.removeAttribute("supress-primary-adjustment");
+ }, 1000);
}
/**
@@ -937,6 +955,10 @@ export class UrlbarInput {
// Nullify search mode before setURI so it won't try to restore it.
this.searchMode = null;
this.setURI(null, true, false, true);
+ if (this.hasAttribute("zen-floating-urlbar")) {
+ this.window.gBrowser.selectedBrowser.focus();
+ return;
+ }
if (this.value && this.focused) {
this.select();
}
@@ -1092,7 +1114,11 @@ export class UrlbarInput {
@@ -1093,7 +1121,11 @@ export class UrlbarInput {
}
if (!this.#providesSearchMode(result)) {
- this.view.close({ elementPicked: true });
+ if (this._zenHandleUrlbarClose) {
+ this._zenHandleUrlbarClose(true);
+ this._zenHandleUrlbarClose(true, true);
+ } else {
+ this.view.close({ elementPicked: true });
+ }
}
this.controller.recordSelectedResult(event, result);
@@ -2124,6 +2150,10 @@ export class UrlbarInput {
@@ -2125,6 +2157,10 @@ export class UrlbarInput {
await this.#updateLayoutBreakoutDimensions();
}
@@ -87,31 +86,55 @@ index 6de4c2ac873b1424abee118a143ac377f26beb80..3b41d52c8e00860ce9913a334f15f70e
startLayoutExtend() {
if (!this.#allowBreakout || this.hasAttribute("breakout-extend")) {
// Do not expand if the Urlbar does not support being expanded or it is
@@ -2146,6 +2176,11 @@ export class UrlbarInput {
@@ -2147,6 +2183,13 @@ export class UrlbarInput {
this.setAttribute("breakout-extend", "true");
+ if (lazy.ZEN_URLBAR_BEHAVIOR == 'float' || (lazy.ZEN_URLBAR_BEHAVIOR == 'floating-on-type' && !this.focusedViaMousedown)) {
+ this.setAttribute("zen-floating-urlbar", "true");
+ // Divide the window by 2 and subtract the urlbar height to get the top
+ this.textbox.style.setProperty("--zen-urlbar-top", `${(this.window.innerHeight / 4)}px`);
+ } else {
+ this.removeAttribute("zen-floating-urlbar");
+ }
// 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")) {
@@ -2165,6 +2200,11 @@ export class UrlbarInput {
@@ -2166,6 +2209,24 @@ export class UrlbarInput {
return;
}
+ if (this._zenHandleUrlbarClose) {
+ this._zenHandleUrlbarClose();
+ }
+
+ // Arc like URLbar: Blur the input on exit
+ const zenToolbox = this.document.getElementById("navigator-toolbox");
+ zenToolbox.setAttribute("supress-primary-adjustment", !(
+ zenToolbox.hasAttribute("zen-has-hover") ||
+ zenToolbox.hasAttribute("zen-has-empty-tab") ||
+ zenToolbox.hasAttribute("zen-user-show")
+ ));
+ this.window.gBrowser.selectedBrowser.focus();
+ this.document.ownerGlobal.setTimeout(() => {
+ zenToolbox.removeAttribute("supress-primary-adjustment");
+ }, 1000);
+
+ this.removeAttribute("zen-floating-urlbar");
+
this.removeAttribute("breakout-extend");
this.#updateTextboxPosition();
}
@@ -2997,7 +3037,7 @@ export class UrlbarInput {
@@ -2485,7 +2546,7 @@ export class UrlbarInput {
this.textbox.parentNode.style.setProperty(
"--urlbar-container-height",
- px(getBoundsWithoutFlushing(this.textbox.parentNode).height)
+ px(getBoundsWithoutFlushing(this.textbox.parentNode).height + 8)
);
this.textbox.style.setProperty(
"--urlbar-height",
@@ -2998,7 +3059,7 @@ export class UrlbarInput {
*/
_trimValue(val) {
let trimmedValue = lazy.UrlbarPrefs.get("trimURLs")
@@ -120,16 +143,18 @@ index 6de4c2ac873b1424abee118a143ac377f26beb80..3b41d52c8e00860ce9913a334f15f70e
: val;
// Only trim value if the directionality doesn't change to RTL and we're not
// showing a strikeout https protocol.
@@ -3359,7 +3399,7 @@ export class UrlbarInput {
} else {
where = lazy.BrowserUtils.whereToOpenLink(event, false, false);
@@ -3368,6 +3429,10 @@ export class UrlbarInput {
}
reuseEmpty = true;
}
- if (lazy.UrlbarPrefs.get("openintab")) {
+ if (lazy.UrlbarPrefs.get("openintab") || this.hasAttribute("zen-newtab")) {
if (where == "current") {
where = "tab";
} else if (where == "tab") {
@@ -3374,6 +3414,9 @@ export class UrlbarInput {
+ if (this.hasAttribute("zen-newtab")) {
+ where = "tab";
+ reuseEmpty = true;
+ }
if (
where == "tab" &&
reuseEmpty &&
@@ -3375,6 +3440,9 @@ export class UrlbarInput {
) {
where = "current";
}
@@ -139,11 +164,27 @@ index 6de4c2ac873b1424abee118a143ac377f26beb80..3b41d52c8e00860ce9913a334f15f70e
return where;
}
@@ -4048,6 +4091,11 @@ export class UrlbarInput {
@@ -3632,6 +3700,7 @@ export class UrlbarInput {
this.setResultForCurrentValue(null);
this.handleCommand();
this.controller.clearLastQueryContextCache();
+ this.view.close();
this._suppressStartQuery = false;
});
@@ -3639,7 +3708,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.
- this.view.close();
let controller =
this.document.commandDispatcher.getControllerForCommand("cmd_paste");
@@ -4053,6 +4121,11 @@ export class UrlbarInput {
}
_on_click(event) {
+ if (lazy.ZEN_URLBAR_BEHAVIOR === 'float' && event.target == this.inputField) {
+ if (event.target == this.inputField) {
+ event.zenOriginalTarget = this.textbox;
+ this._on_mousedown(event);
+ }
@@ -151,7 +192,7 @@ index 6de4c2ac873b1424abee118a143ac377f26beb80..3b41d52c8e00860ce9913a334f15f70e
if (
event.target == this.inputField ||
event.target == this._inputContainer ||
@@ -4119,7 +4167,7 @@ export class UrlbarInput {
@@ -4124,7 +4197,7 @@ export class UrlbarInput {
}
}
@@ -160,7 +201,7 @@ index 6de4c2ac873b1424abee118a143ac377f26beb80..3b41d52c8e00860ce9913a334f15f70e
this.view.autoOpen({ event });
} else {
if (this._untrimOnFocusAfterKeydown) {
@@ -4159,9 +4207,12 @@ export class UrlbarInput {
@@ -4164,9 +4237,12 @@ export class UrlbarInput {
}
_on_mousedown(event) {
@@ -168,13 +209,13 @@ index 6de4c2ac873b1424abee118a143ac377f26beb80..3b41d52c8e00860ce9913a334f15f70e
+ switch (event.zenOriginalTarget || event.currentTarget) {
case this.textbox: {
this._mousedownOnUrlbarDescendant = true;
+ if (event.type != "click" && lazy.ZEN_URLBAR_BEHAVIOR === 'float') {
+ if (event.type != "click") {
+ return true;
+ }
if (
event.target != this.inputField &&
@@ -4171,8 +4222,8 @@ export class UrlbarInput {
@@ -4176,8 +4252,8 @@ export class UrlbarInput {
break;
}
@@ -185,3 +226,12 @@ index 6de4c2ac873b1424abee118a143ac377f26beb80..3b41d52c8e00860ce9913a334f15f70e
// Keep the focus status, since the attribute may be changed
// upon calling this.focus().
@@ -4218,7 +4294,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.
- if (event.target.closest("tab")) {
+ if (event.target.closest("tab") || event.target.closest("#tabs-newtab-button")) {
break;
}

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/urlbar/UrlbarView.sys.mjs b/browser/components/urlbar/UrlbarView.sys.mjs
index 0e6724f590490354cc4d4bde5176556f7e4b4a7c..bffc52488443d62de46abe5cbdac4504831c4a09 100644
index d5382623595de8daed8cd13ea2eb2de329a4bd92..3b33e083c40f70a97d153934f2eb6ba73bf986b5 100644
--- a/browser/components/urlbar/UrlbarView.sys.mjs
+++ b/browser/components/urlbar/UrlbarView.sys.mjs
@@ -610,7 +610,7 @@ export class UrlbarView {
@@ -609,7 +609,7 @@ export class UrlbarView {
!this.input.value ||
this.input.getAttribute("pageproxystate") == "valid"
) {
@@ -11,3 +11,12 @@ index 0e6724f590490354cc4d4bde5176556f7e4b4a7c..bffc52488443d62de46abe5cbdac4504
// 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.
@@ -2975,7 +2975,7 @@ export class UrlbarView {
}
#enableOrDisableRowWrap() {
- let wrap = getBoundsWithoutFlushing(this.input.textbox).width < 650;
+ let wrap = false;
this.#rows.toggleAttribute("wrap", wrap);
this.oneOffSearchButtons.container.toggleAttribute("wrap", wrap);
}

View File

@@ -1,13 +0,0 @@
diff --git a/browser/extensions/newtab/content-src/components/CustomizeMenu/ContentSection/ContentSection.jsx b/browser/extensions/newtab/content-src/components/CustomizeMenu/ContentSection/ContentSection.jsx
index dcf192d0ab7323d69f1bf505971e57c98ad4397d..a4d88304786af35030391f71bc99eee6cf7c1a64 100644
--- a/browser/extensions/newtab/content-src/components/CustomizeMenu/ContentSection/ContentSection.jsx
+++ b/browser/extensions/newtab/content-src/components/CustomizeMenu/ContentSection/ContentSection.jsx
@@ -188,7 +188,7 @@ export class ContentSection extends React.PureComponent {
data-l10n-args='{"num": 4}'
/>
</select>
- {mayHaveSponsoredTopSites && (
+ {false && (
<div className="check-wrapper" role="presentation">
<input
id="sponsored-shortcuts"

View File

@@ -1,8 +1,8 @@
diff --git a/browser/extensions/newtab/lib/AboutPreferences.sys.mjs b/browser/extensions/newtab/lib/AboutPreferences.sys.mjs
index df9d63c2713b4237d8acca93f108d5c788caed8d..a80cc02fdec6e1056d26a6b5a1cdc1a602e5cf2a 100644
index a325becabddda511204fc5bd2022edc332cdde7c..6bb29b21f1e6c1d6ea3d38d50f01148e0a51f0d7 100644
--- a/browser/extensions/newtab/lib/AboutPreferences.sys.mjs
+++ b/browser/extensions/newtab/lib/AboutPreferences.sys.mjs
@@ -34,7 +34,7 @@ const PREFS_BEFORE_SECTIONS = () => [
@@ -52,7 +52,7 @@ const PREFS_BEFORE_SECTIONS = () => [
titleString: "home-prefs-shortcuts-header",
descString: "home-prefs-shortcuts-description",
get nestedPrefs() {

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 b3d89213ec27151f05e9990d5a55c6e81ce3655f..3c485f616fa2daba62aacbdde2dfb3122e244821 100644
index 14183ad7165dc91126b4409b26f669409c4e9905..be979225b89b193b9e9c8903de5740dc04a8999f 100644
--- a/browser/extensions/newtab/lib/ActivityStream.sys.mjs
+++ b/browser/extensions/newtab/lib/ActivityStream.sys.mjs
@@ -214,7 +214,7 @@ export const PREFS_CONFIG = new Map([
@@ -215,7 +215,7 @@ export const PREFS_CONFIG = new Map([
"showSponsoredTopSites",
{
title: "Show sponsored top sites",

View File

@@ -0,0 +1,22 @@
diff --git a/browser/installer/windows/nsis/defines.nsi.in b/browser/installer/windows/nsis/defines.nsi.in
index eb9e403c36510bfda09eb84b8a35dff731279f5d..939d34dff255122947bf3eeabc9087685f101568 100644
--- a/browser/installer/windows/nsis/defines.nsi.in
+++ b/browser/installer/windows/nsis/defines.nsi.in
@@ -90,7 +90,7 @@
!define BETA_UPDATE_CHANNEL
!endif
-!define BaseURLStubPing "http://download-stats.mozilla.org/stub"
+!define BaseURLStubPing ""
# ARCH is used when it is necessary to differentiate the x64 registry keys from
# the x86 registry keys (e.g. the uninstall registry key).
@@ -148,7 +148,7 @@ VIAddVersionKey "ProductVersion" "${AppVersion}"
!define APPROXIMATE_REQUIRED_SPACE_MB "145"
# Constants for parts of the telemetry submission URL
-!define TELEMETRY_BASE_URL https://incoming.telemetry.mozilla.org/submit
+!define TELEMETRY_BASE_URL
!define TELEMETRY_NAMESPACE firefox-installer
!define TELEMETRY_INSTALL_PING_VERSION 1
!define TELEMETRY_INSTALL_PING_DOCTYPE install

View File

@@ -0,0 +1,20 @@
diff --git a/browser/installer/windows/nsis/installer.nsi b/browser/installer/windows/nsis/installer.nsi
index 491bcbbd8430410fa930e7b52491ea62f2c48bbc..42d960f4adb4837009e0106a137c14fcbd7a55f9 100755
--- a/browser/installer/windows/nsis/installer.nsi
+++ b/browser/installer/windows/nsis/installer.nsi
@@ -837,7 +837,7 @@ Section "-InstallEndCleanup"
; When we're using the GUI, .onGUIEnd sends the ping, but of course that isn't
; invoked when we're running silently.
${If} ${Silent}
- Call SendPing
+ ; Call SendPing
${EndIf}
SectionEnd
@@ -1965,5 +1965,5 @@ FunctionEnd
Function .onGUIEnd
${OnEndCommon}
- Call SendPing
+ ; Call SendPing
FunctionEnd

View File

@@ -0,0 +1,13 @@
diff --git a/browser/locales/en-US/installer/custom.properties b/browser/locales/en-US/installer/custom.properties
index a9dc6fb90caa50a9ba9ec63a6cd90b4d8dcc2bc0..48d11c0c5a3b926d2d29c30d1ca8630941514210 100644
--- a/browser/locales/en-US/installer/custom.properties
+++ b/browser/locales/en-US/installer/custom.properties
@@ -77,7 +77,7 @@ STATUS_INSTALL_LANG=Installing Language Files (${AB_CD})
STATUS_UNINSTALL_MAIN=Uninstalling $BrandShortName
STATUS_CLEANUP=A Little Housekeeping
-UN_SURVEY_CHECKBOX_LABEL=Tell Mozilla why you uninstalled $BrandShortName
+UN_SURVEY_CHECKBOX_LABEL=Tell Zen´s Team why you uninstalled $BrandShortName
# _DESC strings support approximately 65 characters per line.
# One line

View File

@@ -0,0 +1,13 @@
diff --git a/browser/modules/ExtensionsUI.sys.mjs b/browser/modules/ExtensionsUI.sys.mjs
index 3f74e47bf7602fa800d1cf3034ec67055cc792b6..e700b88d1aee80c946e234f89f695a31d71ff608 100644
--- a/browser/modules/ExtensionsUI.sys.mjs
+++ b/browser/modules/ExtensionsUI.sys.mjs
@@ -436,7 +436,7 @@ export var ExtensionsUI = {
eventCallback,
removeOnDismissal: true,
popupOptions: {
- position: "bottomright topright",
+ position: window.gZenUIManager.panelUIPosition,
},
// Pass additional options used internally by the
// addon-webext-permissions-notification custom element

View File

@@ -1,8 +1,8 @@
diff --git a/browser/modules/URILoadingHelper.sys.mjs b/browser/modules/URILoadingHelper.sys.mjs
index c4428df9e1c43ba7a1dfefa2d55316023325d2db..191bc513862d5247e338c683b11ae891ab914479 100644
index 14bf18132eaee8a0c8fe6e108ac423de91a7d3e2..fa616654fdf8a29d59889227780a98f0f9dc9a20 100644
--- a/browser/modules/URILoadingHelper.sys.mjs
+++ b/browser/modules/URILoadingHelper.sys.mjs
@@ -510,7 +510,7 @@ export const URILoadingHelper = {
@@ -516,7 +516,7 @@ export const URILoadingHelper = {
// page. If a load request bounces off for the currently selected tab,
// we'll open a new tab instead.
let tab = w.gBrowser.getTabForBrowser(targetBrowser);

View File

@@ -1,5 +1,5 @@
diff --git a/browser/themes/BuiltInThemeConfig.sys.mjs b/browser/themes/BuiltInThemeConfig.sys.mjs
index 4e5a4f1795c18241d9143d159f7d040142e728d4..f4b0e9a7077076f2fbe8ac17fa6aadf586c6b37c 100644
index 081187147736f56abfe5866a69e00ac13a8dd940..9a980fe858c1a77af7634037aebc332d237e9c11 100644
--- a/browser/themes/BuiltInThemeConfig.sys.mjs
+++ b/browser/themes/BuiltInThemeConfig.sys.mjs
@@ -33,13 +33,6 @@ export const BuiltInThemeConfig = new Map([

View File

@@ -470,10 +470,33 @@ groupbox h2 {
align-items: center;
}
.zenThemeMarketplaceItemHomepageButton {
width: 30px;
min-width: 0;
position: relative;
cursor: pointer;
&::before {
content: '';
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 18px;
height: 18px;
background-image: url('chrome://browser/skin/home.svg');
background-repeat: no-repeat;
background-size: cover;
fill: currentColor;
-moz-context-properties: fill, fill-opacity;
}
}
.zenThemeMarketplaceItemConfigureButton {
width: 30px;
min-width: 0;
position: relative;
cursor: pointer;
&::before {
content: '';
@@ -535,12 +558,15 @@ groupbox h2 {
margin: 15px 0;
}
.zenThemeMarketplaceItemUninstallButton {
.zenThemeMarketplaceItemUninstallButton,
#zenThemeMarketplaceImport {
margin-left: auto;
cursor: pointer;
}
#zenThemeMarketplaceExport,
#zenThemeMarketplaceCheckForUpdates {
margin-left: auto;
cursor: pointer;
}
.zenThemeMarketplaceItemPreferenceDialog {

View File

@@ -0,0 +1,12 @@
diff --git a/browser/themes/shared/tabbrowser/ctrlTab.css b/browser/themes/shared/tabbrowser/ctrlTab.css
index 645467864db4a73b7addf3a57fa892beaf9a9614..46907c1ac8a10e8aba8ad82530269b660add550d 100644
--- a/browser/themes/shared/tabbrowser/ctrlTab.css
+++ b/browser/themes/shared/tabbrowser/ctrlTab.css
@@ -12,6 +12,7 @@
--panel-color: white;
--panel-border-color: transparent;
--panel-padding: 20px 10px 10px;
+ --panel-shadow-margin: 0;
}
@media (-moz-platform: macos) {

View File

@@ -1,5 +1,5 @@
diff --git a/browser/themes/shared/tabbrowser/tabs.css b/browser/themes/shared/tabbrowser/tabs.css
index bafbb39aac37843e3b6dceb0e81304af51e186cc..92b4fd725118150634ab2ae0a24efb52c16c5227 100644
index 6ca85d9d4d593271fe49138ea736bd96651c05f5..192acb662eaeaeb67df890de4c9681952b078526 100644
--- a/browser/themes/shared/tabbrowser/tabs.css
+++ b/browser/themes/shared/tabbrowser/tabs.css
@@ -32,7 +32,7 @@
@@ -11,7 +11,7 @@ index bafbb39aac37843e3b6dceb0e81304af51e186cc..92b4fd725118150634ab2ae0a24efb52
--tab-hover-background-color: color-mix(in srgb, currentColor 11%, transparent);
--tab-selected-textcolor: var(--toolbar-color);
--tab-selected-bgcolor: var(--toolbar-bgcolor);
@@ -214,8 +214,7 @@
@@ -210,8 +210,7 @@
}
#tabbrowser-tabs[positionpinnedtabs] > #tabbrowser-arrowscrollbox > &[pinned] {
@@ -20,16 +20,16 @@ index bafbb39aac37843e3b6dceb0e81304af51e186cc..92b4fd725118150634ab2ae0a24efb52
+
}
#tabbrowser-tabs[movingtab] &:is([selected], [multiselected]) {
@@ -254,7 +253,6 @@
#tabbrowser-tabs[movingtab] &:is(:active, [multiselected]) {
@@ -257,7 +256,6 @@
}
:root:not([uidensity=compact]) &[pinned] {
:root:not([uidensity=compact], [sidebar-expand-on-hover]) &[pinned] {
- padding: 0 10px;
}
&:is([selected], [multiselected]) {
@@ -268,6 +266,7 @@
@@ -271,6 +269,7 @@
border-radius: inherit;
position: relative;
overflow: hidden;
@@ -37,7 +37,7 @@ index bafbb39aac37843e3b6dceb0e81304af51e186cc..92b4fd725118150634ab2ae0a24efb52
&::before {
position: absolute;
@@ -442,6 +441,7 @@
@@ -458,6 +457,7 @@
.tab-icon-image {
-moz-context-properties: fill, stroke;
fill: currentColor;
@@ -45,7 +45,7 @@ index bafbb39aac37843e3b6dceb0e81304af51e186cc..92b4fd725118150634ab2ae0a24efb52
/* Apply crisp rendering for favicons at exactly 2dppx resolution */
@media (resolution: 2dppx) {
@@ -523,7 +523,7 @@
@@ -557,7 +557,7 @@
z-index: 1; /* Overlay tab title */
#tabbrowser-tabs[orient=vertical] & {
@@ -54,7 +54,7 @@ index bafbb39aac37843e3b6dceb0e81304af51e186cc..92b4fd725118150634ab2ae0a24efb52
}
&[crashed] {
@@ -531,7 +531,7 @@
@@ -565,7 +565,7 @@
}
#tabbrowser-tabs[orient="vertical"]:not([expanded]) &:not([crashed]),
@@ -63,7 +63,7 @@ index bafbb39aac37843e3b6dceb0e81304af51e186cc..92b4fd725118150634ab2ae0a24efb52
&[soundplaying] {
list-style-image: url("chrome://browser/skin/tabbrowser/tab-audio-playing-small.svg");
}
@@ -561,7 +561,7 @@
@@ -595,7 +595,7 @@
background-image: linear-gradient(var(--audio-overlay-extra-background)),
linear-gradient(var(--toolbox-bgcolor));
-moz-context-properties: fill;
@@ -72,44 +72,7 @@ index bafbb39aac37843e3b6dceb0e81304af51e186cc..92b4fd725118150634ab2ae0a24efb52
color-scheme: var(--tab-selected-color-scheme);
border-radius: var(--border-radius-circle);
@@ -593,7 +593,7 @@
}
#tabbrowser-tabs[orient="vertical"]:not([expanded]) &:is([soundplaying], [muted], [activemedia-blocked]),
- &[pinned]:is([soundplaying], [muted], [activemedia-blocked]),
+ &:is([soundplaying], [muted], [activemedia-blocked]),
&[crashed] {
display: revert;
}
@@ -607,7 +607,7 @@
--button-min-height-small: 24px;
--button-border-radius: var(--border-radius-small);
- #tabbrowser-tabs:is([orient="vertical"][expanded], [orient="horizontal"]) &:not([pinned]):not([crashed]) {
+ #tabbrowser-tabs:is([orient="horizontal"]) &:not([pinned]):not([crashed]) {
&:is([soundplaying], [muted], [activemedia-blocked]) {
display: block;
}
@@ -638,14 +638,14 @@
}
&[textoverflow] {
- &[labeldirection=ltr]:not([pinned]),
- &:not([labeldirection], [pinned]):-moz-locale-dir(ltr) {
+ &[labeldirection=ltr],
+ &:not([labeldirection]):-moz-locale-dir(ltr) {
direction: ltr;
mask-image: linear-gradient(to left, transparent, black var(--tab-label-mask-size));
}
- &[labeldirection=rtl]:not([pinned]),
- &:not([labeldirection], [pinned]):-moz-locale-dir(rtl) {
+ &[labeldirection=rtl],
+ &:not([labeldirection]):-moz-locale-dir(rtl) {
direction: rtl;
mask-image: linear-gradient(to right, transparent, black var(--tab-label-mask-size));
}
@@ -1201,7 +1201,7 @@
@@ -1362,7 +1362,7 @@ tab-group {
}
}
@@ -118,7 +81,7 @@ index bafbb39aac37843e3b6dceb0e81304af51e186cc..92b4fd725118150634ab2ae0a24efb52
#vertical-tabs-newtab-button {
appearance: none;
min-height: var(--tab-min-height);
@@ -1212,7 +1212,7 @@
@@ -1373,7 +1373,7 @@ tab-group {
margin-inline: var(--tab-inner-inline-margin);
#tabbrowser-tabs[orient="vertical"]:not([expanded]) & > .toolbarbutton-text {
@@ -127,7 +90,7 @@ index bafbb39aac37843e3b6dceb0e81304af51e186cc..92b4fd725118150634ab2ae0a24efb52
}
&:hover {
@@ -1236,7 +1236,7 @@
@@ -1397,7 +1397,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.
*/
@@ -136,15 +99,16 @@ index bafbb39aac37843e3b6dceb0e81304af51e186cc..92b4fd725118150634ab2ae0a24efb52
margin-block: var(--tab-block-margin);
}
@@ -1260,7 +1260,6 @@
}
@@ -1471,8 +1471,6 @@ tab-group {
}
#vertical-pinned-tabs-container {
- --tab-inline-padding: calc((calc(var(--tab-collapsed-background-width) + 2 * var(--tab-pinned-margin-inline-expanded) - var(--icon-size-default)) / 2));
display: none;
grid-template-columns: repeat(auto-fit, minmax(var(--tab-pinned-min-width-expanded), auto));
overflow-y: auto;
@@ -1480,7 +1479,7 @@
:root:not([sidebar-expand-on-hover]) & {
- --tab-inline-padding: calc((var(--tab-collapsed-background-width) + 2 *
- var(--tab-pinned-margin-inline-expanded) - var(--icon-size-default)) / 2);
/* stylelint-disable-next-line media-query-no-invalid */
@media not -moz-pref("sidebar.visibility", "expand-on-hover") {
/* We need these rules to apply at all times when the sidebar.visibility
@@ -1717,7 +1715,7 @@ tab-group {
toolbarbutton:not(#firefox-view-button),
toolbarpaletteitem:not(#wrapper-firefox-view-button)
) ~ #tabbrowser-tabs {
@@ -153,7 +117,7 @@ index bafbb39aac37843e3b6dceb0e81304af51e186cc..92b4fd725118150634ab2ae0a24efb52
padding-inline-start: calc(var(--tab-overflow-pinned-tabs-width) + 2px);
margin-inline-start: 2px;
}
@@ -1514,7 +1513,6 @@ toolbar:not(#TabsToolbar) #firefox-view-button {
@@ -1751,7 +1749,6 @@ toolbar:not(#TabsToolbar) #firefox-view-button {
list-style-image: url(chrome://global/skin/icons/plus.svg);
}

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