+ }
+ >
+
+
+
Remember that the below is an approximation of the email. Always test
it in your inbox.{' '}
diff --git a/apps/dev-tool/app/emails/page.tsx b/apps/dev-tool/app/emails/page.tsx
index 231267d2a..05390f993 100644
--- a/apps/dev-tool/app/emails/page.tsx
+++ b/apps/dev-tool/app/emails/page.tsx
@@ -29,13 +29,12 @@ export default async function EmailsPage() {
return (
-
-
+
+
{categories.map((category) => {
const categoryTemplates = templates.filter(
(t) => t.category === category,
diff --git a/apps/dev-tool/app/page.tsx b/apps/dev-tool/app/page.tsx
index 1bf17b0e0..a2090acb3 100644
--- a/apps/dev-tool/app/page.tsx
+++ b/apps/dev-tool/app/page.tsx
@@ -36,12 +36,12 @@ export default async function DashboardPage() {
return (
-
+
+
-
+
{/* Header */}
diff --git a/apps/dev-tool/app/translations/page.tsx b/apps/dev-tool/app/translations/page.tsx
index 85e6f75cd..f4b6c2a1e 100644
--- a/apps/dev-tool/app/translations/page.tsx
+++ b/apps/dev-tool/app/translations/page.tsx
@@ -15,15 +15,14 @@ export default async function TranslationsPage() {
return (
-
+
+
-
diff --git a/apps/dev-tool/app/variables/page.tsx b/apps/dev-tool/app/variables/page.tsx
index 5a28ce550..1689948cd 100644
--- a/apps/dev-tool/app/variables/page.tsx
+++ b/apps/dev-tool/app/variables/page.tsx
@@ -26,15 +26,14 @@ export default function VariablesPage({ searchParams }: VariablesPageProps) {
return (
-
-
+
+
{apps.map((app) => (
diff --git a/apps/dev-tool/components/app-layout.tsx b/apps/dev-tool/components/app-layout.tsx
index 0186c3ab5..9eb792f61 100644
--- a/apps/dev-tool/components/app-layout.tsx
+++ b/apps/dev-tool/components/app-layout.tsx
@@ -7,7 +7,7 @@ export function DevToolLayout(props: React.PropsWithChildren) {
- {props.children}
+ {props.children}
);
}
diff --git a/package.json b/package.json
index bbc9acf59..5859eada6 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "next-supabase-saas-kit-turbo",
- "version": "3.0.2",
+ "version": "3.0.3",
"private": true,
"author": {
"name": "MakerKit",
diff --git a/packages/billing/gateway/src/components/pricing-table.tsx b/packages/billing/gateway/src/components/pricing-table.tsx
index 23ead4b6e..6b556ea2c 100644
--- a/packages/billing/gateway/src/components/pricing-table.tsx
+++ b/packages/billing/gateway/src/components/pricing-table.tsx
@@ -1,34 +1,34 @@
-"use client";
+'use client';
-import { useState } from "react";
+import { useState } from 'react';
-import Link from "next/link";
+import Link from 'next/link';
-import { ArrowRight, CheckCircle } from "lucide-react";
-import { useTranslations } from "next-intl";
-import * as z from "zod";
+import { ArrowRight, CheckCircle } from 'lucide-react';
+import { useTranslations } from 'next-intl';
+import * as z from 'zod';
import {
BillingConfig,
type LineItemSchema,
getPlanIntervals,
getPrimaryLineItem,
-} from "@kit/billing";
-import { Badge } from "@kit/ui/badge";
-import { Button } from "@kit/ui/button";
-import { If } from "@kit/ui/if";
-import { Trans } from "@kit/ui/trans";
-import { cn } from "@kit/ui/utils";
+} from '@kit/billing';
+import { Badge } from '@kit/ui/badge';
+import { Button } from '@kit/ui/button';
+import { If } from '@kit/ui/if';
+import { Trans } from '@kit/ui/trans';
+import { cn } from '@kit/ui/utils';
-import { LineItemDetails } from "./line-item-details";
-import { PlanCostDisplay } from "./plan-cost-display";
+import { LineItemDetails } from './line-item-details';
+import { PlanCostDisplay } from './plan-cost-display';
interface Paths {
signUp: string;
return: string;
}
-type Interval = "month" | "year";
+type Interval = 'month' | 'year';
export function PricingTable({
config,
@@ -57,8 +57,8 @@ export function PricingTable({
const visibleProducts = config.products.filter((product) => !product.hidden);
return (
-
-
+
+
{intervals.length > 1 ? (
{visibleProducts.map((product) => {
const plan = product.plans.find((plan) => {
- if (plan.paymentType === "recurring") {
+ if (plan.paymentType === 'recurring') {
return plan.interval === interval;
}
@@ -159,7 +159,7 @@ function PricingItem(
const lineItem = props.primaryLineItem!;
const isCustom = props.plan.custom ?? false;
- const i18nKey = lineItem?.unit ? `billing.units.${lineItem.unit}` : "";
+ const i18nKey = lineItem?.unit ? `billing.units.${lineItem.unit}` : '';
const unitLabel = lineItem?.unit
? t.has(i18nKey)
@@ -168,31 +168,31 @@ function PricingItem(
defaultValue: lineItem.unit,
} as never)
: lineItem.unit
- : "";
+ : '';
- const isDefaultSeatUnit = lineItem?.unit === "member";
+ const isDefaultSeatUnit = lineItem?.unit === 'member';
// we exclude flat line items from the details since
// it doesn't need further explanation
const lineItemsToDisplay = props.plan.lineItems.filter((item) => {
- return item.type !== "flat";
+ return item.type !== 'flat';
});
const interval = props.plan.interval as Interval;
return (
-
+
-
-
-
+
+
+
-
+
-
+
}
+ fallback={}
>
{(interval) => (
@@ -268,7 +268,7 @@ function PricingItem(
-
+
/
-
+
}
+ fallback={}
>
-
+
-
+
-
+
-
-
-
+
+
+
,
) {
return (
-
+
{props.features.map((feature) => {
return (
@@ -392,17 +392,17 @@ function Price({
>
{children}
-
+
/
-
+
@@ -416,18 +416,18 @@ function ListItem({
highlighted: boolean;
}>) {
return (
-
+
{children}
@@ -446,40 +446,40 @@ function PlanIntervalSwitcher(
return (
{props.intervals.map((plan, index) => {
const selected = plan === props.interval;
const className = cn(
- "animate-in fade-in rounded-full transition-all focus:!ring-0",
+ 'animate-in fade-in rounded-full transition-all focus:!ring-0',
{
- "border-r-transparent": index === 0,
- ["hover:text-primary text-muted-foreground"]: !selected,
- ["cursor-default"]: selected,
+ 'border-r-transparent': index === 0,
+ ['hover:text-primary text-muted-foreground']: !selected,
+ ['cursor-default']: selected,
},
);
return (