@feugene/granularity-charts
Релизы @feugene/granularity-charts из его CHANGELOG: последние 8 целиком, более ранние — списком версий.
Записи релизов — авторский текст библиотеки, и он английский. Портал его не переводит: журнал изменений — история чужого репозитория, а переписанная история перестаёт быть историей.
v4.0.02026-10-28
Changed
- Подсказка, курсор, кисть, опора и нейтральные цвета графиков — решение темы.
--gr-chart-frame-tooltip-bg,-tooltip-fg,-tooltip-brd,-crosshair,-brush-fill,-brush-stroke,-reference,--gr-chart-bullet-targetи--gr-sparkline-colorбыли хуками с запасным значением в коде, теперь это токены видаtheme. Темы каталога несут их с@feugene/granularity-tokens2.5.0 — «Сланец», «Тактильная» и «Чертёж» с прежним видом, «Глина» — графитовым пузырём подсказки, как у ядра, и графитом вокруг данных. Своей теме-копии нужны значения (granum doctor,theme-incomplete). - Тень подсказки — токен
--gr-chart-frame-tooltip-shadow, а не утилита шкалы uno: «Глина» подсказку тенью не поднимает. У «Сланца» — прежняя тень. - Peer
@feugene/granularity-tokens—>=2.5.0 <3.0.0: темы со значениями графиков.
Added
--gr-chart-frame-tooltip-swatch-ring— кольцо метки серии в подсказке: на тёмном пузыре светлой страницы (и наоборот) метка не сливается с ним, в том числе со своими цветами серий.--gr-chart-bullet-value,--gr-chart-waterfall-total— цвет полосы значения и итога моста. У «Сланца» — первая серия, как было; «Глина» кладёт их графитом и отдаёт глину цели bullet.
v3.0.02026-10-22
Мажор: значения у темы. Дизайн-решения графиков — токены вида theme, их значения дают темы
каталога пакета токенов; вид не меняется.
Changed
- 20 хуков — вид
theme, компонент читает их без запасного значения: толщины линий (--gr-chart-line-width,-area-line-width,-radar-width,-frame-grid-width,-bar-gap,-pie-gap,-waterfall-connector-width,-waterfall-zero-step,--gr-sparkline-width) и прозрачности (--gr-chart-area-fill-opacity,-area-stack-opacity,-area-fill-fade,-bar-dim,-funnel-dim,-pie-dim,-line-gap-opacity,-radar-fill,-frame-brush-fill-opacity,-frame-reference-band-opacity,--gr-sparkline-fill-opacity). Значения — в темах@feugene/granularity-tokens2.2.0; приложение по-прежнему переопределяет их своим CSS. - Требования:
@feugene/granularity>=3.1.0,@feugene/granularity-tokens>=2.2.0— темы со значениями графиков,@feugene/granum>=3.11.0— значения рамки лежат в разделе группыGrChartFrame: токены общей рамки требует каждый график, владельца среди них нет. - Своей теме без
extendsнужны значения этих токенов —granum doctorназывает их поимённо (theme-incomplete); начать с копии —gr-theme-copy slate <id>. - Хуки-геометрия (
--gr-sparkline-height,-inset,--gr-chart-bullet-value-width,-frame-empty-height,-frame-legend-gap) и нейтральная заливка пустой ячейки тепловой карты остаются хуками — с причинойliteralв реестре.
v2.0.22026-10-21
Changed
- Peer
@feugene/granularity—>=2.0.0 <4.0.0: пакет работает и с ядром 3. Значения токенов компонентов ядра переехали в темы пакета токенов, роли и подпути ядра те же;doctor-конфиг пакета называет тему сборки явно — у каталога нет темы по умолчанию.
v2.0.12026-10-21
Fixed
- Манифест объявляет хуки компонентов (
tokens.hooks): на granum 3.7doctorприложения не выдаётtoken-fallback-onlyна точках кастомизации. Хуки берутся изtokens.jsonна сборке (withRegistryHookTokensтест-кита); хуки рамыGrChartFrame— у каждого графика её группы.
v2.0.02026-10-19
Changed
- Peer
@feugene/granum—>=3.0.0 <4.0.0,@feugene/granularity—>=2.0.0 <3.0.0. Ядро 2 — провайдер granum 3 (манифест формата 3, контракт версии 2) с темой из@feugene/granularity-tokens, и спутник объявляет те же мажоры: с ядром 1 на granum 2 он не соберётся.
Fixed
- Холст графика перечитывает цвета и при смене режима острова. Кеш резолва цветов
сбрасывался только по теме поддерева
GrConfigProvider; режим (mode) теперь сбрасывает его так же.
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.42026-10-06
Fixed
- Ось значений горизонтальных
GrChartWaterfallиGrChartBarпрореживается по ширине. Правило «влезает — или шаг крупнее», которое уже действовало на оси X вертикальных графиков, на оси значений горизонтальных не применялось: на узком холсте0 500 1,000 1,500 2,000сливалось в «0 5001,0001,5002,000». Теперь подписи, которые не помещаются, пропускаются через одну, а первая и последняя остаются. - Шаги узкого вертикального
GrChartWaterfallне сжимаются в огрызки. На 210px пять коротких подписей усекались до «Pr…», «V…», «C…» — двухбуквенный обрубок не называет ничего. Теперь сначала перенос на две строки; если и так какая-то подпись теряет больше, чем оставляет четыре знака, подписи встают в шахматку — соседние в разные ряды, каждой ширина двух шагов, крайним — до края холста. Усечённая подпись держит не меньше четырёх знаков, полный текст — в<title>.
v1.0.32026-10-06
Fixed
- Пустой график держит заданную
height. Заглушка «нет данных» сжимала область построения доmin(height, 8rem):GrChartAreaс:height="260"занимал с данными 260px, а на периоде без данных — 128px, и карточка вокруг прыгала (скелет загрузки высоту держал). Теперь данные, загрузка и пустота —series: []илиempty— занимают однуheightу всех графиков на общей раме:GrChartArea,GrChartBar,GrChartLine,GrChartPie,GrChartRadar,GrChartFunnel,GrChartHeatmap,GrChartWaterfall,GrChartBullet. Хук--gr-chart-frame-empty-heightостался — по умолчанию он равенheightи сжимает заглушку, если его задать; вышеheightона по-прежнему не растёт. - Подпись оси значений не срезается краем холста. Отступ под ось считался по
отформатированной подписи, но оценка ширины была уже настоящей: цифры шли по
0.55 кегля, «1» — по 0.32, «%» — по 0.68, тогда как в Inter, первом шрифте
--gr-font-ui, это 0.6–0.65, 0.41 и 0.98. В итогеyTickFormatс «100%» получал на ~6px меньше, и подпись читалась как «l00%». Оценка (estimateTextWidth) теперь ошибается вверх: классы символов — потолок по шрифтам стека (Inter, системный, Arial/Helvetica), отдельно цифры и знаки валют, отдельно самые широкие (%,m,M,W,Ж,Ш…), заглавные — по регистру, в том числе кириллица. Поверх оценки — запас в 2px. Касается левой и правой (dualAxis) оси значений, подписей оси X и всех графиков на общей раме. - Имена категорий горизонтального
GrChartBarчитаются целиком. Колонка подписей была ограничена 96px на любом холсте, и «Delivered after the promised date» на графике в 550px превращалась в «Delivered af…», хотя полосам места хватало с избытком. Теперь потолок — 40% ширины области построения (но не меньше 96px), многоточие появляется только за ним, полное имя остаётся в<title>, тултипе и скрытой таблице. Так же считаются подписи шагов горизонтальногоGrChartWaterfallи строкGrChartHeatmap; строка теплокарты шире потолка теперь кончается многоточием с полным текстом в<title>, а не уезжает за край холста. - Подписи колонок
GrChartHeatmapне налезают друг на друга. Подписи стояли по центру ячеек целиком при любой ширине: в матрице шириной 213px с колонками «Starter», «Team», «Business» ячейки по 31px, и подписи сливались в «StarterTeamBusiness». Теперь подпись, которая не помещается в ячейку, усекается многоточием (полный текст — в<title>), пока от неё остаются хотя бы три знака; дальше ряд прореживается с первой и последней колонкой, и каждая подпись занимает место только до середины пути к соседям. Имя строки «Recurring invoices» больше не срезается краем холста — это часть правки оценки ширины выше. - Подписи оси X не налезают друг на друга. Число делений выбирала шкала, а
ширина подписей в выбор не входила:
GrChartLineна карточке в 250px с двадцатью пятью получасами категориями рисовал «00:0030:0001:00…», месяцы — «NoDecJanFebMar…», даты помесячно — «Jan 2026Apr 2026Jul 2026Oct 2026». Теперь рама после выбора делений проверяет подписи по оценке ширины и, если соседние сталкиваются, показывает каждуюk-ю с первой и последней — на любой шкале: категориальной, временной и числовой. Сетка остаётся на всех делениях. КасаетсяGrChartLine,GrChartArea,GrChartBarи вертикальногоGrChartWaterfall. xTickCountработает у категориальной оси — как потолок числа подписей (не задан — двенадцать, как прежде). Умолчание пропа уGrChartLine,GrChartAreaиGrChartBarтеперьundefined; для числовой и временной оси это по-прежнему шесть делений.- Ось времени не схлопывается в одно деление. Лестница шагов прыгала с
квартала сразу на год, и
xTickCount: 4на одиннадцати месяцах давал одно деление «Dec». В лестнице появились шаги в 2 и 6 месяцев, а ступень выбирается по настоящему числу делений после выравнивания: не большеxTickCountи не меньше двух, если диапазон их вмещает. - Слот
#centerуGrChartPieможно поставить в центр. Слот рисуется внутри холста, а получал толькоtotalиformattedTotal: своё SVG («92%» и «on time» вместо суммы) ложилось в начало координат холста, а не в дырку. Теперь слот получает и геометрию:cx,cy,innerRadius,valueFont,labelFont— по ним стоит и содержимое по умолчанию. Пример — на странице компонента.formattedTotalформатируется поvalueFormat, как и раньше. - Ось значений
GrChartWaterfall— по накоплениям, а не по шагам. Ряд рамы нёс собственные значения шагов, и дельты попадали в домен: у отчёта о прибылях 1240 → −410 → 830 → … ось уходила до −500, у складского моста — до −1000, хотя накопление нигде не опускалось ниже нуля. Теперь стороны домена — основания и вершины столбцов вместе с нулём;yDomainпотребителя сильнее. - С
yDomain, чей низ выше нуля, столбцы моста не вылезают за область. Итоговый столбец от нуля уходил под ось поверх подписей «Start of Sep», «End of Sep». Теперь концы столбцов прижимаются к краю домена — обрыв виден, — а соединители и нулевые шаги вне домена не рисуются. - Каждый шаг моста назван, и подписи не налезают. Подписи шагов стояли
целиком: восемь шагов на 510px и пять на 210px сливались. Прореживать их, как
у категорий, нельзя — мост без имени шага не прочитать, — поэтому рама в
режиме
xLabelFit: 'wrap'переносит подпись по словам на две строки, дальше усекает её многоточием с<title>; нижнее поле растёт на строку. Все шаги подписаны и сверх двенадцати. - Горизонтальный мост оставляет место под последнюю подпись оси значений — «2,000» больше не срезается до «2,00» краем холста, как уже было у горизонтальных столбцов.
- Паутина
GrChartRadarне отдаёт радиус подписям. Отступ под самую длинную подпись резервировался с каждой стороны: в карточке 213×260 с осями «System design», «Go», «SQL», «On-call», «Mentoring» паутина сжималась до 25px под наползающим текстом, а приaxis-scale="per-axis"(«Orders a day · 200») пропадала совсем. Теперь радиус — наибольший, при котором каждая подпись помещается со своей стороны, но не меньше половины от возможного; имя шире четверти холста переносится на две строки, дальше — многоточие с полным текстом в<title>. Потолок оси приper-axisстоит второй строкой («max 200») и не усекается. Подписи колец переехали с первой спицы на биссектрису между первой и второй: внешнее кольцо налезало на имя верхней оси. - Гидрация радара и круга без расхождений. Координаты из тригонометрии
писались полным числом, и сервер с браузером расходились в последнем знаке
(
229.37383539249433против…436). Теперь спицы, кольца, вершины, дуги, выноски и центр круга идут черезsvgCoordс двумя знаками. - Подсказка графика прячется, когда точка уехала из вида. Курсор, поставленный
программно (
v-model:active-indexу пары графиков), оставлял подсказку прижатой к краю вьюпорта поверх чужого содержимого, а до первого расчёта позиции — в левом верхнем углу. Рама включаетhideWhenDetachedуuseFloatingядра; работает с ядром 1.0.10 и новее. - Воронка подписывает ступени именами.
GrChartFunnelне рисовал имён ступеней вовсе — какая полоса что значит, знали только тултип и скрытая таблица. Теперь у вертикали имена стоят колонкой слева (до 40% ширины, не уже 96px), у горизонтали — строкой под ступенями; длинное имя кончается многоточием с полным текстом в<title>. - Подпись значения воронки не пропадает на узкой ступени. Подпись, которая
не помещалась внутри, не рисовалась: у воронки 12400 → 3180 → 1420 → 612 с
labels="share-first"последняя ступень оставалась без «5%», у 940 → 1360 → 410 → 0 пропадали «410» и обещанный документацией «0». Теперь такая подпись стоит рядом со ступенью — справа от её середины у вертикали, над ней у горизонтали — цветом подписи рамы. tooltip: falseпрячет только панель. Флаг выключал всё слежение за указателем: график с:tooltip="false"в паре на одномv-model:active-indexне двигал курсор под мышью, не излучалupdate:activeIndexиpointHover— синхронизация шла только в одну сторону. Теперь курсор, активные марки, вертикаль и события работают, пока график интерактивен; картинкой его делает толькоinteractive: false. Поведение описано в JSDoc пропаtooltipу всех графиков.- Появились описания у пропов, событий и слотов всех графиков, которые в API,
подсказках IDE и на портале были пустыми: у общих пропов (
height,yDomain,includeZero,yDomainRight,yTickFormatRight,valueFormatRight,xTickCount,yTickCount,xTickFormat,yTickFormat,valueFormat,curve,showPoints,showGrid,showLegend,legendPosition,tooltip,loading,empty,emptyText,dataTable,size,locale,ariaLabel,ariaDescription) и у своих —minиorientationбуллета,stagesворонки,xLabels,yLabelsи цветов шкалы теплокарты,variantкруга и спарклайна,fillрадара,steps,showConnectorsиbarRadiusмоста; у событийupdate:*,*Click,*Hover,legendToggleи слотовtooltip,legend,empty,header.
Более ранние версии
Тела этих релизов не показываются: лента целиком весит больше, чем страница имеет право весить. Файл в репозитории всегда полон.
v1.0.22026-10-06v1.0.12026-09-29v1.0.02026-09-28v0.11.02026-08-30v0.10.12026-08-27v0.10.02026-08-27v0.9.02026-08-20v0.8.12026-08-20v0.8.02026-08-20v0.7.02026-08-19v0.6.02026-08-19v0.5.22026-08-19v0.5.12026-08-18v0.5.02026-08-18v0.4.02026-08-17v0.3.02026-08-14v0.2.02026-08-13