chore: integrate local imgproxy sidecar and unify list components
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 36s
Build & Deploy / 🧪 QA (push) Successful in 4m2s
Build & Deploy / 🏗️ Build (push) Successful in 10m53s
Build & Deploy / 🚀 Deploy (push) Successful in 27s
Build & Deploy / 🩺 Health Check (push) Failing after 11s
Build & Deploy / 🔔 Notify (push) Successful in 2s
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 36s
Build & Deploy / 🧪 QA (push) Successful in 4m2s
Build & Deploy / 🏗️ Build (push) Successful in 10m53s
Build & Deploy / 🚀 Deploy (push) Successful in 27s
Build & Deploy / 🩺 Health Check (push) Failing after 11s
Build & Deploy / 🔔 Notify (push) Successful in 2s
- Added imgproxy service to docker-compose.dev.yml with URL mapping - Implemented robust Base64 encoding for imgproxy source URLs - Synchronized NEXT_PUBLIC_IMGPROXY_URL and NEXT_PUBLIC_BASE_URL - Refactored About page to use existing marc-mintel.png asset - Created shared IconList component and unified list styles project-wide - Fixed vertical alignment issues in IconList items - Updated dev script with aggressive port 3000 and lock file cleanup
This commit is contained in:
57
apps/web/src/components/IconList.tsx
Normal file
57
apps/web/src/components/IconList.tsx
Normal file
@@ -0,0 +1,57 @@
|
||||
import React from "react";
|
||||
import { Check } from "lucide-react";
|
||||
|
||||
interface IconListProps {
|
||||
children: React.ReactNode;
|
||||
className?: string;
|
||||
}
|
||||
|
||||
interface IconListItemProps {
|
||||
children: React.ReactNode;
|
||||
icon?: React.ReactNode;
|
||||
bullet?: boolean;
|
||||
check?: boolean;
|
||||
className?: string;
|
||||
iconClassName?: string;
|
||||
iconContainerClassName?: string;
|
||||
}
|
||||
|
||||
export const IconList: React.FC<IconListProps> = ({
|
||||
children,
|
||||
className = "",
|
||||
}) => <ul className={`space-y-4 ${className}`}>{children}</ul>;
|
||||
|
||||
export const IconListItem: React.FC<IconListItemProps> = ({
|
||||
children,
|
||||
icon,
|
||||
bullet,
|
||||
check,
|
||||
className = "",
|
||||
iconClassName = "",
|
||||
iconContainerClassName = "",
|
||||
}) => {
|
||||
let renderIcon = icon;
|
||||
|
||||
if (bullet) {
|
||||
renderIcon = <div className="w-1.5 h-1.5 bg-slate-900 rounded-full" />;
|
||||
} else if (check) {
|
||||
renderIcon = (
|
||||
<div className="w-8 h-8 rounded-full bg-slate-900 flex items-center justify-center shrink-0 group-hover:scale-110 transition-transform">
|
||||
<Check className="w-4 h-4 text-white" />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<li className={`flex items-start gap-4 group ${className}`}>
|
||||
{renderIcon && (
|
||||
<div
|
||||
className={`shrink-0 flex items-center justify-center transition-transform duration-500 ${iconContainerClassName || "mt-1.5"} ${iconClassName}`}
|
||||
>
|
||||
{renderIcon}
|
||||
</div>
|
||||
)}
|
||||
<div className="flex-1">{children}</div>
|
||||
</li>
|
||||
);
|
||||
};
|
||||
Reference in New Issue
Block a user