JavaScript data grid with a spreadsheet look & feel. Works for React, Angular, and Vue. Supported by the Handsontable team ⚡

Overview

Handsontable

Handsontable is a JavaScript component that combines data grid features with spreadsheet-like UX.
It provides data binding, data validation, filtering, sorting, and CRUD operations.

npm npm Build status FOSSA Status Known Vulnerabilities


Get Started with Handsontable

React  Angular  Vue    JavaScript 

Handsontable data grid

Features

The most popular features of Handsontable:

  ✓  Multiple column sorting
  ✓  Non-contiguous selection
  ✓  Filtering data
  ✓  Export to file
  ✓  Validating data
  ✓  Conditional formatting
  ✓  Merging cells
  ✓  Freezing rows/columns
  ✓  Moving rows/columns
  ✓  Resizing rows/columns
  ✓  Hiding rows/columns
  ✓  Context menu
  ✓  Comments

Documentation

Get Started

Install with npm

Run the following command in your terminal

npm install handsontable

You can also use Yarn, NuGet or load the bundle directly from jsDelivr.

Create a placeholder

Create an HTML placeholder

<div id="example"></div>

Import Handsontable and its stylesheet

import Handsontable from "handsontable";
import 'handsontable/dist/handsontable.full.css';

Initialize the grid

Now turn your placeholder into a data grid with sample data.

const data = [
  ['', 'Tesla', 'Volvo', 'Toyota', 'Ford'],
  ['2019', 10, 11, 12, 13],
  ['2020', 20, 11, 14, 13],
  ['2021', 30, 15, 12, 13]
];

const container = document.getElementById('example');
const hot = new Handsontable(container, {
  data: data,
  rowHeaders: true,
  colHeaders: true
});

Support

We provide support for developers working with commercial version via contact form or at [email protected].

If you use a non-commercial version then please ask your tagged question on StackOverflow.

License

Handsontable is a commercial software with two licenses available:

  • Free for non-commercial purposes such as teaching, academic research, and evaluation. Read it here.
  • Commercial license with support and maintenance included. See pricing plans.

License key

If you use Handsontable in a project that supports your commercial activity, then you must purchase the license key at handsontable.com.

If you use the free for non-commercial license of Handsontable, then pass the phrase 'non-commercial-and-evaluation', as described in this documentation.



Proudly created and maintained by the Handsontable Team.

