@feugene/granularity-editor

  • With components
  • releases: 21
  • v1.1.1

Releases of @feugene/granularity-editor from its CHANGELOG: the latest 8 in full, the earlier ones as a list of versions.

core tag v1.1.1

On this page

v1.1.12026-10-16

Fixed

  • Манифест знает части составных компонентов. Пакет собран granum 2.1: его сборка записывает в манифест владельца часть (GrMarkdownCode у GrMarkdown) — поле subcomponents. Приложение на granum 2.1 сводит подпуть части к владельцу: часть, импортированная при селекции без владельца, — ComponentOutsideSelectionError на владельце, components: 'imports' берёт владельца в селекцию, а granum doctor больше не предупреждает subcomponents-missing (с ним doctor --strict у приложения на 2.1 падал). Peer granum прежний — >=2.0.0 <3.0.0: granum 2.0 поле не читает и судит импорт части, как раньше.

v1.1.02026-10-16

Changed

  • Peer @feugene/granum — >=2.0.0 <3.0.0. Пакет собран granum 2.0: dist не импортирует granum — контракт встроен в dist/granum/contract.js, и SSR-сервер с внешними пакетами, задеплоенный с --omit=dev, больше не падает с ERR_MODULE_NOT_FOUND. Приложению — @feugene/granum и @feugene/granum-engine-wind ^2.0.0.
  • Компонент из корня пакета — ComponentRootImportError у приложения на granum 2.0. Компоненты берут из <пакет>/components/<Имя>.
  • Авто-импорт — один GranularityResolver() из @feugene/unplugin-granularity 1.1: он находит пакет в package.json приложения сам, порядок резолверов больше не важен. Собственный ./resolver остаётся для уже написанных конфигов.
  • Необязательный peer @feugene/fint-i18n — >=0.9.0 <1.0.0. Пакет тестируется на 0.9 вместе с ядром; на 0.7 и 0.8 он не проверялся.

v1.0.62026-10-13

Fixed

  • Пузырёк GrRichText у верхнего края поля снова над выделением. С 1.0.5 сторона выбиралась по видимой части, в которую входила и своя прокрутка поля: у поля с --gr-rich-text-max-height верхняя кромка .ProseMirror съедала место над первой строкой, и пузырёк уходил вниз — на следующую строку, которую читают, — при целой странице места над ним. Теперь видимость выделения по-прежнему решают все обрезающие предки, поле включительно, а место для пузырька — страница вне поля за вычетом её scroll-padding. Вниз пузырёк уходит, только когда над выделением нет места на странице, например у липкой шапки.

v1.0.52026-10-13

Fixed

  • GrRichText не вырастает на гидрации. Хост области ввода приходил с сервера пустым, а высоту (--gr-rich-text-min-height, по умолчанию 8rem, и --gr-rich-text-max-height) держал только .ProseMirror, которого до монтирования нет: поле прыгало на всю высоту области ввода — ответ в тикете с min = max = 8rem вырастал с 231px до 359px. Теперь до монтирования хост держит болванку с тем же боксом, а высоты у неё и у области ввода задаёт одно правило: поле с min = max не двигается вовсе. Текст на сервере по-прежнему не печатается — v-html в пакете нет.
  • Пузырёк GrRichText не встаёт на липкую шапку. Видимая часть урезалась вьюпортом и обрезающими предками, но не scroll-padding, которым сайт объявляет шапку: выделение под ней держало пузырёк поверх навигации. Теперь видимая часть урезается scroll-padding каждой области прокрутки, страницы тоже; выделение под шапкой пузырёк прячет, а у её кромки ставит его под выделением.

v1.0.42026-10-13

