Gutenberg 23.7: galerie, Global Styles i dziesiątki poprawek edytora
Gutenberg 23.7 porządkuje przede wszystkim codzienną pracę w edytorze: usuwa kolizje pływających i przypiętych bloków, przywraca poprawne podglądy urządzeń oraz dopracowuje dynamiczną galerię. Wydanie zawiera też zmiany w komponentach, współpracy w czasie rzeczywistym, wydajności i narzędziach dla osób rozwijających WordPressa.
Najważniejsze zmiany w Gutenberg 23.7
Gutenberg 23.7 jest dostępny jako wtyczka do pobrania. Możesz też uruchomić wersję demonstracyjną w WordPress Playground.
Poprawki widoczne w edytorze blokowym (Block Editor)
W tej wersji pływające bloki nie nachodzą już na bloki przypięte. Poprawiono też pozycję pustego przycisku dodawania bloku w blokach, które przechwytują własny pasek narzędzi, a blok Cytat wyróżniony respektuje w edytorze własną wysokość wiersza – tak samo jak na stronie publicznej.
W widokach mobilnym i tabletowym ponownie działają stałe wysokości podglądu urządzeń. Uporządkowano również kilka zachowań zaznaczenia i kursora: usuwanie pustych bloków klawiszem Delete do przodu zachowuje właściwą pozycję kursora, Shift+klik działa jako gest wielokrotnego zaznaczania, a Shift+strzałka rozszerza zaznaczenie bloków, gdy przeglądarka nie ma natywnego zaznaczenia.
Edytor nie przewija już całej strony podczas przesuwania kursora w bloku wyższym niż viewport. Naprawiono wklejanie plików do RichText, wyłączono transformację wejścia bez onReplace, usunięto tabIndex z edytowalnych elementów, aby przywrócić zaznaczanie Shift+klik, oraz zapobiegnięto przejmowaniu cofania przez synchronizację bloków kontrolowanych w RTC, czyli współpracy w czasie rzeczywistym.

Dynamiczny tryb bloku Galeria
Wprowadzony w Gutenberg 23.6 dynamiczny tryb bloku Galeria miał niejednoznaczny przycisk „Convert to images”. W Gutenberg 23.7 zmieniono jego nazwę na „Detach”, a przed odłączeniem obrazów wyświetla się okno modalne, które wyjaśnia konsekwencje tej operacji.
Konwersja dynamicznej galerii do odłączonych obrazów tworzy teraz jeden poziom cofania. W tej części biblioteki bloków naprawiono także zachowanie list numerowanych po wcięciu, wyjście z bloków Okładka i Akordeon klawiszem Enter, brak opcji „Add block” w interfejsie linków wewnątrz części szablonu oraz etykietę ustawienia „Offset” w bloku Pętla zapytania, dodając kontekst tłumaczenia.


