Skip to content

Что нового — Сентябрь 2026 ​

Подписаться (Atom)

30 сентября ​

Visual Linker 0.2.0 ​

История версий пакета

  • Breaking (Vue): <VisualLinker> больше не рендерит обёртку <div class="vl-block"> вокруг слота #block-<id> для каждого блока. Теперь он оборачивает вашу собственную разметку в default-слоте, а блоки находятся в ней на любой глубине, внутри любых компонентов-обёрток. Для миграции перенесите содержимое слотов в default-слот и пометьте каждый элемент-блок через v-vl-block="id" (или data-vl-block="id"):

    vue
    <!-- 0.1.x -->
    <VisualLinker :blocks="blocks" :connections="connections">
      <template v-for="b in blocks" #[`block-${b.id}`]="{}" :key="b.id">
        <MyCard :data="b" />
      </template>
    </VisualLinker>
    
    <!-- 0.2.0 -->
    <VisualLinker :connections="connections">
      <MyCard v-for="b in blocks" :key="b.id" v-vl-block="b.id" :data="b" />
    </VisualLinker>
  • Breaking (Vue): проп blocks стал необязательным. Запись может напрямую зарегистрировать элемент через новое поле el (template ref, геттер, элемент или CSS-селектор) либо — без el — лишь добавить конфигурацию (порты, настройки перетаскивания) блоку, уже помеченному в шаблоне.

  • Новое (Vue): директивы v-vl-block / v-vl-port, экспортируются как vVlBlock / vVlPort. Порт привязывается к ближайшему блоку вокруг него или к блоку, указанному в его опции block.

  • Новое (Vue): обычные data-vl-* атрибуты — способ пометить блоки и порты вообще без JavaScript (data-vl-block, data-vl-draggable, data-vl-drag-handle, data-vl-drag-bounds, data-vl-port, data-vl-port-block, data-vl-side, data-vl-offset, data-vl-anchor, data-vl-linker); имена экспортируются как VL_ATTR.

  • Новое (Vue): живое обнаружение — блоки и порты, добавленные, удалённые или перепомеченные после монтирования (v-if, v-for, сторонняя разметка), подхватываются автоматически.

  • Новое (Vue): проп scope — 'container' (по умолчанию) или 'page': связывает элементы в любом месте документа и рисует в слое position: fixed, телепортированном в <body>.

  • Новое (Vue): проп name вместе с опцией linker у директив / атрибутом data-vl-linker — чтобы закрепить элемент за конкретным <VisualLinker>; проп zIndex для слоя отрисовки. Прочие атрибуты, переданные в <VisualLinker>, теперь попадают на его корневой элемент.

  • Новое (Vue): VisualLinkerPlugin — app.use() глобально регистрирует <VisualLinker> и обе директивы. Также экспортируются типы VisualLinkerScope, BlockDirectiveOptions, BlockDirectiveValue, PortDirectiveOptions, PortDirectiveValue, RefFriendlyDragBounds и RefFriendlyElement.

  • Изменено (Vue): слой отрисовки рендерится только на клиенте после монтирования — серверный рендер совпадает с проходом гидратации.

  • Новое (Nuxt): v-vl-block / v-vl-port регистрируются универсальным плагином — в том числе на сервере, так что data-vl-* атрибуты уже есть в серверном HTML.

  • Новое (core): MarkerConfig.arrow — true или { color?, gap? } (новый тип MarkerArrowConfig) рисует наконечник стрелки прямо перед маркером circle/square/diamond, острие которого упирается ровно во внешний край фигуры с учётом обводки. Маркер со стрелкой всегда использует orient: 'auto'.

  • Изменено (core): подсвеченное соединение рисуется поверх соседних, а другие соединения, заканчивающиеся в той же точке, скрывают там свой маркер — маркеры обычного размера больше не перекрывают подсвеченный.

  • Исправлено (core): соединение с явным style.width теряло утолщение при наведении/подсветке — явная инлайн-ширина перебивала CSS-правило. Теперь утолщение тоже применяется инлайн.

  • Изменено (core): перетаскивание сдвигает блок через отдельное CSS-свойство translate вместо transform — сдвиг складывается с уже имеющейся у блока трансформацией, а не затирает её.

