@feugene/granularity-test-kit

  • Без компонентов
  • релизов: 18
  • v1.2.0

Релизы @feugene/granularity-test-kit из его CHANGELOG: последние 8 целиком, более ранние — списком версий.

тег ядра v1.1.1

На этой странице

Записи релизов — авторский текст библиотеки, и он английский. Портал его не переводит: журнал изменений — история чужого репозитория, а переписанная история перестаёт быть историей.

v1.2.02026-10-16

Changed

  • Необязательный peer @feugene/granum — >=2.0.0 <3.0.0. Гейт реестров берёт части составных компонентов из @feugene/granum/codegen granum 2.0, с которым собраны ядро и спутники; сообщение о недостающем пакете называет ту же версию.

v1.1.02026-10-06

Added

  • defineSafelistGate — гейт safelist-контракта, общий для ядра и спутников. Safelist компонента — только классы, собранные в рантайме из частей; запись, которая лежит в коде компонента целым литералом, гейт называет лишней: granum извлечёт её и так. Код компонента обходится так же, как его обходит сборка: от файлов компонента по относительным импортам — сквозь shared/, internal/ и общие директории группы, — но не в директорию другого компонента. Наружу выставлены и части гейта: componentCodeFiles, parseRelativeImports, redundantSafelistEntries.

Changed

  • defineSafelistGate входит в REQUIRED_GATES: пакет, который его не подключил, краснеет на defineGateCoverage.

v1.0.02026-09-28

Переезд на @feugene/granum 1.0 и первый мажор пакета.

Публичная поверхность не менялась — ломающий тут сам конвейер: peer-зависимость уезжает с @feugene/unocss-preset-granular на @feugene/granum (>=1.0.0 <2.0.0), а приложение переходит с uno.config.ts на granum.config.ts. Версия выровнена с ядром: @feugene/granularity 1.0.0.

Перед обновлением стоит прочитать руководство по переезду в granum — в частности про каскадные слои и сброс браузерных стилей, который теперь нужно импортировать в слой.

