Finish migrating components

This commit is contained in:
adilallo
2026-01-29 17:59:11 -07:00
parent b5735bb2ad
commit 539f6c62e3
79 changed files with 2449 additions and 1730 deletions
@@ -0,0 +1,64 @@
"use client";
import { memo } from "react";
import NavigationItemView from "./NavigationItem.view";
import type { NavigationItemProps } from "./NavigationItem.types";
const NavigationItemContainer = memo<NavigationItemProps>(
({
href = "#",
children,
variant = "default",
size = "default",
className = "",
disabled = false,
...props
}) => {
// Variant styles
const variantStyles: Record<string, string> = {
default:
"bg-transparent text-[var(--color-content-default-brand-primary)] border border-transparent hover:bg-[var(--color-surface-default-tertiary)] hover:text-[var(--color-content-default-brand-primary)] active:bg-transparent active:text-[var(--color-content-default-brand-primary)] active:border-[var(--color-content-default-brand-primary)] disabled:bg-[var(--color-surface-default-tertiary)] disabled:text-[var(--color-content-default-tertiary)] disabled:border-[var(--color-content-default-tertiary)] disabled:opacity-50 disabled:cursor-not-allowed",
};
// Size styles
const sizeStyles: Record<string, string> = {
default:
"px-[var(--spacing-scale-016)] py-[var(--spacing-scale-016)] gap-[var(--spacing-scale-004)]",
xsmall:
"px-[var(--spacing-scale-004)] py-[var(--spacing-scale-002)] gap-[var(--spacing-scale-004)]",
};
// Text styles based on size
const textStyles: Record<string, string> = {
default:
"font-inter text-[10px] leading-[12px] font-medium tracking-[0%]",
xsmall: "font-inter text-[10px] leading-[12px] font-medium tracking-[0%]",
};
const baseStyles = `inline-flex items-center ${sizeStyles[size]} rounded-[var(--radius-measures-radius-full)] ${textStyles[size]} transition-all duration-200 cursor-pointer`;
// Determine which variant to use
let finalVariant = variant;
if (disabled) {
finalVariant = "default"; // The disabled state is handled by disabled: utilities
}
const combinedStyles = `${baseStyles} ${variantStyles[finalVariant]} ${className}`;
return (
<NavigationItemView
href={href}
disabled={disabled}
className={className}
combinedStyles={combinedStyles}
{...props}
>
{children}
</NavigationItemView>
);
},
);
NavigationItemContainer.displayName = "NavigationItem";
export default NavigationItemContainer;
@@ -0,0 +1,17 @@
export interface NavigationItemProps
extends React.AnchorHTMLAttributes<HTMLAnchorElement> {
href?: string;
children?: React.ReactNode;
variant?: "default";
size?: "default" | "xsmall";
className?: string;
disabled?: boolean;
}
export interface NavigationItemViewProps {
href: string;
children?: React.ReactNode;
disabled: boolean;
className: string;
combinedStyles: string;
}
@@ -0,0 +1,28 @@
import { memo } from "react";
import type { NavigationItemViewProps } from "./NavigationItem.types";
function NavigationItemView({
href,
children,
disabled,
combinedStyles,
...props
}: NavigationItemViewProps) {
if (disabled) {
return (
<span className={combinedStyles} {...props}>
{children}
</span>
);
}
return (
<a href={href} className={combinedStyles} {...props}>
{children}
</a>
);
}
NavigationItemView.displayName = "NavigationItemView";
export default memo(NavigationItemView);
+2
View File
@@ -0,0 +1,2 @@
export { default } from "./NavigationItem.container";
export type { NavigationItemProps } from "./NavigationItem.types";