26 сентября ​

InView 0.3.0 ​

История версий пакета

  • Задержка стаггера у createRevealController теперь полностью пропускается при prefers-reduced-motion: reduce — переключение класса/атрибута по-прежнему происходит как обычно, пропускается только сама задержка по времени.
  • createElementTracker (а вместе с ним и composables/хуки useElementViewport/useParallaxLayer, построенные на нём, для Vue и React) принимает элемент root, чтобы считать viewportProgress/ distanceFromCenter относительно прокручиваемого контейнера вместо окна — для параллакс-слоя или трекера позиции внутри overflow: auto (панель дашборда, модалка). Сам rect в любом случае остаётся привязанным к окну.
  • Опции useElementVisibility теперь реактивны в обоих адаптерах. Vue: threshold/rootMargin/root/once принимают ref/геттер — изменение threshold/rootMargin/root вызывает настоящую переподписку, once обновляется вживую без пересоздания подписки. React: once/onEnter/onLeave теперь обновляются вживую при каждом ре-рендере (раньше замораживались на том рендере, где подписка впервые создавалась), а свежий инлайн-массив threshold на каждом рендере больше не вызывает лишнюю переподписку.
  • Новые Vue composables: useRevealController (создаёт createRevealController при монтировании, уничтожает при размонтировании), usePrefersReducedMotion (реактивный Ref<boolean>, в отличие от статической prefersReducedMotion()), useStagger, useScrollTo, useScrollSpy.
  • Новые React-хуки: useReveal (эквивалент Vue-директивы v-reveal — автоматически переключает класс/атрибут), useRevealController, usePrefersReducedMotion, useStagger, useScrollTo, useScrollSpy — той же формы, что и Vue composables выше.
  • Новое в @macrulez/inview-core: createScrollSpy (отслеживает, какой из списка целевых элементов сейчас находится в «активной» полосе около вертикального центра viewport — для подсветки активного пункта навигации) и scrollToElement (плавно прокручивает контейнер, чтобы элемент оказался у его края, с отступом в px).
  • Контроллер, который возвращает createRevealController, получил observe(el)/unobserve(el) (для элементов вне скана по selector) и refresh(selector?) (разовый скан с другим селектором, в дополнение к уже существующему refresh() без аргументов). Атрибут data-reveal-attribute на конкретном элементе теперь переопределяет activeAttribute так же, как data-reveal-class уже переопределял activeClass.
  • Список автоимпортов Nuxt теперь включает useRevealController, usePrefersReducedMotion, useStagger, useScrollTo, useScrollSpy, createScrollSpy и scrollToElement.

25 сентября ​

DevToolz 0.2.1 ​

История версий пакета

  • Новое: команда full-check прогоняет все остальные команды за один проход, каждую в её безопасном режиме только для чтения, и показывает одну сводную таблицу. Три команды, способные писать (strip-comments, console-strip, case-check), всегда вызываются как превью. Обычный запуск в настоящем терминале спрашивает про stale-ts-ignore — единственную медленную команду; управляют этим --skip и --no-prompt. См. Полная проверка.
  • Добавлено в программный API: runFullCheck, renderFullCheckReport и их типы. Сам full-check собирается из собственных функций run*() остальных команд, которые корень пакета уже экспортировал.

DevToolz 0.2.0 ​

