feat(ui): add Button, Modal, Spinner, Toast, and Tooltip components with styles
All checks were successful
Build and Release / build-and-release (push) Successful in 13m12s

- Implemented Button component with various props for customization.
- Created Modal component with header, content, and footer subcomponents.
- Added Spinner component for loading indicators.
- Developed Toast component for displaying notifications.
- Introduced Tooltip component for contextual hints with keyboard shortcuts.
- Added corresponding CSS modules for styling each component.
- Updated index file to export new components.
- Configured TypeScript settings for the UI package.
This commit is contained in:
Bryan1029384756
2026-04-14 09:02:14 -05:00
parent 9ef839938e
commit b7a4cf4ce8
376 changed files with 52619 additions and 167641 deletions

View File

@@ -0,0 +1,45 @@
import styles from './AuthLayout.module.css';
interface AuthLayoutProps {
children: React.ReactNode;
}
/**
* AuthLayout — frame for the login / register pages.
*
* Desktop: keeps the existing side-by-side "card" — purple branded
* background, centred dialog with a logo column on the left and
* the form on the right.
*
* Mobile (≤768px): collapses into a full-screen `--background-primary`
* surface with the logo + wordmark stacked at the top of the form
* column, matching the Fluxer mobile reference. The card chrome,
* purple background, and pattern are all hidden via the media
* query in `AuthLayout.module.css`.
*/
export function AuthLayout({ children }: AuthLayoutProps) {
return (
<div className={styles.container}>
<div className={styles.pattern} />
<div className={styles.cardContainer}>
<div className={styles.card}>
<div className={styles.logoSide}>
<div className={styles.logoIcon}>B</div>
<span className={styles.wordmark}>Brycord</span>
</div>
<div className={styles.formSide}>
{/* Mobile-only logo banner — appears above the form
when the side column is hidden. The
`data-mobile-logo` attribute is what the CSS
media query targets to switch its display. */}
<div className={styles.mobileLogo} data-mobile-logo>
<div className={styles.mobileLogoIcon}>B</div>
<span className={styles.mobileWordmark}>Brycord</span>
</div>
{children}
</div>
</div>
</div>
</div>
);
}