diff --git a/src-web/components/Settings/SettingsLicense.tsx b/src-web/components/Settings/SettingsLicense.tsx
index 84d969a4..4bf5c844 100644
--- a/src-web/components/Settings/SettingsLicense.tsx
+++ b/src-web/components/Settings/SettingsLicense.tsx
@@ -10,6 +10,7 @@ import { Button } from '../core/Button';
import { Icon } from '../core/Icon';
import { Link } from '../core/Link';
import { PlainInput } from '../core/PlainInput';
+import { Separator } from '../core/Separator';
import { HStack, VStack } from '../core/Stacks';
import { LocalImage } from '../LocalImage';
@@ -34,43 +35,56 @@ function SettingsLicenseCmp() {
{check.data?.type === 'commercial_use' ? (
Your license is active 🥳
- ) : check.data?.type == 'trialing' ? (
-
-
-
- {pluralizeCount('day', differenceInDays(check.data.end, new Date()))} remaining
- {' '}
- on your commercial-use trial
-
-
- ) : check.data?.type == 'personal_use' ? (
-
- You are able to use Yaak for personal use only
-
- ) : null}
-
- {check.data?.type !== 'commercial_use' && (
-
-
-
-
Hey, I'm Greg 👋🏼
-
- Yaak is free for personal projects and learning.{' '}
- {check.data?.type === 'trialing' ? 'Once your trial ends, a ' : 'A '}
- license will be required for work or commercial use.
-
-
+ ) : check.data?.type === 'trialing' ? (
+
+
+
+ {pluralizeCount('day', differenceInDays(check.data.end, new Date()))} {' '}
+ left to evaluate Yaak for commercial use.
+
+ Personal use is always free, forever.
+
+
+
+ Contact Support
+
+
Learn More
-
-
-
- )}
+
+
+
+ ) : check.data?.type === 'personal_use' ? (
+
+
+
+ Your commercial-use trial has ended.
+
+
+ You can continue using Yaak for personal use free, forever.
+
+ A license is required for commercial use.
+
+
+
+
+ Contact Support
+
+
+
+ Learn More
+
+
+
+
+ ) : null}
{check.error &&
{check.error} }
{activate.error &&
{activate.error} }
diff --git a/src-web/components/core/Link.tsx b/src-web/components/core/Link.tsx
index df3a3467..00dc7250 100644
--- a/src-web/components/core/Link.tsx
+++ b/src-web/components/core/Link.tsx
@@ -12,32 +12,37 @@ interface Props extends HTMLAttributes
{
export function Link({ href, children, noUnderline, className, ...other }: Props) {
const isExternal = href.match(/^https?:\/\//);
- className = classNames(className, 'relative');
+ className = classNames(
+ className,
+ 'relative',
+ 'inline-flex items-center hover:underline group',
+ !noUnderline && 'underline',
+ );
if (isExternal) {
+ const isYaakLink = href.startsWith('https://yaak.app');
let finalHref = href;
- if (href.startsWith('https://yaak.app')) {
+ if (isYaakLink) {
const url = new URL(href);
url.searchParams.set('ref', appInfo.identifier);
finalHref = url.toString();
}
return (
+ // eslint-disable-next-line react/jsx-no-target-blank
{
- e.preventDefault();
- }}
+ rel={isYaakLink ? undefined : 'noopener noreferrer'}
+ onClick={(e) => e.preventDefault()}
+ className={className}
{...other}
>
- {children}
-
+ {children}
+
);
}
diff --git a/src-web/components/core/Separator.tsx b/src-web/components/core/Separator.tsx
index 238e02bb..89f90f86 100644
--- a/src-web/components/core/Separator.tsx
+++ b/src-web/components/core/Separator.tsx
@@ -1,3 +1,4 @@
+import type { Color } from '@yaakapp-internal/plugins';
import classNames from 'classnames';
import type { ReactNode } from 'react';
@@ -6,9 +7,10 @@ interface Props {
dashed?: boolean;
className?: string;
children?: ReactNode;
+ color?: Color;
}
-export function Separator({ className, dashed, orientation = 'horizontal', children }: Props) {
+export function Separator({ color, className, dashed, orientation = 'horizontal', children }: Props) {
return (
{children && (
@@ -16,7 +18,15 @@ export function Separator({ className, dashed, orientation = 'horizontal', child
)}