История версий пакета

  • Новое: unused-deps находит зависимости в package.json, на которые нет ни одного импорта, и «фантомные» зависимости, которые импортируются, но не объявлены. См. Граф зависимостей.
  • Новое: circular-imports находит циклы импортов и показывает каждый как полную цепочку; циклы, состоящие только из import type, скрыты, пока не передан --include-types. См. Граф зависимостей.
  • Новое: empty-catch находит catch-блоки, которые проглатывают ошибку, включая те, что только логируют её. См. Гигиена кода.
  • Новое: todo-report собирает комментарии TODO/FIXME/HACK вместе с их текстом, с --tags и «трещоткой» --max. См. Гигиена кода.
  • Новое: scripts-check сверяет скрипты package.json с README/документацией и CI-воркфлоу, а orphan-tests находит тестовые файлы, у которых пропал исходник. См. Проверка согласованности.
  • Новое: stale-ts-ignore находит @ts-ignore, который больше ничего не подавляет, сравнивая два реальных тайпчека всего проекта. См. Устаревшие @ts-ignore.
  • Добавлено в программный API: функции run*() и render*Report() новых команд.
  • Изменено: граф импортов и поиск настоящих комментариев вынесены из отдельных команд в общие утилиты, которыми теперь пользуются несколько команд; загрузчик tsconfig.json у readme-check вынесен так же.

DevToolz 0.1.0 ​

История версий пакета

  • Первый релиз: один бинарник devtoolz с шестью командами. См. Обзор.
  • strip-comments и console-strip убирают комментарии и оставленные console.log/debugger; по умолчанию — превью, -y записывает, --diff показывает unified diff по каждому файлу. См. Очистка кода.
  • dead-exports находит именованные экспорты, которые нигде не импортируются, с учётом публичных точек входа пакета, цепочек реэкспорта и воркспейсов. См. Мёртвые экспорты.
  • case-check находит импорты, регистр которых не совпадает с файлом на диске, с --fix. См. Проверка регистра.
  • exports-doctor и readme-check проверяют пакет со стороны потребителя: заявленные в package.json пути против диска и блоки кода в README против собственных типов пакета. См. Проверка пакета.

Network Dashboard 0.4.2 ​

История версий пакета

  • Несколько примеров addMock/addMockToGroup в README и гайде по мокированию не указывали обязательное поле enabled — при копировании как есть правило не прошло бы типопроверку, а если это обойти — мок молча пропускался бы в рантайме (addMock/ addMockToGroup проверяют rule.enabled перед применением).
  • Задокументированная сигнатура addMockToGroup указывала rule: Partial<MockRule> — реальный тип Omit<MockRule, 'id'>, все поля кроме id по-прежнему обязательны.

Responsive Media 2.0.2 ​

История версий пакета

  • Пример useContainerState в гайде по интеграции с Vue вызывал useTemplateRef('card') без явного типового аргумента — дефолт самого Vue (unknown) не удовлетворяет параметру useContainerState's Ref<Element | null>, поэтому пример в исходном виде фактически не компилировался. Теперь показан useTemplateRef<HTMLDivElement>('card').

State Machine 0.2.7 ​

История версий пакета

  • Примеры кода в README всё ещё импортировали нескопированное имя vue-state-machine в пяти местах вместо реального опубликованного имени @macrulez/vue-state-machine — остаток от переноса пакета под scope.
  • Пример CheckoutCtx в гайде по визардам был объявлен через interface — TypeScript не даёт interface неявную индексную сигнатуру, нужную Ctx (Record<string, unknown>), поэтому WizardStep<CheckoutCtx> фактически не проходил типопроверку в том виде, в каком был написан. Заменено на type-алиас, как и в остальной части этого же документа.

24 сентября ​

Color Value Tools 1.2.2 ​

История версий пакета

  • Новые импорты по подпутям для групп функций: color-value-tools/parse, /convert, /manipulate, /palette, /a11y и /cache. Они работают и через import, и через require, и поставляются со своими TypeScript-типами. Импорт из корня пакета работает как раньше.
  • ESM-потребители теперь получают ESM-декларации типов — раньше ESM-сборка использовала .d.ts от CommonJS.
  • Пакет помечен как sideEffects: false, поэтому бандлеры надёжнее удаляют неиспользуемый код.
  • CLI cvt теперь использует собственную сборку пакета, а не отдельную копию библиотеки. Команды и вывод не изменились.

