diff --git a/apps/webapp/app/components/BlankStatePanels.tsx b/apps/webapp/app/components/BlankStatePanels.tsx
index 6c0dca843a..c730c797c1 100644
--- a/apps/webapp/app/components/BlankStatePanels.tsx
+++ b/apps/webapp/app/components/BlankStatePanels.tsx
@@ -10,7 +10,11 @@ import {
ServerStackIcon,
Squares2X2Icon,
} from "@heroicons/react/20/solid";
+import { useLocation } from "react-use";
import { TaskIcon } from "~/assets/icons/TaskIcon";
+import { useEnvironment } from "~/hooks/useEnvironment";
+import { useOrganization } from "~/hooks/useOrganizations";
+import { useProject } from "~/hooks/useProject";
import { type MinimumEnvironment } from "~/presenters/SelectBestEnvironmentPresenter.server";
import {
docsPath,
@@ -22,20 +26,15 @@ import {
import { InlineCode } from "./code/InlineCode";
import { environmentFullTitle } from "./environments/EnvironmentLabel";
import { Feedback } from "./Feedback";
+import { EnvironmentSelector } from "./navigation/EnvironmentSelector";
import { Button, LinkButton } from "./primitives/Buttons";
import { Header1 } from "./primitives/Headers";
import { InfoPanel } from "./primitives/InfoPanel";
import { Paragraph } from "./primitives/Paragraph";
import { StepNumber } from "./primitives/StepNumber";
+import { TextLink } from "./primitives/TextLink";
import { InitCommandV3, PackageManagerProvider, TriggerDevStepV3 } from "./SetupCommands";
import { StepContentContainer } from "./StepContentContainer";
-import { useLocation } from "react-use";
-import { useEnvironment } from "~/hooks/useEnvironment";
-import { useOrganization } from "~/hooks/useOrganizations";
-import { useProject } from "~/hooks/useProject";
-import { TextLink } from "./primitives/TextLink";
-import { EnvironmentSelector } from "./navigation/EnvironmentSelector";
-import { Pi } from "lucide-react";
export function HasNoTasksDev() {
return (
@@ -79,20 +78,24 @@ export function HasNoTasksDev() {
export function HasNoTasksDeployed({ environment }: { environment: MinimumEnvironment }) {
return (
+ How to deploy tasks
+
+ }
>
- You don't have any deployed tasks in {environmentFullTitle(environment)}.
+ Run the CLI deploy command to
+ deploy your tasks to the {environmentFullTitle(environment)} environment.
-
- How to deploy tasks
-
);
}
@@ -104,18 +107,20 @@ export function SchedulesNoPossibleTaskPanel() {
icon={ClockIcon}
iconClassName="text-sun-500"
panelClassName="max-w-full"
+ accessory={
+
+ How to schedule tasks
+
+ }
>
You have no scheduled tasks in your project. Before you can schedule a task you need to
create a schedules.task .
-
- View the docs
-
);
}
@@ -140,15 +145,16 @@ export function SchedulesNoneAttached() {
Use the dashboard
@@ -166,14 +172,16 @@ export function BatchesNone() {
icon={Squares2X2Icon}
iconClassName="text-blue-500"
panelClassName="max-w-full"
+ accessory={
+
+ How to trigger batches
+
+ }
>
You have no batches in this environment. You can trigger batches from your backend or from
inside other tasks.
-
- How to trigger batches
-
);
}
@@ -182,23 +190,27 @@ export function TestHasNoTasks() {
const organization = useOrganization();
const project = useProject();
const environment = useEnvironment();
-
return (
+ Create a task
+
+ }
>
- You have no tasks in this environment.
+ Before testing a task, you must first create one. Follow the instructions on the{" "}
+ Tasks page {" "}
+ to create a task, then return here to test it.
-
- Add tasks
-
);
}
@@ -346,7 +358,15 @@ export function AlertsNoneDeployed() {
and webhooks.
-
+
+
+ Alerts docs
+
New alert
-
- Alert docs
-
@@ -376,20 +388,26 @@ export function QueuesHasNoTasks() {
return (
+ Create a task
+
+ }
>
- This means you haven't got any tasks yet in this environment.
+ Queues will appear here when you have created a task in this environment. Follow the
+ instructions on the{" "}
+ Tasks page {" "}
+ to create a task, then return here to see its queue.
-
- Add tasks
-
);
}
diff --git a/apps/webapp/app/components/navigation/SideMenu.tsx b/apps/webapp/app/components/navigation/SideMenu.tsx
index 0412b9a3ae..20c95b7e4e 100644
--- a/apps/webapp/app/components/navigation/SideMenu.tsx
+++ b/apps/webapp/app/components/navigation/SideMenu.tsx
@@ -3,7 +3,6 @@ import {
ArrowRightOnRectangleIcon,
BeakerIcon,
BellAlertIcon,
- BookOpenIcon,
ChartBarIcon,
ChevronRightIcon,
ClockIcon,
@@ -59,16 +58,11 @@ import {
import connectedImage from "../../assets/images/cli-connected.png";
import disconnectedImage from "../../assets/images/cli-disconnected.png";
import { FreePlanUsage } from "../billing/FreePlanUsage";
+import { InlineCode } from "../code/InlineCode";
import { useDevPresence } from "../DevPresence";
import { ImpersonationBanner } from "../ImpersonationBanner";
import { Button, ButtonContent, LinkButton } from "../primitives/Buttons";
-import {
- Dialog,
- DialogContent,
- DialogFooter,
- DialogHeader,
- DialogTrigger,
-} from "../primitives/Dialog";
+import { Dialog, DialogContent, DialogHeader, DialogTrigger } from "../primitives/Dialog";
import { Paragraph } from "../primitives/Paragraph";
import {
Popover,
@@ -86,7 +80,6 @@ import { HelpAndFeedback } from "./HelpAndFeedbackPopover";
import { SideMenuHeader } from "./SideMenuHeader";
import { SideMenuItem } from "./SideMenuItem";
import { SideMenuSection } from "./SideMenuSection";
-import { InlineCode } from "../code/InlineCode";
type SideMenuUser = Pick
& { isImpersonating: boolean };
export type SideMenuProject = Pick<
@@ -280,7 +273,7 @@ function ProjectSelector({
let plan: string | undefined = undefined;
if (currentPlan?.v3Subscription?.isPaying === false) {
- plan = "Free plan";
+ plan = "Free";
} else if (currentPlan?.v3Subscription?.isPaying === true) {
plan = currentPlan.v3Subscription.plan?.title;
}
@@ -326,7 +319,7 @@ function ProjectSelector({
className="text-xs"
to={v3BillingPath(organization)}
>
- {plan}
+ {plan} plan
)}
setMenuOpen(open)} open={isMenuOpen}>
-
+
-
+
{organizations.map((org) => (
+
{count}
);
diff --git a/apps/webapp/app/components/navigation/SideMenuSection.tsx b/apps/webapp/app/components/navigation/SideMenuSection.tsx
index 170451db43..274ebfc582 100644
--- a/apps/webapp/app/components/navigation/SideMenuSection.tsx
+++ b/apps/webapp/app/components/navigation/SideMenuSection.tsx
@@ -29,7 +29,7 @@ export function SideMenuSection({
return (
{title}
diff --git a/apps/webapp/app/components/primitives/InfoPanel.tsx b/apps/webapp/app/components/primitives/InfoPanel.tsx
index 42b67254fe..53d2d5eeeb 100644
--- a/apps/webapp/app/components/primitives/InfoPanel.tsx
+++ b/apps/webapp/app/components/primitives/InfoPanel.tsx
@@ -1,7 +1,7 @@
import { cn } from "~/utils/cn";
-import { LinkButton } from "./Buttons";
import { Header2 } from "./Headers";
import { Paragraph } from "./Paragraph";
+import { type ReactNode } from "react";
const variants = {
info: {
@@ -20,8 +20,7 @@ type InfoPanelVariant = keyof typeof variants;
type Props = {
title?: string;
children: React.ReactNode;
- to?: string;
- buttonLabel?: string;
+ accessory?: ReactNode;
icon: React.ComponentType
;
iconClassName?: string;
variant?: InfoPanelVariant;
@@ -31,8 +30,7 @@ type Props = {
export function InfoPanel({
title,
children,
- to,
- buttonLabel,
+ accessory,
icon,
iconClassName,
variant = "info",
@@ -50,14 +48,10 @@ export function InfoPanel({
panelClassName
)}
>
-
+
- {to && (
-
- {buttonLabel}
-
- )}
+ {accessory}
{title &&
{title} }
diff --git a/apps/webapp/app/presenters/v3/ScheduleListPresenter.server.ts b/apps/webapp/app/presenters/v3/ScheduleListPresenter.server.ts
index 19b84121d0..517e611ac8 100644
--- a/apps/webapp/app/presenters/v3/ScheduleListPresenter.server.ts
+++ b/apps/webapp/app/presenters/v3/ScheduleListPresenter.server.ts
@@ -1,11 +1,11 @@
-import { Prisma, RuntimeEnvironmentType, ScheduleType } from "@trigger.dev/database";
-import { ScheduleListFilters } from "~/components/runs/v3/ScheduleFilters";
+import { Prisma, type RuntimeEnvironmentType, type ScheduleType } from "@trigger.dev/database";
+import { type ScheduleListFilters } from "~/components/runs/v3/ScheduleFilters";
import { sqlDatabaseSchema } from "~/db.server";
import { displayableEnvironment } from "~/models/runtimeEnvironment.server";
-import { getCurrentPlan, getLimit, getLimits } from "~/services/platform.v3.server";
+import { getLimit } from "~/services/platform.v3.server";
+import { CheckScheduleService } from "~/v3/services/checkSchedule.server";
import { calculateNextScheduledTimestamp } from "~/v3/utils/calculateNextSchedule.server";
import { BasePresenter } from "./basePresenter.server";
-import { CheckScheduleService } from "~/v3/services/checkSchedule.server";
type ScheduleListOptions = {
projectId: string;
@@ -50,10 +50,7 @@ export class ScheduleListPresenter extends BasePresenter {
pageSize = DEFAULT_PAGE_SIZE,
}: ScheduleListOptions) {
const hasFilters =
- type !== undefined ||
- tasks !== undefined ||
- environments !== undefined ||
- (search !== undefined && search !== "");
+ type !== undefined || tasks !== undefined || (search !== undefined && search !== "");
const filterType =
type === "declarative" ? "DECLARATIVE" : type === "imperative" ? "IMPERATIVE" : undefined;
diff --git a/apps/webapp/app/routes/_app.orgs.$organizationSlug.invite/route.tsx b/apps/webapp/app/routes/_app.orgs.$organizationSlug.invite/route.tsx
index 2c91928129..54b07ae130 100644
--- a/apps/webapp/app/routes/_app.orgs.$organizationSlug.invite/route.tsx
+++ b/apps/webapp/app/routes/_app.orgs.$organizationSlug.invite/route.tsx
@@ -153,8 +153,11 @@ export default function Page() {
icon={LockOpenIcon}
iconClassName="text-indigo-500"
title="Unlock more team members"
- to={v3BillingPath(organization)}
- buttonLabel="Upgrade"
+ accessory={
+
+ Upgrade
+
+ }
panelClassName="mb-4"
>
diff --git a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.apikeys/route.tsx b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.apikeys/route.tsx
index 7d83711f46..b98f959bbd 100644
--- a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.apikeys/route.tsx
+++ b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.apikeys/route.tsx
@@ -1,10 +1,9 @@
-import { BookOpenIcon, InformationCircleIcon, LockOpenIcon } from "@heroicons/react/20/solid";
-import { ArrowUpCircleIcon } from "@heroicons/react/24/outline";
+import { ArrowUpCircleIcon, BookOpenIcon, InformationCircleIcon } from "@heroicons/react/20/solid";
import { type MetaFunction } from "@remix-run/react";
import { type LoaderFunctionArgs } from "@remix-run/server-runtime";
import { typedjson, useTypedLoaderData } from "remix-typedjson";
import { AdminDebugTooltip } from "~/components/admin/debugTooltip";
-import { environmentTitle, EnvironmentCombo } from "~/components/environments/EnvironmentLabel";
+import { EnvironmentCombo, environmentTitle } from "~/components/environments/EnvironmentLabel";
import { RegenerateApiKeyModal } from "~/components/environments/RegenerateApiKeyModal";
import { PageBody, PageContainer } from "~/components/layout/AppLayout";
import { LinkButton } from "~/components/primitives/Buttons";
@@ -144,6 +143,7 @@ export default function Page() {
)}
variant="secondary/small"
LeadingIcon={ArrowUpCircleIcon}
+ leadingIconClassName="text-indigo-500"
>
Upgrade to get staging environment
diff --git a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.queues/route.tsx b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.queues/route.tsx
index faddc505ad..c3f64d8743 100644
--- a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.queues/route.tsx
+++ b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.queues/route.tsx
@@ -405,9 +405,9 @@ export default function Page() {
))
) : (
-
+
- No queues found
+
No queues found
diff --git a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs.$runParam/route.tsx b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs.$runParam/route.tsx
index 29af7b0c2b..ce57978112 100644
--- a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs.$runParam/route.tsx
+++ b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs.$runParam/route.tsx
@@ -23,15 +23,16 @@ import { type RuntimeEnvironmentType } from "@trigger.dev/database";
import { motion } from "framer-motion";
import { useCallback, useEffect, useRef, useState } from "react";
import { useHotkeys } from "react-hotkeys-hook";
+import { DisconnectedIcon } from "~/assets/icons/ConnectionIcons";
import { ShowParentIcon, ShowParentIconSelected } from "~/assets/icons/ShowParentIcon";
import tileBgPath from "~/assets/images/error-banner-tile@2x.png";
+import { useDevPresence } from "~/components/DevPresence";
import { AdminDebugTooltip } from "~/components/admin/debugTooltip";
-import { InlineCode } from "~/components/code/InlineCode";
-import { EnvironmentCombo } from "~/components/environments/EnvironmentLabel";
import { PageBody } from "~/components/layout/AppLayout";
import { Badge } from "~/components/primitives/Badge";
import { Button, LinkButton } from "~/components/primitives/Buttons";
import { Callout } from "~/components/primitives/Callout";
+import { ClipboardField } from "~/components/primitives/ClipboardField";
import { DateTimeShort } from "~/components/primitives/DateTime";
import { Dialog, DialogTrigger } from "~/components/primitives/Dialog";
import { Header3 } from "~/components/primitives/Headers";
@@ -93,9 +94,6 @@ import {
} from "~/utils/pathBuilder";
import { useCurrentPlan } from "../_app.orgs.$organizationSlug/route";
import { SpanView } from "../resources.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs.$runParam.spans.$spanParam/route";
-import { useDevPresence } from "~/components/DevPresence";
-import { DisconnectedIcon } from "~/assets/icons/ConnectionIcons";
-import { ClipboardField } from "~/components/primitives/ClipboardField";
const resizableSettings = {
parent: {
@@ -404,8 +402,11 @@ function NoLogsView({ run, resizable }: LoaderData) {
icon={LockOpenIcon}
iconClassName="text-indigo-500"
title="Unlock longer log retention"
- to={v3BillingPath(organization)}
- buttonLabel="Upgrade"
+ accessory={
+
+ Upgrade
+
+ }
>
The logs for this run have been deleted because the run completed{" "}
diff --git a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs._index/route.tsx b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs._index/route.tsx
index b651bc5866..20de5e8cb5 100644
--- a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs._index/route.tsx
+++ b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs._index/route.tsx
@@ -33,9 +33,11 @@ import { TextLink } from "~/components/primitives/TextLink";
import { RunsFilters, TaskRunListSearchFilters } from "~/components/runs/v3/RunFilters";
import { TaskRunsTable } from "~/components/runs/v3/TaskRunsTable";
import { BULK_ACTION_RUN_LIMIT } from "~/consts";
+import { useEnvironment } from "~/hooks/useEnvironment";
import { useOrganization } from "~/hooks/useOrganizations";
import { useProject } from "~/hooks/useProject";
import { findProjectBySlug } from "~/models/project.server";
+import { findEnvironmentBySlug } from "~/models/runtimeEnvironment.server";
import { RunListPresenter } from "~/presenters/v3/RunListPresenter.server";
import {
getRootOnlyFilterPreference,
@@ -47,15 +49,11 @@ import { cn } from "~/utils/cn";
import {
docsPath,
EnvironmentParamSchema,
- ProjectParamSchema,
v3ProjectPath,
v3RunsPath,
v3TestPath,
} from "~/utils/pathBuilder";
import { ListPagination } from "../../components/ListPagination";
-import { prisma } from "~/db.server";
-import { useEnvironment } from "~/hooks/useEnvironment";
-import { findEnvironmentBySlug } from "~/models/runtimeEnvironment.server";
export const meta: MetaFunction = () => {
return [
@@ -438,8 +436,11 @@ function CreateFirstTaskInstructions() {
iconClassName="text-blue-500"
panelClassName="max-full"
title="Create your first task"
- to={v3ProjectPath(organization, project)}
- buttonLabel="Create a task"
+ accessory={
+
+ Create a task
+
+ }
>
Before running a task, you must first create one. Follow the instructions on the{" "}
diff --git a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.schedules.$scheduleParam/route.tsx b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.schedules.$scheduleParam/route.tsx
index 5d99c2f195..4f3dee64a5 100644
--- a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.schedules.$scheduleParam/route.tsx
+++ b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.schedules.$scheduleParam/route.tsx
@@ -357,8 +357,11 @@ export default function Page() {
icon={BookOpenIcon}
iconClassName="text-indigo-500"
variant="info"
- buttonLabel="Docs"
- to="https://trigger.dev/docs/v3/tasks-scheduled"
+ accessory={
+
+ Docs
+
+ }
panelClassName="max-w-full"
>
You can only edit a declarative schedule by updating your schedules.task and then
diff --git a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.schedules/route.tsx b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.schedules/route.tsx
index 1c26d5d76d..dad5decc46 100644
--- a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.schedules/route.tsx
+++ b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.schedules/route.tsx
@@ -1,9 +1,9 @@
-import { ClockIcon, PlusIcon, RectangleGroupIcon } from "@heroicons/react/20/solid";
-import { ArrowUpCircleIcon } from "@heroicons/react/24/outline";
+import { ArrowUpCircleIcon, PlusIcon } from "@heroicons/react/20/solid";
import { BookOpenIcon } from "@heroicons/react/24/solid";
import { type MetaFunction, Outlet, useLocation, useParams } from "@remix-run/react";
import { type LoaderFunctionArgs } from "@remix-run/server-runtime";
import { typedjson, useTypedLoaderData } from "remix-typedjson";
+import { SchedulesNoneAttached, SchedulesNoPossibleTaskPanel } from "~/components/BlankStatePanels";
import { Feedback } from "~/components/Feedback";
import { AdminDebugTooltip } from "~/components/admin/debugTooltip";
import { InlineCode } from "~/components/code/InlineCode";
@@ -20,7 +20,6 @@ import {
DialogTrigger,
} from "~/components/primitives/Dialog";
import { Header3 } from "~/components/primitives/Headers";
-import { InfoPanel } from "~/components/primitives/InfoPanel";
import { NavBar, PageAccessories, PageTitle } from "~/components/primitives/PageHeader";
import { PaginationControls } from "~/components/primitives/Pagination";
import { Paragraph } from "~/components/primitives/Paragraph";
@@ -47,11 +46,13 @@ import {
ScheduleTypeIcon,
scheduleTypeName,
} from "~/components/runs/v3/ScheduleType";
+import { useEnvironment } from "~/hooks/useEnvironment";
import { useOrganization } from "~/hooks/useOrganizations";
import { usePathName } from "~/hooks/usePathName";
import { useProject } from "~/hooks/useProject";
import { redirectWithErrorMessage } from "~/models/message.server";
import { findProjectBySlug } from "~/models/project.server";
+import { findEnvironmentBySlug } from "~/models/runtimeEnvironment.server";
import {
type ScheduleListItem,
ScheduleListPresenter,
@@ -59,16 +60,13 @@ import {
import { requireUserId } from "~/services/session.server";
import { cn } from "~/utils/cn";
import {
- EnvironmentParamSchema,
docsPath,
+ EnvironmentParamSchema,
v3BillingPath,
v3NewSchedulePath,
v3SchedulePath,
} from "~/utils/pathBuilder";
import { useCurrentPlan } from "../_app.orgs.$organizationSlug/route";
-import { findEnvironmentBySlug } from "~/models/runtimeEnvironment.server";
-import { useEnvironment } from "~/hooks/useEnvironment";
-import { SchedulesNoneAttached, SchedulesNoPossibleTaskPanel } from "~/components/BlankStatePanels";
export const meta: MetaFunction = () => {
return [
diff --git a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.settings/route.tsx b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.settings/route.tsx
index 2a57372dba..d078b8b3e4 100644
--- a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.settings/route.tsx
+++ b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.settings/route.tsx
@@ -16,6 +16,7 @@ import { ClipboardField } from "~/components/primitives/ClipboardField";
import { Fieldset } from "~/components/primitives/Fieldset";
import { FormButtons } from "~/components/primitives/FormButtons";
import { FormError } from "~/components/primitives/FormError";
+import { Header2 } from "~/components/primitives/Headers";
import { Hint } from "~/components/primitives/Hint";
import { Input } from "~/components/primitives/Input";
import { InputGroup } from "~/components/primitives/InputGroup";
@@ -149,48 +150,50 @@ export default function Page() {
-
-
-
-
- Project ref
-
-
- This goes in your{" "}
- trigger.config file.
-
-
-
+
+ Project settings
+
+
+
+
+ Project ref
+
+
+ This goes in your{" "}
+ trigger.config file.
+
+
+
-
+
{projectName.error}
+
+
+ Rename project
+
+ }
+ className="border-t-0"
+ />
+
+
diff --git a/apps/webapp/app/routes/_app.orgs.$organizationSlug.settings.team/route.tsx b/apps/webapp/app/routes/_app.orgs.$organizationSlug.settings.team/route.tsx
index fa37fc6c68..c83e10ced0 100644
--- a/apps/webapp/app/routes/_app.orgs.$organizationSlug.settings.team/route.tsx
+++ b/apps/webapp/app/routes/_app.orgs.$organizationSlug.settings.team/route.tsx
@@ -226,8 +226,11 @@ export default function Page() {
icon={LockOpenIcon}
iconClassName="text-indigo-500"
title="Unlock more team members"
- to={v3BillingPath(organization)}
- buttonLabel="Upgrade"
+ accessory={
+
+ Upgrade
+
+ }
panelClassName="mt-4"
>
diff --git a/apps/webapp/app/routes/storybook.info-panel/route.tsx b/apps/webapp/app/routes/storybook.info-panel/route.tsx
index 0a5b4e3e77..1184a87622 100644
--- a/apps/webapp/app/routes/storybook.info-panel/route.tsx
+++ b/apps/webapp/app/routes/storybook.info-panel/route.tsx
@@ -11,6 +11,7 @@ import {
} from "@heroicons/react/20/solid";
import { InfoPanel } from "~/components/primitives/InfoPanel";
import { TaskIcon } from "~/assets/icons/TaskIcon";
+import { LinkButton } from "~/components/primitives/Buttons";
export default function Story() {
return (
@@ -30,8 +31,11 @@ export default function Story() {
title="Info with Button"
icon={InformationCircleIcon}
iconClassName="text-blue-500"
- to="#"
- buttonLabel="Learn More"
+ accessory={
+
+ Learn More
+
+ }
>
This panel includes a button in the top-right corner
@@ -42,8 +46,11 @@ export default function Story() {
icon={BellAlertIcon}
iconClassName="text-red-500"
variant="upgrade"
- to="#"
- buttonLabel="Upgrade Now"
+ accessory={
+
+ Upgrade Now
+
+ }
>
This panel uses the upgrade variant with a call-to-action button
@@ -58,8 +65,11 @@ export default function Story() {
title="Task Status"
icon={TaskIcon}
iconClassName="text-blue-500"
- to="#"
- buttonLabel="View Tasks"
+ accessory={
+
+ View Tasks
+
+ }
>
A panel showing task information with a view action
@@ -69,8 +79,11 @@ export default function Story() {
title="Getting Started"
icon={RocketLaunchIcon}
iconClassName="text-purple-500"
- to="#"
- buttonLabel="Start Tutorial"
+ accessory={
+
+ Start Tutorial
+
+ }
>
Begin your journey with our quick start guide
@@ -80,8 +93,11 @@ export default function Story() {
title="Deployment Status"
icon={ServerStackIcon}
iconClassName="text-indigo-500"
- to="#"
- buttonLabel="Deploy Now"
+ accessory={
+
+ Deploy Now
+
+ }
>
Ready to deploy your changes to production
@@ -91,8 +107,11 @@ export default function Story() {
title="Create New"
icon={PlusIcon}
iconClassName="text-green-500"
- to="#"
- buttonLabel="New Project"
+ accessory={
+
+ New Project
+
+ }
>
Start a new project with our guided setup
@@ -107,8 +126,11 @@ export default function Story() {
title="Documentation"
icon={BookOpenIcon}
iconClassName="text-green-500"
- to="#"
- buttonLabel="View Docs"
+ accessory={
+
+ View Docs
+
+ }
>
Access our comprehensive documentation