Changelog

  1. v0.1.87

    Added

    • A column takes editor: { type: "time" }, a masked time of day with a matching validator and a { type: "time-range" } filter

    Fixed

    • A time from an Excel sheet now arrives as the time the person saw, and a date hidden behind a time format drops away
  2. v0.1.86

    Added

    • The date picker names months in the editor's locale, so a French calendar reads in French with no translations passed

    Fixed

    • A date now imports however the file writes it, 01/05/26, 2026.05.01, 01-May-2026, 20260501, 2026年5月1日, an Excel serial, or a stamp carrying a time or an era
    • A column of dates now reads by its own values, and a spelled-out month reads in the editor's locale wherever the date arrives
    • A number now imports through any grouping a file uses, 1,234, 1'234.56, 12,34,567.89, a non-breaking space between the groups, or scientific notation out of XLSX
    • The grid now prints a date and a number the way the browser writes them, the apostrophe of de-CH, the narrow space of fr-FR, and a year in the first century included
    • A date and a number sent through loadData are now each read by the column they land in, and a value nothing separates falls to the browser locale and reports through onError
    • A column that declares decimalSeparator and thousandsSeparator on its editor now renders by them in the grid as well as in the cell editor
    • A date and a number filter now follows the column's own format, so the range placeholder shows its separators and a select filter matches the rows it lists
    • A row seeded through originalValues reads as untouched when only the format differed
    • A multiselect column now exports its stored values and accepts a delimited string through loadData
    • transformer now runs on a select and a multiselect column wherever a value enters the editor, once per token
    • The chat assistant now writes a number as the digits its column keeps, and a rewrite carrying the value already in the cell stops counting as an edit
    • A number formula run over a text column stores its result as text, and a column of plain whole numbers stays quiet on onError
    • A modal, a drawer, and a confirmation dialog now fade out as one piece and leave the screen
  3. v0.1.85

    Added

    • Change header row on the column-matching step reopens header selection for the file being matched, and a column mapped by hand keeps its choice when its header reads the same on the new row

    Fixed

    • Header detection now picks the header row more precisely
    • A transform that writes an empty value into a column the file never carried now leaves the row unchanged, so onComplete returns only the rows the user edited
    • The Changed rows count now returns to zero once the last change is undone
    • A multiselect cell written with a different separator from the rest of the column now keeps every value, including one spelled slightly differently from the option it matches
  4. v0.1.84

    Fixed

    • asyncFunction now correctly runs in a React app mounted in StrictMode
  5. v0.1.83

    Added

    • The date rule in validators takes min and max as inclusive YYYY-MM-DD bounds, and the cell's date picker offers exactly that range
    • The number rule in validators takes min, max and decimalPlaces, and the cell's number editor takes its minus gate and its decimal limit from the same rule

    Removed

    • numeric and range in validators, both replaced by the number rule
    • format on the date rule, and a date column is now checked as YYYY-MM-DD
    • minDate, maxDate, decimalPlaces and allowChars on the date and number editors, and both editors read their limits from the column's rule

    Fixed

    • A date or number column accepted a value it could not convert, and it now flags that value even when the column declares no rule
    • Rows arriving through loadData skipped transformer and kept the date format they came in with, and they now go through the same conversion an imported file does
    • An export wrote the values the grid painted, and it now writes the stored form, with numbers typed in JSON and XLSX
  6. v0.1.82

    Removed

    • The { type: "expression" } rule is gone from validators, and a column that needs custom logic uses { type: "function", fn }

    Fixed

    • Minor bug fixes
  7. v0.1.81

    Added

    • onUnstructuredFile takes an optional handler for a file that holds no single table, and your own AI model or parser turns it into tables
    • The side panel of the data editor becomes a strip with icon buttons under 1024px
  8. v0.1.80

    Added

    • The column matching step turns each column from the file into a dropdown, and it opens five example values from that column

    Fixed

    • Minor bug fixes
  9. v0.1.79

    Changed

    • A translations override for the primary key step sat under dataEditor.uploader.steps.primaryKey and dataEditor.uploader.primaryKey, and it now sits under dataEditor.uploader.steps.addOrUpdate and dataEditor.uploader.addOrUpdate
  10. v0.1.78

    Added

    • primaryKey takes a list of columns as one composite key, and an imported row updates an existing one only when every column in that list matches

    Changed

    • An import into a grid that already held rows slowed down as it ran, and it now holds one speed from the first row to the last

    Fixed

    • A cell kept its duplicate mark after an import replaced the other copy of the value, and the mark now clears as soon as the value is unique
  11. v0.1.77

    Fixed

    • The count on the Rows with empty cells filter disagreed with the rows the filter returned, and the two now report the same rows
  12. v0.1.76

    Added

    • customFormats takes a parser you supply, and a file the importer cannot read now goes through it into the grid like a spreadsheet