Image Kit 1.2.0 ​

История версий пакета

  • Записи sources теперь могут нести собственные width/height для брейкпоинтов арт-дирекции, чья обрезка отличается по соотношению сторон от корневого изображения — либо как { src, width, height }, либо через объект ImageMeta, переданный напрямую (например, из импорта ?vik). Если задать брейкпоинту собственные размеры, <VImage> резервирует плейсхолдер — и превью blurhash — под пропорции именно этого брейкпоинта, а не всегда откатывается к корневому изображению, поэтому переключение брейкпоинтов больше не вызывает скачок вёрстки после загрузки настоящего фото. Записи без width/height продолжают работать в точности как раньше.
  • Ключ sources, для которого нет подходящего брейкпоинта, теперь выводит предупреждение в режиме разработки — с именем ключа и списком доступных брейкпоинтов — вместо того чтобы молча ничего не делать.

Image Kit 1.1.8 ​

История версий пакета

  • <VImage> больше не навязывает display/размеры блока/object-fit инлайн-стилями там, где это не нужно — инлайн-стили всегда перебивают класс, который применяет ваше приложение на том же элементе, независимо от специфичности. Явно заданный проп fit по-прежнему применяется инлайном (гарантированно побеждает). Если проп не задан, дефолт object-fit: cover теперь приходит из обычного, переопределяемого CSS-класса — применяется только когда блок изображения действительно ограничен (layout "fill"/"fixed", либо заданы одновременно width и height), а иначе не применяется вовсе, так как object-fit без ограниченного блока не имеет эффекта. То же самое касается базовых стилей display/размеров — width: 100%; height: auto теперь применяется только когда заданы одновременно width и height (иначе не из чего сохранять пропорции), поэтому <VImage> без этих пропов, размер которого управляется вашим собственным CSS через max-height/max-width, сохраняет естественные пропорции вместо растягивания на всю ширину контейнера.
  • Исправлено: стили пакета (анимация shimmer-плейсхолдера, а теперь и классы выше) были недоступны через import '@macrulez/vue-image-kit/style.css' — файл не был объявлен в exports пакета, из-за чего placeholderMode="shimmer" нигде фактически не работал. Модуль Nuxt теперь подключает стили автоматически.
  • Исправлено: удаление обёртки в 1.1.7 приводило к предупреждению Vue о рассинхронизации при гидратации на каждой SSR-странице — проверка, которая решала, что рендерить, не могла отличить «сервер» от «самого первого рендера на клиенте во время гидратации», из-за чего они никогда фактически не совпадали. Теперь компонент безопасен для гидратации.

InView 0.2.3 ​

История версий пакета

  • Исправлено: задержка стаггера у createRevealController (--reveal-delay и инлайн-стиль transition-delay, который она выставляет) раньше оставалась на элементе навсегда после его появления — из-за этого любой другой transition на том же элементе, например hover-эффект на ссылке с классом .reveal, молча наследовал ту же задержку. Теперь задержка автоматически снимается сразу после завершения самой reveal-анимации (а если она вообще не запускается — например, из-за prefers-reduced-motion или отсутствия подходящего transition в CSS — то по истечении короткого запасного таймера), поэтому последующие transition на элементе больше не задеты. Настраивать ничего не нужно — это просто новое поведение по умолчанию.

23 сентября ​

Image Kit 1.1.7 ​

