@feugene/granularity 0.38.0 → 0.39.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -86,12 +86,51 @@ For a finer setup take the layers apart — `@feugene/granularity/styles/tokens.
86
86
  preset. There is no per-component stylesheet to import: a component that has CSS of its own imports it
87
87
  from its own chunk, so a granular import already brings everything it needs.
88
88
 
89
+ ## Granular imports, in numbers
90
+
91
+ <!-- entry-sizes:generated:start lang=en -->
92
+ | What you import | gzip | of the barrel |
93
+ | --- | ---: | ---: |
94
+ | the whole package from the root | 542.9 kB | 100 % |
95
+ | the lightest component — `GrButtonGroup` | 1.8 kB | < 1 % |
96
+ | the median component — `GrNavbar` | 15.4 kB | 3 % |
97
+ | the 5 heaviest together | 171.1 kB | 32 % |
98
+
99
+ These numbers **do not add up**: shared code is counted again in every row but paid for once, which is why
100
+ the set is shown as a union rather than a sum. They are an upper bound — the gzip of everything a subpath
101
+ pulls out of `dist`, before the application bundler shakes it further and minifies it again.
102
+
103
+ The weight of every component — [`docs/entry-sizes.md`](./docs/entry-sizes.md).
104
+ <!-- entry-sizes:generated:end -->
105
+
106
+ ## The rest of the family
107
+
108
+ The core ships the general-purpose components. Anything that carries a heavy dependency, belongs to a
109
+ domain of its own, or is needed by a minority of consumers lives in a companion package with a `peer`
110
+ on this one — the core stays lean, and you install only what you reach for.
111
+
112
+ <!-- ecosystem:generated:start -->
113
+ | Package | Version | What it adds |
114
+ | --- | --- | --- |
115
+ | [`@feugene/granularity-charts`](../granularity-charts) | 0.10.1 | Charts — own SVG, zero dependencies, drawn with theme tokens. |
116
+ | [`@feugene/granularity-chrono`](../granularity-chrono) | 0.10.0 | Calendar, date and time components — no third-party date widget, no date library. |
117
+ | [`@feugene/granularity-dashboard`](../granularity-dashboard) | 0.6.0 | Widget grid — drag, resize, breakpoints and layout persistence, zero dependencies. |
118
+ | [`@feugene/granularity-datasource`](../granularity-datasource) | 0.1.2 | List state: sorting, filters, paging, URL sync and race-free fetching behind one composable. |
119
+ | [`@feugene/granularity-devtools`](../granularity-devtools) | 0.3.1 | Vue DevTools panel — where a prop value came from, the overlay layer stack and design-system warnings. |
120
+ | [`@feugene/granularity-editor`](../granularity-editor) | 0.3.1 | Rich-text editing: a TipTap-backed GrRichText field with a design-system toolbar. |
121
+ | [`@feugene/granularity-forms-schema`](../granularity-forms-schema) | 0.4.0 | Schema-driven forms — zod and JSON Schema into real form fields, zero dependencies. |
122
+ | [`@feugene/granularity-media`](../granularity-media) | 0.7.1 | Media components: image cropping, camera capture, code scanning and video playback. |
123
+ | [`@feugene/granularity-test-kit`](../granularity-test-kit) | 0.8.1 | Test gates for @feugene/granularity design-system packages — token, registry and defaults contracts as reusable factories. |
124
+ | [`@feugene/unplugin-granularity`](../unplugin-granularity) | 0.7.1 | unplugin-vue-components resolver — granular auto-import for components and directives. |
125
+ <!-- ecosystem:generated:end -->
126
+
89
127
  ## Documentation
90
128
 
91
129
  - [`docs/README.md`](./docs/README.md) — overview and documentation map
92
130
  - [`docs/installation.md`](./docs/installation.md) — installation, public entrypoints, and adoption strategies
93
131
  - [`docs/styling.md`](./docs/styling.md) — style layers, themes, and import order
94
132
  - [`docs/tokens.md`](./docs/tokens.md) — design token reference (generated from `tokens/*.json`)
133
+ - [`docs/entry-sizes.md`](./docs/entry-sizes.md) — the weight of every component as a subpath (generated from the build)
95
134
  - [`docs/theming.md`](./docs/theming.md) — building a custom theme (roles, contrast rules, wiring)
96
135
  - [`docs/keyboard.md`](./docs/keyboard.md) — keyboard contract per component
97
136
  - [`docs/overlays.md`](./docs/overlays.md) — overlay contract: portal, layer stack, Esc, `inert`, focus
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://raw.githubusercontent.com/JetBrains/web-types/master/schema/web-types.json",
3
3
  "name": "@feugene/granularity",
4
- "version": "0.38.0",
4
+ "version": "0.39.0",
5
5
  "framework": "vue",
6
6
  "js-types-syntax": "typescript",
7
7
  "description-markup": "markdown",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@feugene/granularity",
3
3
  "description": "Granularity design system package with Vue 3 components, consumed via the `@feugene/unocss-preset-granular` preset.",
4
- "version": "0.38.0",
4
+ "version": "0.39.0",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "author": {
7
7
  "name": "Evgeniy Fureev",
@@ -608,7 +608,7 @@
608
608
  "@antfu/eslint-config": "^9.3.0",
609
609
  "@feugene/fint-i18n": "^0.7.0",
610
610
  "@feugene/granularity-test-kit": "^0.8.1",
611
- "@feugene/unocss-preset-granular": "^0.13.0",
611
+ "@feugene/unocss-preset-granular": "^0.15.0",
612
612
  "@floating-ui/dom": "^1.8.0",
613
613
  "@iconify-json/lucide": "^1.2.126",
614
614
  "@types/node": "^25.9.5",
@@ -629,15 +629,17 @@
629
629
  "vue-tsc": "^3.3.11"
630
630
  },
631
631
  "scripts": {
632
- "build": "vite build && gr-check-dist-dev-guard && node scripts/check-dist-no-tests.mjs && node scripts/generate-web-types.mjs && vue-tsc -p tsconfig.build.json && node scripts/check-dist-exports.mjs",
632
+ "build": "vite build && gr-check-dist-dev-guard && node scripts/check-dist-no-tests.mjs && node scripts/generate-web-types.mjs && vue-tsc -p tsconfig.build.json && node scripts/check-dist-exports.mjs && node scripts/check-entry-isolation.mjs",
633
633
  "check:messages": "fint-i18n-check-messages src/i18n/locales",
634
634
  "dev": "vite build --watch",
635
- "doctor": "granular doctor ./granular.options.mjs --strict",
635
+ "doctor": "node ../../scripts/granular-doctor.mjs ./granular.options.mjs",
636
636
  "generate:registry": "node scripts/generate-registry.mjs",
637
637
  "generate:tokens": "node --experimental-strip-types scripts/generate-tokens.mjs",
638
638
  "lint": "eslint . --cache",
639
639
  "lint:fix": "eslint . --cache --fix",
640
- "sizes": "node scripts/report-entry-sizes.mjs",
640
+ "sizes": "node ../../scripts/report-entry-sizes.mjs .",
641
+ "sizes:docs": "node ../../scripts/generate-entry-sizes.mjs .",
642
+ "isolation": "node scripts/check-entry-isolation.mjs",
641
643
  "test": "vitest --config vitest.config.ts",
642
644
  "test:coverage": "vitest run --config vitest.config.ts --coverage",
643
645
  "test:run": "vitest run --config vitest.config.ts",