diff --git a/frontends/nextjs/src/components/CssClassBuilder.tsx b/frontends/nextjs/src/components/CssClassBuilder.tsx index 8e2eaadf6..aaa4f2808 100644 --- a/frontends/nextjs/src/components/CssClassBuilder.tsx +++ b/frontends/nextjs/src/components/CssClassBuilder.tsx @@ -1,4 +1,4 @@ -import { useState, useEffect, useMemo } from 'react' +import { useState, useEffect, useMemo, useCallback } from 'react' import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter } from '@/components/ui' import { Button } from '@/components/ui' import { Input } from '@/components/ui' @@ -62,6 +62,12 @@ export function CssClassBuilder({ open, onClose, initialValue = '', onSave }: Cs invalidCustomTokens.length === 0 && uniqueCustomTokens.some((token) => !selectedClassSet.has(token)) + const loadCssClasses = useCallback(async () => { + const classes = await Database.getCssClasses() + const sorted = classes.slice().sort((a, b) => a.name.localeCompare(b.name)) + setCategories(sorted) + }, []) + useEffect(() => { if (open) { loadCssClasses() @@ -69,7 +75,7 @@ export function CssClassBuilder({ open, onClose, initialValue = '', onSave }: Cs setSearchQuery('') setCustomClass('') } - }, [open, initialValue]) + }, [open, initialValue, loadCssClasses]) useEffect(() => { if (!open) { diff --git a/frontends/nextjs/src/components/nerd-mode-ide/NerdModeTestsPanel.tsx b/frontends/nextjs/src/components/nerd-mode-ide/NerdModeTestsPanel.tsx new file mode 100644 index 000000000..498d475ed --- /dev/null +++ b/frontends/nextjs/src/components/nerd-mode-ide/NerdModeTestsPanel.tsx @@ -0,0 +1,51 @@ +import ScienceIcon from '@mui/icons-material/Science' +import { Badge } from '@/components/ui' +import { Button } from '@/components/ui' +import { Card, CardContent } from '@/components/ui' +import { ScrollArea } from '@/components/ui' +import type { TestResult } from './types' + +interface NerdModeTestsPanelProps { + testResults: TestResult[] + onRunTests: () => void +} + +export function NerdModeTestsPanel({ testResults, onRunTests }: NerdModeTestsPanelProps) { + return ( +
+
+

Test Suite

+ +
+ +
+ {testResults.length === 0 ? ( +
+ +

No tests run yet

+
+ ) : ( + testResults.map((test, i) => ( + + +
+ + {test.status} + + {test.name} +
+ {test.duration && ( + {test.duration}ms + )} +
+
+ )) + )} +
+
+
+ ) +}