История версий пакета

  • <VImage> больше не рендерится внутри обёртывающего <span>. Раньше реальный <img> (и, пока идёт загрузка, любой активный blurhash-<canvas>/LQIP-ThumbHash-<img>/сплошной цвет или shimmer-<span>) лежали внутри постоянного позиционирующего <span> — это мешало встраивать компонент в чужую вёрстку, которая ожидает владеть элементом напрямую. Теперь каждый вид плейсхолдера рисуется CSS-фоном (background-color/background-image) прямо на том же элементе, который затем покажет настоящее фото — до начала загрузки это отдельный элемент, который полностью заменяется (а не оборачивает) реальным <img>/<picture>. class/style/data-* и другие атрибуты теперь долетают до этого единственного реального элемента. Плавный кроссфейд «блюр просвечивает сквозь проявляющееся резкое фото» технически больше недостижим — переключение мгновенное; новый проп fadeIn (см. ниже) — другой, более простой эффект, а не замена старого.
  • Новый проп fadeIn у <VImage> (по умолчанию false) — опциональное плавное появление (opacity 0→1, ~0.3с) при монтировании.

12 сентября ​

Color Value Tools 1.2.1 ​

История версий пакета

  • isReadableOnBackground(): поле wcagLevel теперь вычисляется по тому же эффективному цвету фона, что и minContrastRatio/readable, для фонов 'semi-transparent'/'gradient' — раньше всегда использовался '#ffffff'.

Command Palette 0.2.9 ​

История версий пакета

  • bindShortcuts теперь регистрирует горячие клавиши и для вложенных subCommand, а не только для команд верхнего уровня.
  • Резервный обработчик горячих клавиш (runFallback, срабатывающий без смонтированного <CommandPalette>) теперь корректно открывает page-команды без subCommands и учитывает confirm/частоту использования, как основной executeCommand.
  • Подсветка совпадений в CommandItem переиспользует диакритико-независимый скорер FuzzySearch вместо отдельной, менее точной реализации.
  • Nuxt-модуль теперь регистрирует компоненты пакета через addComponent и автоимпортирует все composables/фабрики, а не только 3 из них.
  • isLoading в CommandPalette.vue заменён на счётчик активных запросов — параллельные независимые поисковые пайплайны больше не гасят индикатор загрузки друг друга раньше времени.
  • Слияние асинхронных результатов поиска теперь заменяет уже слитый синхронный результат более точным асинхронным при совпадении id, а не оставляет «первый зарегистрированный».
  • PaletteProvider (testing.ts) теперь также предоставляет PALETTE_REGISTRY_KEY — именованные инстансы (useCommandPalette('name')) корректно резолвятся под ним.
  • Глобальный hotkey-тоггл (installPalette) и toggle()/open()/ close() из useCommandPalette() приведены к единой логике открытия/закрытия (включая очистку history).
  • Опции Nuxt-модуля (vCommandPalette), содержащие функции (onOpen, onError, search, onSearch и т.д.), больше не сериализуются в клиентский runtimeConfig.public — через эту границу проходит только сериализуемая часть.

CSS Magic Gradient 1.3.1 ​

История версий пакета

  • В css-magic-gradient/vue и css-magic-gradient/react добавлены реактивные хуки useMonochromaticGradient и useHueWheelGradient — ранее эти генераторы были доступны только как обычные функции, без реактивной обёртки, в отличие от остальных 8 генераторов пакета.

Error Boundary Kit 0.3.5 ​

История версий пакета

  • <AsyncBoundary> теперь регистрируется Nuxt-модулем как глобальный компонент, наравне с <ErrorBoundary>.
  • createHttpReporter теперь возвращает функцию отписки от pagehide, чтобы слушатель можно было снять.
  • Список autoImports Nuxt-модуля дополнен — теперь покрывает все composables/фабрики пакета, а не только 3 из них.

Feature Toggles 0.2.0 ​

История версий пакета

  • В тип FlagSource добавлено значение 'live' для флагов, обновляемых через SSE/WebSocket.
  • <Feature> без name и без group теперь выводит предупреждение в dev-режиме вместо тихого рендера fallback/ничего.
  • Nuxt-модуль теперь принимает loader/rules в собственном конфиге и автоимпортирует composables пакета.

