Theming
Motywy jasny/ciemny sterowane tokenami, bez przeładowania.
Tokeny
src/styles/tokens.ts: getThemeTokens(theme) / deriveSurfaceTokens(bg, text): mały, stały zestaw tokenów bazowych (tło, tekst, akcent) plus tokeny powierzchni/obramowania wyprowadzone przez mieszanie bg w stronę text, nigdy nie wprowadzając nowego odcienia.
Stosowanie bez przeładowania
src/styles/apply-theme.ts: zapisuje wynikowe niestandardowe właściwości CSS oraz atrybut data-theme na <html>; przełączanie motywów zmienia wyłącznie wartości zmiennych, bez ponownego renderu drzewa komponentów.
Zustand store
src/state/theme-store.ts: store Zustand, który zapisuje wybrany motyw w localStorage i stosuje go synchronicznie przed pierwszym renderem (bez błysku złego motywu).
Document Model
Zanim cokolwiek dotrze do komponentu, surowy dokument OpenAPI jest normalizowany do modelu w pamięci (tagGroups → endpoints), zaimplementowanego jako czysty TypeScript, testowanego niezależnie, bez zależności od React. Cztery obowiązki:
normalize.ts: dereferencjonuje każdy$refprzez@apidevtools/swagger-parseri grupuje endpointy po tagu, zachowując zadeklarowaną kolejność.cap-depth.ts: sprawia, że zdereferencowany (i ewentualnie cykliczny) schemat jest bezpieczny dlaJSON.stringify, dla przycisku „Copy OpenAPI”.example.ts/schema-tree.ts: buduje przykładowy payload z tokenami typów oraz przeglądane drzewo schematu z tego samego schematu, bez zmyślania fałszywych danych.filter.ts: wyszukiwanie po stronie klienta używane przez panel boczny.
Każda funkcja przechodząca po schemacie (flattenSchema, schemaToTreeNodes, extractValidationRules) śledzi odwiedzone węzły po tożsamości obiektu, nie przez numeryczny limit głębokości, więc prawdziwie rekurencyjne DTO renderuje pojedynczy znacznik (circular reference) / ↩ circular zamiast rozwijać się N razy albo się wysypać.