@feugene/granularity

  • С компонентами
  • релизов: 106
  • v3.7.2

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

тег ядра v3.7.2

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

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

v3.7.22026-10-28

Fixed

  • zIndexBase сдвигает шкалу слоёв целиком. GrConfigProvider пересчитывал от базы пять слоёв из семи: --gr-z-bottom-nav и --gr-z-loading оставались на 850 и 1150, и при базе 5000 полноэкранная загрузка и v-loading ложились под модалку, а нижняя навигация — под шапку. Теперь сдвигаются все семь с теми же шагами, что у темы (гейт сверяет смещения со шкалой каждой темы каталога). Предупреждение о втором провайдере срабатывает только на разную базу — одинаковая шкалу не меняет.
  • Уходящий модальный слой не перехватывает клики у GrDrawer, GrImageViewer и GrSidebar в режиме overlay. Правило было только у GrModal: остальные слои 150 мс ухода оставались растянутыми на вьюпорт и забирали клик себе. Корень полноэкранного слоя на время ухода — inert (флаг isLeaving из useModalOverlay), у всех одинаково; GrModal перешёл на тот же механизм с pointer-events: none, который не останавливал потомков с pointer-events: auto.
  • resetGranularityDom снимает сервис диалогов. Неотвеченный диалог прошлого теста стоял головой очереди, и новый не появлялся; диалог вне setup брал словарь, захваченный прошлым тестом. Сервис записывает свою уборку во внутренний реестр, и подпуть testing его граф не тянет.

Changed

  • Документация сверена с кодом. ssr.md: якоря телепортов вставлять ради компонентов пакета не нужно (только вашим телепортам, включённым на сервере); модальные слои без содержимого на сервере — ещё GrDrawer, GrImageViewer и GrSidebar в режиме overlay; на сервере бросают только открывающие методы useDialogService; устаревшие числа и неполный перечень изоморфных компонентов убраны — реестр держит SSR-стенд. @floating-ui/dom в README и installation.md — правилом вместо перечня, с настоящим падением (ошибка сборки, а не рантайма). testing.md и JSDoc помощников: PointerEvent в jsdom есть, isComposing через trigger доходит — объяснено, зачем помощники всё равно нужны; «Уборка» называет enableAutoUnmount.

v3.7.12026-10-28

Changed

  • Документация спутников: нижние peer-границы при значениях у темы. docs/companion-packages.md называет их явно: ядро >=3.1.0, granum >=3.10.0, при разделе группы — >=3.11.0. Код и dist не менялись; выпуск сводит в одну точку ядро и патчи спутников — chrono, code и editor 4.0.1, dashboard и forms-schema 3.0.1 с исправленными границами.

v3.7.02026-10-28

Added

  • Заголовок GrFormSection — по теме. Шрифт — шрифт заголовков темы (--gr-font-display), как у GrCard и окон; кегль, интерлиньяж и начертание — токены вида theme --gr-form-section-title-size, -title-leading, -title-weight. «Сланец», «Тактильная» и «Чертёж» — прежний полужирный текст ступени sm, «Глина» — антиква 20px: значения в темах @feugene/granularity-tokens 2.5.0, зависимость поднята до ^2.5.0.

v3.6.02026-10-28

Changed

  • Недоступное поле гасится ролями недоступного контрола — подложка --gr-disabled-bg, текст --gr-disabled-fg, как рамка --gr-disabled-brd, — у всех полей одинаково. Раньше так гасился только GrNumberInput, остальные поля — приглушённой поверхностью --gr-muted; у самого GrNumberInput значение в поле оставалось тёмным.
  • Триггер GrColorPicker откликается, как поле: в фокусе — рамка --gr-input-focus-brd, под указателем сфокусированного — она же. Цвет под указателем по-прежнему — ручка темы --gr-color-picker-trigger-hover-brd; темы каталога ставят ей --gr-input-hover (пакет токенов 2.4.0), её значение по умолчанию в реестре — тоже.

v3.5.02026-10-28

Added

  • grFieldLookAttrs — рамка поля для своих компонентов (@feugene/granularity/components/GrInput, docs/field.md). Компонент ядра, спутника или приложения ставит её атрибуты на элемент рамки и объявляет GrInput в dependencies — рамку, скругление по ступени, подложку, отклик на указатель и фокус, кольцо, подсветку, ошибку и недоступность рисует общий лист.

