Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
41617fb
Feature: HF-24 introduce defaultStringifyCurrency
marcin-kordas-hoc Apr 27, 2026
6e9c3a1
Feature: HF-24 declare stringifyCurrency on ConfigParams interface
marcin-kordas-hoc Apr 27, 2026
1a7564e
Feature: HF-24 wire stringifyCurrency through Config class
marcin-kordas-hoc Apr 27, 2026
3417a74
Feature: HF-24 dispatch stringifyCurrency in format()
marcin-kordas-hoc Apr 27, 2026
d92e53f
Docs: HF-24 add Currency integration section to date-and-time guide
marcin-kordas-hoc Apr 27, 2026
19eaa41
Docs: HF-24 changelog entry for stringifyCurrency
marcin-kordas-hoc Apr 27, 2026
09babfd
Fix: HF-24 correct CHANGELOG issue ref and clarify docs adapter
marcin-kordas-hoc Apr 27, 2026
02134b5
Docs: HF-24 strip {type} JSDoc tags from defaultStringifyCurrency
marcin-kordas-hoc Apr 29, 2026
299e0bb
Docs: HF-24 align stringifyCurrency JSDoc @category with sibling stri…
marcin-kordas-hoc May 8, 2026
e4a5cf1
Chore: HF-24 retrigger codecov upload
marcin-kordas-hoc May 9, 2026
a180a8d
Docs: HF-24 align currency-integration text with PR body (drop count …
marcin-kordas-hoc May 11, 2026
b81d4af
Docs: HF-24 final cross-doc polish (TEXT xref, currency callback diff…
marcin-kordas-hoc May 11, 2026
18aa092
Docs: HF-24 wrap NBSP note in :::tip callout for discoverability
marcin-kordas-hoc May 11, 2026
e4fcd52
Docs: HF-24 redesign Currency integration for friction elimination
marcin-kordas-hoc May 11, 2026
d119b4c
Fix: HF-24 dispatch stringifyCurrency before stringifyDateTime to pre…
marcin-kordas-hoc May 11, 2026
d496e30
Fix: HF-24 skip date dispatch for LCID-tagged currency formats
marcin-kordas-hoc May 11, 2026
b7c61a5
Fix: HF-24 narrow LCID guard to currency tags only (preserve [$-LCID]…
marcin-kordas-hoc May 11, 2026
80fd34e
Fix: HF-24 add LCID guard to defaultStringifyDuration (sibling consis…
marcin-kordas-hoc May 11, 2026
19ce06a
Docs: HF-24 clarify dispatcher comment after LCID guard introduction
marcin-kordas-hoc May 11, 2026
d77d5a6
Merge remote-tracking branch 'upstream/develop' into feature/hf-24-st…
marcin-kordas-hoc May 11, 2026
eab70dd
Chore: HF-24 retrigger CI after tests-repo develop merge
marcin-kordas-hoc May 11, 2026
9afc8bd
Docs: HF-24 correct default behavior claims for currency formats
marcin-kordas-hoc May 11, 2026
f1eb4ef
Docs: HF-24 split currency handling into dedicated guide
marcin-kordas-hoc May 20, 2026
a9474ca
Chore: HF-24 retrigger CI for docs-only iter on f1eb4efb2
marcin-kordas-hoc May 20, 2026
e175670
Docs: HF-24 unify currency input/output in currency-handling guide
marcin-kordas-hoc May 21, 2026
e0d7af5
Merge remote-tracking branch 'upstream/develop' into feature/hf-24-st…
marcin-kordas-hoc May 21, 2026
c594bbe
Refactor: HF-24 address prep-ultra polish (category, regex hoist, docs)
marcin-kordas-hoc May 21, 2026
d11cfd9
Docs: HF-24 enrich JSDoc for default stringify guards (LCID design in…
marcin-kordas-hoc May 25, 2026
6a441b3
Tools: HF-24 snippet codegen — close O5 docs↔test source-of-truth gap
marcin-kordas-hoc May 25, 2026
de4d6fe
Tools: HF-24 wire snippets:check into the lint CI workflow
marcin-kordas-hoc May 25, 2026
83dafd1
Tools: HF-24 close 7 review findings from A+C parallel review
marcin-kordas-hoc May 25, 2026
4e0e252
chore: HF-24 retrigger CI to pick up tests-repo fix (ed38a4f)
marcin-kordas-hoc May 25, 2026
778158d
Docs: HF-24 revert tryAccountingFormat sign-loss "fix" — pre-fix matc…
marcin-kordas-hoc May 25, 2026
c3b6538
chore: HF-24 retrigger CI for tests-repo dead-code drop (87e72b5)
marcin-kordas-hoc May 25, 2026
a708deb
HF-24 final pre-flip cleanup: lint + Excel parity + CHANGELOG
marcin-kordas-hoc May 25, 2026
f1b4425
Cleanup: HF-24 two minor refinements from line-by-line audit
marcin-kordas-hoc May 25, 2026
b018aed
HF-24 brutal-honesty cleanup: CHANGELOG section + codegen docstring
marcin-kordas-hoc May 25, 2026
b555d08
HF-24 retrigger CI to pick up tests-repo lint fix 6ebdbf8
marcin-kordas-hoc May 25, 2026
caba475
HF-24 retrigger CI for tests-repo lint+xdescribe fix (8c87bbe)
marcin-kordas-hoc May 26, 2026
8cbb139
docs(HF-24): address review threads — LCID Excel behavior, double-quo…
marcin-kordas-hoc May 27, 2026
1bede82
Docs: HF-24 add .md extension to bare slug links in built-in-functions
marcin-kordas-hoc May 27, 2026
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
1 change: 1 addition & 0 deletions .eslintignore
Original file line number Diff line number Diff line change
Expand Up @@ -24,5 +24,6 @@ lib
script
test-jasmine
test-jest
test-utils/snippets
typedoc
typings
5 changes: 5 additions & 0 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,3 +46,8 @@ jobs:

- name: Run linter
run: npm run lint

- name: Check docs snippets are in sync with extracted source-of-truth
# After lint so an extractor crash doesn't mask lint failures
# downstream consumers care about.
run: npm run snippets:check
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,14 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),

## [Unreleased]

### Added

- Added a `stringifyCurrency` config option that lets you plug in a custom currency formatter for the `TEXT` function. [#1145](https://github.com/handsontable/hyperformula/issues/1145)

### Fixed

- Fixed the `TEXT` function mangling LCID-tagged currency format strings (e.g. `[$USD-409] #,##0.00`) — pre-fix, the date-time parser greedily consumed letter tokens inside the currency code (`D` in USD, `H` in CHF/HUF, etc.), producing strings like `[$US9-409]`. The default dispatch now short-circuits LCID-tagged currency formats so they fall through to the number formatter (or the user-supplied `stringifyCurrency` callback). Applies to every LCID-tagged currency format regardless of whether `stringifyCurrency` is configured. [#1665](https://github.com/handsontable/hyperformula/pull/1665)

## [3.3.0] - 2026-05-20

### Added
Expand Down
1 change: 1 addition & 0 deletions docs/.vuepress/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -255,6 +255,7 @@ module.exports = {
['/guide/i18n-features', 'Internationalization features'],
['/guide/localizing-functions', 'Localizing functions'],
['/guide/date-and-time-handling', 'Date and time handling'],
['/guide/currency-handling', 'Currency handling'],
]
},
{
Expand Down
6 changes: 3 additions & 3 deletions docs/guide/built-in-functions.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ spreadsheet software. That is because a spreadsheet is probably the most
universal software ever created. We wanted the same flexibility for HyperFormula
but without the constraints of the spreadsheet UI.

Each of HyperFormula's built-in function names is available in [17 languages](localizing-functions.md#list-of-supported-languages) and [custom language packs](localizing-functions) can be added.
Each of HyperFormula's built-in function names is available in [17 languages](localizing-functions.md#list-of-supported-languages) and [custom language packs](localizing-functions.md) can be added.

The latest version of HyperFormula has an extensive collection of
**{{ $page.functionsCount }}** functions grouped into categories:
Expand All @@ -44,7 +44,7 @@ The latest version of HyperFormula has an extensive collection of
_Some categories such as compatibility and cube are yet to be supported._

::: tip
You can modify the built-in functions or create your own, by adding a [custom function](custom-functions).
You can modify the built-in functions or create your own, by adding a [custom function](custom-functions.md).
:::

## List of available functions
Expand Down Expand Up @@ -525,7 +525,7 @@ Total number of functions: **{{ $page.functionsCount }}**
| SPLIT | Divides the provided text using the space character as a separator and returns the substring at the zero-based position specified by the second argument.<br>`SPLIT("Lorem ipsum", 0) -> "Lorem"`<br>`SPLIT("Lorem ipsum", 1) -> "ipsum"` | SPLIT(Text, Index) |
| SUBSTITUTE | Returns string where occurrences of Old_text are replaced by New_text. Replaces only specific occurrence if last parameter is provided. | SUBSTITUTE(Text, Old_text, New_text, [Occurrence]) |
| T | Returns text if given value is text, empty string otherwise. | T(Value) |
| TEXT | Converts a number into text according to a given format.<br>By default, accepts the same formats that can be passed to the [`dateFormats`](../api/interfaces/configparams.md#dateformats) option, but can be further customized with the [`stringifyDateTime`](../api/interfaces/configparams.md#stringifydatetime) option. | TEXT(Number, Format) |
| TEXT | Converts a number into text according to a given format.<br>By default, accepts the same formats that can be passed to the [`dateFormats`](../api/interfaces/configparams.md#dateformats) option, but can be further customized with the [`stringifyDateTime`](../api/interfaces/configparams.md#stringifydatetime) and [`stringifyCurrency`](../api/interfaces/configparams.md#stringifycurrency) options. | TEXT(Number, Format) |
| TEXTJOIN | Joins text from multiple strings and/or ranges with a delimiter. Supports array/range delimiters that cycle through gaps. When ignore_empty is TRUE, empty strings are skipped. Returns #VALUE! if result exceeds 32,767 characters. | TEXTJOIN(Delimiter, Ignore_empty, Text1, [Text2, ...]) |
| TRIM | Strips extra spaces from text. | TRIM("Text") |
| UNICHAR | Returns the character created by using provided code point. | UNICHAR(Number) |
Expand Down
4 changes: 4 additions & 0 deletions docs/guide/compatibility-with-google-sheets.md
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,10 @@ Options related to date and time formats:
- [`stringifyDateTime()`](../api/interfaces/configparams.md#stringifydatetime)
- [`stringifyDuration()`](../api/interfaces/configparams.md#stringifyduration)

### `TEXT` function formats

Google Sheets' `TEXT` function supports a wide range of date, time, and currency formats. To cover the full range in HyperFormula, supply both [`stringifyDateTime()`](../api/interfaces/configparams.md#stringifydatetime) (for dates and durations) and [`stringifyCurrency()`](../api/interfaces/configparams.md#stringifycurrency) (for currency formats — locale-aware grouping, non-`$` symbols, accounting two-section patterns). See [Currency handling](currency-handling.md) for an `Intl.NumberFormat`-based example.

## Full configuration

This configuration aligns HyperFormula with the default behavior of Google Sheets (set to locale `en-US`), as closely as possible at this development stage (version `{{ $page.version }}`).
Expand Down
4 changes: 4 additions & 0 deletions docs/guide/compatibility-with-microsoft-excel.md
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,10 @@ Options related to date and time formats:
- [`stringifyDateTime()`](../api/interfaces/configparams.md#stringifydatetime)
- [`stringifyDuration()`](../api/interfaces/configparams.md#stringifyduration)

### `TEXT` function formats

Excel's `TEXT` function supports a wide range of date, time, and currency formats. To cover the full range in HyperFormula, supply both [`stringifyDateTime()`](../api/interfaces/configparams.md#stringifydatetime) (for dates and durations) and [`stringifyCurrency()`](../api/interfaces/configparams.md#stringifycurrency) (for currency formats — locale-aware grouping, non-`$` symbols, accounting two-section patterns). See [Currency handling](currency-handling.md) for an `Intl.NumberFormat`-based example.

## Full configuration

This configuration aligns HyperFormula with the default behavior of Microsoft Excel (set to locale `en-US`), as closely as possible at this development stage (version `{{ $page.version }}`).
Expand Down
Loading