Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
b17acc9
Feature: HF-24 introduce defaultStringifyCurrency
marcin-kordas-hoc Apr 27, 2026
7a0f836
Feature: HF-24 declare stringifyCurrency on ConfigParams interface
marcin-kordas-hoc Apr 27, 2026
19ebe26
Feature: HF-24 wire stringifyCurrency through Config class
marcin-kordas-hoc Apr 27, 2026
e2b2b52
Feature: HF-24 dispatch stringifyCurrency in format()
marcin-kordas-hoc Apr 27, 2026
4d1a7a9
Docs: HF-24 add Currency integration section to date-and-time guide
marcin-kordas-hoc Apr 27, 2026
5124c12
Docs: HF-24 changelog entry for stringifyCurrency
marcin-kordas-hoc Apr 27, 2026
ac5dc89
Fix: HF-24 correct CHANGELOG issue ref and clarify docs adapter
marcin-kordas-hoc Apr 27, 2026
f47ca12
Docs: HF-24 strip {type} JSDoc tags from defaultStringifyCurrency
marcin-kordas-hoc Apr 29, 2026
4a48ea7
Docs: HF-24 align stringifyCurrency JSDoc @category with sibling stri…
marcin-kordas-hoc May 8, 2026
fe2fb44
Chore: HF-24 retrigger codecov upload
marcin-kordas-hoc May 9, 2026
39967c8
Docs: HF-24 align currency-integration text with PR body (drop count …
marcin-kordas-hoc May 11, 2026
10be7fe
Docs: HF-24 final cross-doc polish (TEXT xref, currency callback diff…
marcin-kordas-hoc May 11, 2026
ca91f3a
Docs: HF-24 wrap NBSP note in :::tip callout for discoverability
marcin-kordas-hoc May 11, 2026
08f0267
Docs: HF-24 redesign Currency integration for friction elimination
marcin-kordas-hoc May 11, 2026
79abac4
Fix: HF-24 dispatch stringifyCurrency before stringifyDateTime to pre…
marcin-kordas-hoc May 11, 2026
e23818a
Fix: HF-24 skip date dispatch for LCID-tagged currency formats
marcin-kordas-hoc May 11, 2026
9d4c1a6
Fix: HF-24 narrow LCID guard to currency tags only (preserve [$-LCID]…
marcin-kordas-hoc May 11, 2026
0990c09
Fix: HF-24 add LCID guard to defaultStringifyDuration (sibling consis…
marcin-kordas-hoc May 11, 2026
9171146
Docs: HF-24 clarify dispatcher comment after LCID guard introduction
marcin-kordas-hoc May 11, 2026
378c077
Chore: HF-24 retrigger CI after tests-repo develop merge
marcin-kordas-hoc May 11, 2026
6997cc4
Docs: HF-24 correct default behavior claims for currency formats
marcin-kordas-hoc May 11, 2026
9c349ac
Docs: HF-24 split currency handling into dedicated guide
marcin-kordas-hoc May 20, 2026
ca650a9
Chore: HF-24 retrigger CI for docs-only iter on f1eb4efb2
marcin-kordas-hoc May 20, 2026
a4b05ae
Docs: HF-24 unify currency input/output in currency-handling guide
marcin-kordas-hoc May 21, 2026
f6cac82
Refactor: HF-24 address prep-ultra polish (category, regex hoist, docs)
marcin-kordas-hoc May 21, 2026
9570581
Docs: HF-24 enrich JSDoc for default stringify guards (LCID design in…
marcin-kordas-hoc May 25, 2026
e3f7368
Tools: HF-24 snippet codegen — close O5 docs↔test source-of-truth gap
marcin-kordas-hoc May 25, 2026
4597aa0
Tools: HF-24 wire snippets:check into the lint CI workflow
marcin-kordas-hoc May 25, 2026
cd7680d
Tools: HF-24 close 7 review findings from A+C parallel review
marcin-kordas-hoc May 25, 2026
f66fd41
chore: HF-24 retrigger CI to pick up tests-repo fix (ed38a4f)
marcin-kordas-hoc May 25, 2026
e1f3091
Docs: HF-24 revert tryAccountingFormat sign-loss "fix" — pre-fix matc…
marcin-kordas-hoc May 25, 2026
3e8e496
chore: HF-24 retrigger CI for tests-repo dead-code drop (87e72b5)
marcin-kordas-hoc May 25, 2026
85c7733
HF-24 final pre-flip cleanup: lint + Excel parity + CHANGELOG
marcin-kordas-hoc May 25, 2026
23ffc97
Cleanup: HF-24 two minor refinements from line-by-line audit
marcin-kordas-hoc May 25, 2026
1a40b26
HF-24 brutal-honesty cleanup: CHANGELOG section + codegen docstring
marcin-kordas-hoc May 25, 2026
b91d125
HF-24 retrigger CI to pick up tests-repo lint fix 6ebdbf8
marcin-kordas-hoc May 25, 2026
139d76a
HF-24 retrigger CI for tests-repo lint+xdescribe fix (8c87bbe)
marcin-kordas-hoc May 26, 2026
cbdd9fd
docs(HF-24): address review threads — LCID Excel behavior, double-quo…
marcin-kordas-hoc May 27, 2026
cb2fa8f
Docs: HF-24 add .md extension to bare slug links in built-in-functions
marcin-kordas-hoc May 27, 2026
69d5916
Merge branch 'develop' into feature/hf-24-stringify-currency
sequba Jun 1, 2026
cd024e7
fix(HF-24): generate doc snippets at test time; changelog & docs polish
marcin-kordas-hoc Jun 4, 2026
24b2a20
ci(HF-24): note snippet pre-generation in test workflow
marcin-kordas-hoc Jun 4, 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
4 changes: 4 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@ jobs:
- name: Install dependencies
run: npm ci

# Doc snippets are regenerated before the tests by the `pretest:ci` npm
# hook (runs `snippets:extract`); the generated files are not committed.
Comment on lines +47 to +48

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But pretest:ci is never run. I suggested the change to the npm scripts to run it before actual tests

- name: Run tests
run: npm run test:ci -- --coverage

Expand Down Expand Up @@ -82,5 +84,7 @@ jobs:
- name: Install dependencies
run: npm ci

# Doc snippets are regenerated before the tests by the `pretest:browser`
# npm hook (runs `snippets:extract`); the generated files are not committed.
- name: Run tests
run: npm run test:browser
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -24,3 +24,7 @@ dev*.html
.DS_Store

/test/hyperformula-tests/

# Doc snippets are regenerated from the docs before every test run
# (see the `snippets:extract` / `pretest:*` scripts), so they are never committed.
/test-utils/snippets/*.generated.ts
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
### Added

- Added an Indonesian (Bahasa Indonesia) language pack. [#1674](https://github.com/handsontable/hyperformula/pull/1674)
- 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)
- Added support for LCID-tagged currency format strings (e.g. `[$USD-409] #,##0.00`) in the `TEXT` function. Previously the date-time parser greedily consumed letter tokens inside the currency code (`D` in USD, `H` in CHF/HUF, etc.), producing corrupted output like `[$US9-409]`; such formats now fall through to the number formatter (or a user-supplied `stringifyCurrency` callback), regardless of whether `stringifyCurrency` is configured. [#1665](https://github.com/handsontable/hyperformula/pull/1665)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- Added support for LCID-tagged currency format strings (e.g. `[$USD-409] #,##0.00`) in the `TEXT` function. Previously the date-time parser greedily consumed letter tokens inside the currency code (`D` in USD, `H` in CHF/HUF, etc.), producing corrupted output like `[$US9-409]`; such formats now fall through to the number formatter (or a user-supplied `stringifyCurrency` callback), regardless of whether `stringifyCurrency` is configured. [#1665](https://github.com/handsontable/hyperformula/pull/1665)
- Added support for LCID-tagged currency format strings (e.g. `[$USD-409] #,##0.00`) in the `TEXT` function. [#1665](https://github.com/handsontable/hyperformula/pull/1665)


## [3.3.0] - 2026-05-20

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 @@ -28,7 +28,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 @@ -50,7 +50,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 @@ -531,7 +531,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
Loading