Form Schema 0.2.8 ​

История версий пакета

  • @macrulez/nuxt-vue-form-schema теперь либо опубликован в npm по-настоящему, либо все упоминания об установке убраны из документации.
  • Асинхронная функция options() поля больше не запускается на каждое изменение значения формы — только при изменении её собственных optionsDeps.
  • isValid теперь учитывает ожидающий асинхронный валидатор, а не только submit().
  • Ключ persistKey по умолчанию больше не строится как простой список имён полей через запятую — устранена коллизия хранилища между разными формами с одинаково названными полями.
  • remove/move/swap в useFieldArray теперь корректно перенумеровывают form.errors/form.touched.
  • Панель Vue DevTools подключается автоматически при установке плагина — без отдельного вызова installFormDevtools(app).

i18n Kit 0.4.12 ​

История версий пакета

  • Типы I18nKitConfig, LocaleConfig и LocaleMeta теперь экспортируются из vue-i18n-kit/config — их можно использовать для типизации собственного i18n-kit.config.json.
  • Удалён неиспользуемый мёртвый код src/cli/commands/init.ts (runInit) — не был подключён ни к CLI, ни к тестам, и использовал устаревший синтаксис плюрализации, несовместимый с ICU-движком пакета.

Image Kit 1.1.6 ​

История версий пакета

  • v-lazy-img теперь использует общий пул IntersectionObserver вместо создания отдельного наблюдателя на каждый элемент.
  • layout без явного значения теперь получает тот же авто-расчёт sizes, что и layout="responsive".
  • Blurhash- и LQIP/thumbhash-плейсхолдеры больше не могут одновременно монтироваться при передаче обоих пропов — восстановлен единый приоритет плейсхолдеров.

InView 0.2.2 ​

История версий пакета

  • Nuxt-модуль теперь также регистрирует компонент <InView> и пару setViewportDefaults/viewportDefaults, а не только composables/утилиты/директиву v-reveal.

Network Dashboard 0.4.1 ​

История версий пакета

  • Исправлена собственная типопроверка пакета (npm run type-check) — расширена декларация модуля *.vue, чтобы учитывать именованные экспорты типов (например, NetworkDebuggerProps) из <script setup>-компонентов.
  • Удалён/переработан мёртвый и расходящийся код composables useHotkey.ts и useLogFilter.ts, дублировавший инлайн-логику NetworkDebugger.vue.
  • Устранена дормантная утечка состояния localStorage между тестами — добавлен сброс мока в тестах persistToStorage.
  • Исправлены примеры импорта из подпутей в JSDoc-комментариях (devtools.ts, adapters/sentry.ts, adapters/opentelemetry.ts) — все три символа доступны только из корня пакета.

OS Detect 2.2.1 ​

История версий пакета

  • detectIsiOS() (устаревший алиас) теперь выводит предупреждение об устаревании один раз, а не при каждом вызове.
  • useIsWindows11() (Vue и React) больше не вызывает setter/присваивание ref после размонтирования компонента.
  • detectIsWindows11() теперь кэшируется, как и остальные детекторы, с поддержкой сброса через resetDetectionCache().
  • Версия в package-lock.json синхронизирована с package.json.

Responsive Media 2.0.1 ​

История версий пакета

  • isAbove(key) теперь корректно возвращает false для нераспознанного ключа брейкпоинта — исправлено в core-, Vue- и React-реализациях.
  • Две независимые реализации isSSR() в пакете объединены в одну, более строгую проверку (наличие window и window.matchMedia).
  • useBreakpoints() (Vue) теперь учитывает inject()/DI, как и useResponsive().
  • useMediaQuery() (Vue) больше не может утечь слушатель matchMedia при вызове вне активного компонента — composable всегда возвращает функцию отписки.
  • React useContainerState() пересоздаёт ResizeObserver, если ref.current был null при первом срабатывании эффекта (например, элемент под условным рендером/порталом).
  • hydrate(initialState) больше не отбрасывает молча ключи, которых нет в текущем состоянии — теперь выводится предупреждение.
  • Добавлено базовое покрытие тестами для Vue- и React-адаптеров (ранее тестировалось только фреймворк-независимое ядро).

