@feugene/granularity-dashboard

  • С компонентами
  • релизов: 14
  • v1.1.0

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

тег ядра v1.1.1

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

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

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.42026-10-07

Fixed

  • GrDashboardToolbar на телефоне не вылезает за край. Группа действий («Reset layout», «Edit layout» и #end) не переносилась: на 390px она занимала 301px при 274px доступных, и панель вылезала на 27px. Теперь обе группы переносятся внутри себя, и действия уходят на вторую строку.

v1.0.32026-10-06

Fixed

  • Перенос между дашбордами не уводит приёмник из-под указателя. Как только жест становился переносом, источник прятал виджет и уплотнялся: у сеток одна под другой всё ниже, вместе с приёмником, подъезжало под указателем, и бросок приходился мимо. Теперь источник держит место виджета подложкой, пока перенос не решился, и уплотняется только после приземления.
  • Исход переноса решает одна точка. Приёмник ронял виджет по последнему кадру, а источник решал по точке отпускания: сдвинься страница между ними — виджет оказывался в обеих сетках или ни в одной. Теперь приёмником считается тот, что под указателем в момент отпускания, и источник убирает виджет только тогда, когда приёмник его действительно принял (release возвращает это).
  • Сессия переноса всегда снимается. Призрак, спрятанный виджет и слушатель Esc сбрасываются и тогда, когда обработчик приёмника упал на броске; отпускание мимо, Esc и pointercancel возвращают виджет на место.
  • Слот #item у GrDashboardPalette отдаёт add. Своя плитка рисовала свою кнопку «Добавить» со своим обработчиком: эмит add не случался, и «добавлено» скринридеру не звучало. Теперь add() из слота — тот же путь, что у встроенной кнопки, с учётом disabled.

Documentation

  • Появились описания у пропов, событий, слотов и методов GrDashboard, GrDashboardItem, GrDashboardItemSettings, GrDashboardPalette и GrDashboardToolbar, которые в API и на портале были пустыми.

v1.0.22026-10-06

Changed

  • Safelist компонентов пуст. Все записи лежали в коде целыми литералами — в шаблонах и .ts-хелперах, включая раму GrDashboardFrame. granum извлекает такие классы сам, обходя от входа компонента все его чанки, общие включительно, и вычищал записи из манифеста как уже извлечённые. Списки пережили UnoCSS-пресет, который общий чанк не сканировал. Набор классов доски, виджета и палитры не изменился, кроме мёртвого sr-only, — проверено сверкой манифестов по селекции каждого компонента; у тулбара и диалога настроек он сократился (ниже).
  • GrDashboardToolbar и GrDashboardItemSettings больше не тянут CSS рамы. Их safelist импортировал список рамы, тот — frameStyles.ts, и классы рамы попадали в их селекцию через этот импорт, хотя раму они не рендерят. Потребитель, выбравший один тулбар, платил за 71 лишний класс, диалог настроек — за 68. Доске, виджету и палитре рама по-прежнему приходит из их кода.
  • Удалены dashboardFrameSafelist, internal/classTokens.ts и srOnlyClass: первые два служили только спискам, а sr-only не рисовал никто — регион объявлений useAnnouncer ядра прячется инлайновым стилем.
  • Подключён гейт defineSafelistGate из test-kit: запись safelist, которая лежит целым литералом в коде компонента, он называет лишней. Нужен safelist только классу, собранному в рантайме из частей.

v1.0.12026-09-29

Гигиена сборки. Артефакт пакета не изменился — проверено побайтно.

Changed

  • libInjectCss убран из конфига сборки. Плагин вписывал в JS-чанк компонента import '../styles.css'; до granum это был единственный канал доставки стилей, а с granum тот же файл приезжает приложению через манифест — и потребитель получал два экземпляра, причём второй вне слоёв granum.* и потому сильнее всей библиотеки.

    У этого пакета компонентного CSS нет, и плагин стоял вхолостую: сборка с ним и без него совпадает побайтно, числа в docs/entry-sizes.md не сдвинулись. Убран до того, как появится первый компонент со стилями — тогда ловушка захлопнулась бы молча.

    Ядро сняло плагин при переезде на granum, granularity-editor и granularity-code — в 1.0.1, где он уже стрелял. Диагностика css-double-delivery, которая обязана была это назвать, не работала вовсе; починена в @feugene/granum 1.0.2.

  • vite-plugin-lib-inject-css убран из devDependencies: больше не импортируется.

v1.0.02026-09-28

Переезд на @feugene/granum 1.0 и первый мажор пакета.

Публичная поверхность не менялась — ломающий тут сам конвейер: peer-зависимость уезжает с @feugene/unocss-preset-granular на @feugene/granum (>=1.0.0 <2.0.0), а приложение переходит с uno.config.ts на granum.config.ts. Версия выровнена с ядром: @feugene/granularity 1.0.0.

Перед обновлением стоит прочитать руководство по переезду в granum — в частности про каскадные слои и сброс браузерных стилей, который теперь нужно импортировать в слой.

Changed

  • yarn doctor is granum doctor --strict, without a wrapper script. scripts/granum-doctor.mjs existed for two reasons and both are gone. It muted token-undefined through the monorepo’s token registry — granum 0.4.0 derives the same verdict from the code itself (a use with a fallback, a token the component assigns itself and dynamicTokens are not findings), so the registry is unnecessary. And it kept recorded debt from failing the gate — that is now --allow=<codes>. Findings across the eight packages went from 861 to 1, and that one is the deliberate !important on the drag cursor in GrTransfer, recorded through --allow.
  • Safelists in the manifests shrank from 3479 entries to 430 (zero in every companion): granum drops entries that static extraction already covers. Nothing in the sources changed and the CSS is byte-for-byte identical — the safelist there is derived from the component’s own class constants, and whether extraction sees a given class is decided by chunking, not by the author.
  • The utility engine changed: @feugene/granum-engine-wind ^0.4.0 instead of @feugene/granum-engine-mini. It vendors preset-wind3 rather than preset-mini, so the vocabulary gained border-collapse, list-none, touch-none, table-fixed and scroll-p* — utilities that existed neither in preset-mini nor in the former extra rules, which is why a class in the markup silently produced no CSS. The package dialect is now unocss/preset-wind3+granum@66, and the peer on the core moved to >=0.3.0 <1.0.0. A consumer swaps the pair in dev dependencies and replaces miniEngine() with windEngine() in granum.config.*.
  • [touch-action:none] became the touch-none utility in the shared board frame: the arbitrary value was there because the utility was missing from the vocabulary.
  • The package is built by @feugene/granum, not by the @feugene/unocss-preset-granular preset. The dist layout and the component entries are driven by the granumProvider({ provider, engine: miniEngine(), entries }) plugin: it builds them from the provider registry, extracts the classes and the consumed tokens by walking the bundle graph, and writes a machine-generated granum.manifest.json next to dist. The package’s own build.lib, granularChunkFileNames and hand-written component entries are gone from vite.config.ts.
  • The manifest is exported as ./granum.manifest.json. An application resolves it through exactly that subpath — without the export the package’s provider cannot be wired up. granum never scans node_modules: the component classes are computed when the package is built.
  • The peer changed: @feugene/granum >=0.2.0 <1.0.0 instead of the preset. The utility engine comes from the application (@feugene/granum-engine-mini sits in the package’s dev dependencies), while the package declares a vocabulary dialect in the manifest — unocss/preset-mini+granum@66, the vocabulary its component classes are written against. An application running an engine of a different vocabulary gets provider-dialect-mismatch and every lost class listed by name instead of silently half-drawn components.
  • The descriptor contract was renamed without a change of meaning. defineGranularComponent → defineGranumComponent, defineGranularProvider → defineGranumProvider, imported from @feugene/granum/contract. Donors are declared as strings (dependencies: ['@feugene/granularity']) rather than instances: an instance would pull the donor into the graph in object form and make the application scan its dist instead of reading the manifest. packageBaseUrl is gone — the manifest’s directory is the base — so granular-provider/node is now a plain alias of the browser entry.
  • granular.options.mjs was replaced by granum.config.mjs, and yarn doctor runs granum doctor against the package’s manifests.
  • useGrDashboardContext and GR_DASHBOARD_KEY moved from components/GrDashboard/context.ts to components/shared/context.ts. Every companion of the board reads them, and an import from another component’s directory counts as a declared edge — declaring it would have made a consumer of the toolbar pay for the board’s CSS and safelist in full. The public surface is unchanged.

v0.6.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/granularity now produces a peer conflict instead of silence. The fix is to move the core up; nothing in this package’s own API changed.

v0.5.12026-08-22

Fixed

  • The grabbed drag handle used a tone as a foreground colour. --gr-primary gives 3.70 against the dark theme’s surfaces — below AA — so the handle dimmed exactly while being dragged. It uses --gr-primary-text now.

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

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

  • v0.5.02026-08-20
  • v0.4.02026-08-20
  • v0.3.02026-08-19
  • v0.2.22026-08-19
  • v0.2.12026-08-18
  • v0.2.02026-08-18

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