- >
- );
-}
-
-function StripeTooltipContent() {
- return (
- <>
-
- >
- );
-}
-
-function SupabaseTooltipContent() {
- return (
- <>
-
- >
- );
-}
-
-function SendgridTooltipContent() {
- return (
- <>
-
- >
- );
-}
-
-function AirtableTooltipContent() {
- return (
- <>
-
- >
- );
-}
-
-function OpenaiTooltipContent() {
- return (
- <>
-
- >
- );
-}
-
-function TriggerTooltipContent() {
- return (
- <>
-
- >
- );
-}
-
-function InYourCodebaseTooltipContent() {
- return (
- <>
-
- >
- );
-}
-
-function ServerlessTooltipContent() {
- return (
- <>
-
- >
- );
-}
-
-function ReactHooksTooltipContent() {
- return (
- <>
-
- >
- );
-}
diff --git a/apps/webapp/app/components/events/EventsFilters.tsx b/apps/webapp/app/components/events/EventsFilters.tsx
index cdbeb7ee0..13711d804 100644
--- a/apps/webapp/app/components/events/EventsFilters.tsx
+++ b/apps/webapp/app/components/events/EventsFilters.tsx
@@ -15,6 +15,7 @@ import { environmentKeys, FilterableEnvironment } from "~/components/runs/RunSta
import { TimeFrameFilter } from "../runs/TimeFrameFilter";
import { useCallback } from "react";
import { Button } from "../primitives/Buttons";
+import { TrashIcon } from "@heroicons/react/20/solid";
export function EventsFilters() {
const navigate = useNavigate();
@@ -66,19 +67,22 @@ export function EventsFilters() {
}, []);
return (
-
+
);
}
diff --git a/apps/webapp/app/components/primitives/Input.tsx b/apps/webapp/app/components/primitives/Input.tsx
index 9a0604670..01d55f591 100644
--- a/apps/webapp/app/components/primitives/Input.tsx
+++ b/apps/webapp/app/components/primitives/Input.tsx
@@ -15,28 +15,27 @@ const shortcutBase =
const variants = {
large: {
container:
- "px-1 w-full h-10 rounded-[3px] border border-charcoal-800 bg-charcoal-750 hover:border-charcoal-750 hover:bg-charcoal-650",
+ "px-1 w-full h-10 rounded-[3px] border border-charcoal-800 bg-charcoal-750 hover:border-charcoal-600 hover:bg-charcoal-650",
input: "px-2 text-sm",
iconSize: "h-4 w-4 ml-1",
shortcut: "mr-1 min-w-[22px] rounded-sm py-[3px] px-[5px] text-[0.6rem] select-none",
},
medium: {
container:
- "px-1 h-8 w-full rounded border border-charcoal-800 bg-charcoal-750 hover:border-charcoal-750 hover:bg-charcoal-650",
+ "px-1 h-8 w-full rounded border border-charcoal-800 bg-charcoal-750 hover:border-charcoal-600 hover:bg-charcoal-650",
input: "px-1.5 rounded text-sm",
iconSize: "h-4 w-4 ml-0.5",
shortcut: "min-w-[22px] rounded-sm py-[3px] px-[5px] text-[0.6rem]",
},
small: {
container:
- "px-0.5 h-6 w-full rounded border border-charcoal-800 bg-charcoal-750 hover:border-charcoal-750 hover:bg-charcoal-650",
+ "px-1 h-6 w-full rounded border border-charcoal-800 bg-charcoal-750 hover:border-charcoal-600 hover:bg-charcoal-650",
input: "px-1 rounded text-xs",
iconSize: "h-3 w-3 ml-0.5",
shortcut: "min-w-[22px] rounded-[2px] py-px px-[3px] text-[0.5rem]",
},
tertiary: {
- container:
- "px-0.5 h-6 w-full rounded border border-transparent hover:border-charcoal-800 hover:bg-charcoal-750",
+ container: "px-1 h-6 w-full rounded hover:bg-charcoal-750",
input: "px-1 rounded text-xs",
iconSize: "h-3 w-3 ml-0.5",
shortcut: "min-w-[22px] rounded-[2px] py-px px-[3px] text-[0.5rem]",
diff --git a/apps/webapp/app/components/primitives/NamedIcon.tsx b/apps/webapp/app/components/primitives/NamedIcon.tsx
index 217ee73af..9148fa3d6 100644
--- a/apps/webapp/app/components/primitives/NamedIcon.tsx
+++ b/apps/webapp/app/components/primitives/NamedIcon.tsx
@@ -162,6 +162,7 @@ const icons = {
settings: (className: string) =>
,
spinner: (className: string) =>
,
"spinner-white": (className: string) =>
,
+ "spinner-dark": (className: string) =>
,
squares: (className: string) => (
),
diff --git a/apps/webapp/app/components/primitives/Popover.tsx b/apps/webapp/app/components/primitives/Popover.tsx
index 1b6be047f..98530758c 100644
--- a/apps/webapp/app/components/primitives/Popover.tsx
+++ b/apps/webapp/app/components/primitives/Popover.tsx
@@ -1,11 +1,11 @@
"use client";
-import * as React from "react";
-import * as PopoverPrimitive from "@radix-ui/react-popover";
-import { cn } from "~/utils/cn";
-import { Paragraph, ParagraphVariant } from "./Paragraph";
import { ChevronDownIcon, EllipsisVerticalIcon } from "@heroicons/react/24/solid";
+import * as PopoverPrimitive from "@radix-ui/react-popover";
+import * as React from "react";
+import { cn } from "~/utils/cn";
import { ButtonContentPropsType, LinkButton } from "./Buttons";
+import { Paragraph, ParagraphVariant } from "./Paragraph";
const Popover = PopoverPrimitive.Root;
const PopoverTrigger = PopoverPrimitive.Trigger;
@@ -21,7 +21,7 @@ const PopoverContent = React.forwardRef<
sideOffset={sideOffset}
avoidCollisions={true}
className={cn(
- "z-50 min-w-max rounded-md border border-charcoal-700 bg-background-bright p-4 shadow-md outline-none animate-in data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
+ "z-50 min-w-max rounded border border-charcoal-700 bg-background-bright p-4 shadow-md outline-none animate-in data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
className
)}
style={{
@@ -157,11 +157,11 @@ function PopoverVerticalEllipseTrigger({
export {
Popover,
- PopoverTrigger,
- PopoverContent,
- PopoverSectionHeader,
- PopoverCustomTrigger,
PopoverArrowTrigger,
- PopoverVerticalEllipseTrigger,
+ PopoverContent,
+ PopoverCustomTrigger,
PopoverMenuItem,
+ PopoverSectionHeader,
+ PopoverTrigger,
+ PopoverVerticalEllipseTrigger,
};
diff --git a/apps/webapp/app/components/primitives/Select.tsx b/apps/webapp/app/components/primitives/Select.tsx
index 3610790b7..d69459477 100644
--- a/apps/webapp/app/components/primitives/Select.tsx
+++ b/apps/webapp/app/components/primitives/Select.tsx
@@ -1,15 +1,15 @@
"use client";
-import * as React from "react";
import * as SelectPrimitive from "@radix-ui/react-select";
import { Check, ChevronDown } from "lucide-react";
+import * as React from "react";
import { cn } from "~/utils/cn";
const sizes = {
"secondary/small":
- "text-xs h-6 bg-tertiary hover:bg-tertiary-foreground pr-2 pl-1 bg-charcoal-800",
- medium:
- "text-sm h-8 bg-charcoal-850 border border-charcoal-800 hover:bg-charcoal-800 hover:border-charcoal-750 px-2.5",
+ "text-xs h-6 bg-tertiary border border-tertiary group-hover:text-text-bright hover:border-charcoal-600 pr-2 pl-1.5",
+ medium: "text-sm h-8 bg-tertiary border border-tertiary hover:border-charcoal-600 px-2.5",
+ minimal: "text-xs h-6 bg-transparent hover:bg-tertiary pl-1.5 pr-2",
};
export type SelectProps = {
@@ -29,7 +29,7 @@ const SelectTrigger = React.forwardRef<
@@ -130,11 +130,11 @@ SelectSeparator.displayName = SelectPrimitive.Separator.displayName;
export {
Select,
- SelectGroup,
- SelectValue,
- SelectTrigger,
SelectContent,
- SelectLabel,
+ SelectGroup,
SelectItem,
+ SelectLabel,
SelectSeparator,
+ SelectTrigger,
+ SelectValue,
};
diff --git a/apps/webapp/app/components/primitives/Sheet.tsx b/apps/webapp/app/components/primitives/Sheet.tsx
index dd9d1895d..217a601ac 100644
--- a/apps/webapp/app/components/primitives/Sheet.tsx
+++ b/apps/webapp/app/components/primitives/Sheet.tsx
@@ -51,7 +51,7 @@ const SheetOverlay = React.forwardRef<
SheetOverlay.displayName = SheetPrimitive.Overlay.displayName;
const sheetVariants = cva(
- "fixed z-50 scale-100 gap-4 bg-background-dimmed shadow-lg shadow-white/10 opacity-100 border-l border-grid-bright",
+ "fixed z-50 scale-100 gap-4 shadow-lg bg-background-bright opacity-100 border-l border-grid-bright",
{
variants: {
position: {
diff --git a/apps/webapp/app/components/primitives/Spinner.tsx b/apps/webapp/app/components/primitives/Spinner.tsx
index b8593287c..ea43fe209 100644
--- a/apps/webapp/app/components/primitives/Spinner.tsx
+++ b/apps/webapp/app/components/primitives/Spinner.tsx
@@ -5,7 +5,7 @@ export function Spinner({
color = "blue",
}: {
className?: string;
- color?: "blue" | "white" | "muted";
+ color?: "blue" | "white" | "muted" | "dark";
}) {
const colors = {
blue: {
@@ -20,6 +20,10 @@ export function Spinner({
light: "#1C2433",
dark: "#3C4B62",
},
+ dark: {
+ light: "#15171A",
+ dark: "#272A2E",
+ },
};
const currentColor = colors[color];
diff --git a/apps/webapp/app/components/primitives/Switch.tsx b/apps/webapp/app/components/primitives/Switch.tsx
index f4e1c67e0..8ec52c686 100644
--- a/apps/webapp/app/components/primitives/Switch.tsx
+++ b/apps/webapp/app/components/primitives/Switch.tsx
@@ -6,16 +6,17 @@ import { cn } from "~/utils/cn";
const variations = {
large: {
- container: "flex items-center gap-x-2 rounded-md hover:bg-charcoal-850 p-2",
+ container: "flex items-center gap-x-2 rounded-md hover:bg-tertiary p-2 transition",
root: "h-6 w-11",
thumb: "h-5 w-5 data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0",
- text: "text-sm text-charcoal-400 group-hover:text-charcoal-200",
+ text: "text-sm text-charcoal-400 group-hover:text-charcoal-200 transition",
},
small: {
- container: "flex items-center gap-x-1.5 rounded hover:bg-charcoal-850 pr-1 py-[0.1rem] pl-1.5",
+ container:
+ "flex items-center gap-x-1.5 rounded hover:bg-tertiary pr-1 py-[0.1rem] pl-1.5 transition",
root: "h-3 w-6",
thumb: "h-2.5 w-2.5 data-[state=checked]:translate-x-2.5 data-[state=unchecked]:translate-x-0",
- text: "text-xs text-charcoal-400 group-hover:text-charcoal-200 hover:cursor-pointer",
+ text: "text-xs text-charcoal-400 group-hover:text-charcoal-200 hover:cursor-pointer transition",
},
};
diff --git a/apps/webapp/app/components/primitives/TextArea.tsx b/apps/webapp/app/components/primitives/TextArea.tsx
index 5e56452c7..ee2f1078b 100644
--- a/apps/webapp/app/components/primitives/TextArea.tsx
+++ b/apps/webapp/app/components/primitives/TextArea.tsx
@@ -8,7 +8,7 @@ export function TextArea({ className, rows, ...props }: TextAreaProps) {
{...props}
rows={rows ?? 6}
className={cn(
- "ring-offset-background placeholder:text-muted-foreground focus:border-ring focus:ring-ring focus-visible:ring-ring w-full rounded-md border border-charcoal-800 bg-charcoal-850 px-3 text-sm text-text-bright transition file:border-0 file:bg-transparent file:text-base file:font-medium hover:border-charcoal-750 hover:bg-charcoal-800 focus:outline-none focus:ring-2 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-offset-0 disabled:cursor-not-allowed disabled:opacity-50",
+ "ring-offset-background placeholder:text-muted-foreground focus:border-ring focus:ring-ring focus-visible:ring-ring w-full rounded-md border border-tertiary bg-tertiary px-3 text-sm text-text-bright transition file:border-0 file:bg-transparent file:text-base file:font-medium hover:border-charcoal-600 focus:outline-none focus:ring-2 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-offset-0 disabled:cursor-not-allowed disabled:opacity-50",
className
)}
/>
diff --git a/apps/webapp/app/components/run/RunCard.tsx b/apps/webapp/app/components/run/RunCard.tsx
index 02b2cb6fe..2dfcbf5f6 100644
--- a/apps/webapp/app/components/run/RunCard.tsx
+++ b/apps/webapp/app/components/run/RunCard.tsx
@@ -29,7 +29,7 @@ export function RunPanel({
diff --git a/apps/webapp/app/components/runs/RunFilters.tsx b/apps/webapp/app/components/runs/RunFilters.tsx
index efaa8006e..bf6709bec 100644
--- a/apps/webapp/app/components/runs/RunFilters.tsx
+++ b/apps/webapp/app/components/runs/RunFilters.tsx
@@ -4,6 +4,7 @@ import {
ExclamationTriangleIcon,
NoSymbolIcon,
PauseCircleIcon,
+ TrashIcon,
XCircleIcon,
XMarkIcon,
} from "@heroicons/react/20/solid";
@@ -86,19 +87,22 @@ export function RunsFilters() {
}, []);
return (
-
+
);
}
diff --git a/apps/webapp/app/components/runs/TimeFrameFilter.tsx b/apps/webapp/app/components/runs/TimeFrameFilter.tsx
index 135afdd95..2ccdff33f 100644
--- a/apps/webapp/app/components/runs/TimeFrameFilter.tsx
+++ b/apps/webapp/app/components/runs/TimeFrameFilter.tsx
@@ -1,21 +1,12 @@
import { ChevronDownIcon } from "lucide-react";
import { useCallback, useState } from "react";
-import {
- Calendar,
- CalendarDateTime,
- DateValue,
- getLocalTimeZone,
- today,
-} from "@internationalized/date";
import { cn } from "~/utils/cn";
import { Button } from "../primitives/Buttons";
import { ClientTabs, ClientTabsContent, ClientTabsWithUnderline } from "../primitives/ClientTabs";
+import { DateField } from "../primitives/DateField";
import { formatDateTime } from "../primitives/DateTime";
import { Paragraph } from "../primitives/Paragraph";
import { Popover, PopoverContent, PopoverTrigger } from "../primitives/Popover";
-import { DateField } from "../primitives/DateField";
-import { useLocales } from "../primitives/LocaleProvider";
-import { createCalendar } from "@internationalized/date";
type RunTimeFrameFilterProps = {
from?: number;
@@ -50,14 +41,11 @@ export function TimeFrameFilter({ from, to, onRangeChanged }: RunTimeFrameFilter
return (
setIsOpen(open)} open={isOpen} modal>
-
@@ -135,13 +123,14 @@ function RelativeTimeFrame({
variant={value === timeframe.value ? "primary/small" : "tertiary/small"}
className={cn(
"w-full",
- value !== timeframe.value && "border border-charcoal-700 group-hover:bg-charcoal-700"
+ value !== timeframe.value &&
+ "border border-charcoal-700 text-xs group-hover:bg-charcoal-700"
)}
onClick={() => {
onValueChange(timeframe.value);
}}
>
- {timeframe.label}
+ {timeframe.label}
))}
diff --git a/apps/webapp/app/components/runs/v3/RunFilters.tsx b/apps/webapp/app/components/runs/v3/RunFilters.tsx
index 599ef3837..345f0b5ee 100644
--- a/apps/webapp/app/components/runs/v3/RunFilters.tsx
+++ b/apps/webapp/app/components/runs/v3/RunFilters.tsx
@@ -1,6 +1,11 @@
+import { TrashIcon } from "@heroicons/react/20/solid";
import { useNavigate } from "@remix-run/react";
+import { RuntimeEnvironment, TaskRunAttemptStatus } from "@trigger.dev/database";
+import { useCallback } from "react";
+import { z } from "zod";
import { useOptimisticLocation } from "~/hooks/useOptimisticLocation";
import { EnvironmentLabel } from "../../environments/EnvironmentLabel";
+import { Button } from "../../primitives/Buttons";
import { Paragraph } from "../../primitives/Paragraph";
import {
Select,
@@ -10,10 +15,6 @@ import {
SelectTrigger,
SelectValue,
} from "../../primitives/Select";
-import { RuntimeEnvironment, TaskRunAttemptStatus } from "@trigger.dev/database";
-import { useCallback } from "react";
-import { z } from "zod";
-import { Button } from "../../primitives/Buttons";
import { TimeFrameFilter } from "../TimeFrameFilter";
import { TaskRunStatus } from "./TaskRunStatus";
@@ -126,19 +127,22 @@ export function RunsFilters({ possibleEnvironments, possibleTasks }: RunFiltersP
}, []);
return (
-
+
-
+
-
+
All environments
@@ -156,12 +160,15 @@ export function RunsFilters({ possibleEnvironments, possibleTasks }: RunFiltersP
-
+
-
+
All statuses
@@ -176,18 +183,24 @@ export function RunsFilters({ possibleEnvironments, possibleTasks }: RunFiltersP
-
+
-
+
All tasks
{possibleTasks.map((task) => (
-
+
{task}
@@ -198,9 +211,7 @@ export function RunsFilters({ possibleEnvironments, possibleTasks }: RunFiltersP
- clearFilters()} LeadingIcon={"close"}>
- Clear
-
+ clearFilters()} LeadingIcon={TrashIcon} />
);
}
diff --git a/apps/webapp/app/root.tsx b/apps/webapp/app/root.tsx
index 3cb2d337d..61dcf12a6 100644
--- a/apps/webapp/app/root.tsx
+++ b/apps/webapp/app/root.tsx
@@ -1,17 +1,8 @@
import { ErrorBoundary as HighlightErrorBoundary } from "@highlight-run/react";
-import type { LinksFunction, LoaderFunctionArgs } from "@remix-run/node";
+import type { LinksFunction, LoaderFunctionArgs, MetaFunction } from "@remix-run/node";
import type { ShouldRevalidateFunction } from "@remix-run/react";
-import {
- Links,
- LiveReload,
- Meta,
- Outlet,
- Scripts,
- ScrollRestoration,
- useMatches,
-} from "@remix-run/react";
-import { metaV1 } from "@remix-run/v1-meta";
-import { TypedMetaFunction, typedjson, useTypedLoaderData } from "remix-typedjson";
+import { Links, LiveReload, Meta, Outlet, Scripts, ScrollRestoration } from "@remix-run/react";
+import { UseDataFunctionReturn, typedjson, useTypedLoaderData } from "remix-typedjson";
import { ExternalScripts } from "remix-utils/external-scripts";
import type { ToastMessage } from "~/models/message.server";
import { commitSession, getSession } from "~/models/message.server";
@@ -24,7 +15,6 @@ import { env } from "./env.server";
import { featuresForRequest } from "./features.server";
import { useHighlight } from "./hooks/useHighlight";
import { usePostHog } from "./hooks/usePostHog";
-import { useTypedMatchesData } from "./hooks/useTypedMatchData";
import { getUser } from "./services/session.server";
import { appEnvTitleTag } from "./utils";
@@ -32,13 +22,19 @@ export const links: LinksFunction = () => {
return [{ rel: "stylesheet", href: tailwindStylesheetUrl }];
};
-export const meta: TypedMetaFunction
= (args) => {
- return metaV1(args, {
- title: `Trigger.dev${appEnvTitleTag(args.data?.appEnv)}`,
- charset: "utf-8",
- viewport: "width=1024, initial-scale=1",
- robots: args.data.features.isManagedCloud ? "index, follow" : "noindex, nofollow",
- });
+export const meta: MetaFunction = ({ data }) => {
+ const typedData = data as UseDataFunctionReturn;
+ return [
+ { title: `Trigger.dev${appEnvTitleTag(typedData.appEnv)}` },
+ {
+ name: "viewport",
+ content: "width=1024, initial-scale=1",
+ },
+ {
+ name: "robots",
+ content: typedData.features.isManagedCloud ? "index, follow" : "noindex, nofollow",
+ },
+ ];
};
export const loader = async ({ request }: LoaderFunctionArgs) => {
@@ -77,10 +73,12 @@ export function ErrorBoundary() {
<>
+
+
-
+
@@ -112,7 +110,7 @@ function App() {
-
+
diff --git a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.v3.$projectParam.settings/route.tsx b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.v3.$projectParam.settings/route.tsx
index ae8c674a0..a13b8618e 100644
--- a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.v3.$projectParam.settings/route.tsx
+++ b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.v3.$projectParam.settings/route.tsx
@@ -128,7 +128,8 @@ export default function Page() {
- This goes in your trigger.config file.
+ This goes in your{" "}
+ trigger.config file.
diff --git a/apps/webapp/app/routes/_app.orgs.$organizationSlug_.projects.new/route.tsx b/apps/webapp/app/routes/_app.orgs.$organizationSlug_.projects.new/route.tsx
index 3809f59ce..022dd9b7e 100644
--- a/apps/webapp/app/routes/_app.orgs.$organizationSlug_.projects.new/route.tsx
+++ b/apps/webapp/app/routes/_app.orgs.$organizationSlug_.projects.new/route.tsx
@@ -140,14 +140,14 @@ export default function NewOrganizationPage() {
{v3Enabled ? (
-
+
-
+
Version 2
diff --git a/apps/webapp/app/routes/_app.orgs.new/route.tsx b/apps/webapp/app/routes/_app.orgs.new/route.tsx
index ad6e84930..cf199725d 100644
--- a/apps/webapp/app/routes/_app.orgs.new/route.tsx
+++ b/apps/webapp/app/routes/_app.orgs.new/route.tsx
@@ -139,11 +139,11 @@ export default function NewOrganizationPage() {
{v3Enabled ? (
-
+
-
+
Version 2
diff --git a/apps/webapp/app/routes/confirm-basic-details.tsx b/apps/webapp/app/routes/confirm-basic-details.tsx
index 5c1ad1c60..852163c6d 100644
--- a/apps/webapp/app/routes/confirm-basic-details.tsx
+++ b/apps/webapp/app/routes/confirm-basic-details.tsx
@@ -1,5 +1,6 @@
import { conform, useForm } from "@conform-to/react";
import { parse } from "@conform-to/zod";
+import { ArrowRightIcon } from "@heroicons/react/20/solid";
import { HandRaisedIcon } from "@heroicons/react/24/solid";
import { ActionFunction, json } from "@remix-run/node";
import { Form, useActionData } from "@remix-run/react";
@@ -230,7 +231,7 @@ export default function Page() {
+
Continue
}
diff --git a/apps/webapp/app/routes/login._index/route.tsx b/apps/webapp/app/routes/login._index/route.tsx
index ce27b705c..82a11f18b 100644
--- a/apps/webapp/app/routes/login._index/route.tsx
+++ b/apps/webapp/app/routes/login._index/route.tsx
@@ -1,13 +1,7 @@
-import type { LoaderFunctionArgs } from "@remix-run/node";
+import type { LoaderFunctionArgs, MetaFunction } from "@remix-run/node";
import { Form } from "@remix-run/react";
-import { getMatchesData, metaV1 } from "@remix-run/v1-meta";
-import {
- TypedMetaFunction,
- UseDataFunctionReturn,
- redirect,
- typedjson,
- useTypedLoaderData,
-} from "remix-typedjson";
+import { GitHubDarkIcon } from "@trigger.dev/companyicons";
+import { redirect, typedjson, useTypedLoaderData } from "remix-typedjson";
import { LoginPageLayout } from "~/components/LoginPageLayout";
import { Button, LinkButton } from "~/components/primitives/Buttons";
import { Fieldset } from "~/components/primitives/Fieldset";
@@ -15,19 +9,28 @@ import { Header1 } from "~/components/primitives/Headers";
import { NamedIcon } from "~/components/primitives/NamedIcon";
import { Paragraph } from "~/components/primitives/Paragraph";
import { TextLink } from "~/components/primitives/TextLink";
-import type { LoaderType as RootLoader } from "~/root";
import { isGithubAuthSupported } from "~/services/auth.server";
import { commitSession, setRedirectTo } from "~/services/redirectTo.server";
import { getUserId } from "~/services/session.server";
-import { appEnvTitleTag } from "~/utils";
import { requestUrl } from "~/utils/requestUrl.server";
-export const meta: TypedMetaFunction = (args) => {
- const matchesData = getMatchesData(args) as { root: UseDataFunctionReturn };
+export const meta: MetaFunction = ({ matches }) => {
+ const parentMeta = matches
+ .flatMap((match) => match.meta ?? [])
+ .filter((meta) => {
+ if ("title" in meta) return false;
+ if ("name" in meta && meta.name === "viewport") return false;
+ return true;
+ });
- return metaV1(args, {
- title: `Login to Trigger.dev${appEnvTitleTag(matchesData.root.appEnv)}`,
- });
+ return [
+ ...parentMeta,
+ { title: `Login to Trigger.dev` },
+ {
+ name: "viewport",
+ content: "width=device-width,initial-scale=1",
+ },
+ ];
};
export type PromiseReturnType Promise> = Awaited<
@@ -71,7 +74,7 @@ export default function LoginPage() {
className="w-full"
>
-
+
Welcome
@@ -86,22 +89,18 @@ export default function LoginPage() {
fullWidth
data-action="continue with github"
>
-
- Continue with GitHub
+
+ Continue with GitHub
)}
-
+
Continue with Email
diff --git a/apps/webapp/app/routes/login.magic/route.tsx b/apps/webapp/app/routes/login.magic/route.tsx
index f74ac7f3b..05bec7c54 100644
--- a/apps/webapp/app/routes/login.magic/route.tsx
+++ b/apps/webapp/app/routes/login.magic/route.tsx
@@ -1,14 +1,8 @@
import { InboxArrowDownIcon } from "@heroicons/react/24/solid";
-import type { ActionFunctionArgs, LoaderFunctionArgs } from "@remix-run/node";
+import type { ActionFunctionArgs, LoaderFunctionArgs, MetaFunction } from "@remix-run/node";
import { redirect } from "@remix-run/node";
import { Form, useNavigation } from "@remix-run/react";
-import { getMatchesData, metaV1 } from "@remix-run/v1-meta";
-import {
- TypedMetaFunction,
- UseDataFunctionReturn,
- typedjson,
- useTypedLoaderData,
-} from "remix-typedjson";
+import { typedjson, useTypedLoaderData } from "remix-typedjson";
import { z } from "zod";
import { LoginPageLayout } from "~/components/LoginPageLayout";
import { Button, LinkButton } from "~/components/primitives/Buttons";
@@ -21,17 +15,26 @@ import { InputGroup } from "~/components/primitives/InputGroup";
import { NamedIcon } from "~/components/primitives/NamedIcon";
import { Paragraph } from "~/components/primitives/Paragraph";
import { TextLink } from "~/components/primitives/TextLink";
-import type { LoaderType as RootLoader } from "~/root";
import { authenticator } from "~/services/auth.server";
import { commitSession, getUserSession } from "~/services/sessionStorage.server";
-import { appEnvTitleTag } from "~/utils";
-export const meta: TypedMetaFunction = (args) => {
- const matchesData = getMatchesData(args) as { root: UseDataFunctionReturn };
+export const meta: MetaFunction = ({ matches }) => {
+ const parentMeta = matches
+ .flatMap((match) => match.meta ?? [])
+ .filter((meta) => {
+ if ("title" in meta) return false;
+ if ("name" in meta && meta.name === "viewport") return false;
+ return true;
+ });
- return metaV1(args, {
- title: `Login to Trigger.dev${appEnvTitleTag(matchesData.root.appEnv)}`,
- });
+ return [
+ ...parentMeta,
+ { title: `Login to Trigger.dev` },
+ {
+ name: "viewport",
+ content: "width=device-width,initial-scale=1",
+ },
+ ];
};
export async function loader({ request }: LoaderFunctionArgs) {
@@ -120,7 +123,7 @@ export default function LoginMagicLinkPage() {
type="submit"
name="action"
value="reset"
- variant="tertiary/small"
+ variant="minimal/small"
LeadingIcon="arrow-left"
leadingIconClassName="text-text-dimmed group-hover:text-text-bright transition"
data-action="re-enter email"
@@ -131,7 +134,7 @@ export default function LoginMagicLinkPage() {
confirmButton={
Log in using another option
@@ -142,7 +145,7 @@ export default function LoginMagicLinkPage() {
>
) : (
<>
-
+
Welcome
@@ -171,10 +174,14 @@ export default function LoginMagicLinkPage() {
data-action="send a magic link"
>
- {isLoading ? "Sending…" : "Send a magic link"}
+ {isLoading ? (
+ Sending…
+ ) : (
+ Send a magic link
+ )}
{magicLinkError && {magicLinkError}}
@@ -192,7 +199,7 @@ export default function LoginMagicLinkPage() {
-
-
- );
-}
diff --git a/apps/webapp/app/routes/storybook/route.tsx b/apps/webapp/app/routes/storybook/route.tsx
index b750c945a..b7077a87e 100644
--- a/apps/webapp/app/routes/storybook/route.tsx
+++ b/apps/webapp/app/routes/storybook/route.tsx
@@ -113,10 +113,6 @@ const stories: Story[] = [
name: "Simple form",
slug: "simple-form",
},
- {
- name: "Login form",
- slug: "login-form",
- },
{
name: "Search fields",
slug: "search-fields",