Skip to content

1.0.19 ​

Patch Changes ​

  • Updated dependencies [366ae17]
    • @grundtone/design-system@2.15.0
    • @grundtone/vue@2.15.0

1.0.18 ​

Patch Changes ​

  • Updated dependencies [7e77c0b]
    • @grundtone/design-system@2.14.0
    • @grundtone/vue@2.14.0

1.0.17 ​

Patch Changes ​

  • Updated dependencies [dbd9c2c]
    • @grundtone/design-system@2.13.0
    • @grundtone/vue@2.13.0

1.0.16 ​

Patch Changes ​

  • Updated dependencies [fc456bf]:
    • @grundtone/design-system@2.12.0
    • @grundtone/vue@2.12.0
    • @grundtone/utils@2.12.0
    • @grundtone/icons@2.2.0

1.0.15 ​

Patch Changes ​

  • Updated dependencies [c37762e]:
    • @grundtone/design-system@2.11.0
    • @grundtone/vue@2.11.0

1.0.14 ​

Patch Changes ​

  • Updated dependencies [200846b]:
    • @grundtone/design-system@2.10.0
    • @grundtone/vue@2.10.0

1.0.13 ​

Patch Changes ​

  • Updated dependencies [009ab18]:
    • @grundtone/vue@2.9.1
    • @grundtone/icons@2.1.2

1.0.12 ​

Patch Changes ​

  • Updated dependencies [efee6cf]:
    • @grundtone/design-system@2.9.0
    • @grundtone/vue@2.9.0
    • @grundtone/icons@2.1.1

1.0.11 ​

Patch Changes ​

  • Updated dependencies [ccb6a4e, 8fc757a, 9cf5217]:
    • @grundtone/design-system@2.8.0
    • @grundtone/vue@2.8.0
    • @grundtone/utils@2.8.0 outline: [2, 3]

1.0.10 ​

Patch Changes ​

  • Updated dependencies [f41cfa6]:
    • @grundtone/design-system@2.7.1

1.0.9 ​

Patch Changes ​

  • Updated dependencies [98a30f3]:
    • @grundtone/design-system@2.7.0

1.0.8 ​

Patch Changes ​

  • Updated dependencies [fd7b9e7]:
    • @grundtone/design-system@2.6.1

Changelog ​

All notable changes to Grundtone are documented here. This page is generated automatically from changesets.


Unreleased ​

Changes that are merged and will be included in the next version.

patchpatchpatch
Align @typescript-eslint/parser on ^8.71.1 in all four manifests.

The three packages were pinned at ^6.21.0 while the root was already at ^8.65.0 — two major lines of the same lint parser in one workspace. This is the split being closed, not just a version bump.

No consumer-visible change: the dependency is a devDependency in each package, so nothing in the published tarballs changes behaviour. The changeset is here because the gate reasons at path level and package.json ships — deliberately, since comparing against the files field was wrong in the dangerous direction (dist is built from src). A patch release is the honest way past it; an empty changeset is the thing that gate exists to prevent.
Affected packages
  • @grundtone/corePatch
  • @grundtone/iconsPatch
  • @grundtone/utilsPatch
patch
Bump handlebars to ^4.7.10 — a critical advisory (>=4.0.0 <=4.7.9) with a patch in 4.7.10.

This one is consumer-relevant, unlike most dependency bumps: handlebars is a runtime template engine declared directly in @grundtone/email, so the vulnerable code was in the published tarball's dependency closure, not merely in our tooling. Raised on the declared range rather than with an override, because an override on a direct dependency hides the real version from anyone reading the manifest.
Affected packages
  • @grundtone/emailPatch
minor
GTRichText: add fromHTML(html, features?) for migrating stores that hold HTML today.

Convert once on load and own the JSONContent afterwards. The component deliberately has no html prop — two inputs to the same state would have to decide which wins when both are set, and that decision is a future bug report rather than a feature.

🔴 fromHTML is not a sanitizer and must not be used as one. It is a parser against a schema: anything with no place in the extension set has no place in the resulting document, so the effect looks like an allowlist while the mechanism is "unknown node is not in the schema". Extend the extension set with anything that accepts arbitrary attributes and that property changes — do not remove a sanitizer behind this function on the grounds that "the converter cleans it".

The extension set is now built in one place and shared by the editor and the converter, so a document the converter accepts cannot be one the editor's schema drops on first open.
Affected packages
  • @grundtone/vueMinor

Released ​

3.2.32026-09-28
#### @grundtone/core

Patch Changes