Rest Pipeline JS 2.1.5 ​

История версий пакета

  • Согласовано кэширование клиента по конфигурации между useRestClientVue (кэшируется) и useRestClientReact (не кэшировался) — теперь единый документированный контракт.
  • Уточнена и задокументирована логика успеха/неудачи WebSocket-этапа пайплайна — больше не решается только по close.wasClean без учёта видимого срабатывания onError.

State Machine 0.2.6 ​

История версий пакета

  • MachineStore.register() выводит предупреждение в dev-режиме при коллизии id вместо тихой перезаписи существующей записи.
  • useMachine() теперь автоматически отменяет регистрацию машины в MachineStore/реестре DevTools при размонтировании владеющего компонента.
  • useSharedMachine(config, options) предупреждает в dev-режиме, если повторный вызов с тем же id передаёт отличающиеся options (включая persist).

Storage Kit 0.2.7 ​

История версий пакета

  • useStorage() выводит предупреждение в dev-режиме, если второй вызов с тем же key+target передаёт отличающиеся опции (ранее — тихо игнорировались).
  • Добавлено dev-предупреждение о том, что throttle имеет приоритет над debounce, если заданы оба.
  • Добавлено dev-предупреждение о том, что httpOnly у базового (клиентского) useCookie() не имеет эффекта вне Nuxt SSR.
  • compress() теперь так же явно сообщает о неудаче/недоступности, как encrypt() и sign(), вместо тихого перехода в режим passthrough.
  • React-версия useStorage реагирует на изменение key/target между рендерами, как и Vue-версия.

Toast Kit 1.1.1 ​

История версий пакета

  • Проп expand у ToastContainer теперь используется по назначению (был объявлен, но нигде не читался).
  • ToastItem.isGrouped теперь отражает реальное состояние группировки, а не всегда false.
  • toast.update()/queue.update() перезапускает таймер автозакрытия при изменении duration.
  • CHANGELOG.md пакета синхронизирован с актуальной версией package.json.

Virtual Scroller Kit 0.3.1 ​

История версий пакета

  • У VirtualGrid добавлены пропы containerRole/itemRole для переопределения ARIA-ролей, как у VirtualList/VirtualTree/ VirtualSelect.
  • Добавлено тестовое покрытие для InfiniteLoader.vue (пороговая логика, направление подгрузки, защита от параллельных загрузок, сохранение позиции скролла при подгрузке в начало списка).
  • Поле engines.node в package.json обновлено — минимальная версия теперь соответствует реальным требованиям тулчейна (Node 20/22).

Worker Kit 0.2.5 ​

История версий пакета

  • run()/map() пула воркеров (createWorkerPool/useWorkerPool) больше не отбрасывают ctx.reportProgress()/ctx.reportChunk() — прогресс и чанки теперь доступны через WorkerPool.
  • У useWorker() появился явный метод terminate().
  • Воркер, упавший с ошибкой (Worker.onerror), теперь пересоздаётся при следующем run(), а не переиспользует сломанный инстанс.
  • При streaming: false вызов ctx.reportChunk() выводит предупреждение в dev-режиме вместо тихой потери чанка.
  • Из package.json убрано устаревшее ключевое слово "nuxt" (Nuxt-модуля в пакете нет).
  • Поля WorkerComputedResult обёрнуты в Vue readonly() — типизация readonly теперь подкреплена рантаймом.
  • RetryStrategyOptions/StreamingOptions используются как реальные типы параметров UseWorkerOptions/UseSharedWorkerOptions вместо дублирования полей инлайн.