@feugene/granularity-editor
Releases of @feugene/granularity-editor from its CHANGELOG: the latest 8 in full, the earlier ones as a list of versions.
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-granularity1.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.
GrMarkdown11.3 → 9.5 kB,GrRichText6.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-28v0.4.12026-09-10v0.4.02026-09-10v0.3.12026-08-27v0.3.02026-08-27v0.2.32026-08-26v0.2.22026-08-25v0.2.12026-08-25v0.2.02026-08-23v0.1.32026-08-21v0.1.22026-08-21v0.1.12026-08-21v0.1.02026-08-21