Fixed

  • Чекбокс задачи GrMarkdown назван текстом своего пункта. У всех чекбоксов было одно имя — aria-label="Task", и диктор читал «Task, checkbox, checked» на каждом пункте: задачи было не различить. Теперь aria-labelledby указывает на первый блок пункта — с interactiveTasks и без него, в режиме чтения чекбокс остаётся названным и aria-readonly. Вложенный список в имя родителя не входит; пункт без текста (пустой инлайн, картинка без подписи) называется по-прежнему «Task».
  • Свободный список задач не печатает маркер текстом. У пункта, отделённого пустой строкой, marked кладёт checkbox первым инлайном абзаца, а не среди блоков пункта, и рядом с чекбоксом стояло «[ ] Отправить».
  • Переключение задачи после правки выше указывает в нужное место исходника. Блок с задачами, сдвинутый правкой над ним, приходил из кэша VNode с офсетами прежнего исходника, и taskToggle эмитил офсет чужих символов — приложение, переписывающее markdown по нему, портило текст. При interactiveTasks такой блок теперь перерисовывается; остальные по-прежнему идут из кэша. То же при streaming: хвост разбирается отдельно, и офсеты его задач оставались относительными хвосту — теперь они сдвигаются к началу исходника.
  • Пузырёк GrRichText едет за выделением при прокрутке. Якорь toolbar="bubble" и "both" снимался в координатах вьюпорта на смене выделения, а прокрутка колесом выделение не меняет: пузырёк оставался на прежнем месте экрана и висел над тем, что приехало под него, — на портале над заголовком соседнего редактора. Теперь якорь пересчитывается на scroll (страницы и любой вложенной области) и resize, а выделение за видимым краем пузырёк прячет.
  • Курсор streaming не пропадает, пока поток дописывает список или таблицу. Слот caret вставал только в абзац и заголовок; теперь он спускается в последний пункт списка (на любой вложенности), последнюю ячейку таблицы и последний блок цитаты или алерта. Обёртка курсора aria-hidden: он декоративный и в чтение абзаца и имя задачи не входит.

v1.0.32026-10-06

Documentation

  • Появились описания у пропов, событий и методов GrMarkdown и GrRichText, которые в API и на портале были пустыми.

v1.0.22026-10-06

Changed

  • Safelist компонентов пуст. Все записи лежали в коде целыми литералами — в шаблонах и .ts-хелперах. granum извлекает такие классы сам, обходя от входа компонента все его чанки, общие включительно, и вычищал записи из манифеста как уже извлечённые. Списки пережили UnoCSS-пресет, который общий чанк не сканировал. Набор классов не изменился — проверено сверкой манифестов по селекции каждого компонента; расходятся только случайные токены, которые экстрактор выхватывает из минифицированного кода.
  • Удалён internal/classTokens.ts: он служил только спискам.
  • Подключён гейт defineSafelistGate из test-kit: запись safelist, которая лежит целым литералом в коде компонента, он называет лишней. Нужен safelist только классу, собранному в рантайме из частей.

Fixed

  • Таблица в GrMarkdown снова идёт кеглем текста вокруг. 0.95em стоял в styles.css, а кегль таблице ставит сам GrTable утилитой размера. С 1.0.1 лист живёт в слое granum.components и утилите из более позднего granum.utilities проигрывал: таблица в прозе шла кеглем контрола. Теперь кегль — утилита с вариантом [&_[data-gr-table]]: на обёртке, она сильнее одиночного класса размера.

v1.0.12026-09-29

Починка доставки CSS. Публичная поверхность не менялась, обновление безопасное.

Fixed

  • CSS компонента больше не доставляется дважды. Сборка пакета звала libInjectCss(), и тот вписывал в JS-чанк каждого компонента import '../styles.css'. До granum это был единственный канал доставки стилей. С granum тот же файл приезжает приложению через манифест (css: ['components/<Name>/styles.css']), и вместе выходила двойная доставка: один и тот же CSS в общем листе и отдельным чанком.

    Второй экземпляр был хуже, чем лишние байты. Он приезжал вне слоёв granum.*, а незаслоённый CSS бьёт любой @layer независимо от специфичности, — то есть стили компонента становились сильнее всей библиотеки, и переопределить их из приложения было нечем.

    Ядро сняло плагин при переезде на granum, спутники остались на старом конфиге. Предупреждение css-double-delivery (INV-CSS-5) этого не поймало: granum смотрит бандл раньше, чем libInjectCss вписывает импорт, — в chunk.code на тот момент его ещё нет.

    Замерено на портале дизайн-системы: отдельный лист 1.8 КБ сжатых исчез, общий не вырос, страница компонента совпала пиксель в пиксель — ноль различий из 9 948 160.

Changed

  • Веса гранулярных импортов пересчитаны: CSS больше не считается в entry. GrMarkdown 11.3 → 9.5 kB, GrRichText 6.4 → 5.8 kB, весь пакет 17.7 → 15.4 kB. Стили от этого никуда не делись — их доставляет granum.

Earlier versions

The bodies of these releases are not shown: the full feed weighs more than a page is allowed to. The file in the repository is always complete.

  • v1.0.02026-09-28
  • v0.4.12026-09-10
  • v0.4.02026-09-10
  • v0.3.12026-08-27
  • v0.3.02026-08-27
  • v0.2.32026-08-26
  • v0.2.22026-08-25
  • v0.2.12026-08-25
  • v0.2.02026-08-23
  • v0.1.32026-08-21
  • v0.1.22026-08-21
  • v0.1.12026-08-21
  • v0.1.02026-08-21

The package CHANGELOG in full