137bf22 Thanks @dependabot! - Bump development dependencies (#233): @vitejs/plugin-vue 6.0.8→6.0.9, eslint 10.10.0→10.11.0, tsx 4.23.13→4.23.15, @vue/test-utils 2.5.0→2.5.1 and the rest of the dev-remainder group.

No source file changes. Written because the repo's own gate requires a changeset from every published package whose package.json is touched, and Dependabot does not write one — not because these bumps are known to alter what consumers receive.

🔴 Whether they DO alter it is unmeasured here. The honest test is whether the packed tarball changes byte for byte, which is the instrument this repo already uses for the licence text; it does not exist for this question yet. Until it does, a changeset is the conservative answer: a version nobody needed costs a patch number, a missing one ships a change with no record.

#### @grundtone/design-system

Patch Changes



137bf22 Thanks @dependabot! - Bump development dependencies (#233): @vitejs/plugin-vue 6.0.8→6.0.9, eslint 10.10.0→10.11.0, tsx 4.23.13→4.23.15, @vue/test-utils 2.5.0→2.5.1 and the rest of the dev-remainder group.

No source file changes. Written because the repo's own gate requires a changeset from every published package whose package.json is touched, and Dependabot does not write one — not because these bumps are known to alter what consumers receive.

🔴 Whether they DO alter it is unmeasured here. The honest test is whether the packed tarball changes byte for byte, which is the instrument this repo already uses for the licence text; it does not exist for this question yet. Until it does, a changeset is the conservative answer: a version nobody needed costs a patch number, a missing one ships a change with no record.

  • Updated dependencies
[137bf22]: - @grundtone/core@3.2.3

#### @grundtone/icons

Patch Changes



137bf22 Thanks @dependabot! - Bump development dependencies (#233): @vitejs/plugin-vue 6.0.8→6.0.9, eslint 10.10.0→10.11.0, tsx 4.23.13→4.23.15, @vue/test-utils 2.5.0→2.5.1 and the rest of the dev-remainder group.

No source file changes. Written because the repo's own gate requires a changeset from every published package whose package.json is touched, and Dependabot does not write one — not because these bumps are known to alter what consumers receive.

🔴 Whether they DO alter it is unmeasured here. The honest test is whether the packed tarball changes byte for byte, which is the instrument this repo already uses for the licence text; it does not exist for this question yet. Until it does, a changeset is the conservative answer: a version nobody needed costs a patch number, a missing one ships a change with no record.

#### @grundtone/nuxt

Patch Changes



137bf22 Thanks @dependabot! - Bump development dependencies (#233): @vitejs/plugin-vue 6.0.8→6.0.9, eslint 10.10.0→10.11.0, tsx 4.23.13→4.23.15, @vue/test-utils 2.5.0→2.5.1 and the rest of the dev-remainder group.

No source file changes. Written because the repo's own gate requires a changeset from every published package whose package.json is touched, and Dependabot does not write one — not because these bumps are known to alter what consumers receive.

🔴 Whether they DO alter it is unmeasured here. The honest test is whether the packed tarball changes byte for byte, which is the instrument this repo already uses for the licence text; it does not exist for this question yet. Until it does, a changeset is the conservative answer: a version nobody needed costs a patch number, a missing one ships a change with no record.

  • Updated dependencies
[137bf22]: - @grundtone/design-system@3.2.3 - @grundtone/core@3.2.3 - @grundtone/icons@3.2.3 - @grundtone/utils@3.2.3 - @grundtone/vue@3.2.3

#### @grundtone/utils

Patch Changes



137bf22 Thanks @dependabot! - Bump development dependencies (#233): @vitejs/plugin-vue 6.0.8→6.0.9, eslint 10.10.0→10.11.0, tsx 4.23.13→4.23.15, @vue/test-utils 2.5.0→2.5.1 and the rest of the dev-remainder group.

No source file changes. Written because the repo's own gate requires a changeset from every published package whose package.json is touched, and Dependabot does not write one — not because these bumps are known to alter what consumers receive.

🔴 Whether they DO alter it is unmeasured here. The honest test is whether the packed tarball changes byte for byte, which is the instrument this repo already uses for the licence text; it does not exist for this question yet. Until it does, a changeset is the conservative answer: a version nobody needed costs a patch number, a missing one ships a change with no record.

  • Updated dependencies
[137bf22]: - @grundtone/core@3.2.3

#### @grundtone/vue

Patch Changes



137bf22 Thanks @dependabot! - Bump development dependencies (#233): @vitejs/plugin-vue 6.0.8→6.0.9, eslint 10.10.0→10.11.0, tsx 4.23.13→4.23.15, @vue/test-utils 2.5.0→2.5.1 and the rest of the dev-remainder group.

No source file changes. Written because the repo's own gate requires a changeset from every published package whose package.json is touched, and Dependabot does not write one — not because these bumps are known to alter what consumers receive.

🔴 Whether they DO alter it is unmeasured here. The honest test is whether the packed tarball changes byte for byte, which is the instrument this repo already uses for the licence text; it does not exist for this question yet. Until it does, a changeset is the conservative answer: a version nobody needed costs a patch number, a missing one ships a change with no record.

  • Updated dependencies
[137bf22]: - @grundtone/design-system@3.2.3 - @grundtone/core@3.2.3 - @grundtone/icons@3.2.3 - @grundtone/utils@3.2.3
3.2.22026-09-24
#### @grundtone/core

Patch Changes



8930bbe Thanks @allanasp! - Ship the MIT licence text inside the package itself.

Every package already declared license: MIT, and npm has served that to everyone installing them — but the text existed nowhere in the repository, and the README's licence badge linked to a file that answered 404. npm includes LICENSE from the package directory only; it does not reach up to a monorepo root, so a root-level file would satisfy a human browsing GitHub and nobody who installs the package.

No terms change: this makes the grant that was already published readable in the artefact that carries it.

#### @grundtone/design-system

Patch Changes



8930bbe Thanks @allanasp! - Ship the MIT licence text inside the package itself.

Every package already declared license: MIT, and npm has served that to everyone installing them — but the text existed nowhere in the repository, and the README's licence badge linked to a file that answered 404. npm includes LICENSE from the package directory only; it does not reach up to a monorepo root, so a root-level file would satisfy a human browsing GitHub and nobody who installs the package.

No terms change: this makes the grant that was already published readable in the artefact that carries it.

  • Updated dependencies
[8930bbe]: - @grundtone/core@3.2.2

#### @grundtone/icons

Patch Changes



8930bbe Thanks @allanasp! - Ship the MIT licence text inside the package itself.

Every package already declared license: MIT, and npm has served that to everyone installing them — but the text existed nowhere in the repository, and the README's licence badge linked to a file that answered 404. npm includes LICENSE from the package directory only; it does not reach up to a monorepo root, so a root-level file would satisfy a human browsing GitHub and nobody who installs the package.

No terms change: this makes the grant that was already published readable in the artefact that carries it.

#### @grundtone/nuxt

Patch Changes



8930bbe Thanks @allanasp! - Ship the MIT licence text inside the package itself.

Every package already declared license: MIT, and npm has served that to everyone installing them — but the text existed nowhere in the repository, and the README's licence badge linked to a file that answered 404. npm includes LICENSE from the package directory only; it does not reach up to a monorepo root, so a root-level file would satisfy a human browsing GitHub and nobody who installs the package.

No terms change: this makes the grant that was already published readable in the artefact that carries it.

  • Updated dependencies
[8930bbe]: - @grundtone/core@3.2.2 - @grundtone/design-system@3.2.2 - @grundtone/icons@3.2.2 - @grundtone/utils@3.2.2 - @grundtone/vue@3.2.2

#### @grundtone/utils

Patch Changes



8930bbe Thanks @allanasp! - Ship the MIT licence text inside the package itself.

Every package already declared license: MIT, and npm has served that to everyone installing them — but the text existed nowhere in the repository, and the README's licence badge linked to a file that answered 404. npm includes LICENSE from the package directory only; it does not reach up to a monorepo root, so a root-level file would satisfy a human browsing GitHub and nobody who installs the package.

No terms change: this makes the grant that was already published readable in the artefact that carries it.

  • Updated dependencies
[8930bbe]: - @grundtone/core@3.2.2

#### @grundtone/vue

Patch Changes



8930bbe Thanks @allanasp! - Ship the MIT licence text inside the package itself.

Every package already declared license: MIT, and npm has served that to everyone installing them — but the text existed nowhere in the repository, and the README's licence badge linked to a file that answered 404. npm includes LICENSE from the package directory only; it does not reach up to a monorepo root, so a root-level file would satisfy a human browsing GitHub and nobody who installs the package.

No terms change: this makes the grant that was already published readable in the artefact that carries it.

  • Updated dependencies
[8930bbe]: - @grundtone/core@3.2.2 - @grundtone/design-system@3.2.2 - @grundtone/icons@3.2.2 - @grundtone/utils@3.2.2
3.2.12026-09-20
#### @grundtone/nuxt

Patch Changes



f5ec104 Thanks @allanasp! - Declare @grundtone/utils as a dependency, so the auto-imported validators reach consumers.

The module registers required, email, cpr, cvr and the other validators from: '@grundtone/utils', but declared no dependency on that package. Nuxt resolves an auto-import's from against the consumer's module directories, and when it cannot, it skips the import silently: a build printed [NUXT_B6005] Could not resolve @grundtone/utils used by the auto-import required on stdout and stayed green. Measured on the test fixture: 1 occurrence before this change, 0 after. The workspace playground could not have shown it, because it declares @grundtone/utils itself.

  • Updated dependencies
[5cf1dca]: - @grundtone/vue@3.2.1

#### @grundtone/vue

Patch Changes



5cf1dca Thanks @allanasp! - Emit type re-exports as bare specifiers, so consumers can resolve them.

The published declarations re-exported through '../../utils/src' and '../../core/src'. Neither @grundtone/utils nor @grundtone/core publishes src, so the target existed in no consumer install. Measured on a real install of 3.2.0: with skipLibCheck: false tsc reports 13 × TS2307; with skipLibCheck: true — what most consumers run — it reports nothing, and required, getSystemThemeMode, Validator, ValidationResult, IconDefinition and IconRegistry are silently any.

The declaration build now runs with a tsconfig that does not remap the @grundtone scope onto sibling sources, so the emitter writes the specifier the author typed.
3.2.02026-09-19
#### @grundtone/core

Patch Changes



90bc07d Thanks @allanasp! - createTheme() accepts the override object form again, next to a bare colour preset: { light: { colors, typography, radius, spacing, transitions } }, and the same for dark.

What changed in 3.0.0, undeclared until now: 2.22.0 accepted both forms. 3.0.0 kept only the colour preset. An override object was spread into the colour map, and every value in it resolved to the defaults. A theme built from published tokens therefore rendered the default brand, and nothing reported an error.

This patch restores the 2.22.0 behaviour. The CreateThemeOverrides type is exported again and describes that form. Partial typography and transitions groups merge with the defaults. Bare colour presets behave exactly as in 3.0.0.

Mixed objects are read as overrides, as in 2.22.0. An object that has any of colors, typography, radius, spacing or transitions as a key, even with an undefined value, is read entirely as the override form. Colour keys at its top level are then ignored without an error: { light: { primary: '#ff0000', radius: { md: '4px' } } } keeps the radius and drops primary. Put colours under colors when you combine them with other groups.

#### @grundtone/design-system

Minor Changes



97e4bb9 Thanks @allanasp! - IBM Plex is now loaded. The typography tokens have always named IBM Plex Sans and IBM Plex Mono first, but nothing loaded them, so every consumer without a local Plex install rendered the fallback fonts. The new entry @grundtone/design-system/fonts.css declares @font-face for Plex Sans 400/500/600/700 and Plex Mono 400/500/600: Latin-1 subsets, font-display: swap, self-hosted in the package (src/fonts/ibm-plex, SIL OFL 1.1). No CDN request.

It is a separate file, not part of index.css, so bundlers that inline assets do not turn the fonts into base64 inside other CSS. @grundtone/nuxt injects it for you. Without Nuxt: import '@grundtone/design-system/fonts.css';

If you compile the SCSS yourself, set where the font files are served from: @use '@grundtone/design-system/scss/fonts' with ($font-files-url: '/fonts/ibm-plex/');

Hover utilities. hover:bg-* and hover:text-* now exist for every background and text colour utility (e.g. hover:bg-surface-alt). Until now a hover:* class compiled to nothing.

Patch Changes



  • Updated dependencies
[90bc07d]: - @grundtone/core@3.2.0

#### @grundtone/icons

Minor Changes



97e4bb9 Thanks @allanasp! - Seven navigation icons: home, folder, users, list, key, credit-card, settings, taken from Feather (MIT, see THIRD-PARTY-NOTICES.md, now included in the package) and drawn like the rest of the set.

#### @grundtone/nuxt

Minor Changes



97e4bb9 Thanks @allanasp! - The module now also injects @grundtone/design-system/fonts.css, so Nuxt apps load the self-hosted IBM Plex fonts without any configuration.

Patch Changes



c7baa0b Thanks @allanasp! - **Components and composables are registered from @grundtone/vue itself, not from its src/ folder.** Two measured defects came out of the old directory scan:

- @grundtone/vue publishes only dist and scss (3.1.0 ships 0 src files; 2.23.3 shipped 255), so ../../vue/src/... does not exist in an installed package. - A component loaded from src and a consumer's own import { useToast } from '@grundtone/vue' were two module instances. useToast keeps its state in a module-level reactive, so the toast container read one state while the app wrote the other — the toast never appeared, and nothing errored.

Component names are unchanged (all 56, prefix still applies), and GT_ICON_REGISTRY_KEY, the composables and the @grundtone/utils validators are auto-imported as before.

  • Updated dependencies
[90bc07d, 97e4bb9, 97e4bb9, 52fc360]: - @grundtone/core@3.2.0 - @grundtone/design-system@3.2.0 - @grundtone/icons@3.2.0 - @grundtone/vue@3.2.0

#### @grundtone/utils

Patch Changes



  • Updated dependencies
[90bc07d]: - @grundtone/core@3.2.0

#### @grundtone/vue

Patch Changes



52fc360 Thanks @allanasp! - Løft @tiptap/*-afhængighederne fra ^3.29.1 til ^3.31.3.

Rettelsen gælder GHSA-cp6q-959q-f8rh: @tiptap/cores mergeAttributes() behandler en egen __proto__-nøgle som en prototype-write. Fixet ligger i @tiptap/core 3.30.4.

@tiptap/core er ikke en direkte afhængighed her — den kommer via de seks @tiptap/*-pakker, som peer-pinner den EKSAKT til deres egen version. Et gulv på core alene ville derfor bryde tre eksakte peer-pins; vejen er at løfte søskendepakkerne, hvorefter core følger med.

Ingen API-ændring i @grundtone/vue. 809 tests uændret grønne.

  • Updated dependencies
[90bc07d, 97e4bb9, 97e4bb9]: - @grundtone/core@3.2.0 - @grundtone/design-system@3.2.0 - @grundtone/icons@3.2.0 - @grundtone/utils@3.2.0
3.1.02026-08-30
#### @grundtone/design-system

Minor Changes



b2a5085 Thanks @allanasp! - New GTBulkActionBar: a sticky bar that rises from the bottom of the viewport when rows are selected, carrying the actions that apply to the whole selection.

Three contracts are worth knowing before using it, each one there because the obvious alternative produces a specific failure:

- It outlives the selection. Visibility is count > 0 OR an unacknowledged receipt. On full success the consumer clears the selection — bound to the count alone, the result would vanish in the same tick it was set, and a successful action would be indistinguishable from no action. - It reserves its own space on document.body and releases it again, so the last row of the list never ends up under it. Consumers add no padding. - It never clears the selection — it emits clear. The consumer clears conditionally on the outcome so a partial success stays retryable on exactly the rows that were missed.

Also adds --blur-overlay (8px) as a foundation token for overlaid surfaces. The carousel controls, which had the value hard-coded, now reference it — two independent surfaces landing on the same physical value is what a shared token is for.

#### @grundtone/nuxt

Patch Changes



  • Updated dependencies
[bef6db7, b2a5085]: - @grundtone/vue@3.1.0 - @grundtone/design-system@3.1.0

#### @grundtone/vue

Minor Changes



b2a5085 Thanks @allanasp! - New GTBulkActionBar: a sticky bar that rises from the bottom of the viewport when rows are selected, carrying the actions that apply to the whole selection.

Three contracts are worth knowing before using it, each one there because the obvious alternative produces a specific failure:

- It outlives the selection. Visibility is count > 0 OR an unacknowledged receipt. On full success the consumer clears the selection — bound to the count alone, the result would vanish in the same tick it was set, and a successful action would be indistinguishable from no action. - It reserves its own space on document.body and releases it again, so the last row of the list never ends up under it. Consumers add no padding. - It never clears the selection — it emits clear. The consumer clears conditionally on the outcome so a partial success stays retryable on exactly the rows that were missed.

Also adds --blur-overlay (8px) as a foundation token for overlaid surfaces. The carousel controls, which had the value hard-coded, now reference it — two independent surfaces landing on the same physical value is what a shared token is for.

Patch Changes



bef6db7 Thanks @allanasp! - GTBulkActionBar: two fixes from a retrospective review.

- Reserved space is now reconciled between instances. It lives on a single custom property on document.body, and releasing it on one bar's unmount used to strip it from every other bar too — including one still on screen, whose last row then slid underneath it. The largest claim wins, and the property only returns to zero when the last bar goes. - New optional selectionKey. The receipt was discarded on a change of count, so swapping three selected rows for three others left a stale "3 of 3 moved" beside a completely fresh selection. A count cannot express identity; pass a key when your selection can change without changing size.

  • Updated dependencies
[b2a5085]: - @grundtone/design-system@3.1.0
3.0.22026-09-28
#### @grundtone/react-native

Patch Changes



137bf22 Thanks @dependabot! - Bump development dependencies (#233): @vitejs/plugin-vue 6.0.8→6.0.9, eslint 10.10.0→10.11.0, tsx 4.23.13→4.23.15, @vue/test-utils 2.5.0→2.5.1 and the rest of the dev-remainder group.

No source file changes. Written because the repo's own gate requires a changeset from every published package whose package.json is touched, and Dependabot does not write one — not because these bumps are known to alter what consumers receive.

🔴 Whether they DO alter it is unmeasured here. The honest test is whether the packed tarball changes byte for byte, which is the instrument this repo already uses for the licence text; it does not exist for this question yet. Until it does, a changeset is the conservative answer: a version nobody needed costs a patch number, a missing one ships a change with no record.

  • Updated dependencies
[137bf22]: - @grundtone/core@3.2.3 - @grundtone/icons@3.2.3 - @grundtone/utils@3.2.3
3.0.12026-08-28
#### @grundtone/nuxt

Patch Changes



  • Updated dependencies
[539ca9c]: - @grundtone/vue@3.0.1

#### @grundtone/react-native

Patch Changes



8930bbe Thanks @allanasp! - Ship the MIT licence text inside the package itself.

Every package already declared license: MIT, and npm has served that to everyone installing them — but the text existed nowhere in the repository, and the README's licence badge linked to a file that answered 404. npm includes LICENSE from the package directory only; it does not reach up to a monorepo root, so a root-level file would satisfy a human browsing GitHub and nobody who installs the package.

No terms change: this makes the grant that was already published readable in the artefact that carries it.

  • Updated dependencies
[8930bbe]: - @grundtone/core@3.2.2 - @grundtone/icons@3.2.2 - @grundtone/utils@3.2.2

#### @grundtone/vue

Patch Changes



539ca9c Thanks @allanasp! - GTIcon now warns when the icon prop contains active markup (script tags, event handlers, javascript: URLs, foreignObject or SMIL animate/set). The prop's body is rendered with v-html and is not sanitised, so binding it to user-controlled data is an XSS footgun; the name prop with a provided registry is the safe path and is unaffected.

The warning is a detector, not a defence — it does not catch every vector, and the prop's JSDoc now names it as a trust boundary rather than describing it as a way to pass custom icons.
3.0.02026-08-23
#### @grundtone/core

Major Changes



e4ae9d6 Thanks @allanasp! - grundtone 3.0.0 — develop becomes the published line.

The 2.x line was cut from main and never flowed back, so develop and npm drifted apart. Rather than port main's surface onto develop, this release accepts develop as the source of truth and declares what that costs.

BREAKING: 20 public exports and 4 export-map entry points are removed. Every one is declared in .api-removals.json with the reason beside it. Nineteen of the twenty never existed in develop; none of our three internal consumers import any of them. External consumers cannot be enumerated, which is precisely why this is a major and not a minor.

Consumers must update their dependency explicitly: ^2.x does not match 3.0.0.

@grundtone/react-native is deliberately NOT included — it sits ten minor versions behind npm on develop, and publishing it here would ship a regression wrapped in a higher number. Its fate is a separate decision.

#### @grundtone/design-system

Major Changes



e4ae9d6 Thanks @allanasp! - grundtone 3.0.0 — develop becomes the published line.

The 2.x line was cut from main and never flowed back, so develop and npm drifted apart. Rather than port main's surface onto develop, this release accepts develop as the source of truth and declares what that costs.

BREAKING: 20 public exports and 4 export-map entry points are removed. Every one is declared in .api-removals.json with the reason beside it. Nineteen of the twenty never existed in develop; none of our three internal consumers import any of them. External consumers cannot be enumerated, which is precisely why this is a major and not a minor.

Consumers must update their dependency explicitly: ^2.x does not match 3.0.0.

@grundtone/react-native is deliberately NOT included — it sits ten minor versions behind npm on develop, and publishing it here would ship a regression wrapped in a higher number. Its fate is a separate decision.

Patch Changes



  • Updated dependencies
[e4ae9d6]: - @grundtone/core@3.0.0

#### @grundtone/icons

Major Changes



e4ae9d6 Thanks @allanasp! - grundtone 3.0.0 — develop becomes the published line.

The 2.x line was cut from main and never flowed back, so develop and npm drifted apart. Rather than port main's surface onto develop, this release accepts develop as the source of truth and declares what that costs.

BREAKING: 20 public exports and 4 export-map entry points are removed. Every one is declared in .api-removals.json with the reason beside it. Nineteen of the twenty never existed in develop; none of our three internal consumers import any of them. External consumers cannot be enumerated, which is precisely why this is a major and not a minor.

Consumers must update their dependency explicitly: ^2.x does not match 3.0.0.

@grundtone/react-native is deliberately NOT included — it sits ten minor versions behind npm on develop, and publishing it here would ship a regression wrapped in a higher number. Its fate is a separate decision.

#### @grundtone/nuxt

Major Changes



e4ae9d6 Thanks @allanasp! - grundtone 3.0.0 — develop becomes the published line.

The 2.x line was cut from main and never flowed back, so develop and npm drifted apart. Rather than port main's surface onto develop, this release accepts develop as the source of truth and declares what that costs.

BREAKING: 20 public exports and 4 export-map entry points are removed. Every one is declared in .api-removals.json with the reason beside it. Nineteen of the twenty never existed in develop; none of our three internal consumers import any of them. External consumers cannot be enumerated, which is precisely why this is a major and not a minor.

Consumers must update their dependency explicitly: ^2.x does not match 3.0.0.

@grundtone/react-native is deliberately NOT included — it sits ten minor versions behind npm on develop, and publishing it here would ship a regression wrapped in a higher number. Its fate is a separate decision.

Patch Changes



  • Updated dependencies
[e4ae9d6]: - @grundtone/core@3.0.0 - @grundtone/icons@3.0.0 - @grundtone/design-system@3.0.0 - @grundtone/vue@3.0.0

#### @grundtone/react-native

Major Changes



ce52263 Thanks @allanasp! - Brings @grundtone/react-native onto the 3.x line with the rest of the family, and stops it pinning its siblings to an exact version.

It was never broken against 3.x — it builds and tests green against the 3.0 core today, and none of the five APIs it imports (createTheme, iconRegistry, resolveThemeMode, required, email) were touched by the 3.0 removals, which were confined to @grundtone/vue. The colour palette is byte-for-byte the same 39 slots in 2.22.0 and 3.0.0.

What it was, was isolated. The published 2.22.0 pinned @grundtone/core to 2.22.0 exactly, so a consumer following this package's own README — npm install @grundtone/react-native @grundtone/core — ended up with two copies of core: 3.x at the top and 2.22.0 nested underneath. It worked only because the two palettes happened to be identical. The dependencies are now workspace:^, which publishes as ^3.0.0 and lets a consumer's own 3.x satisfy them.

Patch Changes



  • Updated dependencies
[90bc07d, 97e4bb9]: - @grundtone/core@3.2.0 - @grundtone/icons@3.2.0 - @grundtone/utils@3.2.0

#### @grundtone/utils

Major Changes



e4ae9d6 Thanks @allanasp! - grundtone 3.0.0 — develop becomes the published line.

The 2.x line was cut from main and never flowed back, so develop and npm drifted apart. Rather than port main's surface onto develop, this release accepts develop as the source of truth and declares what that costs.

BREAKING: 20 public exports and 4 export-map entry points are removed. Every one is declared in .api-removals.json with the reason beside it. Nineteen of the twenty never existed in develop; none of our three internal consumers import any of them. External consumers cannot be enumerated, which is precisely why this is a major and not a minor.

Consumers must update their dependency explicitly: ^2.x does not match 3.0.0.

@grundtone/react-native is deliberately NOT included — it sits ten minor versions behind npm on develop, and publishing it here would ship a regression wrapped in a higher number. Its fate is a separate decision.

Patch Changes



  • Updated dependencies
[e4ae9d6]: - @grundtone/core@3.0.0

#### @grundtone/vue

Major Changes



e4ae9d6 Thanks @allanasp! - grundtone 3.0.0 — develop becomes the published line.

The 2.x line was cut from main and never flowed back, so develop and npm drifted apart. Rather than port main's surface onto develop, this release accepts develop as the source of truth and declares what that costs.

BREAKING: 20 public exports and 4 export-map entry points are removed. Every one is declared in .api-removals.json with the reason beside it. Nineteen of the twenty never existed in develop; none of our three internal consumers import any of them. External consumers cannot be enumerated, which is precisely why this is a major and not a minor.

Consumers must update their dependency explicitly: ^2.x does not match 3.0.0.

@grundtone/react-native is deliberately NOT included — it sits ten minor versions behind npm on develop, and publishing it here would ship a regression wrapped in a higher number. Its fate is a separate decision.

Patch Changes



  • Updated dependencies
[e4ae9d6]: - @grundtone/core@3.0.0 - @grundtone/utils@3.0.0 - @grundtone/icons@3.0.0 - @grundtone/design-system@3.0.0
2.15.02026-07-13
#### @grundtone/design-system

Minor Changes



  • 366ae17: Add Slider component
GTSlider: single and dual-thumb range input with pointer drag, keyboard navigation, ARIA slider pattern, vertical orientation, step snapping, and vanilla JS behavior.

#### @grundtone/nuxt

Patch Changes



  • Updated dependencies [366ae17]
- @grundtone/design-system@2.15.0 - @grundtone/vue@2.15.0

#### @grundtone/vue

Minor Changes



  • 366ae17: Add Slider component
GTSlider: single and dual-thumb range input with pointer drag, keyboard navigation, ARIA slider pattern, vertical orientation, step snapping, and vanilla JS behavior.

Patch Changes



  • Updated dependencies [366ae17]
- @grundtone/design-system@2.15.0
2.14.02026-07-13
#### @grundtone/design-system

Minor Changes



  • 7e77c0b: Add Image utilities, Figure, Carousel, Chart, and Error Page components
Image: .img-fluid, .img-thumbnail, .img-cover, .img-contain CSS utilities. Figure: Semantic figure/figcaption with .figure CSS classes. Carousel (GTCarousel + GTCarouselSlide): Slide/fade transitions, continuous touch drag with rubber-band resistance, keyboard nav, autoplay with reduced-motion respect. Vanilla JS behavior included. Chart (GTChartContainer + GTChartLegend): 5 semantic color tokens (--chart-1 to --chart-5), chart-lib agnostic container with CSS custom properties per series. Error Page (GTErrorPage): Musical staff-line SVG illustrations per HTTP status code (404, 403, 500, 503). Auto-resolves title/description.

Also adds vanilla JS behaviors for Tooltip, Toast, Stepper, and SearchField. Replaces manual ESLint globals with globals.browser package. Switches changeset changelog to @changesets/changelog-git.

#### @grundtone/nuxt

Patch Changes



  • Updated dependencies [7e77c0b]
- @grundtone/design-system@2.14.0 - @grundtone/vue@2.14.0

#### @grundtone/vue

Minor Changes



  • 7e77c0b: Add Image utilities, Figure, Carousel, Chart, and Error Page components
Image: .img-fluid, .img-thumbnail, .img-cover, .img-contain CSS utilities. Figure: Semantic figure/figcaption with .figure CSS classes. Carousel (GTCarousel + GTCarouselSlide): Slide/fade transitions, continuous touch drag with rubber-band resistance, keyboard nav, autoplay with reduced-motion respect. Vanilla JS behavior included. Chart (GTChartContainer + GTChartLegend): 5 semantic color tokens (--chart-1 to --chart-5), chart-lib agnostic container with CSS custom properties per series. Error Page (GTErrorPage): Musical staff-line SVG illustrations per HTTP status code (404, 403, 500, 503). Auto-resolves title/description.

Also adds vanilla JS behaviors for Tooltip, Toast, Stepper, and SearchField. Replaces manual ESLint globals with globals.browser package. Switches changeset changelog to @changesets/changelog-git.

Patch Changes



  • Updated dependencies [7e77c0b]
- @grundtone/design-system@2.14.0
2.13.02026-07-13
#### @grundtone/design-system

Minor Changes



  • dbd9c2c: Add Table and Summary List components
Table (GTTable): Data table with sorting, selection, responsive stacking, and variants (default, borderless, zebra, compact). Includes vanilla JS behavior for HTML-only usage.

Summary List (GTSummaryList + GTSummaryItem): Key-value pair display with
semantics, optional actions, and a card variant. Replaces the old .structured-list CSS.

#### @grundtone/nuxt

Patch Changes



  • Updated dependencies [dbd9c2c]
- @grundtone/design-system@2.13.0 - @grundtone/vue@2.13.0

#### @grundtone/vue

Minor Changes



  • dbd9c2c: Add Table and Summary List components
Table (GTTable): Data table with sorting, selection, responsive stacking, and variants (default, borderless, zebra, compact). Includes vanilla JS behavior for HTML-only usage.

Summary List (GTSummaryList + GTSummaryItem): Key-value pair display with
semantics, optional actions, and a card variant. Replaces the old .structured-list CSS.

Patch Changes



  • Updated dependencies [dbd9c2c]
- @grundtone/design-system@2.13.0
2.12.02026-03-22
#### @grundtone/design-system

Minor Changes



Thanks @allanasp! - Add FileUpload, PasswordInput, OtpInput, Fieldset, and password/OTP validators

- design-system: Add _file-upload.scss (modern drop zone), _password-input.scss (show/hide toggle), _otp-input.scss (single-digit fields), _fieldset.scss (form grouping). Web docs for all four with CodePreview. - vue: Add GTFileUpload (drag-and-drop, file validation, 12 tests), GTPasswordInput (eye/eye-off icon toggle, spellcheck=false, 12 tests), GTOtpInput (auto-advance, paste, filled state, 12 tests) - utils: Add isStrongPassword, getPasswordStrength, isValidOtp validation functions + password(), passwordStrength(), otp() validator factories - icons: Add eye, eye-off, upload, file SVG icons (17 total)

#### @grundtone/nuxt

Patch Changes



  • Updated dependencies
[fc456bf]: - @grundtone/design-system@2.12.0 - @grundtone/vue@2.12.0 - @grundtone/icons@2.2.0

#### @grundtone/react-native

Patch Changes



  • Updated dependencies
[fc456bf]: - @grundtone/utils@2.12.0 - @grundtone/icons@2.2.0

#### @grundtone/utils

Minor Changes



Thanks @allanasp! - Add FileUpload, PasswordInput, OtpInput, Fieldset, and password/OTP validators

- design-system: Add _file-upload.scss (modern drop zone), _password-input.scss (show/hide toggle), _otp-input.scss (single-digit fields), _fieldset.scss (form grouping). Web docs for all four with CodePreview. - vue: Add GTFileUpload (drag-and-drop, file validation, 12 tests), GTPasswordInput (eye/eye-off icon toggle, spellcheck=false, 12 tests), GTOtpInput (auto-advance, paste, filled state, 12 tests) - utils: Add isStrongPassword, getPasswordStrength, isValidOtp validation functions + password(), passwordStrength(), otp() validator factories - icons: Add eye, eye-off, upload, file SVG icons (17 total)

#### @grundtone/vue

Minor Changes



Thanks @allanasp! - Add FileUpload, PasswordInput, OtpInput, Fieldset, and password/OTP validators

- design-system: Add _file-upload.scss (modern drop zone), _password-input.scss (show/hide toggle), _otp-input.scss (single-digit fields), _fieldset.scss (form grouping). Web docs for all four with CodePreview. - vue: Add GTFileUpload (drag-and-drop, file validation, 12 tests), GTPasswordInput (eye/eye-off icon toggle, spellcheck=false, 12 tests), GTOtpInput (auto-advance, paste, filled state, 12 tests) - utils: Add isStrongPassword, getPasswordStrength, isValidOtp validation functions + password(), passwordStrength(), otp() validator factories - icons: Add eye, eye-off, upload, file SVG icons (17 total)

Patch Changes



  • Updated dependencies
[fc456bf]: - @grundtone/design-system@2.12.0 - @grundtone/utils@2.12.0 - @grundtone/icons@2.2.0
2.11.02026-03-22
#### @grundtone/design-system

Minor Changes



Thanks @allanasp! - Add Stepper component, checkout flow, and fixes

- design-system: Add _stepper.scss (horizontal dots, checkmarks, connecting lines, error/simple variants) - vue: Add GTStepper molecule (14 tests) with v-model:activeStep, allClickable, simple variant. Fix Input charWidth with padding compensation. Fix Breadcrumb li margin override. Add checkout flow to Vue playground (4-step: Cart → Delivery → Payment → Confirm using GTStepper, GTAddressInput, GTCard, GTRadioGroup, GTCheckbox, useField, useToast). - react-native: Add GTStepper with Pressable steps and dot/check/error indicators

#### @grundtone/nuxt

Patch Changes



  • Updated dependencies
[c37762e]: - @grundtone/design-system@2.11.0 - @grundtone/vue@2.11.0

#### @grundtone/react-native

Minor Changes



Thanks @allanasp! - Add Stepper component, checkout flow, and fixes

- design-system: Add _stepper.scss (horizontal dots, checkmarks, connecting lines, error/simple variants) - vue: Add GTStepper molecule (14 tests) with v-model:activeStep, allClickable, simple variant. Fix Input charWidth with padding compensation. Fix Breadcrumb li margin override. Add checkout flow to Vue playground (4-step: Cart → Delivery → Payment → Confirm using GTStepper, GTAddressInput, GTCard, GTRadioGroup, GTCheckbox, useField, useToast). - react-native: Add GTStepper with Pressable steps and dot/check/error indicators

#### @grundtone/vue

Minor Changes



Thanks @allanasp! - Add Stepper component, checkout flow, and fixes

- design-system: Add _stepper.scss (horizontal dots, checkmarks, connecting lines, error/simple variants) - vue: Add GTStepper molecule (14 tests) with v-model:activeStep, allClickable, simple variant. Fix Input charWidth with padding compensation. Fix Breadcrumb li margin override. Add checkout flow to Vue playground (4-step: Cart → Delivery → Payment → Confirm using GTStepper, GTAddressInput, GTCard, GTRadioGroup, GTCheckbox, useField, useToast). - react-native: Add GTStepper with Pressable steps and dot/check/error indicators

Patch Changes



  • Updated dependencies
[c37762e]: - @grundtone/design-system@2.11.0
2.10.02026-03-22
#### @grundtone/design-system

Minor Changes



Thanks @allanasp! - Add Tooltip component, Toast playground updates

- design-system: Add _tooltip.scss (dark minimal Sonner-style bubble with auto-positioning and arrow) - vue: Add GTTooltip atom (click with help icon, hover with 300ms delay, auto-flips top↔bottom, 13 tests). Toast icons vertically centered. Toast added to all playgrounds with variant icons. - react-native: Add GTTooltip (long-press trigger with Modal overlay). Toast vertically centered.

#### @grundtone/nuxt

Patch Changes



  • Updated dependencies
[200846b]: - @grundtone/design-system@2.10.0 - @grundtone/vue@2.10.0

#### @grundtone/react-native

Minor Changes



Thanks @allanasp! - Add Tooltip component, Toast playground updates

- design-system: Add _tooltip.scss (dark minimal Sonner-style bubble with auto-positioning and arrow) - vue: Add GTTooltip atom (click with help icon, hover with 300ms delay, auto-flips top↔bottom, 13 tests). Toast icons vertically centered. Toast added to all playgrounds with variant icons. - react-native: Add GTTooltip (long-press trigger with Modal overlay). Toast vertically centered.

#### @grundtone/vue

Minor Changes



Thanks @allanasp! - Add Tooltip component, Toast playground updates

- design-system: Add _tooltip.scss (dark minimal Sonner-style bubble with auto-positioning and arrow) - vue: Add GTTooltip atom (click with help icon, hover with 300ms delay, auto-flips top↔bottom, 13 tests). Toast icons vertically centered. Toast added to all playgrounds with variant icons. - react-native: Add GTTooltip (long-press trigger with Modal overlay). Toast vertically centered.

Patch Changes



  • Updated dependencies
[200846b]: - @grundtone/design-system@2.10.0
2.9.12026-03-21
#### @grundtone/nuxt

Patch Changes



  • Updated dependencies
[009ab18]: - @grundtone/vue@2.9.1 - @grundtone/icons@2.1.2

#### @grundtone/react-native

Patch Changes



  • Updated dependencies
[009ab18]: - @grundtone/icons@2.1.2

#### @grundtone/vue

Patch Changes



Thanks @allanasp! - Add Toast component, chevron-up icon, and prefix refactor for all new components

- vue: Add GTToast, GTToastContainer, and useToast composable (Sonner-style with countdown bar, stacking, rich colors, 15 tests). Add chevron-up icon for BackToTop. - vue: Prefix refactor — all new components (Tag, BackLink, BackToTop, Textarea, Checkbox, RadioGroup, CheckboxGroup, SearchField, OverflowMenu, Toast, Modal) now use getClassPrefix() in templates and