Changed

  • The optional peer is @feugene/granum >=0.4.0 <1.0.0. The kit’s gates do not depend on the engine vocabulary, but the range moved with the others: diverged ranges would leave a consumer with an uninstallable set.
  • The optional peer changed: @feugene/granum >=0.2.0 <1.0.0 instead of @feugene/unocss-preset-granular. The registry gate learns the parts of a composite component from @feugene/granum/codegen (collectGranumSubcomponents); it is still imported lazily and only inside defineRegistryGate, so the other eight factories work without it.
  • defineRegistryGate checks the granum shape of a package. Instead of assertions about a generated block of vite entries there are three new ones: component entries are not maintained by hand in vite.config.ts (granumProvider({, engine: miniEngine(), not a single component-entry marker), the manifest is exported as ./granum.manifest.json right after ".", and the provider registry arrives as componentConfigs.
  • defineComponentTokensGate also looks into src/components/shared/. Helpers shared by several components live there, and without this their tokens would look declared into the void.

v0.10.02026-08-31

Changed

  • BREAKING. OVERLAY_COMPOSABLES больше не перечисляет имена токенов — фабрика вычитывает их из кода композабла. Константа утверждала, что useFloating заставляет компонент читать gr-z-modal, но связи с overlayStack.ts у неё не было никакой (grep -c overlayStack по гейту давал ноль). Разойдись они — гейт продолжал бы требовать старое имя и оставался зелёным: охранная конструкция переставала охранять, ничего об этом не сообщая. Переименование токена третье правило (knownTokens) всё же ловило, а переключение кода на другой существующий токен проходило молча.

    Теперь DynamicTokenComposable описывает не имена, а модули (modules), из которых имена вычитываются двумя формами: ветка calc(var(--x) + N) даёт always (читает любой вызов), ?? '--x' — defaultToken (читает вызов, не передавший имени). Список модулей нужен потому, что токен читается не в одноимённом файле: ветку calc() у useFloating держит overlayStack, а сам useFloating — только свой дефолт. Класс кавычек в форме дефолта обязателен: в src он записан одинарными, в dist — двойными.

    always и defaultToken остались в опциях как дополнение к выведенному (форма, регуляркой не выразимая, и разрешение неоднозначного дефолта), а не как его замена.

  • Гейт падает, когда посмотреть не смог. Модуль не найден или из найденного не выведено ни одного имени — прогон краснеет с адресами корней и причиной. Молчаливый пропуск вернул бы ту же слепоту: тот же принцип, что у check-entry-isolation.mjs, где файл без сорсмапы роняет прогон.

  • Сообщение о нарушении называет обе стороны: GrPopover читает gr-z-dropdown, gr-z-toast, а объявляет gr-z-dropdown, gr-z-modal — видно и появившееся имя, и исчезнувшее.

Added

  • composableSources — корни, в которых ищутся модули композаблов, в порядке предпочтения. По умолчанию <cwd>/src и dist установленного @feugene/granularity: у ядра модуль находится в исходниках, у спутника — в собранном ядре. Опцией, а не догадкой: спутник вправе линковаться и через workspace, и из реестра.

v0.9.02026-08-31

Added

  • defineDynamicTokensGate — фабрика для токенов, чьё имя собирается в рантайме. var(), склеенный из переменной, не находит ни один статический анализ: имя уходит в композабл параметром. Приложение с включённой обрезкой (pruneTokens пресета) считает такой токен ненужным и удаляет объявление молча — сборка зелёная, CSS валидный, z-index разрешается в unset.

    Гейт держит три правила. Два знают про конкретные композаблы (OVERLAY_COMPOSABLES — useFloating и useModalOverlay ядра) и требуют от вызывающего объявить и свой слой, и gr-z-modal из ветки calc(var(--gr-z-modal) + N). Третье ловит источник, о котором фабрика ещё не знает, и потому переживает появление нового.

    Исходники компонента читаются вместе с общей директорией его группы: у графиков композабл зовёт рама, а не график. Список appSuppliedName выводит из-под правила компоненты, которым объявлять нечего — имя приходит от приложения; список проверяется на протухание.

    Фабрика добавлена в REQUIRED_GATES, то есть пакет без неё краснеет.

v0.8.12026-08-27

Fixed

  • gr-check-dist-dev-guard now recognises the guard in either comparison direction. A minifier is free to normalise !(NODE_ENV !== 'production') into NODE_ENV === 'production', and the gate — which only knew !== — failed the build of a package whose guard was expanded correctly.

v0.8.02026-08-27

Changed

  • Peer floors on @feugene/* raised to the current minor. Every peer this package declares on the ecosystem now starts at the version the monorepo actually ships:

    • @feugene/unocss-preset-granular → >=0.13.0 <1.0.0

    The floors had drifted far behind — some still admitted releases from a year of development ago — and a range that claims support it was never tested against is worse than a narrow one: the install succeeds and the breakage surfaces later, in the consumer’s app.

    This is breaking for anyone below a floor. Installing against an older @feugene/granularity now produces a peer conflict instead of silence. The fix is to move the core up; nothing in this package’s own API changed.

v0.7.42026-08-25

Fixed

  • The package tarball now ships LICENSE. The manifest has always declared "license": "SEE LICENSE IN LICENSE", and the file it points at was not there: npm adds LICENSE to a tarball on its own, but only when the file exists in the package directory. A consumer’s compliance scanner reads a licence reference that resolves to nothing and flags the dependency as unlicensed — a refusal on formal grounds, before anyone reads the terms.

    The copy is byte-identical to the one at the repository root and is kept that way by yarn check:licenses, a gate in CI: eleven copies of a 598-line file drift silently, and they drift exactly when the licence text is being edited.

Более ранние версии

Тела этих релизов не показываются: лента целиком весит больше, чем страница имеет право весить. Файл в репозитории всегда полон.

  • v0.7.32026-08-23
  • v0.7.22026-08-23
  • v0.7.12026-08-23
  • v0.7.02026-08-23
  • v0.6.02026-08-22
  • v0.5.02026-08-22
  • v0.4.02026-08-20
  • v0.3.02026-08-19
  • v0.2.02026-08-19
  • v0.1.02026-08-15

CHANGELOG пакета целиком