Globalne style, matematyka i formularze
Eksperymentalny interfejs dziedziczenia Global Styles jest teraz funkcją opt-in. Włączysz go na stronie ustawień Gutenberg Experiments; panel inspektora bloku odzwierciedla przy tym odziedziczone wartości Global Styles, także style elementu linku w blokach będących linkami.
Blok Math używa ValidatedTextareaControl dla wejścia LaTeX. Błąd parsowania nie przerywa już pisania po każdym znaku: komunikat pojawia się dopiero, gdy pole po raz pierwszy straci fokus, a czytnik ekranu nie ogłasza błędu przy każdym naciśnięciu klawisza.
Komponenty Combobox, Select i SelectControl otrzymały subkomponenty Group oraz GroupLabel, dzięki czemu opcje grupowane działają spójnie w rodzinie kontrolek z wyskakującą listą. Dodano też prymityw Autocomplete.Row, możliwość zaznaczania zakresu przez Shift+klik w układach picker-table, picker-grid i picker-activity komponentu DataViewsPicker oraz obsługę właściwości sandbox przez komponent sandbox.
Zmiany funkcjonalne i poprawki błędów
Lista zmian obejmuje również następujące elementy interfejsu, bloków i edytora:
- Style bazowe pozwalają nadpisać kolor obramowania fokusu w
outset-ring__focus; usunięto parametr koloru akcentu zinput-controli prywatny komponent Theme. - Dashboard widgetów mierzy dopasowanie nagłówka oraz dokumentuje chrome, a prymitywy widgetów są dostarczane jako moduł skryptowy. Eksperymentalne widgety Dashboardu wzmacniają sanityzację
hrefdla akcji i linków pomocy. - Pola wyszukiwania w DataViews i bibliotece fontów mają stałą szerokość, co eliminuje skoki układu. Rozmiar czcionki w wyborze strony nawigacji biblioteki fontów dopasowano do DataViews.
- Pole
inputtypunumberukrywa natywne kontrolki zmiany liczby, a SearchControl renderuje sufiks tylko wtedy, gdy faktycznie istnieje jeden sufiks. - Dodano pełne pokrycie scenariusza użytkownika dla bloku Spis treści. Blok wideo poprawnie obsługuje tag
VIDEOzapisany wielkimi lub mieszanymi literami, a znacznik ikony Tumblr w bloku Social Link nie zawiera zbędnego tagu zamykającego. - Edytor mediów pokazuje stan ładowania podczas wczytywania przyciętego pliku. Usunięto zbędną flagę
__heicUploadSupport, a przesyłanie długich animowanych GIF-ów nie zawiesza się przy konwersji – dla nieruchomych wyników dekodowana jest wyłącznie pierwsza klatka. - Kontrolka obrazu tła nie dubluje obramowania fokusu. Gdy dwa presety kolorów mają ten sam kod hex, panel Global Styles zapisuje i pokazuje właściwy preset; GradientPicker wybiera preset po slugu, więc identyczne gradienty zachowują własną tożsamość.
- Ustawienie edytora
responsiveEditingEnabledpozwala ukryć opcję Responsive styles. Pola, które samodzielnie obsługują cofanie, pozostawiają undo przeglądarce. - Nagłówki meta boxów otrzymały styl zgodny z panelami Gutenberga. Powiadomienia są opakowane w ThemeProvider z promieniem narożników równym 0, a na iOS usunięto obejście powodujące skakanie interfejsu i dodano zachowanie typewriter.
- Notatki zapisują blok docelowy przed zapisaniem notatki blokowej, rejestrują format notatki inline podczas importu, spójnie raportują sukces zapisu i synchronizują wybór na pasku bocznym z markerem inline pod kursorem. Opuszczenie wątku notatki anuluje trwające podświetlenie po najechaniu.
- Okno Post Lock nie przełącza już komunikatu na „Someone else has taken over” dla użytkownika bez dostępu do zablokowanego wpisu.
- DataForm nie przejmuje fokusu podczas walidacji karty i szczegółów. Poprawiono także nadpisanie głównego pliku
.prettierrc.js,jsxImportSourcew Storybooku oraz migrację stylów ToolsPanel do modułu SCSS. - API konfiguracji widoku ma zaktualizowane wersjonowanie. Odrzuca scalanie danych o niezgodnym kształcie, definiuje semantykę pustych tablic i usuwa wartości
nullz dołączanych elementów;createInterpolateElementłagodnie obsługuje niedopasowane tagi zamykające. - REST API mediów zawiera przeniesioną poprawkę kontroli rozmiaru pliku przy przesyłaniu zasobu przez ścieżkę URL. Szablony mediów nie wymuszają już
crossoriginna tagachIMG, awp-buildsynchronizuje listę pól preload szablonu strony zcore-data. - W
theme.jsonselektor:where()wyrównuje specyficzność klas presetów na poziomie bloku. Wspólne zarządzanie presetami wyodrębniono z cieni i rozmiarów fontów. - RTC wyłącza Quick Edit, gdy wpis jest edytowany, kompresuje dane podczas serializacji i zachowuje niezapisane zmiany współpracowników, gdy inny użytkownik zapisze wpis. Kod współpracy w czasie rzeczywistym przeniesiono do
lib/experimental/collaboration. - Filtr KSES dla wzmianek z core odłączono w teście baseline strip. Warstwa danych przeniosła komponent EntitiesSavedState poza edytor.
- Kontrolki wyrównania lepiej obsługują właściwości, a blok Nawigacja aktualizuje
aria-expandedpo najechaniu podmenu w nakładce. - Rich text odczytuje atrybut
contentEditablewownsSelection, aby uniknąć wymuszonego układu, a zmiana ma też usunąć regresję wydajności pisania. FlatTermSelector nie pobiera ponownie niepotrzebnie terminów. - Dodano testy end-to-end dla rozszerzalności konfiguracji widoku oraz dla zgodności React 19 z logicznym atrybutem
inert. Metryka „Selecting blocks” w testach wydajności nie raportuje już błędnie 0 ms, a test usuniętego użytkownika RTC działa na multisite.
Zmiany dla osób rozwijających Gutenberg
Wydanie zawiera liczne zmiany w kodzie, zależnościach, dokumentacji i build tooling. Dotyczą one zarówno paczek JavaScript, jak i procesów wydawniczych oraz testów.
- Interactivity API refaktoryzuje dyrektywy do samorejestrujących się modułów.
URLInputstał się komponentem funkcyjnym, narzędzia duotone przeniesiono do global-styles-engine, a zduplikowane implementacje narzędzi presetów zredukowano. - Komponent Autocomplete wiąże listę podpowiedzi przez
aria-controlsiaria-haspopup, ExternalLink używa wspólnego mixinu obramowania fokusu, a hookuseSelectionPropsnie zależy od układu. Disabled, FormTokenField i SearchControl przeszły na moduły SCSS. - Pakiety aktualizują
date-fnsdo 4.4.0,memizedo 2.1.1 oraz Color.js do 0.7.1. Zaktualizowano też zależnośćcolorjs.ioi usunięto obejście błędu; opublikowana paczka theme nie zawiera katalogusrc. - Biblioteka bloków zabezpiecza się przed wartościami atrybutów rzucającymi błędy.
editableRootjest prywatnym ustawieniem bloku,parentPageIDw Page List używa operatora null coalescing, a Spis treści używastr_contains()zamiast sprawdzaniastrpos(). - Usunięto zbędną pragmę
@jest-environment jsdomi dodano regułę lintującą ten przypadek. Usunięto też niepotrzebne właściwości__next40pxDefaultSizez kontrolek formularza oraz domyślny akapit z szablonu panelu zakładki Tabs. - Walidacja ikon SVG wymaga
viewBox. Edytor witryny zastępuje użycie Theme w loaderze canvasu CSS-em. - ESLint rozszerza denylistę o brakujące komponenty niewskazane do użycia.
webpack-dev-serveraktualizuje się do^5.2.1, a workflow GitHuba poprawnie sprawdza changelog dla PR-ów z forków. - RTC używa
array_any()przy sprawdzaniu nowszej kompresji w serwerze synchronizacji polling orazstr_contains()wWP_Sync_Config. Storybook buduje specyfikator resolve jako łańcuch w stylu URL, a narzędzia rozwiązują zależności niezależnie od układunode_modules. - Build dodaje niezależną paczkę vendor dla React 18, obsługuje ścieżki projektu ze spacjami w skrypcie deweloperskim, uwzględnia wyodrębnione style w hashu wersji assetów i zapobiega nieskończonej pętli budowania workerów.
- Poprawiono wstępne sprawdzanie dostępu npm, jawne rozwiązywanie Prettiera dla izolowanego układu oraz typowanie właściwości polimorficznych na przecięciu typów. Storybook nie używa już Emotion jako źródła importu JSX.
- Jest ignoruje poprawnie pliki deklaracji TypeScript i aktualizuje się do wersji 30, co jest zmianą niekompatybilną. Flakiness.io działa wyłącznie w kanonicznym repozytorium Gutenberga.
- Narzędzia wydawnicze wymagają działającego GitHub CLI przy cherry-pickingu. Zaktualizowano też zrzut ekranu formularza wydania dla nowego interfejsu etykiety Release na GitHubie.
- Dokumentacja dodaje instrukcję
nvm usedo AGENTS.md, wzorzec stopniowego odkrywania instrukcji i umiejętności agentów oraz brakującą dokumentację globalną wtable-of-contents/index.php. - Doprecyzowano dokumentację zachowania
getBlockz kontrolerami bloków wewnętrznych, wytyczne dla iframe po Gutenberg 23.6, wskazówki dotyczące dialogów i drawerów oraz dokumentację serwerowych filtrów konfiguracji widoku, które muszą zwracać kontener. - Uzupełniono docblocki plików i klas dla
WP_Icon_Collections_Registry, rozszerzono przewodnik przenoszenia zmian do core WordPressa, zaktualizowano przykłady schematu kolorów admina w Storybooku i użyto linku dla URL w dokumentacji inline.
Co warto sprawdzić po aktualizacji
Jeśli rozwijasz motyw blokowy albo własne rozszerzenia edytora, sprawdź dynamiczne galerie, dziedziczenie Global Styles oraz widoki mobilne i tabletowe. Przetestuj też własne kontrolki oparte na Select, Combobox lub SelectControl, zwłaszcza gdy grupujesz opcje.
W projektach wykorzystujących LaTeX oceń zachowanie walidacji po opuszczeniu pola. Przy integracjach z RichText, konfiguracją widoku, mediami REST API oraz współpracą RTC warto uruchomić testy regresji, ponieważ Gutenberg 23.7 zmienia zachowanie tych obszarów.
Odniesienia / Źródła
Piotr Kowalski
Programista systemów wbudowanych i specjalista IoT. Rust i C++ to moje ulubione. Interesuje mnie programowanie niskopoziomowe i optymalizacja.
Wszystkie wpisy