Comments
  • problem using other language

    problem using other language

    Hello.

    First of all, I am Korean. I am trying to using this cool plugin. When I input Korean in a cell, first character presents English always.

    For example, I wanna write "한글", but the cell present "gㅏㄴ글". "아이" -> "dㅏ이". "도시" -> "eㅗ시".

    Please fix it or answer to me how solve this problem. Thank you.

    bug Status: Released 
    opened by Hokwang 69
  • Cell Function and Math Formula

    Cell Function and Math Formula

    if add cell function such as avg,sum,min,max,count and and can write formula for cell that result calculate form some cells is will bestest jquery excel plugin. you can use jquery.calculation plugin and suggest rename plugin to jquery.excel

    Status: Answered 
    opened by mojtabakaviani 62
  • Improve custom borders performance (SVG)

    Improve custom borders performance (SVG)

    Context

    The goal for this PR is to improve CustomBorders feature so that even complex custom border setup does not have a significant impact on performance of Handsontable.

    It started out as a solution to https://github.com/handsontable/handsontable/issues/6064, but during the course of fixing it turned out that the reason is a lot of redundant actions in border.js, selection.js and customBorders.js.

    Border edge lines are no longer rendered by the Border class. Instead, they are rendered using SVG, by a new low-level function getSvgPathsRenderer, managed in a new class BorderRenderer. There is one SVG per overlay. SVG is rendered atop the table, with pointer-events: none. Every stroke style is two <path>s in SVG (one horizontal, one vertical). If you have million borders, but all in one style, that's just one path element. Paths are windowed (= only the part of the border that corresponds to the rendered cells is updated at each scroll).

    The actual order and position of borders is implemented according to the spec in KB: https://kb.handsontable.com/display/HAN/Borders

    Class Border was renamed to SelectionHandle, because border rendering is removed from it. All SelectionHandle does now is rendering the corner or the selection handles on mobile.

    Breaking changes:

    1. 🚨 The visual position of borders is now different. The borders used to be rendered inside of a cell. Now they are entered on the gridlines.
    2. 🚨 Overwriting border styles using CSS is no longer possible. The only way to set border styles is through the settings object. You can see in a commit that changes the selection border of the custom menu from being defined in CSS into being defined in menu.js: https://github.com/handsontable/handsontable/commit/1b78d48ef7190d913d1da666a6953ad90cd2c9b6
    3. 🚨 In the past, border edges would overlap the header cell edges. Now they don't, just like in desktop spreadsheet apps. Old:
      image
      New:
      image

    How has this been tested?

    Manually using such config: https://gist.github.com/warpech/81686e38fa0bc5c8a35e7e2dfbb2e408

    This config has 100x100 cells with 4 borders each. It caused HOT 7.1.0, as well as the current develop (2531da4e24b30f16d37ca5734eab80d74cf91396) to freeze. After this PR, such config loads in 4.7s in Chrome.

    The borders should looks sharp in every browser at 100% zoom level. They might be blurry at other zoom levels that are not multiplies of 100.

    Types of changes

    • [x] Bug fix (non-breaking change which fixes an issue)
    • [ ] New feature or improvement (non-breaking change which adds functionality)
    • [x] Breaking change (fix or feature that would cause existing functionality to not work as expected)
    • [ ] Additional language file or change to the existing one (translations)

    Related issue(s):

    1. handsontable/handsontable#6467
    2. handsontable/handsontable#6064

    Checklist:

    • [x] My code follows the code style of this project,
    • [x] My change requires a change to the documentation.
    Status: On hold 
    opened by warpech 58
  • Handsontable cell is focusing, when focus in another input (for example, modal dialog)

    Handsontable cell is focusing, when focus in another input (for example, modal dialog)

    Hi, @warpech !

    Found interesting bug in new version of Handsontable.

    I have a handsontable with outsideClickDeselects: false (I really need this option is set to false), and jquery ui dialog. When I select any cell in handsontable and showing my dialog (by pressing button) and trying to press in my input on dialog by mouse focus is setting to selected cell in handsontalbe.

    Here is demonstration code http://jsfiddle.net/ggwgk/8/

    Btw, there is no such problem in version 0.7.5

    bug Focus / blur 
    opened by dansabirov 51
  • Multiple rows of column headers

    Multiple rows of column headers

    I'm trying to add a second group of column headers above the 'real' column headers. For example, my real headers are sports stats, but I want to be able to group them together under a top level grouping - like offensive and defense stats, etc. See table below.

    My approach was to simply generate them separately and insert them into the table like so:

    $('table.htCore thead').prepend('<tr><th colspan=3>OFFENSE</th><th colspan=3>DEFENSE</th></tr>');

    But, the table behaves strangely (duplicates the real header row instead of inserting my custom colspan'd headers).

    So then I tried adding it to both .htCore and .htBlockedRows $('table.htCore thead, table.htBlockedRows thead').prepend('<tr><th colspan=3>OFFENSE</th><th colspan=3>DEFENSE</th></tr>');

    But, all the clicks are 1 row off. Any tips on how I can add this? They don't need to be clickable or interact in any way.

    the goal...
    ---------------------------------
    |  OFFENSE   |      DEFENSE     |    <--- group headers
    ---------------------------------
    | K | E | TA | BS | BA | BE | D |    <--- the real headers
    ---------------------------------
    | 8 | 1 | 9  | 5  | 2  | 1  | 9 |    <--- the data
    ---------------------------------
    

    http://jsfiddle.net/Ckw9b/

    Status: Released 
    opened by cjameyson 39
  • Handsontable drops open source for a non-commercial license

    Handsontable drops open source for a non-commercial license

    Recently, we had a long and heated internal discussion about the licensing model of Handsontable. We noticed that building a sustainable business based on open source licensed software has become much harder. At the same time, we observe an increasing competition in the developer tools market. It is far more competitive than it was when we started this project back in 2011. Taking that into account, to ensure the longevity of Handsontable, we made a decision to change the way we distribute Handsontable.

    Here is a summary of the changes that take effect starting with version 7.0.0, which is scheduled for March 6, 2019:

    • Handsontable Pro is merged into Handsontable CE (Community Edition)
    • The combined software is called “Handsontable”
    • Handsontable 7.0.0 is the successor to both Handsontable CE 6.2.2 and Handsontable Pro 6.2.2
    • The MIT license is replaced with a custom, ‘free for non-commercial and evaluation’ license
    • The Handsontable Pro package on NPM is marked as deprecated and the repository on GitHub is archived (made read-only)

    This is a significant change for all of us. Let us explain the reasoning behind this decision.

    Our reasons behind the change

    Being able to see how Handsontable has grown over the last 8 years makes us proud. Each day, thousands of developers use it to add to their apps with better data management capabilities. Countless commercial and open source projects depend on Handsontable.

    However, it never developed all the traits of an authentic open source project. In an ideal world, it would gather a community of people collaborating and sharing ideas over a common goal. In such a situation you would expect the open source project to sustain itself with the help of the community. However, this wasn’t the case with Handsontable CE. Essentially, it was kept running thanks to the money earned from Handsontable Pro. Unfortunately, our observation is that the ratio of commercial to free users is about 1 to 25. Hence, the only way for us to keep investing in the product is to convert more free users into paying.

    We want to grow as a company whose only mission is to continuously improve Handsontable. We have an ambitious roadmap and a passionate team. What we need is a more balanced business model that would support our long-term goals.

    The new license

    The new, custom-written license is for everyone using Handsontable for non-commercial purposes. Our intention is to provide free software especially to:

    • Scientists conducting research and development
    • Students and teachers
    • Those who want to experiment with the software
    • Authentic not-for-profit organizations
    • Companies conducting development and tests

    On the technical side, except for the license, nothing changes in terms of the availability and openness of Handsontable. It stays on GitHub and we will review pull requests when they appear.

    However, we understand that you may not be able to use the new license. In such a case, you can purchase a commercial license or stay with Handsontable 6.2.2.

    For Handsontable Pro customers, the only things that change are the GitHub repository and the NPM package name. The Handsontable Pro repository will be archived (made read-only).

    Exciting times ahead

    The decision announced today will allow us to focus better on the development of the product. We are securing reasonable funding for the company by making sure that commercial products are based on a commercial version of Handsontable. It is important for us to sustain the company in the long-term. We are excited to see what the future holds for us!

    “Change is the essential process of all existence.” Spock, Star Trek

    Our pledge

    We believe in the power of authentic open source projects. We know that Handsontable wouldn’t have existed without open source libraries created by passionate developers. That is why we are excited to announce that we will be giving 1% of our monthly net profit back to open source creators. We haven’t yet decided which project to support. If you have any suggestions, please tweet them to us.

    Who stands behind Handsontable

    Handsontable is developed and maintained by Handsoncode, now a 14-person company which was founded by Marcin Warpechowski and Chris Spilka in 2015 in Gdynia, a charming city in northern Poland.

    Thank you

    We are very thankful to all of our contributors, users, and customers. We are opening the second chapter in Handsontable’s history, but we know that this is only possible because of you, the people who’ve written the first chapter with us.
    Chris Spilka and Marcin Warpechowski

    Announcement 
    opened by krzysztofspilka 35
  • Clicking on cell in scroll-able region scrolls to top

    Clicking on cell in scroll-able region scrolls to top

    Description

    If you have a HT in a div with overflow-y set to scroll, and you click on a cell, it scrolls to the top of the div.

    Steps to reproduce

    1. Open JSFiddle
    2. Scroll down to see the table
    3. Click on a cell in 2nd or 3rd row

    Demo

    http://jsfiddle.net/swLs6m4m/1/

    Your environment

    • Handsontable version: 35.0
    • Browser Name and version: Chrome 62 and Firefox Quantum 57
    • Operating System: Ubuntu 17.02 and Windows 10
    bug Core: Walkontable Status: Released 
    opened by lewisjb 33
  • #bad value# in an empty cell

    #bad value# in an empty cell

    Hi, there's a problem with checkbox columns. When an empty row is added to a table, it contains #bad value# in checkbox cells and you cannot change this value to anything else - the cell is read only, stuck with #bad value# in it. I'd like to specify some default value for a new row, but there's no way to do so.

    Version: 0.10.5

    bug Guess: A few hours Cell type: Checkbox Status: Released 
    opened by lafar6502 33
  • Vertical Scrolling Defect (since 0.9.9)

    Vertical Scrolling Defect (since 0.9.9)

    In our use of HOT the vertical scrolling is not behaving as expected (since 0.9.9). The size of the scroll bar does not match the amount of data in the table and scrolling is erratic.

    Also, when scrolling down hear the bottom there the table body displays only a few rows and whitespace then jumps back.

    I have created this JS Fiddle that illustrates the issue.

    http://jsfiddle.net/chrissanborn/vECgN/5/

    Our company is excited about using Handsontable (in a big way) and we just need this issue fixed in order to go forward with our POC.

    Thanks so much.

    bug 
    opened by chrissanborn 32
  • Ignore first rows while filtering and sorting

    Ignore first rows while filtering and sorting

    I have a custom dropdown for filtering, also need the ability to sort the data. Currently I am not able to do so since filtering and sorting applies to all the data including for headers. How can I implement a similar behavior while Ignoring the first row after header?

    In the following example the first row has values of "Do not sort" which would be great to ignore for sorting and filtering.

    http://jsfiddle.net/9rofomd5/

    Type: Feature Column sorting 
    opened by helmutgranda 31
  • UpdateSettings works very slow for hiddenColumns and Rows

    UpdateSettings works very slow for hiddenColumns and Rows

    Description

    UpdateSettings works very slow on certain conditions:

    • significant amount of data (100k rows * 50 columns, some of which are hidden)
    • the following plugins are used: hidden columns, trim rows, filters
    • updating anything (e.g. height of the sheet) takes 10-15 seconds.

    Destroying and recreating the sheet with the same data takes significantly less time (up to 3 seconds).

    Your environment

    • Handsontable version: latest pro
    • Browser Name and version: Google Chrome 58.0.3029.110 (64-bit)
    • Operating System: Windows 10
    Core: Performance enhancement Status: Released Core: Update settings Hiding 
    opened by arrdev 28
  • Docs: Fix typo

    Docs: Fix typo

    This PR:

    • Fixes a typo (manualColumnResize -> manualRowResize)

    Affected pages:

    • https://handsontable.com/docs/react-data-grid/api/options/#manualrowresize

    [skip changelog]

    Docs: Content 
    opened by kirszenbaum 0
  • [12.2.0] HandsonTable v12.3.0 is Laggy on Changing Tabs

    [12.2.0] HandsonTable v12.3.0 is Laggy on Changing Tabs

    Description

    I used this library to create tabs Fomantic-UI, I think it is similar to JQuery tabs. I notice that on version 12.3.0, when changing tab the browser freeze for like 2-3 seconds, even though my table only has ~10 columns + ~400 rows.

    So I rollback to 12.2.0 just to test, and find out the lag only appears on the newest version (12.3.0).

    Not sure what changes on the new version that make it laggy like that.

    Steps to reproduce

    1. Create simple jQuery tab, or FUI tabs
    2. Put Handsontable on a tab with ~10 columns + ~400 rows.
    3. Change tab to see the delay.

    Demo

    I can provide a JSFiddle if requires

    Your environment

    • Handsontable version: 12.3.0
    • Browser name and version: Webview2 108.0.1462.54 | MS Edge | npm 8.15.0
    • Operating system: Windows 10
    bug Core: Performance Regression Reported 
    opened by KiddoV 8
  • unify DOM of examples and search for table by ID

    unify DOM of examples and search for table by ID

    Context

    We need to unify DOM of examples to be sure that we are looking for correct element in visual testing

    How has this been tested?

    Launched locally and in Github Action if fork built for visual testing - all of tests passed correctly.

    Types of changes

    • [ ] Bug fix (non-breaking change which fixes an issue)
    • [ ] New feature or improvement (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
    • [ ] Additional language file or change to the existing one (translations)

    Related issue(s):

    Affected project(s):

    • [ ] handsontable
    • [ ] @handsontable/angular
    • [ ] @handsontable/react
    • [ ] @handsontable/vue
    • [ ] @handsontable/vue3

    Checklist:

    [skip changelog]

    opened by maciejbo-handsontable 0
  • Dropdown/Autocomplete cell editor only showing single row

    Dropdown/Autocomplete cell editor only showing single row

    Description

    The dropdown cell editor only shows one row with a scroll bar even when there are multiple items, which make it very hard to select an item for a dropdown or autocomplete cell type. Setting the visibleRows parameter doesn't seem to change the number of visible rows. This seems like a bug; curious if you can fix this and/or if there's a short-term workaround I can use. Thanks!

    Steps to reproduce

    See the jsfiddle example below and try to select an element from the dropdown in the second column of the table. As you can see, the dropdown only displays a single row with a scrollbar.

    Screenshot 2022-12-25 111308

    Demo

    https://jsfiddle.net/yL2jf1b5/

    Your environment

    • React wrapper version: 18.2.0
    • Handsontable version: 12.3.0
    • Browser name and version: Chrome 108.0.5359.125
    • Operating system: Windows 10
    opened by mendy-friedman 0
  • Make the password textbox value visible after each character input

    Make the password textbox value visible after each character input

    Make the password textbox value visible after each character input

    one input field, when a new character is entered it causes the previous character to become masked. The last character is masked when saved or the user leaves field

    Demo

    https://stackoverflow.com/questions/37186309/make-password-textbox-value-visible-after-each-character-input

    Your environment

    • Angular version: 1.7.8
    • Handsontable version: 7.4.2
    • Operating system: Windows
    enhancement Cell type: Base / Text / Password 
    opened by MehdiElMellali 1
  • Calling batch operation closes the cell editor

    Calling batch operation closes the cell editor

    Description

    When we call the batching method with a delay while the cell editor is open, the execution of said batch operation will cause the editor to close.

    Steps to reproduce

    1. Open the demo.
    2. Open the cell editor.
    3. Click the button and wait for 5 seconds.

    Demo

    https://jsfiddle.net/h9jqsdua/8/

    Your environment

    • Handsontable version: 12.3.0
    • Browser name and version: Google Chrome 108
    • Operating system: macOS Ventura 13.0
    bug Core: Performance Editor Reported 
    opened by adrianszymanski89 1
Releases(12.3.0)
  • 12.3.0(Dec 14, 2022)

    For more information on this release, see:

    Added

    • Added a new feature that lets you copy the contents of column headers by using 3 new context menu options: "Copy with headers", "Copy with group headers", and "Copy headers only". #2288
    • Added 4 new API methods for copying column headers programmatically: copyCellsOnly(), copyWithColumnHeaders(), copyWithAllColumnHeaders(), and copyColumnHeadersOnly(). #2288
    • Added missing TypeScript definitions of the CellCoords and CellRange classes, which are used in the arguments of some of the APIs. #9755
    • Added missing TypeScript definitions for the following Handsontable hooks: beforeColumnFreeze, afterColumnFreeze, beforeColumnUnfreeze, and afterColumnUnfreeze. #9859

    Fixed

    • Fixed an issue where the UndoRedo plugin didn't work properly with preconfigured columns. #10108
    • Fixed an issue where formulas inserted programmatically by using updateData() were not evaluated. #10011
    • Fixed a regression where setting a column's type could overwrite other custom-defined settings. #10128
    • Fixed an issue where Handsontable didn't render properly when initialized inside of a hidden container. #5322
    • Fixed an issue of desynchronization between configuration options (cell meta) and Handsontable's data. The issue occurred when Handsontable's options were modified through the following hooks: beforeCreateRow, afterCreateRow, beforeCreateCol, and afterCreateCol. #10136
    • Fixed an issue where comments added to fixed columns didn't display properly after scrolling. #9645
    • Fixed an issue where typing in a dropdown editor caused the IME to disappear, resulting in wrong characters being typed. #9672
    • React: Fixed an issue where dropdown cells weren't validated properly when using the HotColumn component. #10065
    Source code(tar.gz)
    Source code(zip)
  • 12.2.0(Oct 25, 2022)

    For more information on this release, see:

    Added

    • Added a new feature that lets you add rows and columns at a specified position. Now, the alter() method takes 4 new parameter values: insert_row_above, insert_row_below, insert_col_start, and insert_col_end. The insert_row and insert_col parameters are marked as deprecated. #9471

    Fixed

    • Fixed an issue where the width of the cell editor was calculated incorrectly. #3815
    • Fixed an issue where formulas surrounded by merged cells were converted to values by mistake. #6359
    • Fixed an issue where Handsontable could disappear on Firefox 93 (and later) in a specific use case. #9545
    • Fixed an issue where changing a cell's type through setCellMeta() didn't properly set the cell's editor and renderer. #9734
    • Fixed an issue where the dropdown menu didn't display when the NestedHeaders plugin was enabled and all rows were trimmed out. #9753

    Removed

    • Removed a type definition for a non-existing method, translateRowsToColumns(). #9919
    Source code(tar.gz)
    Source code(zip)
  • 12.1.3(Sep 22, 2022)

    For more information on this release, see:

    Fixed

    • Fixed incorrect date format conversion on input in the date editor. #9681
    • Fixed an error when adding a large number of rows using the alter method. #7840
    • Fixed IME text input in the editors. #9586
    • Fixed an issue where the editor did not open on key events when the cell was outside the viewport. #9022
    • Fixed an issue with "0" values being ignored by the Column Summary plugin. #6385
    • Fixed an error when opening the column dropdown menu with the Filters plugin enabled. #9561
    • Fixed an issue where the trimWhitespace option could not be used in the column and cell levels of the cascading configuration. #7387
    • Fixed the flickering of the selection area at the edge of the table while scrolling. #8317
    • Fixed misalignment on mobile devices when the edge cells were selected. #9621
    • Fixed type definitions for the method setSourceDataAtCell. #8599

    Removed

    • Removed a custom stable sorting implementation in favor of the stable sorting algorithm guaranteed by ECMAScript 2019. #6091
    • Removed type definitions for non-existing methods rowOffset and colOffset and a non-existing hook modifyRowSourceData. #8659, #7317
    Source code(tar.gz)
    Source code(zip)
  • 12.1.2(Jul 8, 2022)

    For more information on this release, see:

    Changed

    • Changed the version of the Moment.js dependency from 2.29.3 to 2.29.4, in reaction to a recently-found Moment.js security vulnerability. The vulnerability did not affect a correct configuration of Handsontable. #9638
    • Vue: Freezed the version of the Vue framework that is used in our build chain to ~2.6. This shouldn't affect apps that use Vue 2.7+. #9624
    Source code(tar.gz)
    Source code(zip)
  • 12.1.1(Jul 5, 2022)

  • 12.1.0(Jun 28, 2022)

    For more information on this release, see:

    Added

    • Added smoother row and column moving when some row or columns are hidden. #7613
    • Added getNearestNotHiddenIndex(), a new method that finds the visual index of the nearest not-hidden row or column and works even with large numbers of hidden rows or columns. The previous method, getFirstNotHiddenIndex(), still works, but is marked as deprecated. #9064
    • Added a Czech translation. #9343
    • Added a Serbian translation. #9469
    • Added new hooks: beforeColumnFreeze, afterColumnFreeze, beforeColumnUnfreeze, and afterColumnUnfreeze. #9248

    Changed

    • Replaced HTML entities appearing in Handsontable's license texts with canonical counterparts. #9487
    • Updated the Pikaday optional dependency to 1.8.2, to let Handsontable work with Parcel 2 without errors. #9410
    • React: Changed the wrapper's lifecycle methods, to let Handsontable work with React 17+ without warnings. #8748
    • Angular: Moved the @angular/core dependency to peer dependencies. #9574

    Fixed

    • Fixed an issue where dropdown and autocomplete cell editors rendered incorrectly if the preventOverflow option was set to 'horizontal'. #3828
    • Fixed an issue where frozen rows were getting duplicated. #4454
    • Fixed an issue where comments rendered outside the viewport. #4785
    • Fixed an issue where comments got positioned incorrectly when Handsontable ran within a scrollable element. #6744
    • Fixed an issue that occurred when Handsontable ran within an HTML <form>: pressing Enter inside another form's <input> could open Handsontable's dropdown menu. #9295
    • Fixed an issue where it was impossible to unmerge cells in the RTL layout direction. #9362
    • Fixed an issue where columns wider than the viewport's width and rows higher than the viewport's height didn't render correctly. #9473
    • Fixed an issue where dragging-to-scroll on mobile didn't work properly in the RTL layout direction. #9475
    • Fixed an issue where hiding columns with nested headers caused incorrect column width calculation (for the stretchH: 'all' option). #9496
    • Fixed an issue where ShortcutManager unnecessarily handled keyup events with no key defined. #9562
    Source code(tar.gz)
    Source code(zip)
  • 12.0.1(May 16, 2022)

    For more information on this release, see:

    Fixed

    • Fixed an issue where checking or unchecking a checkbox in a row with autoRowSize: true and multi-line cell values caused rows to align incorrectly. #7102
    • Fixed an issue where checking or unchecking a checkbox changed the cell width. #8211
    • Fixed an issue where using a single Handsontable instance with multiple HyperFormula sheets could lead to an uncaught TypeError. #8268
    • Fixed an issue where nested column headers didn't expand properly. #9099
    • Fixed an issue where updating custom borders could lead to uncaught error exceptions. #9455
    Source code(tar.gz)
    Source code(zip)
  • 12.0.0(Apr 28, 2022)

    For more information on this release, see:

    Added

    • Added ShortcutManager, a new API for customizing keyboard shortcuts. #8942
    • Added support for right-to-left (RTL) languages, introducing a new configuration option: layoutDirection. #8760
    • Added an Arabic translation. #9208
    • Added a new configuration option: fixedColumnsStart. #8760
    • Added a new keyboard shortcut (Ctrl/Cmd + Enter) for filling the selected range of cells with the value of the active cell. #9366
    • Added support for the Home and End keys inside cell editors, for moving the cursor to the beginning or end of the text. #9367
    • Added support for the latest Node LTS version. #9149

    Changed

    • Breaking change: Changed how updateSettings() handles data updates, to improve performance and the consistency of user experience. Now, when provided with a new data object, updateSettings() updates the data without resetting any states. #7263
    • Breaking change: Changed how updatePlugin() reacts to updateSettings() calls, to improve performance and the consistency of user experience. Now, calls to updateSettings() update a plugin's state only when the options object contains a configuration option that's relevant to that particular plugin. #9021
    • Breaking change: Changed the order of execution for two hooks: now, beforeKeyDown is properly fired before afterDocumentKeyDown. #6236
    • Breaking change: Changed how default keyboard shortcuts are defined, to improve keyboard navigation consistency. Most of the shortcuts did not change and are now properly documented in the keyboard shortcuts guide. However, some shortcuts that were not defined explicitly, and were not listed in the documentation, don't work anymore (e.g., Enter opens a cell's editor, but Ctrl + Enter doesn't). This change doesn't affect custom keyboard shortcuts. #8942
    • Breaking change: Split a cross-platform modifier key (Ctrl/Cmd) into two separate keys, to improve keyboard navigation consistency. Now, the Cmd key triggers actions on macOS where the Ctrl key triggers actions on Windows. For example, on macOS, Ctrl + A doesn't work anymore: Cmd + A is used instead. #9369
    • Breaking change: Changed the actions of the following keyboard shortcuts, to match the usual spreadsheet software behavior, and provide a more intuitive user experience: Ctrl/Cmd + , Ctrl/Cmd + Shift + , Ctrl/Cmd + , Ctrl/Cmd + Shift + , Ctrl/Cmd + , Ctrl/Cmd + Shift + , Ctrl/Cmd + , Ctrl/Cmd + Shift + , Home, Ctrl/Cmd + Home, End, Ctrl/Cmd + End, Shift + Page Up, and Shift + Page Down. #9363 #9364 #9365
    • Changed two scripts of the main Handsontable workspace (./), to speed up the build process: now, the npm run build and npm run test scripts don't build or test the Handsontable examples (./examples). #9412
    • Changed the version of the Moment.js dependency from 2.24.0 to 2.29.3, in reaction to a recently-found Moment.js security vulnerability that did not directly affect Handsontable. #9381
    • Changed the version of the HyperFormula optional dependency from ^1.2.0 to ^2.0.0. #9411

    Fixed

    • React, Angular, Vue 2, Vue 3: Fixed an issue where using updateSettings() caused problems for state managers. #8372
    • Fixed an issue where using updateSettings() caused hidden columns to reappear. #7165
    • Fixed an issue where using updateSettings() caused merged cells to unmerge. #3315
    • Fixed an issue where using updateSettings() caused the state of nested rows to reset. #8838
    • Fixed an issue where using updateSettings() caused problems with column sorting. #7688
    • React: Fixed an issue where using React's setState() within the afterFilter hook broke filtering. #7567
    • Vue 2: Fixed an issue where repeatedly changing Handsontable's height through updateSettings() caused Handsontable to crash. #7546
    • Vue 2: Fixed an issue where the failed validation status got erased when editing a new row. #7541
    • Fixed an issue where cell filtering did not use formula results. #5455
    • Fixed a wrong TypeScript definition in the BasePlugin class. #9175
    • Fixed an issue where the Ctrl/Cmd + Z and Ctrl/Cmd + Shift + Z keyboard shortcuts didn't behave properly inside cell editors. #9367
    • Fixed an issue where the dropdown menu contained unwanted rectangle elements. #9240
    • React, Vue 2, Vue 3: Fixed an issue with registering modules for the React, Vue 2, and Vue 3 wrappers, by adding an "exports" field to their package.json files. #9140

    Removed

    • Breaking change: Removed the Cmd + M keyboard shortcut (used for cell merging), as it conflicted with window minimizing on macOS. The Ctrl + M keyboard shortcut works the same as before. #9368
    • Breaking change: Removed the Shift + Page Up/Page Down keyboard shortcuts from the cell editing context. #9401
    • Dropped support for Internet Explorer 11 and Edge Legacy (the non-Chromium version of Edge). Handsontable 11.x becomes the long-term support (LTS) version for Internet Explorer 11 and Edge Legacy, until the end of 2023. #7026
    • React: Removed the enzyme dependency from the React wrapper. #9151
    Source code(tar.gz)
    Source code(zip)
  • 11.1.0(Jan 13, 2022)

    Added

    • Added updateData(), a new method that allows for replacing Handsontable's data without resetting the states of cells, rows and columns. #7263
    • Vue: Added Vue 3 support, by introducing a new wrapper. #7545

    Changed

    • Updated the TypeScript definition of the setDataAtCell() method. #8601
    • Extended Handsontable's GitHub Actions workflow, to allow for deploying code examples to GitHub Pages. #9058

    Fixed

    • Fixed an issue where the autocomplete editor's suggestion list didn't update properly. #7570
    • Fixed an issue where nested headers didn't render when data wasn't defined. #8589
    • Fixed some end-to-end tests that failed on mobile devices. #8749
    • Fixed an issue where the rendered selection could get shifted by 1px. #8756
    • Fixed an issue where the first column's border didn't display properly. #8767
    • Fixed an issue where the CollapsibleColumns plugin's expandAll() method didn't expand collapsed columns. #8900
    • Fixed end-to-end test scripts that occasionally crashed. #8961
    • Fixed a typo in the valueAccordingPercent() helper. #9006
    • Fixed an issue where the NestedRows plugin could throw a type error after calling the updateSettings() method. #9018
    • Fixed an issue where performance was affected by removing events. #9044
    • Fixed a wrong TypeScript definition of the MultiColumnSorting plugin's sort() method. #9067
    • Fixed an issue where the Comments plugin's editor disappeared after adding a comment. #9075 #6661
    • React: Fixed a wrong return type. #9000
    Source code(tar.gz)
    Source code(zip)
  • 11.0.1(Nov 17, 2021)

  • 11.0.0(Nov 17, 2021)

    Added

    • Added TypeScript definition files for Handsontable's modularized version. #7489 (Breaking change)
    • Vue: Added support for modularization to the Vue wrapper. #8820 (Breaking change)
    • React: Added support for modularization to the React wrapper. #8819 (Breaking change)
    • Angular: Added support for modularization to the Angular wrapper. #8818 (Breaking change)
    • Added a new package entry point that allows importing built-in modules in one function call: import { registerAllEditors, registerAllRenderers, registerAllValidators, registerAllCellTypes, registerAllPlugins } from 'handsontable/registry'. #8816
    • Added a new locale option, to properly handle locale-based data. #8897
    • Added a GitHub Actions workflow that covers testing Handsontable and the wrappers. #8652
    • Added new direction helpers (internal API) that lay ground for future RTL support. #8868

    Changed

    • Changed how the populateFromArray() method works with its method argument set to shift_down or shift_right. #888 (Breaking change)
    • Moved the entire Handsontable package to its own, new subdirectory: ./handsontable. #8759
    • Replaced the license files with updated versions. #8877

    Fixed

    • Fixed an issue with incorrect filtering of locale-based data while using search input from a drop-down menu. #6095
    • Fixed an error thrown when using the populateFromArray() method with its method argument set to shift_right. #6929
    • Fixed an issue with the beforeOnCellMouseDown and afterOnCellMouseDown hooks using wrong coordinates. #8498
    • Fixed a TypeError thrown when calling the updateSettings() method in Handsontable's modularized version. #8830
    • Fixed two issues with the documentation's canonicalUrl entries. #8886
    • Fixed an error thrown when autofill's source is a date cell. #8894
    • React: Fixed a React wrapper issue where it's impossible to use different sets of props in editor components reused across multiple columns. #8527
    Source code(tar.gz)
    Source code(zip)
  • 10.0.0(Sep 29, 2021)

    Changed

    • Unified the naming and description of the fourth argument, controller, for selection manipulation in the beforeOnCellMouseDown and beforeOnCellMouseOver hooks. #4996 (Breaking change)
    • Changed what the beforeRender and afterRender hooks are, and when they are triggered. Added two new hooks: beforeViewRender and afterViewRender. #6303 (Breaking change)
    • Changed the optional HyperFormula dependency from 0.6.2 to ^1.1.0, which introduces breaking changes for the Formulas plugin users. #8502 (Breaking change)
    • Changed the default values for the rowsLimit and columnsLimit options of the CopyPaste plugin. #8660 (Breaking change)
    • Added a default font family, size, weight and color. #8661 (Breaking change)
    • Changed the autoWrapRow and autoWrapCol options` default values from true to false. #8662 (Breaking change)
    • Improved the performance of the getCellMeta() method. #6303
    • Improved the documentation and TypeScript definition of the selectOptions option. #8488
    • Improved the arguments forwarding in the hooks #8668
    • Added a Github Actions workflow covering the testing of Handsontable and all of the wrappers. #8652

    Fixed

    • Fixed an issue of not resetting the date picker's configuration. #6636
    • An error won't be thrown while inserting a new row for nested rows in a specific case. #7137
    • Fixed a few problems with the NestedRows plugin, occurring with the Formulas plugin enabled. #8048
    • Fixed errors being thrown in the Formulas plugin if a provided sheet name contained a dash character. #8057
    • Fixed multiple bugs related to undo/redo actions while using the Formulas plugin. #8078
    • Fixed an issue where autofill was not able to be blocked/changed with the beforeChange hook when the Formulas plugin was enabled #8107
    • Data stored by the NestedRows plugin won't be corrupted by some actions. #8180
    • Collapsed parents won't be expanded after inserting rows. #8181
    • Fixed the cooperation of the dropdown menu and column sorting (menu closing on click). #8232
    • Data won't be corrupted anymore when some alterations are performed. #8614
    • Adjusted directories and files related to dataMap, to prevent potential circular references. #8704
    • Improved the performance of the regular expression used to detect numeric values, and fixed major code smells. #8752
    Source code(tar.gz)
    Source code(zip)
  • 9.0.2(Jul 28, 2021)

    Fixed

    • Fixed an issue with an error being thrown when lazy loading columns on a setup with Nested Headers + Hidden Columns. #7160
    • Fixed column header sizes not being updated on updateSettings calls containing columns. #7689
    • Fixed functional keys' behavior, to prevent unexpected editing. #7838
    • Fixed missing collapsible indicator on IE. #8028
    • Fixed support for row and column headers in the parseTable utility. #8041
    • Fixed a bug where not providing a data object with the nestedRows plugin enabled crashed the table. #8171
    • Vue: Fixed an issue where adding rows to a Handsontable instance wrapped for Vue resulted in additional rows being inserted at the end of the table. #8148
    • Vue: Fixed a problem in the Vue wrapper, where destroying the underlying Handsontable instance caused it to throw errors and crash. #8311
    • React: Fixed a problem in the React wrapper, where destroying the underlying Handsontable instance caused it to throw errors and crash. #8311
    • Angular: Fixed a problem in the Angular wrapper, where destroying the underlying Handsontable instance caused it to throw errors and crash. #8311

    Added

    • Added new documentation engine #7624
    Source code(tar.gz)
    Source code(zip)
  • 9.0.1(Jun 17, 2021)

    Fixed

    • Fixed an issue where the validator function was called twice when the Formulas plugin was enabled. #8138
    • Introduced a new CSS style for cells of the checkbox type to restore previous behaviour. #8196

    Removed

    • Removed the redundant internal jsonpatch library from the source code. #8140
    Source code(tar.gz)
    Source code(zip)
  • 9.0.0(Jun 1, 2021)

    Changed

    • Breaking change New Formulas plugin, with an entirely different API. See the migration guide for a full list of changes. Removed the required hot-formula-parser dependency for the sake of an optional one, hyperformula. #6466
    • Breaking change Changed the afterAutofill and beforeAutofill hooks' signatures. #7987
    • Upgraded eslint and eslint-related modules. #7531
    • Added fit & fdescribe to restricted globals in test files. #8088

    Fixed

    • Fixed a problem with the column indicator of the Collapsible Columns plugin not being displayed properly on styled headers. #7970
    • Fixed a problem with duplicated afterCreateCol hooks being triggered after undoing a removal of a column. #8076
    • Fixed a problem with formulas not being calculated in certain conditions. #4430
    • Fixed a bug with formulas displaying incorrect values after inserting new rows. #4654
    • Fixed a problem with the AVARAGE formula being updated incorrectly. #4675
    • Fixed a problem with the IF formulas not working properly. #5870
    • Fixed a bug with using the clear method broke the formulas in the table. #6248

    Removed

    • Breaking change Removed the deprecated plugins - Header Tooltips and Observe Changes. #8083

    Deprecated

    • Deprecated the beforeAutofillInsidePopulate hook. It will be removed in the next major release. #8095
    Source code(tar.gz)
    Source code(zip)
  • 8.4.0(May 11, 2021)

    Added

    • Introduced a separated attribute for the label options (the label DOM element may wrap input or be placed next to it). #3172
    • Introduced the modifyAutoColumnSizeSeed hook to let developers overwrite the default behaviour of the AutoColumnSize sampling. #3339
    • Added support for hiding columns for the NestedHeaders plugin. #6879
    • Added ability to skip stacking actions by the UndoRedo plugin and introduced new hooks. #6948

    Fixed

    • Fixed a problem with sorting the checkbox-typed cells and an issue with empty cells not being displayed properly. #4047
    • Fixed a problem where undoing the removal of row with readOnly cells was not performed properly. #4754
    • Fixed state-change resolving for externally added checkboxes. #5934
    • Fixed a problem with the native selection being removed with the fragmentSelection option enabled. #6083
    • Fixed a bug where number of columns rendered in the viewport was not correct. #6115
    • Fixed a bug with the Dropdown Menu not opening on Android devices. #6212
    • Fixed the double-tap issue on iOS. #6961
    • Fixed a problem with the Comments editor being destroyed after destroying another Handsontable instance. #7091
    • Fixed incorrect numericFormat's type definition. #7420
    • Fixed the trimWhitespace tests on Firefox. #7593
    • Fixed the [NPM Audit] Github Action job to report found vulnerabilities. #7621
    • Fixed some minor iOS problems. #7659
    • Fixed the TypeScript definition for the suspended rendering feature. #7666
    • Fixed the postbuild and examples:install scripts on Windows. #7680
    • Fixed the contents of the production package.json. #7723
    • Fixed an issue, where the callbacks for the UndoRedo plugin were called twice. #7825
    • Vue: Fixed a problem with displaying and removing rows in the Nested Rows plugin. #7548
    • React: Fixed an incompatibility in the property type definitions for the HotColumn component. #7612

    Changed

    • Enhanced the ESLint config file by adding a rule that checks if there are new lines missing before some keywords or statements. #7691
    Source code(tar.gz)
    Source code(zip)
  • 8.3.2(Mar 16, 2021)

    Fixed

    • Fixed a bug where it was impossible to enable disableVisualSelection for cells/columns. #5082
    • Fixed wrong paddings for multi-level headers. #5086
    • Fixed problems with the current option of the disableVisualSelection setting. #5869
    • Fixed problems with the header option of the disableVisualSelection setting. #6025
    • Fixed a bug where the "double-tap-to-zoom" gesture prevented the editor from opening properly on some mobile devices. #7142
    • Fixed a bug where calling the updateSettings method in the body of some callbacks would break the table. #7231
    • Fixed an issue where the maxRows and maxCols options interfered with hidden index calculations. #7350
    • Fixed problems with doubled borders being displayed when window was a scrollable container. #7356
    • Fixed a bug where value population from an edited cell would result in a console error. #7382
    • Fixed a bug where the dropdown cell type would not work on Safari 14+. #7413
    • Fixed a bug where the AutoRowSize plugin would break the table when placed in an iframe. #7424
    • Fixed bugs in navigation by HOME and END keys with hidden rows/columns enabled. #7454
    • Fixed a bug with the trimWhitespace option not working properly. #7458
    • Fixed an issue with inconsistent documentation and TypeScript definitions for colWidths and rowHeights options. #7507
    • Fixed the incorrect cellTypes module paths in the exports entry of the package.json file. #7597
    • Vue: Fixed Remote Code Execution vulnerability in the dev dependencies. #7620

    Added

    • Introduced the monorepo to this repository. From now on, handsontable, @handsontable/angular, @handsontable/react, and @handsontable/vue will all be developed in the same repo - handsontable. #7380
    • Added a custom ESLint rule which allows restricting specified modules from loading by import or re-exporting. #7473
    Source code(tar.gz)
    Source code(zip)
  • 8.3.1(Feb 10, 2021)

  • 8.3.0(Jan 28, 2021)

    Added

    • Introduced a new feature that allows postponing the table render and internal data cache update. The table rendering time can be reduced several-fold times by batching (using the batch method), multi-line API calls, or manually suspending rendering using the suspendRender and resumeRender methods. #7274

    • Introduced a possibility to import:

      • plugins
      • cell types
      • editors
      • renderers
      • validators

      as separate modules, along with the Handsontable base. This change allows utilizing only the parts of Handsontable the end application is actually using, without the overhead of the full bundle. #7403

    • Added a new workflow for managing and generating changelogs. #7405

    Fixed

    • Fixed a bug with auto-execution of the first item in the ContextMenu plugin. #7364
    • Fixed a bug where column sorting with multi column sorting crashed the table. #7415
    • Added a missing entry for the skipRowOnPaste option in the TypeScript definition file. #7394
    • Added missing tests to prevent issue #7377 from resurfacing. #7396
    • Fixed an issue where altering columns did not update filters attached to columns. #6830
    • Fixed typos and wrong return types in the TypeScript definition file. #7399, #7400
    • Updated the dependencies causing potential security issues, as well as Babel configuration needed after the update. #7463

    Changed

    • Corrected a typo in a helper method from the Column Sorting plugin. #7375
    • Optimized the performance of rendering the table with numerous spare rows (for minSpareRows, minSpareCols, minRows, and minCols options). #7439
    Source code(tar.gz)
    Source code(zip)
  • 8.2.0(Nov 12, 2020)

    Added

    • Added a new type of an Index Map named LinkedPhysicalIndexToValueMap. #7276
    • Added an external dependency, DOMPurify, to add HTML sanitization that should minimize the risk of inserting insecure code using Handsontable built-in functionalities. #7292

    Fixed

    • Fixed an issue where the container was not updated after trimming rows. #7241
    • Fixed an issue where the htmlToGridSettings helper threw an error if a <table> with no rows was passed. #7311
    • Fixed an issue where the sorting indicator moved incorrectly when a column was added. #6397
    • Fixed an issue where untrimming previously trimmed rows would sometimes result in the table instance not refreshing its height, leaving the row headers improperly rendered. #6276
    • Fixed an issue where the hidden columns plugin caused unintended scrolling when some cells were hidden. #7322
    • Fixed an issue where an error was thrown while hovering over row/column headers. #6926
    • Fixed an issue where table validation caused incorrect data rendering if the hidden rows/column plugin was enabled. #7301
    • Fixed an issue where adding 0 rows to the table ended with doubled entries in index mappers' collections. #7326
    • Fixed a problem with the inconsistent behavior of the Context Menu's "Clear column" disabled status. #7003
    • Fixed an issue with parsing multiline cells on pasting text/html mime-type. #7369
    Source code(tar.gz)
    Source code(zip)
  • 8.1.0(Oct 1, 2020)

    Added

    • Added support for resizing non-contiguous selected rows and columns. #7162, #4876
    • Added e2e tests and reorganized already existing ones. #6491

    Changed

    • Updated dependencies to meet security requirements. #7222
    • Improved performance for TrimRows, HiddenRows and HiddenColumns plugins for big datasets with many trimmed/hidden indexes. #7223

    Fixed

    • Fixed a typo in the definition file for the afterRemoveRow hook #7179
    • Fixed an issue where the value did not show if the first part of the merged area was hidden. #6871
    • Fixed an issue where after selecting the top-left element, resizing the row range was not possible. #7162
    • Fixed a bug introduced within #6871 and did some refactoring. #7220
    • Fixed an issue where column headers were cut off after hiding and revealing the columns with the HiddenColumns plugin. #6395
    • Fixed an issue where a redundant row was added during copy/paste operations in some cases. #5961
    • Fixed an issue where too many values were pasted after a column was hidden. #6743
    • Fixed a bug where an attempt to move collapsed parent rows, with the NestedRows plugin enabled, resulted in an error. #7132
    • Fixed an issue where, after column or row alteration, Handsontable threw an error if ColumnSummary was enabled without defined row ranges. #7174
    • Fixed an issue where using updateSettings was breaking column sorting in specific cases. #7228
    • Fixed an issue where, if fixedColumnsLeft was defined, rows had their left borders missing after disabling the row headers using updateSettings. #5735
    • Fixed an issue where the Handsontable instance could fall into an infinite loop during vertical scrolling. It only happened when the scrollable element was the window object. #7260
    • Fixed an issue with moving rows to the last row of the table when the NestedRows plugin was enabled. Repaired some other minor moving-related bugs as well. #6067
    • Fixed an issue with adding an unnecessary extra empty line in cells on Safari. #7262
    • Fixed an issue with clipped column headers when they were changed before or within usage of updateSettings. #6004
    Source code(tar.gz)
    Source code(zip)
  • 8.0.0(Aug 5, 2020)

    Major changes

    This version introduces a completely new architecture for row and column management - index mapper, which is responsible for the storage and management of index values. In prior versions, the calculation between physical and visual indexes was based on callbacks between hooks. That solution slowly led to inconsistencies and the calculation was imperfect in some cases. To fix that there was a major change in the whole system of mapping the indexes. The current solution offers an easier and more straightforward way to perform CRUD and move operations on rows and columns. It keeps all data in one place so getting and managing information is easier and less prone to bugs.

    The existing features were adapted to benefit from the new architecture. Apart from that, extra methods and hooks were added and there are few depreciations and removals, too.

    Breaking changes

    • Modifying the table's data by reference and calling render() will not work properly anymore. From this point onward, all the data-related operations need to be performed using the API methods, such as populateFromArray or setDataAtCell.
    • The modifyRow, modifyCol, unmodifyRow, unmodifyCol hooks are no longer needed and were removed. Their functionality can be achived by using API. More information in the 8.0.0 migration guide.
    • skipLengthCache hook was removed, indexMapper is now responsible for the cache and length.
    • The manualColumnFreeze plugin doesn't use the manualColumnMove plugin anymore.
    • The collapsibleColumns plugin doesn't use the hiddenColumns plugin anymore.
    • The nestedRows and filters plugins don't use the trimRows plugin anymore.
    • The minSpareRows and minRows options will ensure that the number of visible rows corresponds to the value provided to them (for example, the trimRows plugin won't have an impact on the number of displayed rows).
    • toPhysicalRow and toVisualColumnnow return null for non-existant rows/columns. #5945
    • The afterLoadData hook receives a different set of arguments. It used to be just the initialLoad flag, now the first argument is sourceData, followed by initialLoad.
    • The manualColumnFreeze plugin will now put the unfrozen columns right next to the last frozen one.
    • The RecordTranslator object and the t property available in the plugins were removed.
    • After-prefixed hooks (afterLoadData, afterFilter, etc.) are now called just before the render call.
    • Newly created rows and columns are now placed in the source data in the place calculated from its position in the visual context (they "stick" to their adjacent rows/columns). It also applies to moved rows and columns.
    • When the nestedRows plugin is enabled, moving rows will be possible only using the UI or by calling the dragRows method of the manualRowMove plugin.
    • The beforeRowResize, afterRowResize, beforeColumnResize, afterColumnResize hooks have the order of their arguments rearranged for the sake of consistency with other hooks and to fix an issue where multiple hooks didn't get the modified value in the pipeline: #3328
    • Changed the argument structure in collapsibleColumns' toggleCollapsibleSection method: #6193
    • The following sublist shows changes related to the refactor of HiddenColumns and CollapsibleColumns. They will be compatible with upcoming IndexMappers #5945 along with other adjustments #6547:
      • Hidden indexes aren’t rendered. As a consequence hooks beforeValueRender, beforeRenderer, afterRenderer, modifyColWidth, beforeStretchingColumnWidth etc. will be executed just for some of the columns (just the rendered ones).
      • The getColWidth for hidden index will return 0 – it used to return 0.1. Also, it will no longer be called internally, the need can be now achieved by managers of rows and columns.
      • The modifyColWidth hook will not be called internally. However, it will be executed when the user will call the getColWidth.
      • Hidden indexes aren't rendered. As a consequence hooks beforeValueRender, beforeRenderer, afterRenderer, modifyColWidth, beforeStretchingColumnWidth etc. will be executed just for some of the columns (just the rendered ones).
      • listen function from the core API used to accept modifyDocumentFocus as optional parameter, this parameter was removed.
      • CustomBorders plugin was adapted to work with HiddenColumns properly. From now on hiding cells at the start or the end of the range will also hide their borders. Hiding a single cell with borders will hide all of its borders. #7083
      • CollapsibleColumns will no longer use HiddenColumns plugin to work. #6204
      • Adjusted HiddenColumns to be compatible with upcoming IndexMappers. #6547
      • hiddenRow and hiddenColumn hooks were removed. They were used to check if a given index is hidden in the HiddenColumns and HiddenRows plugins. Since now there may be more sources of hiding indexes they have been replaced by IndexMapper with the new isHidden method. It keeps the broad information about hidden indexes and their sources.
      • rowOffset and colOffset were removed since they aliased the methods from Walkontable. #6547
    • Changes related to adjusting HiddenRows to new IndexMapper architecture are #6177:
      • Adjusted HiddenRows to new IndexMapper architecture. #6177
    • Developed a unified way to identify HOT "input" elements. All input elements owned by HOT got an attribute "data-hot-input" which are identified by that key. #6383
    • NestedHeaders plugin was rewritten, from now on, only a tree-like structure will be allowed, meaning, there will be no possibility to place nested headers in-between layers. #6716
    • The right mouse button (RMB) click on the corner when there is no data will show all options disabled. #6547
    • Left mouse button (LMB) click on the top left corner will now select all cells along with their headers. #6547
    • Removed the experimental GanttChart plugin. #7022
    • Adding properties which were not defined on initialization or by updateSettings to the source data is possible only by the usage of setSourceDataAtCell #6664
    • Passing columns or data inside the settings object when calling the updateSettings method will result in resetting states corresponding to rows and columns (ie. row/column sequence, column width, row height, freezed columns etc.). The same behavior can be seen when using loadData. In such cases, it is assumed that a new dataset is introduced upon calling updateSettings or loadData. #6547

    New features

    • Added the Index Mapper architecture and its API. #5112 (more information available in the PRs #5945 with additional changes in #6547)
    • Added a new batch method. #5945 along with other adjustments (https://github.com/handsontable/handsontable/issues/7068)

    Depreciations

    • The observeChanges plugin is no longer enabled by columnSorting and became deprecated. #5945
    • HeaderTooltips plugin becomes deprecated and will be removed in the next major version. #7023
    • IE support is deprecated and will be removed by the end of the year. #7026

    Changelog

    Added

    • Added modifySourceData hook and setSourceDataAtCell method. #6664
    • Added new argument to scrollViewportTo method: optional considerHiddenIndexes which is a boolean. #6547
    • Added additional information available in the cell meta object - the language. #6254.
    • Added a possibility to allow cancelling of autofill in the beforeAutofill hook. #4441
    • Added support for newer versions of moment, numbro and pikaday. #5159
    • Added afterAutoFill hook. #6135
    • Added deprecated warning messages mechanism for plugin hooks. #6613
    • Added missing types for instance.undoRedo. #6346
    • Added countRenderableColumns method to the TableView. #6177
    • Added missing "hide" property in CustomBorders typings. #6788
    • Added beforeSetCellMeta hook with an ability to cancel the changes. #5388
    • Added additional test for autofill plugin. #6756

    Changed

    • Changed how manualRowMove and manualColumnMove plugins work #5945
    • Click on a row header will select all cells (also hidden). #2391
    • Extracted Cell-Meta logic from Core to separate module. #6254
    • The CellMeta manager was refactored for future features and improvements. #6254
    • Rows can be resized to less than rowHeights. #6149
    • Left mouse button (LMB) click on the corner will now select all cells. #6547
    • The right mouse button (RMB) click on the corner, column and row headers will show just some options, defined by newly created specification #7082
    • Hidden indexes will no longer be rendered, as a consequence afterRenderer, modifyColWidth, beforeStretchingColumnWidth will be executable only on visible (meaning, rendered) rows and columns. #6547
    • The getColWidth for hidden index will return 0 - it used to return 0.1 #6547
    • The modifyColWidth hook isn't called internally. However, it will be executed when the user will call the getColWidth. #6547
    • Hidden rows/columns won't rendered anymore. As a consequence hooks beforeValueRender, beforeRenderer, afterRenderer, modifyColWidth, beforeStretchingColumnWidth etc. will be executed just for some of the columns (just the renderable ones). #6547
    • Selection behavior changed when hiding cells from the ContextMenu, now it is selecting a column on the right when there is space on right to the last selected column, selecting a column on the left otherwise. #6547
    • Developed a unified way to identify HOT "input" elements. All input elements owned by HOT got an attribute "data-hot-input" which are identified by that key. #6383
    • NestedHeaders plugin was rewritten, from now on, only a tree-like structure will be allowed, meaning, there will be no possibility to place nested headers in-between layers. #6716
    • CustomBorders plugin was adapted to work with HiddenColumns properly, from now on hiding cells at the start or at the end of a range will also hide their borders. Also, hiding a single cell with borders will hide all of its borders. #7083
    • Modifying the table's data by reference and calling render() will not work properly anymore. From this point onward, all the data-related operations need to be performed using the API methods, such as populateFromArray or setDataAtCell. #5945
    • Removed dependencies between plugins: the manualColumnFreeze plugin doesn't use the manualColumnMove, the collapsibleColumns plugin doesn't use the hiddenColumns plugin, nestedRows plugin doesn't use the trimRows plugin, filters plugin doesn't use the trimRows plugin anymore. #5945 along with other adjustments #6547:
    • The minSpareRows and minRows options will ensure that the number of visible rows corresponds to the value provided to them (for example, the trimRows plugin won't have an impact on the number of displayed rows). #5945
    • toPhysicalRow and toVisualColumn now return null for non-existant rows/columns. #5945
    • The afterLoadData hook receives a different set of arguments. It used to be just the initialLoad flag, now the first argument is sourceData, followed by initialLoad. #5945
    • The manualColumnFreeze plugin unfreezes the column just after the "line of freeze". #5945
    • The RecordTranslator object and the t property available in the plugins were removed. #5945
    • After-prefixed hooks (afterLoadData, afterFilter, etc.) are now called just before the render call. #5945
    • Newly created rows and columns are now placed in the source data in the place calculated from its position in the visual context (they "stick" to their adjacent rows/columns). It also applies to moved rows and columns. #5945
    • When the nestedRows plugin is enabled, moving rows will be possible only using the UI or by calling the dragRows method of the manualRowMove plugin. #5945
    • The beforeRowResize, afterRowResize, beforeColumnResize, afterColumnResize hooks have the order of their arguments rearranged for the sake of consistency with other hooks. #3328
    • Changed the argument structure in collapsibleColumns' toggleCollapsibleSection method. #6193
    • Updated the moment, numbro and pikaday dependencies to their latest versions. #6610
    • Standardize the z-index properties between the overlays. #6269

    Deprecated

    • HeaderTooltips plugin becomes deprecated and will be removed in the next major version. #7023
    • IE support is deprecated and will be removed by the end of the year. #7026

    Removed

    • Removed firstVisibleColumn CSS class as no longer needed. #6547
    • Removed helpers that covered IE8 support or are not needed anymore. #6525
    • Removed old unnecessary warning about beforeChange callback. #6792
    • Removed debug key (key, css, docs). #6672
    • Removed hiddenRow and hiddenColumn hooks. #6547
    • Removed optional argument modifyDocumentFocus from the listen function. #6547
    • Removed rowOffset and colOffset public API methods since they aliased the methods from Walkontable. #6547
    • Removed the experimental GanttChart plugin. #7022
    • Removed post-install warning from package.json file #6608
    • The modifyRow, modifyCol, unmodifyRow, unmodifyCol and skipLengthCache hooks are no longer needed and were removed. #5945

    Fixed

    • Fixed a problem with data not being added to the table properly with the columnSorting option enabled. #2685
    • Fixed a problem with loadData not resetting the row order changed by the manualRowMove plugin. #3568
    • Fixed a bug, where using alter's insert_row after using the loadData method and sorting the data would add unintentional additional rows to the table. #3809
    • Fixed a bug, where blank rows appeared in the middle of the table after using loadData along with the minSpareRows option. #3937
    • Fixed a problem with the columnSummary plugin not working properly after adding new rows using the Context Menu and sorting the data. #3924
    • Fixed a bug, where calling loadData with an object-based data source would not work properly. #4204
    • Fixed a bug with the filters plugin using incorrect indexes after moving and/or sorting the table. #4442
    • Fixed a bug that caused a column to contain improper data after moving it to index 0. #4470
    • Fixed a bug with the afterRowMove hook receiving an improper target argument. #4501
    • Fixed a problem with the manualColumnFreeze plugin enabling manualColumnMove, even if it was declared as false. #4553
    • Fixed a bug, where calling loadData with minSpareRows and manualRowMove enabled caused the table to improperly load the data. #4576
    • Fixed a bug, where enabling columnSorting caused the manualColumnFreeze to be unusable. #4601
    • Fixed a problem, where the columns were assigned improper widths after inserting additional columns or removing any of them. #4666
    • Fixed a bug, where moving rows was impossible while persistentState was enabled. #4713
    • Fixed a bug, where manualColumnMove didn't work if the dataset was empty. #4926
    • Fixed a bug, where calling loadData with minSpareRows enabled would cause unwanted blank rows to appear. #5707
    • Fixed a bug with the afterColumnMove hook receiving an improper target argument. #5173
    • Fixed a problem, where filtering data after moving rows would not work properly. #5178
    • Fixed a bug, where calling loadData made NaN appear in the column headers. #5369
    • Fixed a bug with the skipColumnOnPaste option not working properly when using columnSorting and hiddenColumns. #5824
    • Fixed a bug with the trimRows plugin did not work properly after moving rows. #5860
    • Fixed a problem with minSpareRows not working properly with the trimRows plugin being used. #5862
    • Fixed a bug, where filtering and sorting data would cause the toVisualRow method to return the wrong results. #5890
    • Fixed a bug with the filters and trimRows plugins not working properly alongside each other. #5915
    • Fixed a bug, where manualColumnMove would not work properly when the data object properties count would be lower than the table column count. #5931
    • Fixed a bug with the trimRows plugin did not work properly with the startRows option. #5953
    • Fixed a problem, where using loadData after sorting would not work as expected. #5956
    • Fixed a problem with the beforeColumnMove and afterColumnMove hooks not containing information about their destination indexes. #6005
    • Fixed a problem where using filters and minSpareRows would make the table add an empty row at the beginning of the table. #6278
    • Fixed a bug with the manualRowMove plugin would duplicate data in the moved rows, when used with a row index greater than the table row count. #6088
    • Fixed a bug, where the toVisualRow method returned null when using the trimRows and columnSorting plugins together. #6310
    • Fixed a problem, where calling updateSettings in the afterColumnMove hook callback would have no effect. #4480
    • Fixed a bug, where calling loadData would make the filters plugin to not behave as expected. #5244
    • Fixed a bug, where detaching a child from a parent in the nestedRows plugin would cause a +/- button misalignment. #5900
    • Fixed a problem with the columnSummary plugin creating a doubled summary row. #5794
    • Fixed a bug, where moving children between parents using the nestedRows plugin would throw an error. #6066
    • Fixed a bug, where merging cells would conflict with the columnSorting plugin. #6086
    • Fixed a bug, where the row headers would stay visible after removing all the table columns. #6412
    • Fixed an issue where Hidden columns become visible when the user ran updateSettings. #4121
    • Fixed an issue where using hiddenColumns and stretchH showed a redundant horizontal scrollbar. #4181
    • Fixed an issue in which if the last column was a hidden column and stretchH was enabled, the last column was displayed. #4370
    • Fixed an issue where updateSettings performance was very low because of hiddenColumns being rendered. #4381
    • Fixed an issue where collapse was not working correctly with custom cell renderers. #4716
    • Fixed an issue where hiddenColumns did not work properly with columnSorting. #5571
    • Fixed an issue where manualColumnMove should work with hiddenColumns. #5598
    • Fixed an issue where hiddenColumns option interfered with the keyboard movement. #5704
    • Fixed an issue where after hiding the first two rows, the row headers became de-synchronized by 1px. #5817
    • Fixed an issue where hiding columns affected selection of hidden columns. #5871
    • Fixed an issue where if collapsibleColumns were set to true it was impossible to exit selection mode. #5875
    • Fixed an issue where hiddenColumns did not work properly with autoWrapRow/autoWrapCol. #5877
    • Fixed an issue on IE where hiding the first column caused a display of double border for top left corner. #5881
    • Fixed an issue where nestedHeaders duplicated a header name if more columns are added. #5882
    • Fixed an issue where hiddenColumns plugin unset cell's renderer. #5883
    • Fixed an issue where hiddenColumns had stored visual indexes and should have used physical indexes. #5909
    • Fixed an issue where hidden columns should be unrecoverable. #6113
    • Fixed an issue where row selection ignored columns that are hidden at the end. #6181
    • Fixed an issue where defining data with more data than used in columns caused an issue with showing column once it was hidden. #6426
    • Fixed an issue where hiding rows, while there was a merged area, involved caused data shifting and unexpected merged area coordinates. #6376
    • Fixed an issue where colHeader was truncated after moving hiddenColumn. #6463
    • Fixed an issue where the last hidden column was visible upon column resizing. #6557
    • Fixed an issue where with hiding columns after moved them manually. #6668
    • Fixed an issue where setting columnSorting to true (on initialization or via updateSettings) made headers non-collapsible programmatically via collapseAll method. #4999
    • Fixed an issue where customBorders plugin was missing in the definition file. #6477
    • Fixed incorrect size of wtHiderand and wtHolder in overlays. #3873
    • Fixed an issue where updateSettings could not update tableClassName. #6295
    • Fixed an issue where JSON data with empty value was losing some double quotes when pasted into a cell. #6167
    • Fixed an issue where some classes for the table were missing if one of them was empty. #6371
    • Fixed an issue where clicking in a contextmenu's border opened the native context menu. #6218
    • Fixed the error that ocurred during loading of E2E test runner in Edge and IE. #6713
    • Fixed the inconsistency and problems with adding rows from the corner when all rows are trimmed. #7061
    • Fixed an issue where using read-only and alignment from the context menu was disabled when all columns were selected. #7114
    • Fixed an issue where setting focus to a column to open context menu after applying a filter was impossible. #7005
    • Fixed an issue where minSpareCols with undo added too many columns. #6363
    • Fixed the inconsistency in selection when using the right mouse button for first row/column. #6334
    • Fixed an issue where undoing column removal caused column headers to lack a header. #6992
    • Fixed an issue where readOnly for column was erased (did not apply) if filters were used. #6559
    • Fixed an issue where readonly property was lost after declining confirmation in beforeRemoveCol or beforeRemoverow. #6332
    • Fixed an issue where readOnly state for some cells was lost when rows with trimRows turned on were removed. #6990
    • Fixed incorrect column header highlight when merged cells were unmerged and hiddenColumns were used. #6978
    • Fixed an issue where after hiding the first row, the second row top border disappeared. #6977
    • Fixed an issue with incorrect selection after hiding the first row. #6831
    • Fixed an issue where hiding the first row caused blue highlight in column headers selection to disappear. #6976
    • Fixed wrong selection area after sorting with hidden rows. #6386
    • Fixed an issue where it was not possible to use selectAll when the first row was hidden. #6975
    • Fixed an issue where it was possible to select hidden row or column. #6974
    • Fixed an issue where row indexes changed if the first row was hiding after moving row from bottom to top. #6965
    • Fixed an issue where selection skipped the highest parent. #6770
    • Fixed an iisue where nestedRows blocked table from loading if data was not provided. #6928
    • Fixed an isse where it was impossible to go back to the original cell after dragging down. #4233
    • Fixed an issue where keyboard navigation did not work on merged cells with hidden rows/columns. #6973
    • Fixed an issue where trimRows and hiddenRows with specific settings broke borders. #6904
    • Fixed wrong union type for startPosition. #6840
    • Fixed type mismatch for Handsontable.plugins.ContextMenu. #6347
    • Fixed an issue where manualColumnMove did not modify the columns in updateSettings. #5200
    • Fixed rendering issue on column udpate with updateSettings. #3770
    • Fixed an issue where expanding a collapsed column was also expanding 'child' collapsed columns, except the first child. #5792
    • Fixed an issue with inproper selection for headers when the first column was hidden. #5999
    • Fixed an issue where it was not possible to align cells if the selection was made upward. #6600
    • Fixed an issue where currentColClassName did not work properly with nestedHeaders. #5861
    • Fixed an issue with scrollbar and dimension calculation in Firefox for toggling column visibility with fixed columns and stretchH. #6186
    • Fixed an issue with undoing the nested row removal. #6433
    • Fixed an isse where getSourceData functions returned wrong data for nested rows. #5771
    • Fixed na issue where formulas plugin did not work with nestedRows. #4154
    • Fixed an issue where nested headers and hidden columns highlighted ad additional column when used together. #6881
    • Fixed an issue where getByRange for sourceData did not work properly with nested object data. #6548
    • Fixed an issue where window.frameElement threw errors in MSEdge, IE and Safari. #6478
    • Fixed an issue where DataSource.countColumns returned invalid number of columns for nested objects. #3958
    • Fixed an issue where mergedCells with hidden cells caused problems with rendering. #7020
    • Fixed an issue where it was not possible to move column when all columns were selected by ctrl + a. #6355
    • Fixed an issue where double click on the column resize handle did not adjust size correctly. #6755
    • Fixed an issue where the cell meta was retrieved using the wrong coordinates. #6703
    • Fixed nested rows incorrect state after changing data. #5753
    • Fixed an issue in EDGE where the dropdown menu onMouseOut event caused critical errors when hovering over vertical scrollbar. #6699
    • Fixed an issue with too many layers of highlight with noncontinuous selection on merged cells. #7028
    • Fixed an issue where NestedHeaders did not allow to define header level as an empty array. #7035
    • Fixed an issue where passing nestedHeaders as a single empty array stoped the table from rendering. #7036
    • Fixed an issue where opening a context menu for a column when its hidden data was selected did not block adding of rows by the menu. #7050
    • Fixed an issue where it was not possible to navigate past hidden column using keyboard ifhot.updateSettings was called in afterSelection. #3726
    • Fixed an issue where headers did not export with exportToFile in the specific case. #4176
    • Fixed an issue with types mismatch. #6035
    • Fixed an issue where manual row resize handler threw an error when bottom rows overlay was enabled. #6435
    • Fixed an issue where the afterRowResize hook shared incorrect results in the second parameter. #6430
    • Fixed an issue where the row/column resize hooks should not have returned null. #7074
    • Fixed the loss of selection after merging from headers. #7076
    • Fixed an issue where calling updateSettings changed the index of frozen columns via freezeColumn method. #6843
    • Fixed an issue where deleting the last column via updateSettings which was part of the selection caused scroll to the bottom. #5849
    • Fixed an issue where it was not possible to hide rows and merge cells at the same time. #6224
    • Fixed the wrong data in merge cells after the hidden column and additionally an error occurs. #6888
    • Fixed an issue where it was not possible to change cell type via setCellMeta. #4793
    • Fixed an issue where cell editor did not dynamically changed while changing the cell type. #4360
    • Fixed an issue where it was not possible to unmerge cells if part of them was hidden. #7095
    • Fixed an issue where calling clear method removed the focus from the table. #7099
    • Fixed an issue where clear method did not work for hidden data. #7097
    • Fixed an issue where the editor was moved by 1px when the first row / column was hidden. #6982
    • Fixed an issue where headers were deselected after undoing removal. #6670
    • Fixed an issue with improper selection after insert column/row when mergeCells was enabled. #4897
    • Fixed an issue where wrong cell meta was removed when deleting rows. #6051
    • Fixed wrong types of beforeRowMove arguments. #6539
    • Fixed an issue where selection of a whole row did not happen consequently after selecting a row header. #5906
    • Fixed an issue where it was not possible to use physical row index instead of visual one. #6309
    • Fixed an issue where incorrect data was returned after undoing the remove column option. #5000
    • Fixed - Copy and paste works properly also when selecting hidden columns when: all columns within a selected range are hidden and when just some columns within a selected range are hidden. #7043.
    • Fixed an issue where it was impossible to add new row in the nestedRows. #5133
    • Fixed an issue where afterOnCellMouseDown returned (0,0) coords after clicking on the topleft corner. #3978
    • Fixed an issue where persisted manualColumnMove was not restored when using loadData. #5207
    • Fixed issues with filtering results in blank rows. #5208
    • Fixed an issue where changing data on collapsed rows resulted in error. #5328
    • Fixed an issue where the manualColumnMove operation affected the column order of data loaded by loadData. #5591
    • Fixed an issue where nestedRows did not allow to keep rowHeaders after collapsing. #5874
    • Fixed performance and CPU issue caused by using some handsontable properties. #6058
    • Fixed an error with columnSummary plugin when trying to create a row. #6300
    • Fixed an error where walkontable.css and handsontable.css stylesheets were out of sync. #6381
    • Fixed an issue where colHeaders order was not updated after manual move with empty object data source. #6413
    • Fixed "detach from parent" option. #6432
    • Fixed an issue where PreventOverflow feature did not work if multiColumnSorting plugin was enabled. #6514
    • Fixed an issue where old CSS classes were not removed after updateSettings. #6575
    • Fixed an issue where columnSummary, Filters and spare rows were causing 'RangeError: Maximum call stack size exceeded'. #6695
    • Fixed an issue where afterSelectionEnd returned incorrect data when clicking on a column when all rows were hidden. #7045
    • Fixed an issue where wrapping was not applied after setting trimWhitespace to false. #6232
    • Fixed an issue with additional selection border in iOS. #7103
    • Fixed an issue with rendering different borders. #6955
    • Fixed an issue with BACKSPACE not working properly in the filter by value input. #6842
    • Fixed an issue with Undo/Redo not working with fixing columns. #6869
    • Added a missing argument in the deepObjectSize function. #6821
    • Fixed an issue where the table threw errors while clicking the cells if the Handsontable was initialized with fixedRowsTop and fixedRowsBottom higher than rows length. #6718
    • Fixed an issue where it was not possible to change the state of checkbox-type, non-contiguous cells using SPACE. #4882
    • Fixed an issue where resizing made rows shorter than expected and caused row misalignment. #6429
    • Fixed an issue where Handsontable was missing rows when preventOverflow with updateSettings were used. #4303
    • Fixed inconsistency between selecting all columns with drag and via a CTRL/CMD + A shortcut. #6327
    Source code(tar.gz)
    Source code(zip)
  • 8.0.0-beta.2(Jul 15, 2020)

    We are excited to announce we have just released the second beta version of 8.0.0. This blog post describes changes that happened after the release of the first beta, for the previous changes please see the previous blog post.

    After implementing a new architecture for managing row and column indexes several parts of the library had te be adapted. It mainly includes adjusting the existing hooks to work properly with the new solution for managing the indexes. This is the last step before releasing a stable 8.0.0 version.

    Major changes

    We adapted the library to work with the new architecture for row and column management.

    Breaking changes

    • Changes related to the refactor of HiddenColumns and CollapsibleColumns. They will be compatible with upcoming IndexMappers #6547 along with other adjustments #6178:
      • Hidden indexes will no longer be rendered, as a consequence afterRenderer, modifyColWidth, beforeStretchingColumnWidth will be executable only on visible (meaning, rendered) rows and columns.
      • The getColWidth for hidden index will return 0 - it used to return 0.1. Also, it will no longer be called internally, the need can be now achieved by managers of rows and columns.
      • The modifyColWidth hook will not be called internally. However, it will be executed when the user will call the getColWidth.
      • Hidden indexes aren't rendered. As a consequence hooks beforeValueRender, beforeRenderer, afterRenderer, modifyColWidth, beforeStretchingColumnWidth etc. will be executed just for some of the columns (just the rendered ones).
      • listen function from the core API used to accept modifyDocumentFocus as optional parameter, this parameter was removed.
      • CustomBorders plugin was adapted to work with HiddenColumns properly, from now on hiding cells at the start or at the end of a range will also hide their borders. Also, hiding a single cell with borders will hide all of its borders. #7083.
      • CollapsibleColumns will no longer use HiddenColumns plugin to work. #6204
      • Refactored HiddenColumns to be compatible with upcoming IndexMappers. #6179
      • Renamed the following methods of the IndexMapper:
        • from getPhysicalIndex to getPhysicalFromVisualIndex
        • from getVisualIndex to getVisualFromPhysicalIndex
        • from isSkipped to isTrimmed
        • from getNotSkippedIndexes to getNotTrimmedIndexes
        • from getNotSkippedIndexesLength to getNotTrimmedIndexesLength
        • from SkipMap to TrimmingMap
        • from VisualIndexToPhysicalIndexMap to IndexesSequence.
      • hiddenRow and hiddenColumn hooks were removed. They were used to check if a given index is hidden in the HiddenColumns and HiddenRows plugins. Since now there may be more sources of hiding indexes they have been replaced by IndexMapper with the new isHidden method. It keeps the broad information about hidden indexes and their sources.
      • rowOffset and colOffset were removed since they aliased the methods from Walkontable #6547
    • Changes related to adjusting HiddenRows to new IndexMapper architecture #6177:
      • Adjusted HiddenRows to new IndexMapper architecture.
      • Refactored the HiddenRows plugin. #6887
    • Selection behavior changed when hiding cells from the ContextMenu, now it is selecting a column on the right when there is space on right to the last selected column, selecting a column on the left otherwise. #6949
    • Developed a unified way to identify HOT "input" elements. All input elements owned by HOT got an attribute "data-hot-input" which are identified by that key. #6383.
    • NestedHeaders plugin was rewritten, from now on, only a tree-like structure will be allowed, meaning, there will be no possibility to place nested headers in-between layers #6716.
    • Added modifySourceData hook and setSourceDataAtRowProp, setSourceDataAtCell methods. #6664
    • The right mouse button (RMB) click on the corner when there is no data will show all options disabled. This has two exceptions though: Insert column right and Insert row below when a table has data type defined by dataSchema as array, except Insert row right otherwise.
    • Left mouse button (LMB) click on the top left corner will now select all cells along with their headers.
    • Removed the experimental GanttChart plugin #7022

    Depraciations

    • HeaderTooltips plugin becomes deprecated and will be removed in the next major version. #7023
    • Internet Explorer support is deprecated and will be removed by the end of the year #7026

    Changelog

    Added

    • Added modifySourceData hook and setSourceDataAtRowProp, setSourceDataAtCell methods. #6664.
    • Added an extra type of index map has been introduced. It's HidingMap. It works similar to the TrimmingMap. #6547
    • Added new methods to the IndexMapper class #6547:
      • getPhysicalFromRenderableIndex: (renderableIndex: number) => number | null,
      • getVisualFromRenderableIndex: (renderableIndex: number) => number | null,
      • getRenderableFromVisualIndex: (visualIndex: number) => number | null,
      • isHidden: (physicalIndex: number) => boolean,
      • getFirstNotHiddenIndex: (fromVisualIndex: number, incrementBy: number, searchAlsoOtherWayAround?: boolean, indexForNextSearch?: number) => number | null,
      • getNotHiddenIndexes: (readFromCache?: boolean) => number[],
      • getNotHiddenIndexesLength: () => number,
      • getRenderableIndexes: (readFromCache?: boolean) => number[],
      • getRenderableIndexesLength: () => number.
    • Added new argument to scrollViewportTo method: optional considerHiddenIndexes which is a boolean. #6547
    • Added additional information available in the cell meta object - the language. #6254.
    • Added a possibility to allow cancelling of autofill in the beforeAutofill hook #4441
    • Added support for newer versions of moment, numbro and pikaday. #5159
    • Added afterAutoFill hook. #6135
    • Added z-index to fixedRowsBottom. #6269
    • Added deprecated warning messages mechanism for plugin hooks. #6613
    • Added a missing argument in the deepObjectSize function. #6821
    • Added missing types for instance.undoRedo. #6346
    • Added countRenderableColumns method to the TableView #6887
    • Added missing "hide" property in CustomBorders typings. #6788
    • Added beforeSetCellMeta hook with an ability to cancel the changes. #5388
    • Added additional test for autofill plugin. #6756

    Changed

    • Refactored hidden indexes. #6595
    • Click on a row header will select all cells (also hidden). #2391
    • Extracted Cell-Meta logic from Core to separate module. #6254
    • The CellMeta manager was refactored for future features and improvements. #6233
    • Rows can be resized to less than rowHeights. #6149
    • Left mouse button (LMB) click on the corner will now select all cells. #6547
    • The right mouse button (RMB) click on the corner when there is no data will show all options disabled. This has two exceptions though: Insert column right and Insert row below when a table has data type defined by dataSchema as array, except Insert row right otherwise. #6547
    • Hidden indexes will no longer be rendered, as a consequence afterRenderer, modifyColWidth, beforeStretchingColumnWidth will be executable only on visible (meaning, rendered) rows and columns. #6547
    • The getColWidth for hidden index will return 0 - it used to return 0.1. Also, it will no longer be called internally, the need can be now achieved by managers of rows and columns. #6547
    • Left mouse button (LMB) click on the top left corner will now select all cells. #6547
    • The modifyColWidth hook isn't called internally. However, it will be executed when the user will call the getColWidth. #6547
    • IndexMapper getPhysicalIndex method was renamed to getPhysicalFromVisualIndex.#6547
    • IndexMapper getVisualIndex method was renamed to getVisualFromPhysicalIndex.#6547
    • IndexMapper isSkipped method was renamed to isTrimmed.#6547
    • IndexMapper getNotSkippedIndexes method was renamed to getNotTrimmedIndexes.#6547
    • IndexMapper getNotSkippedIndexesLength method was renamed to getNotTrimmedIndexesLength.#6547
    • SkipMap class was renamed to TrimmingMap.#6547
    • VisualIndexToPhysicalIndexMap class was renamed to IndexesSequence.#6547
    • Hidden indexes aren't rendered. As a consequence hooks beforeValueRender, beforeRenderer, afterRenderer, modifyColWidth, beforeStretchingColumnWidth etc. will be executed just for some of the columns (just the rendered ones). #6547
    • Selection behavior changed when hiding cells from the ContextMenu, now it is selecting a column on the right when there is space on right to the last selected column, selecting a column on the left otherwise.
    • Developed a unified way to identify HOT "input" elements. All input elements owned by HOT got an attribute "data-hot-input" which are identified by that key. #6383
    • NestedHeaders plugin was rewritten, from now on, only a tree-like structure will be allowed, meaning, there will be no possibility to place nested headers in-between layers. #6716
    • CustomBorders plugin was adapted to work with HiddenColumns properly, from now on hiding cells at the start or at the end of a range will also hide their borders. Also, hiding a single cell with borders will hide all of its borders. #7083
    • CollapsibleColumns will no longer use HiddenColumns plugin to work. #6204

    Deprecated

    • HeaderTooltips plugin becomes deprecated and will be removed in the next major version. #7023
    • IE support is depreacated and will removed by the end of the year #7026

    Removed

    • Removed helpers that covered IE8 support or are not needed anymore. #6525
    • Removed old unnecessary warning about beforeChange callback. #6792
    • Removed debug key (key, css, docs). #6672
    • Removed hiddenRow and hiddenColumn hooks. #6547
    • Removed optional argument modifyDocumentFocus from the listen function.
    • Removed rowOffset and colOffset public API methods since they aliased the methods from Walkontable #6547
    • Removed the experimental GanttChart plugin #7022
    • Removed post-install warning from package.json file #6608

    Fixed

    • Fixed an issue where Hidden columns become visible when the user ran updateSettings. #4121
    • Fixed an issue where using hiddenColumns and stretchH showed a redundant horizontal scrollbar. #4181
    • Fixed an issue in which if the last column was a hidden column and stretchH was enabled, the last column was displayed. #4370
    • Fixed an issue where updateSettings performance was very low because of hiddenColumns being rendered. #4381
    • Fixed an issue where collapse was not working correctly with custom cell renderers. #4716
    • Fixed an incorrect header name when user defined more columns in the nestedHeaders plugin. #4716
    • Fixed an issue where hiddenColumns did not work properly with columnSorting. #5571
    • Fixed an issue where manualColumnMove should work with hiddenColumns. #5598
    • Fixed an issue where hiddenColumns option interfered with the keyboard movement. #5704
    • Fixed an issue where after hiding the first two rows, the row headers became de-synchronized by 1px. #5817
    • Fixed an issue where hiding columns affected selection of hidden columns. #5871
    • Fixed an issue where if collapsibleColumns were set to true it was impossible to exit selection mode. #5875
    • Fixed an issue where hiddenColumns did not work properly with autoWrapRow/autoWrapCol. #5877
    • Fixed an issue on IE where hiding the first column caused a display of double border for top left corner. #5881
    • Fixed an issue where nestedHeaders duplicated a header name if more columns are added. #5882
    • Fixed an issue where hiddenColumns plugin unset cell's renderer. #5883
    • Fixed an issue where hiddenColumns had stored visual indexes and should have used physical indexes. #5909
    • Fixed an issue where the additional row was added during copy/paste operations and with hidden rows/columns enabled. #5961
    • Fixed an issue where hidden columns should be unrecoverable. #6113
    • Fixed an issue where row selection ignored columns that are hidden at the end. #6181
    • Fixed an issue where defining data with more data than used in columns caused an issue with showing column once it was hidden. #6426
    • Fixed an issue where hiding rows, while there was a merged area, involved caused data shifting and unexpected merged area coordinates. #6376
    • Fixed an issue where some headers were gone when hidden and shown again. #6395
    • Fixed an issue where colHeader was truncated after moving hiddenColumn. #6463
    • Fixed an issue where the last hidden column was visible upon column resizing. #6557
    • Fixed an issue where with hiding columns after moved them manually. #6668
    • Fixed an issue where copy-and-paste worked wrong in a cell that was hidden and then uncovered again. #6742
    • Fixed an issue where too many values were pasted when the column was hidden. #6743
    • Fixed an issue where expanding a collapsed column caused expanding of a child columns except for the first one. #5792
    • Fixed an issue where setting columnSorting to true (on initialization or via updateSettings) made headers non-collapsible programmatically via collapseAll method. #4999
    • Fixed an issue where customBorders plugin was missing in the definition file. #6477
    • Fixed incorrect size of wtHiderand wtHolder in overlays. #3873
    • Fixed an issue where updateSettings could not update tableClassName. #6295
    • Fixed an issue where JSON data with empty value was losing some double quotes when pasted into a cell. #6167
    • Fixed an issue where some classes for the table were missing if one of them was empty. #6371
    • Fixed an issue where clicking in a contextmenu's border opened the native context menu. #6218
    • Fixed the error that ocurred during loading of E2E test runner in Edge and IE. #6713
    • Fixed the inconsistency and problems with adding rows from the corner when all rows are trimmed. #7061
    • Fixed an issue where using read-only and alignment from the context menu was disabled when all columns were selected. #7114
    • Fixed an issue where setting focus to a column to open context menu after applying a filter was impossible. #7005
    • Fixed an issue where minSpareCols with undo added too many columns. #6363
    • Fixed the inconsistency in selection when using the right mouse button for first row/column. #6334
    • Fixed an issue where undoing column removal caused column headers to lack a header. #6992
    • Fixed an issue where readOnly for column was erased (did not apply) if filters were used. #6559
    • Fixed an issue where readonly property was lost after declining confirmation in beforeRemoveCol or beforeRemoverow. #6332
    • Fixed an issue where readOnly state for some cells was lost when rows with trimRows turned on were removed. #6990
    • Fixed incorrect column header highlight when merged cells were unmerged and hiddenColumns were used. #6978
    • Fixed an issue where after hiding the first row, the second row top border disappeared. #6977
    • Fixed an issue with incorrect selection after hiding the first row. #6831
    • Fixed an issue where hiding the first row caused blue highlight in column headers selection to disappear. #6976
    • Fixed wrong selection area after sorting with hidden rows. #6386
    • Fixed an issue where it was not possible to use selectAll when the first row was hidden. #6975
    • Fixed an issue where it was possible to select hidden row or column. #6974
    • Fixed an issue where row indexes changed if the first row was hiding after moving row from bottom to top. #6965
    • Fixed an issue where selection skipped the highest parent. #6770
    • Fixed an iisue where nestedRows blocked table from loading if data was not provided. #6928
    • Fixed an isse where it was impossible to go back to the original cell after dragging down. #4233
    • Fixed an issue where keyboard navigation did not work on merged cells with hidden rows/columns. #6973
    • Fixed an issue where trimRows and hiddenRows with specific settings broke borders. #6904
    • Fixed wrong union type for startPosition. #6840
    • Fixed type mismatch for Handsontable.plugins.ContextMenu. #6347
    • Fixed an issue where manualColumnMove did not modify the columns in updateSettings. #5200
    • Fixed rendering issue on column udpate with updateSettings. #3770
    • Fixed an issue where expanding a collapsed column was also expanding 'child' collapsed columns, except the first child. #5792
    • Fixed an issue with inproper selection for headers when the first column was hidden. #5999
    • Fixed an issue where it was not possible to align cells if the selection was made upward. #6600
    • Fixed an issue where currentColClassName did not work properly with nestedHeaders. #5861
    • Fixed an issue with scrollbar and dimension calculation in Firefox for toggling column visibility with fixed columns and stretchH. #6186
    • Fixed an issue with undoing the nested row removal. #6433
    • Fixed an isse where getSourceData functions returned wrong data for nested rows. #5771
    • Fixed na issue where formulas plugin did not work with nestedRows. #4154
    • Fixed an issue where nested headers and hidden columns highlighted ad additional column when used together. #6881
    • Fixed an issue where getByRange for sourceData did not work properly with nested object data. #6548
    • Fixed an issue where window.frameElement threw errors in MSEdge, IE and Safari. #6478
    • Fixed an issue where DataSource.countColumns returned invalid number of columns for nested objects. #3958
    • Fixed an issue where mergedCells with hidden cells caused problems with rendering. #7020
    • Fixed an issue where it was not possible to move column when all columns were selected by ctrl + a. #6355
    • Fixed an issue where double click on the column resize handle did not adjust size correctly. #6755
    • Fixed an issue where the cell meta was retrieved using the wrong coordinates. #6703
    • Fixed nested rows incorrect state after changing data. #5753
    • Fixed an issue in EDGE where the dropdown menu onMouseOut event caused critical errors when hovering over vertical scrollbar. #6699
    • Fixed an issue with too many layers of highlight with noncontinuous selection on merged cells. #7028
    • Fixed an issue where NestedHeaders did not allow to define header level as an empty array. #7035
    • Fixed an issue where passing nestedHeaders as a single empty array stoped the table from rendering. #7036
    • Fixed an issue where opening a context menu for a column when its hidden data was selected did not block adding of rows by the menu. #7050
    • Fixed an issue where it was not possible to navigate past hidden column using keyboard ifhot.updateSettings was called in afterSelection. #3726
    • Fixed an issue where headers did not export with exportToFile in the specific case. #4176
    • Fixed an issue with types mismatch. #6035
    • Fixed an issue where manual row resize handler threw an error when bottom rows overlay was enabled. #6435
    • Fixed an issue where the afterRowResize hook shared incorrect results in the second parameter. #6430
    • Fixed an issue where the row/column resize hooks should not have returned null. #7074
    • Fixed the loss of selection after merging from headers. #7076
    • Fixed an issue where calling updateSettings changed the index of frozen columns via freezeColumn method. #6843
    • Fixed an issue where deleting the last column via updateSettings which was part of the selection caused scroll to the bottom. #5849
    • Fixed an issue where it was not possible to hide rows and merge cells at the same time. #6224
    • Fixed the wrong data in merge cells after the hidden column and additionally an error occurs. #6888
    • Fixed an issue where it was not possible to change cell type via setCellMeta. #4793
    • Fixed an issue where cell editor did not dynamically changed while changing the cell type. #4360
    • Fixed an issue where it was not possible to unmerge cells if part of them was hidden. #7095
    • Fixed an issue where calling clear method removed the focus from the table. #7099
    • Fixed an issue where clear method did not work for hidden data. #7097
    • Fixed an issue where the editor was moved by 1px when the first row / column was hidden. #6982
    • Fixed an issue where headers were deselected after undoing removal. #6670
    • Fixed an issue with improper selection after insert column/row when mergeCells was enabled. #4897
    • Fixed an issue where wrong cell meta was removed when deleting rows. #6051
    • Fixed wrong types of beforeRowMove arguments. #6539
    • Fixed an issue where selection of a whole row did not happen consequently after selecting a row header. #5906
    • Fixed an issue where it was not possible to use physical row index instead of visual one. #6309
    • Fixed an issue where incorrect data was returned after undoing the remove column option. #5000
    • Fixed - Copy and paste works properly also when selecting hidden columns when: all columns within a selected range are hidden and when just some columns within a selected range are hidden. #7043.
    Source code(tar.gz)
    Source code(zip)
  • 7.4.2(Feb 19, 2020)

    Changes

    • Fixed an issue where the cell value could not be edited on mobile devices. (#6707)
    • Fixed an issue where white lines appeared at the bottom of cell headers. (#6459)
    • Fixed a bug, where resizing the window (while using Angular) would result in Handsontable not stretching properly and throwing an error. (#6710)
    Source code(tar.gz)
    Source code(zip)
  • 7.4.0(Feb 12, 2020)

    Changes

    • Fixed the problem, where the onCellMouseUp hook was fired for all mouse buttons except the right one, which was not consistent with the onCellMouseDown hook.
      To make the changes more consistent with the native dblclick event (which is triggered only for the left mouse button), the onCellDblClick and onCellCornerDblClick hooks were modified to also fire only for the left mouse button. (#6507)
    • Updated moment, pikaday and numbro to their latest versions. (#6610)
    • Fixed a bug with numbers not being presented properly with the pt_BR culture setting. (#5569)
    • Extended the Babel config with the possibility to use private methods, optional chaining and nullish coalescing operator. (#6308)
    • Updated some of the internal configs, updated dev-dependencies, housekeeping etc. (#6560, #6609, #6612, #6629, #6574, #6565)
    Source code(tar.gz)
    Source code(zip)
  • 7.3.0(Dec 12, 2019)

    New features

    • Version 7.3.0 introduces a new option to the Context Menu plugin - uiContainer. It allows declaring a DOM container, where all the Context Menu's element will be placed. It may come espacially handy when using Handsontable inside of an iframe or some other content-trimming context. (#6283, #6417)
    • We also added a uiContainer option to the Copy/Paste plugin. It works in a similar way to the one described above, but is used to declare the container for the Copy/Paste plugin's DOM elements. (#6343)

    Changes

    • Fixed a problem with table resizing on every scroll event on Firefox, when no table height was defined. (#6344)
    • Updated the puppeteer package in the devDependencies section to get rid of the npm audit security error. (#6393)
    • Removed the unneeded CNAME_ file from the repo. (#6389)
    • Fixed a problem, where pasting data from Excel caused Handsontable to throw an error. (#6217)
    • Fixed a bug, where data pasted from Excel would get improperly formatted in Handsontable. (#6258)
    • Fixed a bug, where the & < > ' " characters in the pasted data would be automatically changed to their equivalent HTML entities. (#1535)
    • Fixed a bug, where opening the system's context menu, hitting ESC and moving the cursor outside of the container would scroll the table. (#5846)
    • Fixed a problem, where right-clicking on a disabled entry in Handsontable's context menu would open the system's context menu. (#5846)
    • Fixed a bug, where right-clicking on an active entry in Handsontable's context menu would open another context menu. (#5846)
    • Fixed a test case for Context Menu's scrolling. (#6449)
    • Modified the container size in the the tests' DOM helper file. (#6446)
    Source code(tar.gz)
    Source code(zip)
  • 8.0.0-beta.1(Nov 14, 2019)

    Breaking changes

    • We implemented a new architecture for row and column management.

      It allows an easier and more straightforward way to perform CRUD and moving operations on rows and columns. This change forced us to create some breaking changes:

      • The observeChanges plugin is no longer enabled by columnSorting and became deprecated.

      • Modifying the table's data by reference and calling render() will not work properly anymore. From this point onward, all the data-related operations need to be performed using the API methods, such as populateFromArray or setDataAtCell.

      • The modifyRow, modifyCol, unmodifyRow, unmodifyCol and skipLengthCache hooks are no longer needed and were removed.

      • The manualColumnFreeze plugin doesn't use the manualColumnMove plugin anymore.

      • The collapsibleColumns plugin doesn't use the hiddenColumns plugin anymore.

      • The nestedRows plugin doesn't use the trimRows plugin anymore.

      • The filters plugin doesn't use the trimRows plugin anymore.

      • The minSpareRows and minRows options will ensure that the number of visible rows corresponds to the value provided to them (for example, the trimRows plugin won't have an impact on the number of displayed rows).

      • Methods like toPhysicalRow, toVisualColumn, etc. now return null for non-existant rows/columns.

      • The afterLoadData hook receives a different set of arguments. It used to be just the initialLoad flag, now the first argument is sourceData, followed by initialLoad.

      • The manualColumnFreeze plugin will now put the unfrozen columns right next to the last frozen one.

      • The RecordTranslator object and the t property available in the plugins were removed.

      • after-prefixed hooks (afterLoadData, afterFilter, etc.) are now called just before the render call.

      • Newly created rows and columns are now placed in the source data in the place calculated from its position in the visual context (they "stick" to their adjacent rows/columns). It also applies to moved rows and columns.

      • When the nestedRows plugin is enabled, moving rows will be possible only using the UI or by calling the dragRows method of the manualRowMove plugin.

        For more in-depth information about these changes, see the description of pull request #5945. (#5751)

    • The beforeRowResize, afterRowResize, beforeColumnResize, afterColumnResize hooks have the order of their arguments rearranged for the sake of consistency with other hooks:

      Was: (currentIndex: number, newSize: number, isDoubleClick: boolean)

      Is:

      (newSize: number, index: number, isDoubleClick: boolean)

      (#3328)

    • Change the argument structure in collapsibleColumns' toggleCollapsibleSection method.

      Was:

      (coords: object, action: string)

      Is:

      coords: Array<object>, action: string)

      (#6193)

    New features (also present in the upcoming version 7.3.0)

    • We're introducing a new option to the Context Menu plugin - uiContainer. It allows declaring a DOM container, where all the Context Menu's element will be placed. It may come espacially handy when using Handsontable inside of an iframe or some other content-trimming context. (#6283, #6417)
    • We also added a uiContainer option to the Copy/Paste plugin. It works in a similar way to the one described above, but is used to declare the container for the Copy/Paste plugin's DOM elements. (#6343)

    Changes

    • Resolved a problem with data not being added to the table properly with the columnSorting option enabled. (#2685)
    • Fixed a problem with loadData not resetting the row order changed by the manualRowMove plugin. (#3568)
    • Fixed a bug, where using alter's insert_row after using the loadData method and sorting the data would add unintentional additional rows to the table. (#3809)
    • Fixed a bug, where blank rows appeared in the middle of the table after using loadData along with the minSpareRows option. (#3937)
    • Fixed a problem with the columnSummary plugin not working properly after adding new rows using the Context Menu and sorting the data. (#3924)
    • Fixed a bug, where calling loadData with an object-based data source would not work properly. (#4204)
    • Fixed a problem with the Hidden Columns settings being reset after calling updateSettings. (#4121)
    • Fixed a bug with the filters plugin using incorrect indexes after moving and/or sorting the table. (#4442)
    • Fixed a bug that caused a column to contain improper data after moving it to index 0. (#4470)
    • Fixed a bug with the afterRowMove hook receiving an improper target argument. (#4501)
    • Fixed a problem with the manualColumnFreeze plugin enabling manualColumnMove, even if it was declared as false. (#4553)
    • Fixed a problem with plugins using arrayMappers not working properly after updating the dataset. (#4567)
    • Fixed a bug, where calling loadData with minSpareRows and manualRowMove enabled caused the table to improperly load the data. (#4576)
    • Fixed a bug, where enabling columnSorting caused the manualColumnFreeze to be unusable. (#4601)
    • Fixed a problem, where the columns were assigned improper widths after inserting additional columns or removing any of them. (#4666)
    • Fixed a bug, where moving rows was impossible while persistentState was enabled. (#4713)
    • Fixed a bug, where manualColumnMove didn't work if the dataset was empty. (#4926)
    • Fixed a bug with the collapseAll method from the collapsibleColumns plugin did not work properly if columnSorting was enabled. (#4999)
    • Created a shared row mapper for the columnSorting, manualRowMove, and trimRows plugins. (#5065)
    • Refactored the manualRowMove plugin to match the new architecture. (#5068)
    • Fixed a bug, where calling loadData with minSpareRows enabled would cause unwanted blank rows to appear. (#5707)
    • Fixed a bug with the afterColumnMove hook receiving an improper target argument. (#5173)
    • Fixed a problem, where filtering data after moving rows would not work properly. (#5178)
    • Fixed a bug, where calling loadData made NaN appear in the column headers. (#5369)
    • Fixed a bug with the skipColumnOnPaste option not working properly when using columnSorting and hiddenColumns. (#5824)
    • Fixed a bug with the trimRows plugin did not work properly after moving rows. (#5860)
    • Fixed a problem with minSpareRows not working properly with the trimRows plugin being used. (#5862)
    • Fixed a problem, where it was impossible to filter the data declared in the nestedRows plugin. (#5889)
    • Fixed a bug, where filtering and sorting data would cause the toVisualRow method to return the wrong results. (#5890)
    • Fixed a bug with the filters and trimRows plugins not working properly alongside each other. (#5915)
    • Fixed a bug, where manualColumnMove would not work properly when the data object properties count would be lower than the table column count. (#5931)
    • Fixed a bug with the trimRows plugin did not work properly with the startRows option. (#5953)
    • Fixed a problem, where using loadData after sorting would not work as expected. (#5956)
    • Fixed a problem with the beforeColumnMove and afterColumnMove hooks not containing information about their destination indexes. (#6005)
    • Fixed a problem where using filters and minSpareRows would make the table add an empty row at the beginning of the table. (#6278)
    • Fixed a bug with the manualRowMove plugin would duplicate data in the moved rows, when used with a row index greater than the table row count. (#6088)
    • Fixed a bug, where the toVisualRow method returned null when using the trimRows and columnSorting plugins together. (#6310)
    • Fixed a problem, where calling updateSettings in the afterColumnMove hook callback would have no effect. (#4480)
    • Fixed a bug, where calling loadData would make the filters plugin to not behave as expected. (#5244)
    • Fixed a bug, where detaching a child from a parent in the nestedRows plugin would cause a +/- button misalignment. (#5900)
    • Fixed a problem with the columnSummary plugin creating a doubled summary row. (#5794)
    • Fixed a bug, where moving children between parents using the nestedRows plugin would throw an error. (#6066)
    • Fixed a bug, where adding rows by modifying the data by reference while using the nestedRows plugin would throw an error. (#3914)
    • Fixed a bug, where merging cells would conflict with the columnSorting plugin. (#6086)
    • Fixed a bug, where the row headers would stay visible after removing all the table columns. (#6412)

    Includes changes from 7.3.0

    • Fixed a problem with table resizing on every scroll event on Firefox, when no table height was defined. (#6344)
    • Updated the puppeteer package in the devDependencies section to get rid of the npm audit security error. (#6393)
    • Removed the unneeded CNAME_ file from the repo. (#6389)
    • Fixed a problem, where pasting data from Excel caused Handsontable to throw an error. (#6217)
    • Fixed a bug, where data pasted from Excel would get improperly formatted in Handsontable. (#6258)
    • Fixed a bug, where the & < > ' " characters in the pasted data would be automatically changed to their equivalent HTML entities. (#1535)
    Source code(tar.gz)
    Source code(zip)
  • 7.2.2(Oct 23, 2019)

    Changes

    • Rolled back backward-incompatible changes in the TypeScript definition file introduced in 7.2.0. (#6351)
    • Fixed a problem, where the Handsontable.helper.htmlToGridSettings threw an error on IE11, when the target table was a part of an iframe. (#6350)
    Source code(tar.gz)
    Source code(zip)
  • 7.2.1(Oct 16, 2019)

  • 7.2.0(Oct 15, 2019)

    Changes

    • Added cellProperties to the arguments of search's queryMethod so that it would be possible to tell what kind of data was being queried. (#4944)
    • Fixed a bug with a disappearing column header, when the height option is was set to auto. (#6302)
    • Fixed a problem with an error being thrown when trying the clear a column with the first cell set to readOnly. (#6246)
    • Fixed a bug where it was impossible to set data for a readOnly-typed cell, when any cell was selected. (#6214)
    • Fixed a problem with an error being thrown when pasting data to readOnly-typed cells. (#6209)
    • Fixed a problem with the Undo feature not working for columns defined as functions. (#6147)
    • Fixed a bug where this.TD was undefined in the editor's prepare method when fixedColumnsLeft and viewportColumnRenderingOffset were both set. (#6043)
    • Fixed a bug where the cell selection frame overlapped the bottom fixed rows. (#5947)
    • Fixed a problem with an error being thrown after initializing an empty table or removing all the data from the table and clicking the corner header. (#5126)
    • Fixed a problem with reloading data with a new set in the Nested Rows plugin. (#6339)
    • Rewrote some of the Walkontable methods to return correct information about the table. (#6191)
    • Made some improvements to the TypeScript definition file. (#6168, #6107, #6102, #6239, #6266)
    • Improved the documentation and definition files regarding the after- hooks for creating and removing rows/columns. (#6296)
    • Improved the documentation for the totalColumn option. (#6281)
    • Added a lint:fix script to be able to fix the lint errors from the CLI. (#6260)
    • Fixed all the tests for Windows and added run-script, walkontable.watch. (#6187)
    • Removed the unused check-es3-syntax-cli package to fix Github's security alert. (#6319)
    • Updated the dependencies to fix errors thrown by npm audit (#6318)
    Source code(tar.gz)
    Source code(zip)
Owner
Handsontable
A JavaScript component that combines data grid features with spreadsheet-like UX.
Handsontable
Nice, sleek and intuitive. A grid control especially designed for bootstrap.

jQuery Bootgrid Plugin Nice, sleek and intuitive. A grid control especially designed for bootstrap. Getting Started jQuery Bootgrid is a UI component

Rafael Staib 976 Dec 16, 2022
Grid based on CSS3 flexbox

Flexbox Grid flexboxgrid.com Grid based on the flex display property. Install npm npm i flexboxgrid --save bower bower install flexboxgrid cdn CDNJS <

kj 9.3k Dec 31, 2022
jQuery grid plugin

jqGrid jQuery grid plugin jqGrid is an Ajax-enabled JavaScript control that provides solutions for representing and manipulating tabular data on the w

Tony Tomov 2.8k Jan 7, 2023
Lightweight Grid jQuery Plugin

jsGrid Lightweight Grid jQuery Plugin Project site js-grid.com jsGrid is a lightweight client-side data grid control based on jQuery. It supports basi

Artem Tabalin 1.5k Dec 31, 2022
Shrinks any large data tables into compact and responsive tables

jquery.table-shrinker A Jquery plugin to make HTML Table responsive across all devices, the right way! Demo Click here to see the demo, remember to re

null 29 Sep 11, 2022
A simple, modern and interactive datatable library for the web

Frappe DataTable A modern datatable library for the web Introduction Frappe DataTable is a simple, modern and interactive datatable library for displa

Frappe 836 Dec 24, 2022
A stupidly small and simple jQuery table sorter plugin

Stupid jQuery Table Sort This is a stupid jQuery table sorting plugin. Nothing fancy, nothing really impressive. Overall, stupidly simple. Requires jQ

Joseph McCullough 708 Dec 26, 2022
jQuery plugin to export a html table to JSON, XML, CSV, TSV, TXT, SQL, Word, Excel, PNG and PDF

tableExport.jquery.plugin Export HTML Table to CSV DOC JSON PDF PNG SQL TSV TXT XLS (Excel 2000 HTML format) XLSX (Excel 2007 Office Open XML format)

null 918 Dec 29, 2022
JavaScript data grid with a spreadsheet look & feel. Works for React, Angular, and Vue. Supported by the Handsontable team ⚡

Handsontable is a JavaScript component that combines data grid features with spreadsheet-like UX. It provides data binding, data validation, filtering

Handsontable 17.4k Dec 31, 2022
JavaScript data grid with a spreadsheet look & feel. Works for React, Angular, and Vue. Supported by the Handsontable team ⚡

Handsontable is a JavaScript component that combines data grid features with spreadsheet-like UX. It provides data binding, data validation, filtering

Handsontable 17.4k Dec 28, 2022
tb-grid is a super simple and lightweight 12 column responsive grid system utilizing css grid.

tb-grid Lightweight (<1kb gzipped) 12 column grid system, built with css grid. ?? Demos & Playground Have a look at those examples: Main Demo: https:/

Taskbase 26 Dec 28, 2022
⚡️The Fullstack React Framework — built on Next.js

The Fullstack React Framework "Zero-API" Data Layer — Built on Next.js — Inspired by Ruby on Rails Read the Documentation “Zero-API” data layer lets y

⚡️Blitz 12.5k Jan 4, 2023
Create Angular Dynamic Forms with only JSON configuration. Full grid layout supported.

Angular Dynamic Forms Angular component that allows the creation of dynamic forms. You can use this component in situations where you get the configur

Martin Stefanovic 27 Nov 17, 2022
Snake game using pure HTML, CSS and JavaScript with GameBoy look and feel using Nano editor

Snake game using pure HTML, CSS and JavaScript with GameBoy look and feel using Nano editor. 100% commented code in Portuguese

Gabriel Martins 2 Jul 2, 2022
An extensible HTML DOM window manager with a professional look and feel

Wingman An extensible HTML DOM window manager with a professional look and feel. Installation Wingman only requires two files: wingman.css and wingman

nethe550 1 Jan 21, 2022
Remix enables you to build fantastic user experiences for the web and feel happy with the code that got you there. In this workshop, we'll look at some more advanced use cases when building Remix applications.

?? Advanced Remix Workshop Remix enables you to build fantastic user experiences for the web and feel happy with the code that got you there. In this

Frontend Masters 167 Dec 9, 2022
基于vue3.0-ts-Element集成的简洁/实用后台模板!《带预览地址》vue-admin;vue+admin;vue-element;vue+element;vue后台管理;vue3.0-admin;vue3.0-element。

一、基于vue3.0+ts+Element通用后台admin模板 二、在线预览地址:http://admin.yknba.cn/ 三、下载使用: 1、克隆代码 通过git将代码克隆到本地;或者使用下载安装包模式进行下载。 2、进入目录 进入项目的根目录:vue3.0-ts-admin 3、安装依

null 64 Dec 16, 2022
Grupprojekt för kurserna 'Javascript med Ramverk' och 'Agil Utveckling'

JavaScript-med-Ramverk-Laboration-3 Grupprojektet för kurserna Javascript med Ramverk och Agil Utveckling. Utvecklingsguide För information om hur utv

Svante Jonsson IT-Högskolan 3 May 18, 2022
Hemsida för personer i Sverige som kan och vill erbjuda boende till människor på flykt

Getting Started with Create React App This project was bootstrapped with Create React App. Available Scripts In the project directory, you can run: np

null 4 May 3, 2022
Kurs-repo för kursen Webbserver och Databaser

Webbserver och databaser This repository is meant for CME students to access exercises and codealongs that happen throughout the course. I hope you wi

null 14 Jan 3, 2023