вышел Angular 19: в современном фронтенде, если фреймворк не поддерживает SSR и гидрацию, а также сигналы, конкуренцию среди модной-молодёжной аудитории уже не выдержать; и Angular в этом плане снова с строю:
для каждого роута можно задать отдельно режим рендера Server/Client|Prepender
для отрендеренного, но незагидрированного HTML будет записываться события пользователя (клики), чтобы когда доедут скрипты, «проиграть» их заново и запустить
с помощью signal и нового примитива linkedSignal можно сделать что-то типа «связанного сигнала» для реализации реактивной связи между несколькими сигналами напрямую, без использования отдельного «эффекта»
вышел Firefox 133: поддержана опция keepalive у fetch, так что теперь во всех браузерах можно пользоваться fetch c keepalive вместо Navigator.sendBeacon(), если важно, чтобы определённый запрос завершился, а не прерывался, в случае unload-а страницы; Canvas2D с GPU-ускорением теперь включен по умолчанию в Windows
вышел Tailwind CSS v4.0 Beta: интересна траектория развития в сторону CSS-first конфигурации (т.е. использование кастомных переменных, слоёв и директив) вместо конфигурации в JS; изначальный спорный подход с вынесением всего в classname уже стреляет по ногам, требуя от разработчиков soul-crushing backward compatibility work — это рано или поздно или приведёт TW в тупик, или заставит переродиться в тулкит с «естественным» набор миксинов, пресетов и ручек для управлениях внутрянкой
вышедший Deno 2.1 стал первым LTS-релизом и среди прочего включает новую команду deno outdated для проверки устаревших версий пакетов, эмбеддинг «статических» файлов в бинарник при запуске deno compile, а также возможность указать зависимые команды при запуске других команд
на что только не пойдут в Deno для популяризации своего продукта: вот, например, создали петицию к Oracle, чтоб уже освободили, наконец, JavaScript от торговой марки — норм «судебный» маркетинг
вышел мажор Vite 6.0: для небольших проектов ломающие изменения не выглядят болезненными, скорее добавились новые фичи и апдейтнуты зависимости
pkg-graph — ещё один проект для визуального исследования зависимостей npm-пакета, строит граф на лету в браузере
spoiled — компонент спойлера для React, под капотом Paint API (для Safari предусмотрен фолбек)
dual-range-input — двойной range-инпут, собранный из двух обычных range-инпутов
Статьи и демки
JS
базовые типы TS для React в доках разбросаны повсюду, а тут собраны в одно месте:
чтобы выцепить тип возвращаемого значения функции — <ReturnType> и <Awaited<ReturnType>> — для асинхронной функции
тип ReactNode лучше ReactElement тем, что шире
props: React.ComponentProps<"button"> для типизации базовых пропсов HTML-элемента или компонента
использование as const для типизации tuples, чтобы TS не считал их массивами
история, как в Reddit в разросшуюся монорепу внедряли Vite, пара интересных фактов: чтобы подружиться с Lit пришлось добавлять ?inline ко всем путям стилей, чтоб не вставлять их в страницу, а инлайнить строками в бандл; чтобы заюзать на полную ESM пришлось во всех модулях добавить export maps, которыми раньше пренебрегали
favicon — единственно гарантировано видная часть сайта во вкладке браузера, поэтому её можно использовать для индикации неактивности пользователя или нотификации о каком-то событии в свёрнутой вкладке
CSS
когда-то в Safari затащили эффектное свойство background-clip: text для создания «текстурного» текста путём «вырезания» фона, и оно долго работало только с префиксом -webkit, и вот теперь только в Safari появился ещё один вариант — background-clip: border-area — только теперь, чтобы текстура фоновой картинки осталась на месте рамки, а не букв
oklch удобен тем, что позволяет легко подстроить один из параметров цвета, например, lightness, чтобы сделать один и тот же цвет на тёмном фоне более ярким, а на светлом — более тусклым oklch(calc(0.75 - var(--colorAdjuster)) 0.2 328)
HTML
tabindex с отрицательным значением сделает элемент программно фокусируемым по .focus(), но при этом он не будет включён в очередь фокусов по интерактивным элементам: ссылкам с href, button, input, select, textarea
с помощью <link rel="preload" as="image"> с атрибутами imagesrcset, imagesizes и type можно прелоадить картинки только в браузере, поддерживающий формат, заданный в type, например, type="image/avif"