Changed

  • Рамку полей рисует один лист — лист GrInput по атрибутам, а не утилиты в каждом поле. Переведены GrInput, GrTextarea, GrNumberInput, GrSelect, GrAutocomplete, GrInputTag, GrTreeSelect и триггер GrColorPicker (docs/markup-weight.md). Разметка полей легче: GrInput — на 38 %, GrTextarea — на 33 %, GrNumberInput — на 35 %, набор из восьми полей — на 16 %. Вычисленные стили совпадают с прежними во всех состояниях, четырёх темах и обоих режимах, кроме двух исправлений ниже; переходы цвета рамки идут по кривой темы --gr-ease-out. Свои отличия полей сохранены их листами: GrNumberInput гасит недоступное ролями --gr-disabled-*, триггер GrColorPicker откликается на указатель ручкой --gr-color-picker-trigger-hover-brd.
  • Если тесты или стили приложения искали у полей классы рамки (border-[var(--gr-input)], h-10, rounded-[var(--gr-radius-control-md)]), им теперь нужны атрибуты: data-gr-field, data-gr-size, data-gr-invalid, data-gr-off.

Fixed

  • Кольцо фокуса поля с ошибкой и с подсветкой danger — в цвете состояния. У них кольцо было цвета --gr-ring: утилита цвета проигрывала базовой порядком правил в собранном CSS. У подсветки success и warning кольцо и раньше было в её цвете. Теперь кольцо в цвете состояния у всех, как обещают GrInput.md и роль --gr-invalid-ring.
  • Недоступный триггер GrColorPicker гасит текст (--gr-disabled-fg): задуманный цвет проигрывал --gr-fg по той же причине, и недоступный триггер выглядел рабочим.
  • Триггер GrColorPicker с ошибкой под указателем держит рамку ошибки, как остальные поля: отклик на указатель перекрашивал её в цвет наведения.

v3.4.12026-10-28

Changed

  • Листы GrSwitch, GrPagination и GrButton вместе легче на 3,1 КБ минифицированного CSS. Ступень теперь одно правило с переменными --gr-<имя>-step-* на корне, а размеры элементов внутри читают их одним правилом на все ступени, вместо правила на каждый элемент каждой ступени (docs/markup-weight.md). Вид не изменился: вычисленные стили сверены во всех состояниях, четырёх темах и обоих режимах. Ручки --gr-button-square-size и --gr-switch-state-text-size перекрывают ступень, как и прежде.

v3.4.02026-10-28

Changed

  • Вид повторяющихся компонентов — лист по атрибутам, а не утилиты, как у GrButton в 3.3.0 (docs/markup-weight.md). Переведены GrBadge, GrChip, GrCheckbox, GrSwitch, GrRadio, GrTabs, GrPagination и GrSegmented.
    • Экземпляр несёт только состояние: data-gr-size, data-gr-tone, data-gr-variant и флаги. Всё, что в разметке уже есть, — aria-checked, aria-selected, aria-current, aria-disabled, aria-invalid, :disabled — лист читает напрямую.
    • Ушли строки классов, инлайн-переменные GrSwitch и GrSegmented, скрытый инлайн-стиль нативного поля GrCheckbox и атрибуты scoped-стиля GrBadge.
    • Палитру тонов и радиусы GrChip берёт у листа GrBadge: в одном ряду они обязаны совпадать.
    • Вычисленные стили каждого компонента совпадают с прежними до свойства, кроме кривой переходов и двух исправлений GrSegmented ниже: сверены все состояния в четырёх темах и обоих режимах.
    • Классы-маркеры gr-badge, gr-badge__label, gr-badge__text и gr-checkbox-icon убраны: селектор метки — [data-gr-badge]. Вариант GrSegmented теперь в data-gr-variant, а не в data-variant.
    • Переходы цвета у GrCheckbox, GrSwitch, GrRadio, GrTabs, GrPagination и GrSegmented идут по кривой темы --gr-ease-out, а не по кривой движка: так движение задаёт дизайн-система (motion.md).
    • Если тесты или стили приложения искали у этих компонентов классы, им теперь нужны атрибуты.

Fixed

  • Подпись GrSegmented берёт вес из темы. Утилита font-[var(--gr-segmented-font-weight)] движок собирал в font-family, и --gr-segmented-label-weight не действовал: подписи стояли обычным начертанием, а не semibold «Сланца» и medium «Глины».
  • Недоступный сегмент GrSegmented гаснет. Цвет --gr-disabled-fg проигрывал базовому цвету сегмента: утилиты одной специфичности, и решал порядок в собранном CSS. Недоступный сегмент выглядел рабочим и отличался только курсором.

v3.3.02026-10-27

