This commit is contained in:
mauro-balades
2024-09-29 19:24:40 +02:00
10 changed files with 164 additions and 114 deletions

1
public/uma.js Normal file
View File

@@ -0,0 +1 @@
!function(){"use strict";(t=>{const{screen:{width:e,height:a},navigator:{language:r},location:n,localStorage:i,document:c,history:o}=t,{hostname:s,href:u}=n,{currentScript:l,referrer:d}=c;if(!l)return;const f="data-",m=l.getAttribute.bind(l),h=m(f+"website-id"),p=m(f+"host-url"),g=m(f+"tag"),y="false"!==m(f+"auto-track"),b="true"===m(f+"exclude-search"),v=m(f+"domains")||"",S=v.split(",").map((t=>t.trim())),w=`${(p||""||l.src.split("/").slice(0,-1).join("/")).replace(/\/$/,"")}/api/send`,N=`${e}x${a}`,T=/data-umami-event-([\w-_]+)/,A=f+"umami-event",x=300,O=t=>{if(t){try{const e=decodeURI(t);if(e!==t)return e}catch(e){return t}return encodeURI(t)}},U=t=>{try{const{pathname:e,search:a}=new URL(t);t=e+a}catch(t){}return b?t.split("?")[0]:t},j=()=>({website:h,hostname:s,screen:N,language:r,title:O(q),url:O(D),referrer:O(_),tag:g||void 0}),k=(t,e,a)=>{a&&(_=D,D=U(a.toString()),D!==_&&setTimeout(I,x))},E=()=>!h||i&&i.getItem("umami.disabled")||v&&!S.includes(s),L=async(t,e="event")=>{if(E())return;const a={"Content-Type":"application/json"};void 0!==R&&(a["x-umami-cache"]=R);try{const r=await fetch(w,{method:"POST",body:JSON.stringify({type:e,payload:t}),headers:a}),n=await r.text();return R=n}catch(t){}},$=()=>{B||(I(),(()=>{const t=(t,e,a)=>{const r=t[e];return(...e)=>(a.apply(null,e),r.apply(t,e))};o.pushState=t(o,"pushState",k),o.replaceState=t(o,"replaceState",k)})(),(()=>{const t=new MutationObserver((([t])=>{q=t&&t.target?t.target.text:void 0})),e=c.querySelector("head > title");e&&t.observe(e,{subtree:!0,characterData:!0,childList:!0})})(),c.addEventListener("click",(async t=>{const e=t=>["BUTTON","A"].includes(t),a=async t=>{const e=t.getAttribute.bind(t),a=e(A);if(a){const r={};return t.getAttributeNames().forEach((t=>{const a=t.match(T);a&&(r[a[1]]=e(t))})),I(a,r)}},r=t.target,i=e(r.tagName)?r:((t,a)=>{let r=t;for(let t=0;t<a;t++){if(e(r.tagName))return r;if(r=r.parentElement,!r)return null}})(r,10);if(!i)return a(r);{const{href:e,target:r}=i,c=i.getAttribute(A);if(c)if("A"===i.tagName){const o="_blank"===r||t.ctrlKey||t.shiftKey||t.metaKey||t.button&&1===t.button;if(c&&e)return o||t.preventDefault(),a(i).then((()=>{o||(n.href=e)}))}else if("BUTTON"===i.tagName)return a(i)}}),!0),B=!0)},I=(t,e)=>L("string"==typeof t?{...j(),name:t,data:"object"==typeof e?e:void 0}:"object"==typeof t?t:"function"==typeof t?t(j()):j()),K=t=>L({...j(),data:t},"identify");t.umami||(t.umami={track:I,identify:K});let R,B,D=U(u),_=d!==s?d:"",q=c.title;y&&!E()&&("complete"===c.readyState?$():c.addEventListener("readystatechange",$,!0))})(window)}();

View File

