Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions DESIGN.md
Original file line number Diff line number Diff line change
Expand Up @@ -532,6 +532,36 @@ keyframes declare `from` and nothing else, so the browser animates back to
whatever the element's real style is — which fades out correctly on every
variant, focused or not, without hard-coding the resting colours.

## What 1.0.0 promises

A version number is a promise about change, so it is worth saying which one.

**The exported names are the contract.** Every entry point lists its exports by
hand, and a test asserts each list exactly — `index.test.ts` and
`entryPoints.test.ts`. Removing or renaming any of them is a major version.
That list is deliberately short: the package exported 66 names by accident
before 1.0.0, through four `export *` lines, and shipping that would have
frozen reducer internals and a cache-clearing test seam as public API forever.

**What is not exported may change in a patch.** The reducer, the validation
helpers, the caret arithmetic — all internal. If you need one of them, ask for
it rather than reaching into `dist/`; a name that is asked for can be exported
on purpose.

**The CSS class names are part of the contract too**, because the stylesheet is
opt-in and people build on the markup. `rfi-input`, `rfi-field`, `rfi-label`,
`rfi-adornment`, `rfi-flag` and the rest behave like exports.

**Behaviour that is documented here is behaviour you can rely on.** The
canonical-versus-display split, `null` never being `NaN`, the caret rules, the
grouping following the locale. Where a platform forced an unusual decision it is
written down with the reason, so it does not look like something safe to
"clean up" later.

**What is not promised** is in [Limits](#limits) below: numbers above 2^53,
digit glyphs outside ASCII, and the support-matrix rows nobody has hardware to
verify. Those are stated rather than implied.

## Limits

What this library does not do, stated plainly, because finding out later is
Expand Down
17 changes: 17 additions & 0 deletions HISTORY.md
Original file line number Diff line number Diff line change
Expand Up @@ -139,3 +139,20 @@ because nobody owns every phone.

The headline used to say "works on every device". It says something narrower
now, and truer.

## 1.0.0

Cut after seven rounds of looking for reasons not to.

Each round found something, and the list is a fair description of what a
"finished" side project actually hides: an API of 66 names nobody had chosen,
TypeScript declarations that were wrong for CommonJS consumers, two critical
ARIA violations in the widget the docs told people to copy, a `'use client'`
banner that made the parsing unusable in the server action the examples
demonstrated, a load-bearing rule with no test holding it, and grouping that
was wrong for every Indian locale.

The seventh round found nothing, and a deliberate hunt for memory leaks found
one uncancelled animation frame that was not a leak.

None of that was visible from the outside. The library worked the whole time.
56 changes: 43 additions & 13 deletions release-please-config.json
Original file line number Diff line number Diff line change
@@ -1,25 +1,55 @@
{
"$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json",
"$comment": "separate-pull-requests must stay true. With false, the Merge plugin builds one PR on a branch carrying no component, but getBranchComponent() falls back to the package.json name so buildRelease compares 'undefined' against 'react-financial-input', returns undefined, and no release is ever tagged. There is only one package here, so this still produces a single release PR.",
"$comment": "separate-pull-requests must stay true. With false, the Merge plugin builds one PR on a branch carrying no component, but getBranchComponent() falls back to the package.json name \u2014 so buildRelease compares 'undefined' against 'react-financial-input', returns undefined, and no release is ever tagged. There is only one package here, so this still produces a single release PR.",
"separate-pull-requests": true,
"packages": {
".": {
"release-type": "node",
"changelog-path": "CHANGELOG.md",
"include-component-in-tag": false,
"bump-minor-pre-major": true,
"bump-patch-for-minor-pre-major": false,
"changelog-sections": [
{ "type": "feat", "section": "Features" },
{ "type": "fix", "section": "Bug fixes" },
{ "type": "perf", "section": "Performance" },
{ "type": "docs", "section": "Documentation" },
{ "type": "refactor", "section": "Refactoring" },
{ "type": "test", "section": "Tests", "hidden": true },
{ "type": "build", "section": "Build", "hidden": true },
{ "type": "ci", "section": "CI", "hidden": true },
{ "type": "chore", "section": "Chores", "hidden": true }
{
"type": "feat",
"section": "Features"
},
{
"type": "fix",
"section": "Bug fixes"
},
{
"type": "perf",
"section": "Performance"
},
{
"type": "docs",
"section": "Documentation"
},
{
"type": "refactor",
"section": "Refactoring"
},
{
"type": "test",
"section": "Tests",
"hidden": true
},
{
"type": "build",
"section": "Build",
"hidden": true
},
{
"type": "ci",
"section": "CI",
"hidden": true
},
{
"type": "chore",
"section": "Chores",
"hidden": true
}
]
}
}
},
"$comment2": "bump-minor-pre-major and bump-patch-for-minor-pre-major were removed at 1.0.0. They only apply below 1.0, where they kept breaking changes at a minor bump. Past 1.0.0 a BREAKING CHANGE footer means a major, which is the whole point of the version."
}
Loading