Changed

  • GrButton рисуется листом компонента, а не утилитами, — разметка кнопки стала в восемь раз легче. Вес, тон, ступень, недоступность и аддоны переехали в атрибуты: data-gr-variant, data-gr-tone, data-gr-size, data-gr-square, data-gr-block, data-gr-off, data-gr-pre, data-gr-post, data-gr-cell. Цвета, размеры и движение задают по ним правила <style> компонента. Строка классов в полторы-две тысячи символов на каждую кнопку исчезла: кнопка по умолчанию весит около 210 символов HTML вместо ~1 800. Safelist кнопки пуст, модуль её стилей в dist — 0,9 КБ вместо 21,5 КБ. Вид не изменился: вычисленные стили 2 640 состояний совпадают до свойства. Сверялись четыре темы в обоих режимах, все веса, тона и ступени, нажатие, недоступность, загрузка, группы и радио в виде кнопки. Лист лежит в слое granum.components, утилиты — в granum.utilities, поэтому класс на экземпляре (<GrButton class="…">) перекрывает вид кнопки предсказуемо, без гонки за порядок утилит. GrRadio в виде кнопки несёт те же атрибуты. Если тесты или стили приложения искали у кнопки классы (h-10, bg-[var(--gr-button-primary-bg)]), им теперь нужны атрибуты: ступень — data-gr-size, тон — data-gr-tone.

Fixed

  • Контур фокуса в «Тактильной» въезжает с задуманного отступа. В покое outline-none своими 2px перебивал --gr-button-focus-offset-from, который у «Тактильной» равен 6px. Из-за этого фокус начинал движение не с того отступа, который задала тема. Теперь отступ покоя берётся из токена темы. В темах, где он равен отступу фокуса, ничего не меняется.

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

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

  • v3.2.22026-10-27
  • v3.2.12026-10-27
  • v3.2.02026-10-26
  • v3.1.12026-10-22
  • v3.1.02026-10-21
  • v3.0.02026-10-21
  • v2.4.02026-10-21
  • v2.3.02026-10-20
  • v2.2.02026-10-20
  • v2.1.02026-10-20
  • v2.0.02026-10-19
  • v1.1.12026-10-16
  • v1.1.02026-10-16
  • v1.0.212026-10-13
  • v1.0.202026-10-13
  • v1.0.192026-10-13
  • v1.0.182026-10-07
  • v1.0.172026-10-07
  • v1.0.162026-10-07
  • v1.0.152026-10-07
  • v1.0.142026-10-07
  • v1.0.132026-10-07
  • v1.0.122026-10-07
  • v1.0.112026-10-06
  • v1.0.102026-10-06
  • v1.0.92026-10-06
  • v1.0.82026-10-06
  • v1.0.72026-10-06
  • v1.0.62026-10-06
  • v1.0.52026-10-06
  • v1.0.42026-10-06
  • v1.0.32026-10-06
  • v1.0.22026-10-05
  • v1.0.12026-09-29
  • v1.0.02026-09-28
  • v0.53.12026-09-11
  • v0.53.02026-09-11
  • v0.52.02026-09-10
  • v0.51.02026-09-10
  • v0.50.02026-09-09
  • v0.49.02026-09-06
  • v0.48.02026-09-06
  • v0.47.02026-09-05
  • v0.46.02026-09-04
  • v0.45.02026-09-03
  • v0.44.02026-09-03
  • v0.43.02026-09-02
  • v0.42.02026-09-01
  • v0.41.02026-08-31
  • v0.40.02026-08-30
  • v0.39.02026-08-29
  • v0.38.02026-08-28
  • v0.37.02026-08-27
  • v0.36.02026-08-27
  • v0.35.02026-08-25
  • v0.34.22026-08-25
  • v0.34.12026-08-25
  • v0.34.02026-08-25
  • v0.33.02026-08-25
  • v0.32.02026-08-24
  • v0.31.12026-08-23
  • v0.31.02026-08-23
  • v0.30.02026-08-23
  • v0.29.12026-08-22
  • v0.29.02026-08-22
  • v0.28.42026-08-22
  • v0.28.32026-08-22
  • v0.28.22026-08-22
  • v0.28.12026-08-22
  • v0.27.22026-08-20
  • v0.27.12026-08-19
  • v0.27.02026-08-19
  • v0.26.02026-08-18
  • v0.25.02026-08-18
  • v0.24.12026-08-18
  • v0.24.02026-08-18
  • v0.23.02026-08-17
  • v0.22.02026-08-17
  • v0.21.12026-08-17
  • v0.21.02026-08-17
  • v0.20.02026-08-13
  • v0.19.02026-08-13
  • v0.18.02026-08-12
  • v0.17.02026-08-12
  • v0.16.02026-08-11
  • v0.15.02026-08-07
  • v0.14.02026-08-05
  • v0.13.02026-07-28
  • v0.12.02026-07-20
  • v0.11.02026-07-19
  • v0.10.02026-07-17
  • v0.9.42026-06-23
  • v0.9.32026-06-09
  • v0.9.22026-06-08
  • v0.9.12026-06-07
  • v0.9.02026-06-02
  • v0.8.02026-06-01
  • v0.1.0

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