@@ -24,17 +24,11 @@ export default async function RootLayout({
<html suppressHydrationWarning> <html suppressHydrationWarning>
<head> <head>
<link rel="me" href="https://fosstodon.org/@zenbrowser"></link> <link rel="me" href="https://fosstodon.org/@zenbrowser"></link>
<script {/* Analitics */}
defer <script defer data-domain="zen-browser.app" src="https://plausible.io/js/script.js"></script>
data-domain="zen-browser.app" <script defer src="https://cdn.jsdelivr.net/gh/zen-browser/www/public/uma.js" data-host-url="https://uma.zen-browser.app" data-website-id="7148ef7c-5299-4ca1-9a18-9d6964e93b53" data-domains="zen-browser.app"></script>
src="https://plausible.io/js/script.js" {/* End */}
></script> <link rel="alternate" type="application/rss+xml" title="Zen Browser Release Notes" href="https://www.zen-browser.app/feed.xml" />
<link
rel="alternate"
type="application/rss+xml"
title="Zen Browser Release Notes"
href="https://www.zen-browser.app/feed.xml"
/>
</head> </head>
<body className={inter.className}> <body className={inter.className}>
<ThemeProvider attribute="class" defaultTheme="dark"> <ThemeProvider attribute="class" defaultTheme="dark">

View File

@@ -291,7 +291,7 @@ export default function CreateThemePage() {
<div className="ml-4 h-11 w-11 rounded-lg border bg-[var(--zen-dialog-background)]"></div> <div className="ml-4 h-11 w-11 rounded-lg border bg-[var(--zen-dialog-background)]"></div>
</div> </div>
<div className="text-md mt-8 font-bold text-muted-foreground"> <div className="text-md mt-8 font-bold text-muted-foreground">
Right now, we aren't taking more color themes for the browser, Right now, we aren't taking more color Mods for the browser,
until we find a way to make it more accessible for everyone. until we find a way to make it more accessible for everyone.
However, you can still create your own theme and share it with the However, you can still create your own theme and share it with the
community. community.

View File

@@ -85,7 +85,7 @@ function Question() {
} }
export default function Features() { export default function Features() {
const [feature, setFeature] = useState("item-1"); const [feature, setFeature] = useState("");
return ( return (
<section className="w-full flex-col" id="features"> <section className="w-full flex-col" id="features">
<div className="mx-auto mt-16 flex w-full flex-col bg-surface shadow md:w-5/6 md:rounded-md lg:w-3/4 lg:flex-row"> <div className="mx-auto mt-16 flex w-full flex-col bg-surface shadow md:w-5/6 md:rounded-md lg:w-3/4 lg:flex-row">
@@ -98,16 +98,13 @@ export default function Features() {
<p className="mt-4 text-lg text-gray-600 dark:text-gray-300"> <p className="mt-4 text-lg text-gray-600 dark:text-gray-300">
With Zen's Theme Store, you can customize your browsing experience With Zen's Theme Store, you can customize your browsing experience
to reflect your unique style and preferences. Choose from a wide to reflect your unique style and preferences. Choose from a wide
array of themes, colors, and layouts to make Zen truly your own, array of Mods, colors, and layouts to make Zen truly your own,
transforming your browser into a personalized digital space. transforming your browser into a personalized digital space.
</p> </p>
<div className="relative"> <div className="relative">
<Button <Link href="/themes" prefetch={false}>
className="mt-8" <Button className="mt-8">Browse Themes</Button>
onClick={() => window.open("/themes", "_self")} </Link>
>
View Theme Store
</Button>
</div> </div>
</div> </div>
<hr /> <hr />
@@ -122,12 +119,9 @@ export default function Features() {
performance improvements. performance improvements.
</p> </p>
<div className="relative"> <div className="relative">
<Button <Link href="/download" prefetch={false}>
className="mt-8" <Button className="mt-8">Download Now</Button>
onClick={() => window.open("/download", "_self")} </Link>
>
Download Now
</Button>
</div> </div>
</div> </div>
</div> </div>
@@ -146,14 +140,9 @@ export default function Features() {
browser. browser.
</p> </p>
<div className="relative"> <div className="relative">
<Button <a href="https://github.com/zen-browser" target="_blank">
className="mt-8" <Button className="mt-8">GitHub</Button>
onClick={() => </a>
window.open("https://github.com/zen-browser", "_blank")
}
>
GitHub Page
</Button>
</div> </div>
<div className="mt-14 w-full"> <div className="mt-14 w-full">
<div className="flex items-center"> <div className="flex items-center">
@@ -247,12 +236,9 @@ export default function Features() {
multitasking. multitasking.
</p> </p>
<div className="relative"> <div className="relative">
<Button <Link href="/download" prefetch={false}>
className="mt-8" <Button className="mt-8">Download Now</Button>
onClick={() => window.open("/download", "_self")} </Link>
>
Download Now
</Button>
</div> </div>
</div> </div>
</div> </div>
@@ -307,24 +293,18 @@ export default function Features() {
secure, giving you peace of mind as you explore the web. secure, giving you peace of mind as you explore the web.
</p> </p>
<div className="relative"> <div className="relative">
<Button <a href="https://docs.zen-browser.app/security" target="_blank">
className="mt-8" <Button className="mt-8" variant="ghost">
variant="ghost" Security in Zen{" "}
onClick={() => <ExternalLinkIcon className="ml-4 h-4 w-4 opacity-50" />
window.open("https://docs.zen-browser.app/security", "_blank") </Button>
} </a>
> <Link href="/privacy-policy" prefetch={false} target="_blank">
Security in Zen{" "} <Button className="mt-8" variant="ghost">
<ExternalLinkIcon className="ml-4 h-4 w-4 opacity-50" /> Your Privacy{" "}
</Button> <ExternalLinkIcon className="ml-4 h-4 w-4 opacity-50" />
<Button </Button>
className="mt-8" </Link>
variant="ghost"
onClick={() => window.open("/privacy-policy", "_blank")}
>
Your Privacy{" "}
<ExternalLinkIcon className="ml-4 h-4 w-4 opacity-50" />
</Button>
</div> </div>
</div> </div>
</div> </div>
@@ -386,15 +366,13 @@ export default function Features() {
focus on your work. focus on your work.
</p> </p>
<div className="relative"> <div className="relative">
<Button <Link href="/download" prefetch={false}>
className="mt-8" <Button className="mt-8">What are you waiting for?</Button>
onClick={() => window.open("/download", "_self")} </Link>
>
What are you waiting for?
</Button>
</div> </div>
</div> </div>
</div> </div>
<div className="mx-auto mt-36 flex w-full flex-col bg-surface shadow md:w-5/6 md:rounded-md lg:w-3/4 lg:flex-row"> <div className="mx-auto mt-36 flex w-full flex-col bg-surface shadow md:w-5/6 md:rounded-md lg:w-3/4 lg:flex-row">
<div className="relative flex w-full flex-col justify-center p-5 lg:w-1/2 lg:p-12"> <div className="relative flex w-full flex-col justify-center p-5 lg:w-1/2 lg:p-12">
<h1 className="text-4xl font-medium text-gray-800 dark:text-gray-100"> <h1 className="text-4xl font-medium text-gray-800 dark:text-gray-100">
@@ -404,8 +382,9 @@ export default function Features() {
<Accordion <Accordion
type="single" type="single"
value={feature} value={feature}
onValueChange={setFeature} onValueChange={(value) =>
defaultValue="item-1" setFeature(value === feature ? "" : value)
}
className="mt-8" className="mt-8"
> >
<AccordionItem value="item-1"> <AccordionItem value="item-1">
@@ -429,13 +408,45 @@ export default function Features() {
<AccordionContent> <AccordionContent>
Zen Browser is built on top of Firefox, which is known for its Zen Browser is built on top of Firefox, which is known for its
security features. We also have additional security features security features. We also have additional security features
like https only built into Zen Browser to help keep you safe like HTTPS only built into Zen Browser to help keep you safe
online. online.
</AccordionContent> </AccordionContent>
</AccordionItem> </AccordionItem>
</Accordion> </Accordion>
</div> </div>
<div className="relative h-auto overflow-hidden rounded-md lg:w-1/2"> <div className="relative h-auto overflow-hidden rounded-md lg:w-1/2">
{feature === "" && (
<div className="absolute flex h-full w-full items-center justify-center">
<div className="flex w-full flex-col items-center justify-center space-y-6">
<div className="flex h-fit w-full max-w-sm animate-fade-in items-center justify-center rounded-full border-2 border-white bg-surface p-4 shadow">
<Logo className="h-10 w-10" />
<span className="mx-4 text-4xl">+</span>
<svg
className="relative h-10 w-10 dark:fill-white"
xmlns="http://www.w3.org/2000/svg"
fillOpacity="context-fill-opacity"
>
<path
style={{ transform: "scale(2) translate(5%, 5%)" }}
d="M10.39 0C8.948.788 7.987 2.025 7.767 3.66c-1.017.162-1.768.781-1.768.781s.72-.44 1.736-.511a4.04 4.04 0 0 1 3.789 2.034s-.758-.62-1.928-.468c1.315.68 1.872 2.002 1.701 3.369-.17 1.367-1.183 2.435-2.354 2.723-1.171.287-2.333.099-3.229-.61-.896-.708-1.251-1.533-1.305-2.254.213-.533.541-.812 1.1-1.092.558-.279 1.422-.283 1.572-.283s.8-.507.95-.894c-.726-.363-1.292-.65-1.696-.934-.404-.283-.492-.534-1.012-.898-.307-1.006-.021-1.955-.021-1.955s-1.043.437-1.93 1.49c0 0-.342-.338-.28-2.006-.427.155-1.366 1.004-1.947 1.92a7.277 7.277 0 0 0-.798 1.723A8.296 8.296 0 0 0-.003 8a8 8 0 0 0 16 0c0-2.256-.93-4.252-2.188-5.002 0 0 .542.932.813 2.43-.4-1.04-1.235-2.166-1.877-2.844-.643-.678-2.068-1.88-2.357-2.584z"
/>
</svg>
</div>
<div className="flex h-fit w-full max-w-sm animate-fade-in items-center justify-center rounded-full border-2 border-white bg-surface p-4 shadow">
<LockClosedIcon className="h-10 w-10" />
<span className="mx-4 text-4xl">+</span>
<EyeClosedIcon className="h-10 w-10" />
</div>
<div className="flex h-fit w-full max-w-sm animate-fade-in items-center justify-center rounded-full border-2 border-white bg-surface p-4 shadow">
<ShieldCheck className="h-10 w-10" />
<span className="mx-4 text-4xl">+</span>
<ShieldAlertIcon className="h-10 w-10" />
</div>
</div>
</div>
)}
<CachedImage <CachedImage
width={1350} width={1350}
height={900} height={900}
@@ -443,7 +454,7 @@ export default function Features() {
alt="Zen Browser" alt="Zen Browser"
className="robject-right ounded-md h-full w-full object-cover" className="robject-right ounded-md h-full w-full object-cover"
/> />
{feature == "item-1" && ( {feature === "item-1" && (
<div className="absolute left-0 top-0 grid h-full w-full grid-rows-3"> <div className="absolute left-0 top-0 grid h-full w-full grid-rows-3">
<div></div> <div></div>
<div className="tems-center m-auto flex h-fit w-fit animate-fade-in rounded-full border-2 border-white bg-surface p-4 shadow"> <div className="tems-center m-auto flex h-fit w-fit animate-fade-in rounded-full border-2 border-white bg-surface p-4 shadow">
@@ -470,7 +481,8 @@ export default function Features() {
</a> </a>
</div> </div>
)} )}
{feature == "item-2" && (
{feature === "item-2" && (
<div className="absolute left-0 top-0 grid h-full w-full grid-rows-3"> <div className="absolute left-0 top-0 grid h-full w-full grid-rows-3">
<div></div> <div></div>
<div className="tems-center m-auto flex h-fit w-fit animate-fade-in rounded-full border-2 border-white bg-surface p-4 shadow"> <div className="tems-center m-auto flex h-fit w-fit animate-fade-in rounded-full border-2 border-white bg-surface p-4 shadow">
@@ -488,7 +500,8 @@ export default function Features() {
</a> </a>
</div> </div>
)} )}
{feature == "item-3" && (
{feature === "item-3" && (
<div className="absolute left-0 top-0 grid h-full w-full grid-rows-3"> <div className="absolute left-0 top-0 grid h-full w-full grid-rows-3">
<div></div> <div></div>
<div className="tems-center m-auto flex h-fit w-fit animate-fade-in rounded-full border-2 border-white bg-surface p-4 shadow"> <div className="tems-center m-auto flex h-fit w-fit animate-fade-in rounded-full border-2 border-white bg-surface p-4 shadow">
@@ -508,6 +521,7 @@ export default function Features() {
)} )}
</div> </div>
</div> </div>
<div className="mx-auto mt-36 flex w-full flex-col bg-surface p-5 shadow md:w-5/6 md:rounded-md lg:w-3/4 lg:flex-row lg:p-12"> <div className="mx-auto mt-36 flex w-full flex-col bg-surface p-5 shadow md:w-5/6 md:rounded-md lg:w-3/4 lg:flex-row lg:p-12">
<div className="flex flex-col justify-center p-16 lg:w-1/2"> <div className="flex flex-col justify-center p-16 lg:w-1/2">
<h3 className="text-4xl font-medium text-gray-800 dark:text-gray-100"> <h3 className="text-4xl font-medium text-gray-800 dark:text-gray-100">
@@ -517,12 +531,9 @@ export default function Features() {
Download Zen Browser now and experience the future of browsing. Download Zen Browser now and experience the future of browsing.
</p> </p>
<div className="relative"> <div className="relative">
<Button <Link href="/download" prefetch={false}>
className="mt-8" <Button className="mt-8">Download Now</Button>
onClick={() => window.open("/download", "_self")} </Link>
>
Download Now
</Button>
</div> </div>
</div> </div>
<div className="mx-2 h-[1px] border-t lg:h-[unset] lg:w-[1px] lg:border-l lg:border-t-0"></div> <div className="mx-2 h-[1px] border-t lg:h-[unset] lg:w-[1px] lg:border-l lg:border-t-0"></div>
@@ -536,23 +547,20 @@ export default function Features() {
cause. cause.
</p> </p>
<div className="relative mt-8 flex"> <div className="relative mt-8 flex">
<Button <a href="https://patreon.com/zen_browser" target="_blank">
variant="ghost" <Button data-umami-event="patreon-feature" variant="ghost">
onClick={() => Patreon <ExternalLinkIcon className="ml-4 h-4 w-4 opacity-50" />
window.open("https://patreon.com/zen_browser", "_blank") </Button>
} </a>
> <a href="https://ko-fi.com/zen_browser" target="_blank">
Patreon <ExternalLinkIcon className="ml-4 h-4 w-4 opacity-50" /> <Button
</Button> data-umami-event="ko-fi-feature"
<Button className="ml-8"
className="ml-8" variant="ghost"
variant="ghost" >
onClick={() => Ko-fi <ExternalLinkIcon className="ml-4 h-4 w-4 opacity-50" />
window.open("https://ko-fi.com/zen_browser", "_blank") </Button>
} </a>
>
Ko-fi <ExternalLinkIcon className="ml-4 h-4 w-4 opacity-50" />
</Button>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -13,7 +13,7 @@ export default function Footer() {
<Logo /> <Logo />
<div className="mt-auto"> <div className="mt-auto">
<h1 className="text-2xl font-bold opacity-80">Zen Browser</h1> <h1 className="text-2xl font-bold opacity-80">Zen Browser</h1>
<a href="https://uptime.zen-browser.app/" className="py-2 px-3 w-fit mt-2 cursor-pointer rounded-md shadow bg-surface flex items-center"> <a data-umami-event="footer-status" href="https://uptime.zen-browser.app/" className="py-2 px-3 w-fit mt-2 cursor-pointer rounded-md shadow bg-surface flex items-center">
<div className="rounded-full size-3 bg-green-500 relative shadow"> <div className="rounded-full size-3 bg-green-500 relative shadow">
<div className="rounded-full size-3 bg-green-500 animate-ping absolute top-[-0.2%] z-0" style={{ animationDuration: "1.7s" }}></div> <div className="rounded-full size-3 bg-green-500 animate-ping absolute top-[-0.2%] z-0" style={{ animationDuration: "1.7s" }}></div>
</div> </div>
@@ -40,7 +40,7 @@ export default function Footer() {
<h2 className="text-md font-bold opacity-80">Get Started</h2> <h2 className="text-md font-bold opacity-80">Get Started</h2>
<ul className="mt-4 font-normal opacity-70"> <ul className="mt-4 font-normal opacity-70">
<li> <li>
<a href="/themes">Themes</a> <a href="/themes">Mods</a>
</li> </li>
<li className="mt-2"> <li className="mt-2">
<a href="/download">Download</a> <a href="/download">Download</a>
@@ -54,7 +54,7 @@ export default function Footer() {
<h2 className="text-md font-bold opacity-80">Get Help</h2> <h2 className="text-md font-bold opacity-80">Get Help</h2>
<ul className="mt-4 font-normal opacity-70"> <ul className="mt-4 font-normal opacity-70">
<li> <li>
<a href="https://discord.com/servers/mauro-s-little-sweatshop-1088172780480114748"> <a data-umami-event="footer-discord" href="https://discord.com/servers/mauro-s-little-sweatshop-1088172780480114748">
Discord Discord
</a> </a>
</li> </li>
@@ -70,7 +70,7 @@ export default function Footer() {
<a href="/about">About Us</a> <a href="/about">About Us</a>
</li> </li>
<li className="mt-2"> <li className="mt-2">
<a href="/privacy-policy">Privacy Policy</a> <a data-umami-event="footer-privacy-policy" href="/privacy-policy">Privacy Policy</a>
</li> </li>
</ul> </ul>
</div> </div>
@@ -93,10 +93,10 @@ export default function Footer() {
<h2 className="text-md mt-8 font-bold opacity-80">Support Us</h2> <h2 className="text-md mt-8 font-bold opacity-80">Support Us</h2>
<ul className="mt-4 font-normal opacity-70"> <ul className="mt-4 font-normal opacity-70">
<li> <li>
<a href="https://patreon.com/zen_browser">Patreon</a> <a data-umami-event="patreon-fotter" href="https://patreon.com/zen_browser">Patreon</a>
</li> </li>
<li className="mt-2"> <li className="mt-2">
<a href="https://ko-fi.com/zen_browser">Ko-fi</a> <a data-umami-event="ko-fi-fotter" href="https://ko-fi.com/zen_browser">Ko-fi</a>
</li> </li>
</ul> </ul>
</div> </div>

View File

@@ -17,9 +17,9 @@ export default function MarketplacePage({ themes }: { themes: ZenTheme[] }) {
className="h-fit min-w-52 text-xs text-muted-foreground lg:mb-0" className="h-fit min-w-52 text-xs text-muted-foreground lg:mb-0"
offsetTop={120} offsetTop={120}
> >
<h1 className="text-4xl font-bold lg:text-7xl">Themes Store</h1> <h1 className="text-4xl font-bold lg:text-7xl">Mods Store</h1>
<p className="mt-4 text-lg text-muted-foreground"> <p className="mt-4 text-lg text-muted-foreground">
Discover and install themes for Zen Browser. Discover and install Mods for Zen Browser.
</p> </p>
<ThemesSearch <ThemesSearch
input={searchInput} input={searchInput}

View File

@@ -93,8 +93,8 @@ export function Navigation() {
<ListItem href="/download" title="Download"> <ListItem href="/download" title="Download">
Start using Zen Browser today with just a few clicks. Start using Zen Browser today with just a few clicks.
</ListItem> </ListItem>
<ListItem href="/themes" title="Themes Store"> <ListItem href="/themes" title="Mods Store">
Customize your browser with a variety of themes! Customize your browser with a variety of Mods!
</ListItem> </ListItem>
<ListItem href="/release-notes" title="Release Notes"> <ListItem href="/release-notes" title="Release Notes">
Stay up to date with the latest changes. Stay up to date with the latest changes.
@@ -109,20 +109,20 @@ export function Navigation() {
</NavigationMenuTrigger> </NavigationMenuTrigger>
<NavigationMenuContent> <NavigationMenuContent>
<ul className="grid w-[400px] gap-3 p-4 md:w-[500px] md:grid-cols-2 lg:w-[600px]"> <ul className="grid w-[400px] gap-3 p-4 md:w-[500px] md:grid-cols-2 lg:w-[600px]">
<ListItem <ListItem2
title="Patreon" title="Patreon"
href="https://patreon.com/zen_browser?utm_medium=unknown&utm_source=join_link&utm_campaign=creatorshare_creator&utm_content=copyLink" href="https://patreon.com/zen_browser?utm_medium=unknown&utm_source=join_link&utm_campaign=creatorshare_creator&utm_content=copyLink"
> >
Support us on Patreon and get exclusive rewards and keep the Support us on Patreon and get exclusive rewards and keep the
project alive. project alive.
</ListItem> </ListItem2>
<ListItem <ListItem2
title="Ko-Fi" title="Ko-Fi"
href="https://ko-fi.com/zen_browser?utm_medium=unknown&utm_source=join_link&utm_campaign=creatorshare_creator&utm_content=copyLink" href="https://ko-fi.com/zen_browser?utm_medium=unknown&utm_source=join_link&utm_campaign=creatorshare_creator&utm_content=copyLink"
> >
Ko-fi is a way to support us with a one-time donation and help Ko-fi is a way to support us with a one-time donation and help
us keep the project alive. us keep the project alive.
</ListItem> </ListItem2>
</ul> </ul>
</NavigationMenuContent> </NavigationMenuContent>
</NavigationMenuItem> </NavigationMenuItem>
@@ -173,4 +173,30 @@ const ListItem = React.forwardRef<
</li> </li>
); );
}); });
const ListItem2 = React.forwardRef<
React.ElementRef<"a">,
React.ComponentPropsWithoutRef<"a">
>(({ className, title, children, ...props }, ref) => {
return (
<li>
<NavigationMenuLink asChild>
<a
data-umami-event={title}
ref={ref}
className={ny(
"block select-none space-y-1 rounded-md p-3 leading-none no-underline outline-none transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground",
className,
)}
{...props}
>
<div className="text-sm font-medium leading-none">{title}</div>
<p className="line-clamp-2 text-sm leading-snug text-muted-foreground">
{children}
</p>
</a>
</NavigationMenuLink>
</li>
);
});
ListItem.displayName = "ListItem"; ListItem.displayName = "ListItem";
ListItem.displayName = "ListItem2";

View File

@@ -50,6 +50,7 @@ export default async function ThemePage({ themeID }: { themeID: string }) {
<Button <Button
className="mt-4 hidden !rounded-lg" className="mt-4 hidden !rounded-lg"
id="install-theme" id="install-theme"
data-umami-event={`theme-${theme.id}-install`}
zen-theme-id={theme.id} zen-theme-id={theme.id}
> >
Install Theme 🎉 Install Theme 🎉
@@ -57,6 +58,7 @@ export default async function ThemePage({ themeID }: { themeID: string }) {
<Button <Button
className="mt-4 hidden !rounded-lg" className="mt-4 hidden !rounded-lg"
id="install-theme-uninstall" id="install-theme-uninstall"
data-umami-event={`theme-${theme.id}-uninstall`}
zen-theme-id={theme.id} zen-theme-id={theme.id}
> >
Uninstall Theme Uninstall Theme

View File

@@ -23,7 +23,7 @@ export default function ThemesSearch({
type="text" type="text"
value={input} value={input}
onChange={(e) => setInput(e.target.value)} onChange={(e) => setInput(e.target.value)}
placeholder="Search themes" placeholder="Search Mods"
className="w-full border-none bg-transparent text-black focus:border-none focus:outline-none focus:ring-0 dark:text-white" className="w-full border-none bg-transparent text-black focus:border-none focus:outline-none focus:ring-0 dark:text-white"
/> />
{/* {/*

View File

@@ -994,7 +994,7 @@ export const releaseNotes: ReleaseNote[] = [
fixes: [ fixes: [
{ {
description: "The New Tab button is not visible", description: "The New Tab button is not visible",
isse: 1640, issue: 1640,
}, },
{ {
description: "The Unified Extensions button is not visible", description: "The Unified Extensions button is not visible",
@@ -1009,15 +1009,34 @@ export const releaseNotes: ReleaseNote[] = [
}, },
{ {
description: "Fixed an issue with reordering tabs", description: "Fixed an issue with reordering tabs",
}, }
{
description: "Fixed an issue with ⌘ keyboard shortcuts on macOS",
},
], ],
}, },
{
version: "1.0.1-a.5",
date: "24/09/2024",
image: false,
workflowId: 11020784612,
extra: "This update is a small patch to fix some issues that weren't addressed in the previous release!",
features: [
"Moved application menu button to the right",
"Added new shortcuts",
"Collapsed tab sidebar is now smaller"
],
fixes: [
{
description: "Fixed issue with hovering over window control buttons (macOS)",
},
{
description: "(Hopefully) resolved all issues with keyboard shortcuts",
issue: 1629
},
],
}
].reverse(); ].reverse();
export function releaseNoteIsAlpha(note: ReleaseNote) { export function releaseNoteIsAlpha(note: ReleaseNote) {
"use client"; "use client";
return note.version.includes("-a."); return note.version.includes("-a.");
} }