@feugene/granularity-editor
Записи релизов — авторский текст библиотеки, и он английский. Портал его не переводит: журнал изменений — история чужого репозитория, а переписанная история перестаёт быть историей.
v0.3.12026-08-27
Fixed
- Development warnings never reached the browser: the
__GR_DEV__guard included atypeof processcheck, andprocessis undefined in the browser, so the whole expression collapsed tofalsein development too. The guard now matches the core package. Production bundles are unaffected — the branch is still dropped.
v0.3.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/fint-i18n→>=0.7.0 <1.0.0@feugene/granularity→>=0.36.0 <1.0.0@feugene/unocss-preset-granular→>=0.13.0 <1.0.0@feugene/unplugin-granularity→>=0.7.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/granularitynow produces a peer conflict instead of silence. The fix is to move the core up; nothing in this package’s own API changed.
v0.2.32026-08-26
Fixed
-
Словарь пакета экспортируется под своим именем. Подпуть
./i18nотдавалgrChronoMessagesиGrChronoLocale— имена соседнего пакета. Докблок при этом утверждал неймспейсgrи приводил ключgr.calendar.previousMonth, тогда как блок пакета —grEditor, а ключи выглядят какgrEditor.richText.toolbar. Теперь экспорты называютсяgrEditorMessagesиGrEditorLocale.Корневой
index.tsэти имена не реэкспортирует, поэтому смена задевает только прямой импорт из@feugene/granularity-editor/i18n. Лоадеры локалей (en,ru,es) и константа блокаGR_EDITOR_I18N_BLOCKне менялись — приложения, подключающие словарь штатным способом, правок не требуют.
v0.2.22026-08-25
Fixed
-
Пузырьковый тулбар больше не вылезает за край панели. Панель поповера ограничена
max-widthв 22rem, а квадратная кнопка не сжимается —min-wвGrButton. Десять кнопок ступениsm(размер поляmdиlg) занимали 356px против 330px доступных, и последняя кнопка выходила за скруглённый край наружу: у панелиoverflow: visible, так что её не обрезало, а именно выносило поверх границы. На ступеняхxsиsmнабор укладывался, поэтому поломка была видна только на двух размерах из четырёх.Закрыто с трёх сторон. Кнопка пузырька теперь всегда самой мелкой ступени независимо от размера поля: панель сверху живёт в раме поля и растёт вместе с ним, а пузырёк висит над читаемым текстом, и там уместна наименьшая площадь — 28×28 при требуемых WCAG 2.2 двадцати четырёх. Поповер получил
padding="none", а поле перешло на сам пузырёк: 20px поля панели — это две трети кнопки. И ряд научился переноситься, чего не умел вовсе. -
Пузырёк снял потолок ширины поповера.
GrPopoverпо умолчанию держит22rem— читаемую ширину колонки текста, — а пузырёк несёт тулбар, которому эта мера чужая. Потолок снимается хуком--gr-popover-max-width, появившимся в ядре. Предел «не шире вьюпорта» остаётся: он второй операндmin()и хуком не снимается.Ступень кнопок при этом осталась мельчайшей — но теперь это решение об оформлении, а не обход ограничения: пузырёк висит над читаемым текстом, и там уместна наименьшая площадь.
-
Обе панели переносятся группами, а не отдельными кнопками. Перенос по кнопкам рвёт ряд там, где кончилось место, и разлучает кнопки одного смысла: «Заголовок» остаётся в одной строке, «Подзаголовок» уезжает в другую, причём без разделителя между ними. Группа стала обёрткой с
flex-noneи переносится целиком со своим разделителем.
v0.2.12026-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:npmaddsLICENSEto 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.2.02026-08-23
Added
#headerand#footerslots — bands inside the field. The component had exactly two zones, the toolbar and the text, so a caption or a character counter had to sit outside the border: it read as a separate element, since the border framed only the text and the link to the field rested on proximity alone. Both zones are optional and turn on by the mere presence of the slot; they are separated by a border from the inside, like the toolbar, because the line belongs to the boundary between zones — at the edge of the field it would meet the rounded corner. Neither carries a background:--gr-mutedis the toolbar’s because it is a control panel, while these hold the consumer’s own content.
v0.1.32026-08-21
Added
- Each toolbar action now carries its keyboard shortcut (
GrRichTextAction.shortcut, in TipTap notation:Mod-B,Mod-Alt-2, …). The component does not render it — the field is there for whoever builds their own panel or writes a hint. The values are read from the extensions’ own sources, because the shortcuts belong to them, not to this package.
Fixed
- The bubble toolbar works at all. With
toolbar="bubble"(and"both") nothing showed up at the selection: the buttons sat in the popover’s default slot, and the panel renders only thecontentone — it opened empty. Filled, it then closed in the frame it opened: the panel takes focus by default, the field loses it, and blur clears the anchor. The panel no longer autofocuses, and a bubble button no longer steals focus onmousedown— without that the bubble vanished under the cursor after the first format and the second could not be applied.Esccloses it; an outside click does not, because a drag-select ends with exactly that click.
v0.1.22026-08-21
Fixed
-
schemaandextensionsnow take effect on a live field. Both were read once, at mount: after that, switchingschemamoved the toolbar without touching the document rules — a «Heading» button on a schema that allows no headings. Changing them now rebuilds the editor, because a ProseMirror schema is immutable: the document and the commands are derived from it.Content is carried over as markup, not as a document. JSON is parsed strictly, and the first node missing from the new schema takes the whole text with it; HTML is parsed leniently — a heading becomes a paragraph and what was written survives.
Более ранние версии
Тела этих релизов не показываются: лента целиком весит больше, чем страница имеет право весить. Файл в репозитории всегда полон.
v0.1.12026-08-21v0.1.02026-08-21