@iyulab/flex-table 0.36.0 โ†’ 0.38.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/CHANGELOG.md CHANGED
@@ -1,5 +1,57 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.38.0] - 2026-09-23
4
+
5
+ ### Fixed
6
+
7
+ - ๐Ÿ”ด **Cell values follow the app's locale, not the browser's.** The built-in `number`, `date` and
8
+ `datetime` formatting called `toLocaleString()` without a locale, so values followed the runtime
9
+ default while the table's own menus and labels already followed `Locale`. An app set to Korean
10
+ and opened in an English browser showed Korean menus over `9/9/2026, 8:16:01 AM`. Values now go
11
+ through `@iyulab/components`' `formatDate`/`formatNumber`, which use `Locale.get()`, and the
12
+ numeric `format` patterns (`#,##0.00` and friends) use the same locale for their separators.
13
+ - **A date-only value such as `"2026-09-09"` is read as that local date.** It was parsed as UTC
14
+ midnight, so in timezones behind UTC a `date` column showed the previous day.
15
+
16
+ ### Changed
17
+
18
+ - ๐Ÿ”ด **The `@iyulab/components` peer range is now `>=1.27.0`** (was `>=1.24.0`). The formatters come
19
+ from that package's `format` module, which first shipped in 1.27.0; the old range admitted
20
+ versions without it.
21
+
22
+ โš  **Visible change:** if your app's `Locale` differs from the browser's language, dates and numbers in
23
+ the table now appear in the app's format. Nothing changes when the two agree.
24
+
25
+ ## [0.37.0] - 2026-09-20
26
+
27
+ ### Fixed
28
+
29
+ - **The column menu and the cell context menu stayed in English on a translated page.** 0.36.0 moved
30
+ the table's chrome text into a locale namespace, but the menus added in 0.35.0 were not part of
31
+ that move: their items, and the accessible name of the column-menu button, were written inline. On
32
+ a Korean page the same button therefore announced one language in its `title` and another in its
33
+ `aria-label`, and a screen-reader user heard English item names in the middle of a translated
34
+ grid โ€” with no way to correct it, since the strings had no keys to register over. Every one of
35
+ those strings now goes through the namespace, including the cell context menu, the two menu
36
+ accessible names and the import drop target. Three keys name a column and carry a `{header}`
37
+ placeholder, so word order stays the translator's choice instead of being fixed by concatenation.
38
+ The built-in English wording is unchanged.
39
+
40
+ ### Documentation
41
+
42
+ - **The README no longer lists every message key by hand.** That paragraph had gone stale once
43
+ already, and a hand-copied list is the only part of this documentation that can: the exported
44
+ `FlexTableMessageKey` cannot. It now names the groups and points at the type, which your editor
45
+ completes and the compiler checks.
46
+
47
+ ### Added
48
+
49
+ - **The boolean filter's two options are translatable** (`booleanTrue` / `booleanFalse`). They read
50
+ `True` and `False` in every locale before this; the check and cross glyphs stay in the template,
51
+ since a symbol means the same thing in every language.
52
+ - **`t()` and the exported namespace now interpolate.** `FlexTableMessageKey` gains the menu keys
53
+ above; registering a partial table still merges, so existing registrations keep working untouched.
54
+
3
55
  ## [0.36.0] - 2026-09-17
4
56
 
5
57
  ### Added
package/README.md CHANGED
@@ -436,14 +436,25 @@ flexTableLocale.register('ja', {
436
436
  flexTableLocale.register('en', { replaceAll: 'Replace everything' }); // reword one string
437
437
  ```
438
438
 
439
- Keys cover the column header and menu (`showHiddenColumns`, `columnMenu`, `cellActions`,
440
- `noColumnsDefined`), cell comments (`addCommentPlaceholder`, `cancel`, `save`), the filter panel
441
- (`clear`, `blankCells`, `emptyOnly`, `nonEmptyOnly`, `blankAll`, `all`, `contains`, `startsWith`,
442
- `endsWith`, `wildcard`, `searchPlaceholder`, `valuePlaceholder`, `fromPlaceholder`,
443
- `toPlaceholder`) and find-and-replace (`findPlaceholder`, `findPrevious`, `findNext`, `matchCase`,
444
- `wholeCell`, `closeFind`, `replaceWithPlaceholder`, `replace`, `replaceAll`). `FlexTableMessageKey`
445
- is exported, so a missing or misspelled key is a type error rather than a string that silently falls
446
- back to its own name.
439
+ The keys are grouped by where they appear: the column header and its menu, the items inside that
440
+ menu, the cell context menu, cell comments, the filter panel, find-and-replace, and the import drop
441
+ target. **`FlexTableMessageKey` is the list** โ€” it is exported, so your editor completes it and a
442
+ misspelled key is a type error rather than a string that silently falls back to its own name.
443
+
444
+ > This paragraph used to enumerate every key by hand. It went stale once, and a hand-copied list is
445
+ > the only thing here that can: the type cannot. If you want the full set, hover `FlexTableMessageKey`
446
+ > or open `src/locale.ts`.
447
+
448
+ Three of those keys name a column, and word order differs between languages, so they carry a
449
+ `{header}` placeholder rather than being assembled by concatenation:
450
+
451
+ ```ts
452
+ flexTableLocale.register('ja', {
453
+ columnMenuFor: '{header} ใฎๅˆ—ใƒกใƒ‹ใƒฅใƒผ', // the column menu button's accessible name
454
+ columnMenuRegion: '{header} ๅˆ—', // the open menu's accessible name
455
+ showColumn: '{header} ใ‚’่กจ็คบ', // "show this hidden neighbour again"
456
+ });
457
+ ```
447
458
 
448
459
  The filter operators `AND` and `OR` are not in the table, and neither are the glyphs that stand in
449
460
  for icons. They read the same in every language, and translating them makes them harder to