Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions components/classes/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
/**
* Class Management Components and Utilities
* Centralized exports for all class-related UI components and utility functions
*/

// Re-export core types for convenience (only if they exist)
// export type { Class, CreateClassRequest, UpdateClassRequest, ClassValidationResult } from '../../src/types/class';

// Note: Class management UI components and utilities are not yet implemented
// This file serves as a placeholder for future class management exports

export {}; // Empty export to make this a valid module
2 changes: 2 additions & 0 deletions components/ui/ConfirmButton.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -332,6 +332,7 @@ ConfirmButton.Danger = (props: Omit<ConfirmButtonProps, 'variant' | 'requireConf
confirmationMessage={props.confirmationMessage || 'This action cannot be undone. Are you sure?'}
/>
);
ConfirmButton.Danger.displayName = 'ConfirmButton.Danger';

/**
* ConfirmButton.Delete - Delete-specific button
Expand All @@ -346,5 +347,6 @@ ConfirmButton.Delete = (props: Omit<ConfirmButtonProps, 'variant' | 'requireConf
Delete
</ConfirmButton>
);
ConfirmButton.Delete.displayName = 'ConfirmButton.Delete';

export default ConfirmButton;
3 changes: 3 additions & 0 deletions components/ui/RequiredFieldLabel.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,7 @@ RequiredFieldLabel.Asterisk = ({
*
</span>
);
RequiredFieldLabel.Asterisk.displayName = 'RequiredFieldLabel.Asterisk';

/**
* RequiredFieldLabel.Text - Standalone required text component
Expand All @@ -220,6 +221,7 @@ RequiredFieldLabel.Text = ({
({children})
</span>
);
RequiredFieldLabel.Text.displayName = 'RequiredFieldLabel.Text';

/**
* RequiredFieldLabel.Optional - Optional field indicator
Expand All @@ -235,5 +237,6 @@ RequiredFieldLabel.Optional = ({
({children})
</span>
);
RequiredFieldLabel.Optional.displayName = 'RequiredFieldLabel.Optional';

export default RequiredFieldLabel;
6 changes: 4 additions & 2 deletions components/ui/StudentAvatar.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import React from 'react';
import Image from 'next/image';
import {
formatStudentName,
generateStudentInitials,
Expand Down Expand Up @@ -187,10 +188,11 @@ const StudentAvatar: React.FC<StudentAvatarProps> = ({
>
{/* Avatar Image */}
{avatarUrl && (
<img
<Image
src={avatarUrl}
alt={accessibilityLabel}
className="w-full h-full object-cover"
fill
className="object-cover"
onError={handleImageError}
/>
)}
Expand Down
3 changes: 3 additions & 0 deletions components/ui/StudentBadge.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -307,19 +307,22 @@ const StudentBadge: React.FC<StudentBadgeProps> & {
StudentBadge.Status = (props: Omit<StudentBadgeProps, 'status'> & { status: NonNullable<StudentBadgeProps['status']> }) => (
<StudentBadge {...props} showDot />
);
StudentBadge.Status.displayName = 'StudentBadge.Status';

/**
* StudentBadge.Grade - Grade-specific badge
*/
StudentBadge.Grade = (props: Omit<StudentBadgeProps, 'grade'> & { grade: NonNullable<StudentBadgeProps['grade']> }) => (
<StudentBadge {...props} variant="primary" />
);
StudentBadge.Grade.displayName = 'StudentBadge.Grade';

/**
* StudentBadge.Attendance - Attendance-specific badge
*/
StudentBadge.Attendance = (props: Omit<StudentBadgeProps, 'attendance'> & { attendance: NonNullable<StudentBadgeProps['attendance']> }) => (
<StudentBadge {...props} showDot size="small" />
);
StudentBadge.Attendance.displayName = 'StudentBadge.Attendance';

export default StudentBadge;
4 changes: 4 additions & 0 deletions components/ui/ValidationMessage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -258,26 +258,30 @@ const ValidationMessage: React.FC<ValidationMessageProps> & {
ValidationMessage.Error = (props: Omit<ValidationMessageProps, 'type'>) => (
<ValidationMessage {...props} type="error" />
);
ValidationMessage.Error.displayName = 'ValidationMessage.Error';

/**
* ValidationMessage.Success - Shorthand for success messages
*/
ValidationMessage.Success = (props: Omit<ValidationMessageProps, 'type'>) => (
<ValidationMessage {...props} type="success" />
);
ValidationMessage.Success.displayName = 'ValidationMessage.Success';

/**
* ValidationMessage.Warning - Shorthand for warning messages
*/
ValidationMessage.Warning = (props: Omit<ValidationMessageProps, 'type'>) => (
<ValidationMessage {...props} type="warning" />
);
ValidationMessage.Warning.displayName = 'ValidationMessage.Warning';

/**
* ValidationMessage.Info - Shorthand for info messages
*/
ValidationMessage.Info = (props: Omit<ValidationMessageProps, 'type'>) => (
<ValidationMessage {...props} type="info" />
);
ValidationMessage.Info.displayName = 'ValidationMessage.Info';

export default ValidationMessage;