Update rule card

This commit is contained in:
adilallo
2026-04-11 00:43:07 -06:00
parent 60d4ae6dfd
commit cae4df261e
6 changed files with 34 additions and 13 deletions
@@ -39,13 +39,19 @@ export function RuleCardView({
className?.includes("pb-[");
const hasResponsiveGap = className?.includes("gap-[");
const cardPadding = hasResponsivePadding
? "" // If className has responsive padding, don't add size-based padding
: isLarge || isSmall
? "p-[24px]"
: isMedium
? "p-[16px]"
: "pb-[24px] pt-[12px] px-[12px]"; // XS: asymmetric padding
// Expanded + size: uniform padding on all sides (overrides conflicting utilities from `className`).
const cardPadding =
expanded && isLarge
? "!p-[24px]"
: expanded && isMedium
? "!p-[16px]"
: hasResponsivePadding
? ""
: isLarge || isSmall
? "p-[24px]"
: isMedium
? "p-[16px]"
: "pb-[24px] pt-[12px] px-[12px]"; // XS: asymmetric padding
const cardGap = expanded
? "gap-[16px]"
: hasResponsiveGap
@@ -245,7 +251,11 @@ export function RuleCardView({
<>
{/* Categories Section - Using MultiSelect */}
{categories && categories.length > 0 && (
<div className="flex flex-col gap-[16px] items-start px-[12px] relative shrink-0 w-full">
<div
className={`flex flex-col gap-[16px] items-start relative shrink-0 w-full ${
expanded && (isLarge || isMedium) ? "px-0" : "px-[12px]"
}`}
>
{categories.map((category, categoryIndex) => (
<MultiSelect
key={categoryIndex}
@@ -2,6 +2,7 @@
import Image from "next/image";
import RuleCard from "../RuleCard";
import type { RuleCardProps } from "../RuleCard/RuleCard.types";
import { getAssetPath } from "../../../../lib/assetUtils";
import type { RuleTemplateDto } from "../../../../lib/create/fetchTemplates";
import {
@@ -22,6 +23,8 @@ export interface TemplateReviewCardProps {
template: RuleTemplateDto;
/** Merged onto RuleCard `className` (e.g. final-review desktop vs mobile radius/padding). */
ruleCardClassName?: string;
/** RuleCard size; create-flow passes `L` at/above `md`, `M` below (640px). */
size?: RuleCardProps["size"];
}
/**
@@ -31,6 +34,7 @@ export interface TemplateReviewCardProps {
export function TemplateReviewCard({
template,
ruleCardClassName = "",
size = "L",
}: TemplateReviewCardProps) {
const catalog = getGovernanceTemplateCatalogEntry(template.slug);
const pres = catalog ?? FALLBACK_PRESENTATION;
@@ -42,7 +46,7 @@ export function TemplateReviewCard({
title={template.title}
description={summary}
expanded
size="L"
size={size}
categories={categories}
backgroundColor={pres.backgroundColor}
className={ruleCardClassName}
@@ -4,9 +4,9 @@ import type { ReactNode } from "react";
import { CreateFlowHeaderLockup } from "./CreateFlowHeaderLockup";
import { CreateFlowStepShell } from "./CreateFlowStepShell";
/** Shared `RuleCard` / template card chrome: matches final-review desktop + mobile padding and radius. */
/** Shared `RuleCard` / template card chrome: width + radius; padding comes from `RuleCard` (L+expanded = 24px). */
export const CREATE_FLOW_REVIEW_RULE_CARD_LAYOUT_CLASS =
"w-full min-w-0 rounded-[12px] p-4 md:rounded-[24px] md:!max-w-full md:!w-full md:p-0";
"w-full min-w-0 rounded-[12px] md:rounded-[24px] md:!max-w-full md:!w-full";
type CreateFlowLockupCardStepShellProps = {
lockupTitle: string;
+3 -1
View File
@@ -5,6 +5,7 @@ import RuleCard from "../../components/cards/RuleCard";
import type { Category } from "../../components/cards/RuleCard/RuleCard.types";
import { useMessages, useTranslation } from "../../contexts/MessagesContext";
import { useCreateFlow } from "../context/CreateFlowContext";
import { useCreateFlowMdUp } from "../hooks/useCreateFlowMdUp";
import {
CREATE_FLOW_REVIEW_RULE_CARD_LAYOUT_CLASS,
CreateFlowLockupCardStepShell,
@@ -29,6 +30,7 @@ function buildFinalReviewCategories(
*/
export default function FinalReviewPage() {
const { state } = useCreateFlow();
const mdUp = useCreateFlowMdUp();
const t = useTranslation("create.finalReview");
const m = useMessages();
@@ -56,7 +58,7 @@ export default function FinalReviewPage() {
<RuleCard
title={ruleCardTitle}
description={ruleCardDescription}
size="L"
size={mdUp ? "L" : "M"}
expanded={true}
backgroundColor="bg-[#c9fef9]"
logoUrl="/assets/Vector_MutualAid.svg"
@@ -14,6 +14,7 @@ import {
CreateFlowLockupCardStepShell,
} from "../../components/CreateFlowLockupCardStepShell";
import { CreateFlowStepShell } from "../../components/CreateFlowStepShell";
import { useCreateFlowMdUp } from "../../hooks/useCreateFlowMdUp";
interface PageProps {
params: Promise<{ slug: string }>;
@@ -26,6 +27,7 @@ interface PageProps {
export default function ReviewTemplatePage({ params }: PageProps) {
const { slug: rawSlug } = use(params);
const slug = decodeURIComponent(rawSlug);
const mdUp = useCreateFlowMdUp();
const t = useTranslation("create.templateReview");
const [template, setTemplate] = useState<RuleTemplateDto | null>(null);
@@ -94,6 +96,7 @@ export default function ReviewTemplatePage({ params }: PageProps) {
<TemplateReviewCard
template={template}
ruleCardClassName={CREATE_FLOW_REVIEW_RULE_CARD_LAYOUT_CLASS}
size={mdUp ? "L" : "M"}
/>
</CreateFlowLockupCardStepShell>
);
+3 -1
View File
@@ -3,10 +3,12 @@
import RuleCard from "../../components/cards/RuleCard";
import { useTranslation } from "../../contexts/MessagesContext";
import { CreateFlowHeaderLockup } from "../components/CreateFlowHeaderLockup";
import { useCreateFlowMdUp } from "../hooks/useCreateFlowMdUp";
import { CreateFlowStepShell } from "../components/CreateFlowStepShell";
/** Mid-flow review step (after upload, before cards). */
export default function ReviewPage() {
const mdUp = useCreateFlowMdUp();
const t = useTranslation("create.review");
return (
@@ -26,7 +28,7 @@ export default function ReviewPage() {
<RuleCard
title={t("ruleCard.title")}
description={t("ruleCard.description")}
size="L"
size={mdUp ? "L" : "M"}
expanded={false}
backgroundColor="bg-[#c9fef9]"
logoUrl="/assets/Vector_MutualAid.svg"