Skip to content
Merged
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
294 changes: 191 additions & 103 deletions src/app/onboarding/page.tsx

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions src/components/collaboration/VideoConference.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import {
import { io, type Socket } from 'socket.io-client';
import type { CollaborationUser } from '../../hooks/useCollaboration';
import { useFraudDetection } from '../../hooks/useFraudDetection';
import { useVirtualBackground } from '../../hooks/useVirtualBackground';
import { fraudDetectionService, FraudDetectionService } from '../../services/fraud-detection';
import type { FraudDetectionResult } from '../../services/fraud-detection';

Expand Down
7 changes: 6 additions & 1 deletion src/components/forms/FormWizardController.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,12 @@
'use client';

import React, { useState, useEffect } from 'react';
import { WizardStep, WizardProgress, FormState } from '@/form-management/types/core';
import {
WizardStep,
WizardProgress,
FormState,
FieldDescriptor,
} from '@/form-management/types/core';
import { FormStateManager } from '@/form-management/state/form-state-manager';
import { ValidationEngineImpl } from '@/form-management/validation/validation-engine';
import { useNotification } from '@/hooks/use-notification';
Expand Down
18 changes: 0 additions & 18 deletions src/components/shared/ImageUploader.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -108,24 +108,6 @@ function ImageUploader({ onImageSelect, initialImageUrl, className = '' }: Image
[onImageSelect, setObjectPreviewUrl],
);

const handleFileChange = useCallback(
(event: ChangeEvent<HTMLInputElement>) => {
const file = event.target.files?.[0];
if (file) {
if (objectUrlRef.current) {
URL.revokeObjectURL(objectUrlRef.current);
}

const objectUrl = URL.createObjectURL(file);
objectUrlRef.current = objectUrl;
setPreviewUrl(objectUrl);

onImageSelect(file);
}
},
[onImageSelect],
);

const handleClick = useCallback(() => {
fileInputRef.current?.click();
}, []);
Expand Down
4 changes: 2 additions & 2 deletions src/components/tipping/TipForm/TipForm.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
'use client';

import { useState, type FormEvent } from 'react';
import { Gift, Sparkles } from 'lucide-react';
import { Sparkles, Gift } from 'lucide-react';
import { sendTip } from '@/services/tipService';

interface TipFormProps {
Expand Down Expand Up @@ -156,7 +156,7 @@ export default function TipForm({ recipient }: TipFormProps) {
>
{error}
</p>
)}
) : null}

<button
type="submit"
Expand Down
9 changes: 8 additions & 1 deletion src/components/ui/Modal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,14 @@ export interface ModalProps {
* Accessible modal dialog with focus trap, Escape-to-close, and screen reader announcements.
* Uses the existing `useFocusTrap` hook from `useAccessibility`.
*/
export function Modal({ isOpen, onClose, title, children, size = 'md', className = '' }: ModalProps) {
export function Modal({
isOpen,
onClose,
title,
children,
size = 'md',
className = '',
}: ModalProps) {
const titleId = useId();
const containerRef = useFocusTrap(isOpen);
const announce = useScreenReaderAnnouncement();
Expand Down
7 changes: 1 addition & 6 deletions src/components/ui/theme-toggle.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -50,12 +50,7 @@ function ThemeToggleControl() {
setTheme(next);
patchSettings({ theme: next });
} catch (err) {
if (typeof errorReportingService?.reportError === 'function') {
errorReportingService.reportError(err instanceof Error ? err : new Error(String(err)), {
component: 'ThemeToggle',
action: 'handleToggle',
});
}
console.error('ThemeToggle error:', err);
}
};

Expand Down
5 changes: 4 additions & 1 deletion src/form-management/components/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,8 @@
* Components will be implemented in subsequent tasks.
*/

export { FormWizardController, WizardStepContent } from '../../components/forms/FormWizardController';
export {
FormWizardController,
WizardStepContent,
} from '../../components/forms/FormWizardController';
export { DynamicFormBuilder } from '../../components/forms/DynamicFormBuilder';
3 changes: 3 additions & 0 deletions src/hooks/useTopicFeed.ts
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,9 @@ export function useTopicFeed(slug: string): UseTopicFeedReturn {
sort,
setSort: handleSetSort,
loadMore,
retry,
toggleFollow,
followLoading,
error,
};
}
3 changes: 3 additions & 0 deletions src/lib/settings/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,6 @@ export const SETTINGS_STORAGE_KEY = 'teachlink-app-settings-v3';

/** Stable ID for anonymous sync across sessions on same browser */
export const ANONYMOUS_SETTINGS_USER_KEY = 'teachlink-anonymous-sync-user-id';

/** Documentation version for user settings */
export const SETTINGS_DOCUMENTATION_VERSION = '1.0.0';
1 change: 0 additions & 1 deletion src/providers/RootProviders.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ import { EnvGuard } from '@/components/shared/EnvGuard';
import { FeatureFlagProvider } from '@/components/shared/FeatureFlagProvider';
import { ToastProvider } from '@/context/ToastContext';
import { Loading } from '@/components/ui/Loading';
import { CookieConsentBanner } from '@/components/CookieConsentBanner';
import i18n from '@/lib/i18n/config';

// Lazy load heavy/non-critical providers/components to improve initial render time
Expand Down
8 changes: 8 additions & 0 deletions src/types/shims.d.ts
Original file line number Diff line number Diff line change
@@ -1 +1,9 @@
declare module 'linkify-it';

declare module 'jsqr' {
interface QRCode {
data: string;
}
function jsQR(data: Uint8ClampedArray, width: number, height: number): QRCode | null;
export = jsQR;
}
12 changes: 12 additions & 0 deletions tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,20 @@
"src/lib/apiInterceptors.ts",
"src/lib/auth/acl.ts",
"src/lib/bulk/bulkHistory.ts",
"src/app/(auth)/login/page.tsx",
"src/app/(auth)/signup/page.tsx",
"src/app/(auth)/verify-email/page.tsx",
"src/app/admin/permissions/page.tsx",
"src/components/collaboration/VideoConference.tsx",
"src/components/forms/FormWizardController.tsx",
"src/components/mobile/MobileNavigationScanner.tsx",
"src/components/tipping/TipForm/TipForm.tsx",
"src/components/ui/theme-toggle.tsx",
"src/hooks/useTopicFeed.ts",
"src/lib/settings/service.ts",
"src/middleware/redirectManagement.ts",
"src/providers/RootProviders.tsx",
"src/services/tipService.ts",
"src/pages/settings/index.tsx",
"src/serviceWorker.ts",
"src/services/pdf-generation.ts",
Expand Down
2 changes: 1 addition & 1 deletion tsconfig.tsbuildinfo

Large diffs are not rendered by default.

Loading