var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; import { isDefined } from './helpers/mixed'; /** * @alias Options * @constructor * @description * ## Constructor options * * Constructor options are applied using an object literal passed as a second argument to the Handsontable constructor. * * ```js * var hot = new Handsontable(document.getElementById('example1'), { * data: myArray, * width: 400, * height: 300 * }); * ``` * * --- * ## Cascading configuration * * Handsontable 0.9 and newer is using *Cascading Configuration*, which is a fast way to provide configuration options * for the entire table, including its columns and particular cells. * * Consider the following example: * ```js * var hot = new Handsontable(document.getElementById('example'), { * readOnly: true, * columns: [ * {readOnly: false}, * {}, * {} * ], * cells: function (row, col, prop) { * var cellProperties = {}; * * if (row === 0 && col === 0) { * cellProperties.readOnly = true; * } * * return cellProperties; * } * }); * ``` * * The above notation will result in all TDs being *read only*, except for first column TDs which will be *editable*, except for the TD in top left corner which will still be *read only*. * * ### The Cascading Configuration model * * ##### 1. Constructor * * Configuration options that are provided using first-level `handsontable(container, {option: "value"})` and `updateSettings` method. * * ##### 2. Columns * * Configuration options that are provided using second-level object `handsontable(container, {columns: {option: "value"}]})` * * ##### 3. Cells * * Configuration options that are provided using second-level function `handsontable(container, {cells: function: (row, col, prop){ }})` * * --- * ## Architecture performance * * The Cascading Configuration model is based on prototypical inheritance. It is much faster and memory efficient compared * to the previous model that used jQuery extend. See: [http://jsperf.com/extending-settings](http://jsperf.com/extending-settings). * * --- * __Important notice:__ In order for the data separation to work properly, make sure that each instance of Handsontable has a unique `id`. */ function DefaultSettings() {}; DefaultSettings.prototype = { /** * @description * Initial data source that will be bound to the data grid __by reference__ (editing data grid alters the data source). * Can be declared as an Array of Arrays, Array of Objects or a Function. * * See [Understanding binding as reference](http://docs.handsontable.com/tutorial-data-binding.html#page-reference). * * @type {Array|Function} * @default undefined */ data: void 0, /** * @description * Defines the structure of a new row when data source is an array of objects. * * See [data-schema](http://docs.handsontable.com/tutorial-data-sources.html#page-data-schema) for examples. * * @type {Object} * @default undefined */ dataSchema: void 0, /** * Width of the grid. Can be a value or a function that returns a value. * * @type {Number|Function} * @default undefined */ width: void 0, /** * Height of the grid. Can be a number or a function that returns a number. * * @type {Number|Function} * @default undefined */ height: void 0, /** * @description * Initial number of rows. * * __Notice:__ This option only has effect in Handsontable constructor and only if `data` option is not provided * * @type {Number} * @default 5 */ startRows: 5, /** * @description * Initial number of columns. * * __Notice:__ This option only has effect in Handsontable constructor and only if `data` option is not provided * * @type {Number} * @default 5 */ startCols: 5, /** * Setting `true` or `false` will enable or disable the default row headers (1, 2, 3). * You can also define an array `['One', 'Two', 'Three', ...]` or a function to define the headers. * If a function is set the index of the row is passed as a parameter. * * @type {Boolean|Array|Function} * @default null * @example * ```js * ... * // as boolean * rowHeaders: true, * ... * * ... * // as array * rowHeaders: [1, 2, 3], * ... * * ... * // as function * rowHeaders: function(index) { * return index + ': AB'; * }, * ... * ``` */ rowHeaders: void 0, /** * Setting `true` or `false` will enable or disable the default column headers (A, B, C). * You can also define an array `['One', 'Two', 'Three', ...]` or a function to define the headers. * If a function is set, then the index of the column is passed as a parameter. * * @type {Boolean|Array|Function} * @default null * @example * ```js * ... * // as boolean * colHeaders: true, * ... * * ... * // as array * colHeaders: ['A', 'B', 'C'], * ... * * ... * // as function * colHeaders: function(index) { * return index + ': AB'; * }, * ... * ``` */ colHeaders: null, /** * Defines column widths in pixels. Accepts number, string (that will be converted to a number), * array of numbers (if you want to define column width separately for each column) or a * function (if you want to set column width dynamically on each render). * * @type {Array|Function|Number|String} * @default undefined */ colWidths: void 0, /** * Defines row heights in pixels. Accepts numbers, strings (that will be converted into a number), * array of numbers (if you want to define row height separately for each row) or a * function (if you want to set row height dynamically on each render). * * @type {Array|Function|Number|String} * @default undefined */ rowHeights: void 0, /** * @description * Defines the cell properties and data binding for certain columns. * * __Notice:__ Using this option sets a fixed number of columns (options `startCols`, `minCols`, `maxCols` will be ignored). * * See [documentation -> datasources.html](http://docs.handsontable.com/tutorial-data-sources.html#page-nested) for examples. * * @type {Array} * @default undefined * @example * ```js * ... * columns: [ * { * // column options for the first column * type: 'numeric', * format: '0,0.00 $' * }, * { * // column options for the second column * type: 'text', * readOnly: true * } * ], * ... * ``` */ columns: void 0, /** * @description * Defines the cell properties for given `row`, `col`, `prop` coordinates. * Any constructor or column option may be overwritten for a particular cell (row/column combination) * using the `cells` property in the Handsontable constructor. * * __Note:__ Parameters `row` and `col` always represent __physical indexes__. Example below show how to execute * operations based on the __visual__ representation of Handsontable. * * @type {Function} * @default undefined * @example * ```js * ... * cells: function (row, col, prop) { * var cellProperties = {}; * var visualRowIndex = this.instance.toVisualRow(row); * var visualColIndex = this.instance.toVisualColumn(col); * * if (visualRowIndex === 0 && visualColIndex === 0) { * cellProperties.readOnly = true; * } * * return cellProperties; * }, * ... * ``` */ cells: void 0, /** * Any constructor or column option may be overwritten for a particular cell (row/column combination), using `cell` * array passed to the Handsontable constructor. * * @type {Array} * @default [] * @example * ```js * ... * cell: [ * {row: 0, col: 0, readOnly: true} * ], * ... * ``` */ cell: [], /** * @description * If `true`, enables the {@link Comments} plugin, which enables an option to apply cell comments through the context menu * (configurable with context menu keys `commentsAddEdit`, `commentsRemove`). * * To initialize Handsontable with predefined comments, provide cell coordinates and comment text values in a form of an array. * * See [Comments](http://docs.handsontable.com/demo-comments_.html) demo for examples. * * @since 0.11.0 * @type {Boolean|Array} * @default false * @example * ```js * ... * comments: [{row: 1, col: 1, comment: {value: "Test comment"}}], * ... * ``` */ comments: false, /** * @description * If `true`, enables the Custom Borders plugin, which enables an option to apply custom borders through the context menu (configurable with context menu key `borders`). * * To initialize Handsontable with predefined custom borders, provide cell coordinates and border styles in a form of an array. * * See [Custom Borders](http://docs.handsontable.com/demo-custom-borders.html) demo for examples. * * @since 0.11.0 * @type {Boolean|Array} * @default false * @example * ```js * ... * customBorders: [ * {range: { * from: {row: 1, col: 1}, * to: {row: 3, col: 4}}, * left: {}, * right: {}, * top: {}, * bottom: {} * } * ], * ... * * // or * ... * customBorders: [ * {row: 2, col: 2, left: {width: 2, color: 'red'}, * right: {width: 1, color: 'green'}, top: '', bottom: ''} * ], * ... * ``` */ customBorders: false, /** * Minimum number of rows. At least that number of rows will be created during initialization. * * @type {Number} * @default 0 */ minRows: 0, /** * Minimum number of columns. At least that number of columns will be created during initialization. * * @type {Number} * @default 0 */ minCols: 0, /** * Maximum number of rows. If set to a value lower than the initial row count, the data will be trimmed to the provided value as the number of rows. * * @type {Number} * @default Infinity */ maxRows: Infinity, /** * Maximum number of cols. If set to a value lower than the initial col count, the data will be trimmed to the provided value as the number of cols. * * @type {Number} * @default Infinity */ maxCols: Infinity, /** * When set to 1 (or more), Handsontable will add a new row at the end of grid if there are no more empty rows. * (unless the number of rows exceeds the one set in the `maxRows` property) * * @type {Number} * @default 0 */ minSpareRows: 0, /** * When set to 1 (or more), Handsontable will add a new column at the end of grid if there are no more empty columns. * (unless the number of rows exceeds the one set in the `maxCols` property) * * @type {Number} * @default 0 */ minSpareCols: 0, /** * If set to `false`, there won't be an option to insert new rows in the Context Menu. * * @type {Boolean} * @default true */ allowInsertRow: true, /** * If set to `false`, there won't be an option to insert new columns in the Context Menu. * * @type {Boolean} * @default true */ allowInsertColumn: true, /** * If set to `false`, there won't be an option to remove rows in the Context Menu. * * @type {Boolean} * @default true */ allowRemoveRow: true, /** * If set to `false`, there won't be an option to remove columns in the Context Menu. * * @type {Boolean} * @default true */ allowRemoveColumn: true, /** * If true, selection of multiple cells using keyboard or mouse is allowed. * * @type {Boolean} * @default true */ multiSelect: true, /** * Enables the fill handle (drag-down and copy-down) functionality, which shows a small rectangle in bottom * right corner of the selected area, that let's you expand values to the adjacent cells. * * Possible values: `true` (to enable in all directions), `'vertical'` or `'horizontal'` (to enable in one direction), * `false` (to disable completely). Setting to `true` enables the fillHandle plugin. * * Since 0.23.0 you can pass object to plugin which allows you to add more options for this functionality. If `autoInsertRow` * option is `true`, fill-handler will create new rows till it reaches the last row. It is enabled by default. * * @example * ```js * ... * fillHandle: true // enable plugin in all directions and with autoInsertRow as true * ... * // or * ... * fillHandle: 'vertical' // enable plugin in vertical direction and with autoInsertRow as true * ... * // or * ... * fillHandle: { // enable plugin in both directions and with autoInsertRow as false * autoInsertRow: false, * } * // or * ... * fillHandle: { // enable plugin in vertical direction and with autoInsertRow as false * autoInsertRow: false, * direction: 'vertical' // 'vertical' or 'horizontal' * } * ``` * * @type {Boolean|String|Object} * @default true */ fillHandle: true, /** * Allows to specify the number of fixed (or *frozen*) rows at the top of the table. * * @type {Number} * @default 0 * @example * ```js * fixedRowsTop: 3 // This would freeze the top 3 rows of the table. * ``` */ fixedRowsTop: 0, /** * Allows to specify the number of fixed (or *frozen*) rows at the bottom of the table. * * @pro * @type {Number} * @default 0 * @example * ```js * fixedRowsBottom: 3 // This would freeze the top 3 rows of the table. * ``` */ fixedRowsBottom: 0, /** * Allows to specify the number of fixed (or *frozen*) columns on the left of the table. * * @type {Number} * @default 0 * @example * ```js * fixedColumnsLeft: 3 // This would freeze the top 3 rows of the table. * ``` */ fixedColumnsLeft: 0, /** * If `true`, mouse click outside the grid will deselect the current selection. * Can be a function that takes the click event target and returns a boolean. * * @type {Boolean|Function} * @default true */ outsideClickDeselects: true, /** * If `true`, ENTER begins editing mode (like in Google Docs). If `false`, ENTER moves to next * row (like Excel) and adds a new row if necessary. TAB adds new column if necessary. * * @type {Boolean} * @default true */ enterBeginsEditing: true, /** * Defines the cursor movement after ENTER was pressed (SHIFT + ENTER uses a negative vector). * Can be an object or a function that returns an object. The event argument passed to the function * is a DOM Event object received after the ENTER key has been pressed. This event object can be used to check * whether user pressed ENTER or SHIFT + ENTER. * * @type {Object|Function} * @default {row: 1, col: 0} */ enterMoves: { row: 1, col: 0 }, /** * Defines the cursor movement after TAB is pressed (SHIFT + TAB uses a negative vector). * Can be an object or a function that returns an object. The event argument passed to the function * is a DOM Event object received after the TAB key has been pressed. This event object can be used to check * whether user pressed TAB or SHIFT + TAB. * * @type {Object} * @default {row: 0, col: 1} */ tabMoves: { row: 0, col: 1 }, /** * If `true`, pressing TAB or right arrow in the last column will move to first column in next row. * * @type {Boolean} * @default false */ autoWrapRow: false, /** * If `true`, pressing ENTER or down arrow in the last row will move to the first row in the next column. * * @type {Boolean} * @default false */ autoWrapCol: false, /** * Maximum number of rows than can be copied to clipboard using CTRL + C. * * @type {Number} * @default 1000 */ copyRowsLimit: 1000, /** * Maximum number of columns than can be copied to clipboard using CTRL + C. * * @type {Number} * @default 1000 */ copyColsLimit: 1000, /** * @description * Defines paste (CTRL + V) behavior. * * Default value `"overwrite"` will paste clipboard value over current selection. * * When set to `"shift_down"`, clipboard data will be pasted in place of current selection, while all selected cells are moved down. * * When set to `"shift_right"`, clipboard data will be pasted in place of current selection, while all selected cells are moved right. * * @type {String} * @default 'overwrite' */ pasteMode: 'overwrite', /** * @description * Turns on saving the state of column sorting, column positions and column sizes in local storage. * * You can save any sort of data in local storage to preserve table state between page reloads. * In order to enable data storage mechanism, `persistentState` option must be set to `true` (you can set it * either during Handsontable initialization or using the `updateSettings` method). When `persistentState` is enabled it exposes 3 hooks: * * __persistentStateSave__ (key: String, value: Mixed) * * * Saves value under given key in browser local storage. * * __persistentStateLoad__ (key: String, valuePlaceholder: Object) * * * Loads `value`, saved under given key, form browser local storage. The loaded `value` will be saved in `valuePlaceholder.value` * (this is due to specific behaviour of `Hooks.run()` method). If no value have been saved under key `valuePlaceholder.value` * will be `undefined`. * * __persistentStateReset__ (key: String) * * * Clears the value saved under `key`. If no `key` is given, all values associated with table will be cleared. * * __Note:__ The main reason behind using `persistentState` hooks rather than regular LocalStorage API is that it * ensures separation of data stored by multiple Handsontable instances. In other words, if you have two (or more) * instances of Handsontable on one page, data saved by one instance won't be accessible by the second instance. * Those two instances can store data under the same key and no data would be overwritten. * * __Important:__ In order for the data separation to work properly, make sure that each instance of Handsontable has a unique `id`. * * @type {Boolean} * @default false */ persistentState: void 0, /** * Class name for all visible rows in the current selection. * * @type {String} * @default undefined * @example * ```js * currentRowClassName: 'currentRow' // This will add a 'currentRow' class name to appropriate table cells. * ``` */ currentRowClassName: void 0, /** * Class name for all visible columns in the current selection. * * @type {String} * @default undefined * @example * ```js * currentColClassName: 'currentColumn' // This will add a 'currentColumn' class name to appropriate table cells. * ``` */ currentColClassName: void 0, /** * Class name for all visible headers in current selection. * * @type {String} * @since 0.27.0 * @default 'ht__highlight' * @example * ```js * currentHeaderClassName: 'ht__highlight' // This will add a 'ht__highlight' class name to appropriate table headers. * ``` */ currentHeaderClassName: 'ht__highlight', /** * Class name for the Handsontable container element. * * @type {String|Array} * @default undefined */ className: void 0, /** * Class name for all tables inside container element. * * @since 0.17.0 * @type {String|Array} * @default undefined */ tableClassName: void 0, /** * @description * Defines how the columns react, when the declared table width is different than the calculated sum of all column widths. * [See more](http://docs.handsontable.com/demo-stretching.html) mode. Possible values: * * `'none'` Disable stretching * * `'last'` Stretch only the last column * * `'all'` Stretch all the columns evenly * * @type {String} * @default 'none' */ stretchH: 'none', /** * Lets you overwrite the default `isEmptyRow` method, which checks if row at the provided index is empty. * * @type {Function} * @param {Number} row * @returns {Boolean} */ isEmptyRow: function isEmptyRow(row) { var col, colLen, value, meta; for (col = 0, colLen = this.countCols(); col < colLen; col++) { value = this.getDataAtCell(row, col); if (value !== '' && value !== null && isDefined(value)) { if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object') { meta = this.getCellMeta(row, col); return isObjectEquals(this.getSchema()[meta.prop], value); } return false; } } return true; }, /** * Lets you overwrite the default `isEmptyCol` method, which checks if column at the provided index is empty. * * @type {Function} * @param {Number} col * @returns {Boolean} */ isEmptyCol: function isEmptyCol(col) { var row, rowLen, value; for (row = 0, rowLen = this.countRows(); row < rowLen; row++) { value = this.getDataAtCell(row, col); if (value !== '' && value !== null && isDefined(value)) { return false; } } return true; }, /** * When set to `true`, the table is re-rendered when it is detected that it was made visible in DOM. * * @type {Boolean} * @default true */ observeDOMVisibility: true, /** * If set to `true`, Handsontable will accept values that were marked as invalid by the cell `validator`. * It will result with *invalid* cells being treated as *valid* (will save the *invalid* value into the Handsontable data source). * If set to `false`, Handsontable will *not* accept the invalid values and won't allow the user to close the editor. * This option will be particularly useful when used with the Autocomplete's `strict` mode. * * @type {Boolean} * @default true * @since 0.9.5 */ allowInvalid: true, /** * If set to `true`, Handsontable will accept values that are empty (`null`, `undefined` or `''`). * If set to `false`, Handsontable will *not* accept the empty values and mark cell as invalid. * * @example * ```js * ... * allowEmpty: true // allow empty values for all cells (whole table) * ... * // or * ... * columns: [ * // allow empty values only for 'date' column * {data: 'date', dateFormat: 'DD/MM/YYYY', allowEmpty: true} * ] * ... * ``` * * @type {Boolean} * @default true * @since 0.23.0 */ allowEmpty: true, /** * CSS class name for cells that did not pass validation. * * @type {String} * @default 'htInvalid' */ invalidCellClassName: 'htInvalid', /** * When set to an non-empty string, displayed as the cell content for empty cells. If a value of a different type is provided, * it will be stringified and applied as a string. * * @type {Mixed} * @default false */ placeholder: false, /** * CSS class name for cells that have a placeholder in use. * * @type {String} * @default 'htPlaceholder' */ placeholderCellClassName: 'htPlaceholder', /** * CSS class name for read-only cells. * * @type {String} * @default 'htDimmed' */ readOnlyCellClassName: 'htDimmed', /** * @description * If a string is provided, it may be one of the following predefined values: * * `autocomplete`, * * `checkbox`, * * `html`, * * `numeric`, * * `password`. * * `text`. * * Or you can [register](http://docs.handsontable.com/demo-custom-renderers.html) the custom renderer under specified name and use * its name as an alias in your configuration. * * If a function is provided, it will receive the following arguments: * ```js * function(instance, TD, row, col, prop, value, cellProperties) {} * ``` * * You can read more about custom renderes [in the documentation](http://docs.handsontable.com/demo-custom-renderers.html). * * @example * ```js * ... * Handsontable.renderers.registerRenderer('my.renderer', function(instance, TD, row, col, prop, value, cellProperties) { * TD.innerHTML = value; * }); * ... * columns: [ * { * editor: 'select', * renderer: 'autocomplete' // as string * }, * { * renderer: 'my.renderer' // custom renderer as an alias * }, * { * // renderer as custom function * renderer: function(hotInstance, TD, row, col, prop, value, cellProperties) { * TD.style.color = 'blue'; * TD.innerHTML = value; * } * } * ] * ... * ``` * * @type {String|Function} * @default undefined */ renderer: void 0, /** * CSS class name added to the commented cells. * * @type {String} * @default 'htCommentCell' */ commentedCellClassName: 'htCommentCell', /** * If set to `true`, it enables the browser's native selection of a fragment of the text within a single cell, between adjacent cells or in a whole table. * If set to `'cell'`, it enables the possibility of selecting a fragment of the text within a single cell's body. * * @type {Boolean|String} * @default false */ fragmentSelection: false, /** * @description * Make cell [read only](http://docs.handsontable.com/demo-read-only.html). * * @type {Boolean} * @default false */ readOnly: false, /** * @description * When added to a `column` property, it skips the column on paste and pastes the data on the next column to the right. * * @type {Boolean} * @default false */ skipColumnOnPaste: false, /** * @description * Setting to true enables the search plugin (see [demo](http://docs.handsontable.com/demo-search-for-values.html)). * * @type {Boolean} * @default false */ search: false, /** * @description * Shortcut to define the combination of the cell renderer, editor and validator for the column, cell or whole table. * * Possible values: * * [autocomplete](http://docs.handsontable.com/demo-autocomplete.html) * * [checkbox](http://docs.handsontable.com/demo-checkbox.html) * * [date](http://docs.handsontable.com/demo-date.html) * * [dropdown](http://docs.handsontable.com/demo-dropdown.html) * * [handsontable](http://docs.handsontable.com/demo-handsontable.html) * * [numeric](http://docs.handsontable.com/demo-numeric.html) * * [password](http://docs.handsontable.com/demo-password.html) * * text * * [time](http://docs.handsontable.com/demo-time.html) * * Or you can register the custom cell type under specified name and use * its name as an alias in your configuration. * * @example * ```js * ... * Handsontable.cellTypes.registerCellType('my.type', { * editor: MyEditorClass, * renderer: function(hot, td, row, col, prop, value, cellProperties) { * td.innerHTML = value; * }, * validator: function(value, callback) { * callback(value === 'foo' ? true : false); * } * }); * ... * columns: [ * { * type: 'text' * }, * { * type: 'my.type' // an alias to custom type * }, * { * type: 'checkbox' * } * ] * ... * ``` * * @type {String} * @default 'text' */ type: 'text', /** * @description * Make cell copyable (pressing CTRL + C on your keyboard moves its value to system clipboard). * * __Note:__ this setting is `false` by default for cells with type `password`. * * @type {Boolean} * @default true * @since 0.10.2 */ copyable: true, /** * Defines the editor for the table/column/cell. * * If a string is provided, it may be one of the following predefined values: * * [autocomplete](http://docs.handsontable.com/demo-autocomplete.html) * * [checkbox](http://docs.handsontable.com/demo-checkbox.html) * * [date](http://docs.handsontable.com/demo-date.html) * * [dropdown](http://docs.handsontable.com/demo-dropdown.html) * * [handsontable](http://docs.handsontable.com/demo-handsontable.html) * * [mobile](http://docs.handsontable.com/demo-mobiles-and-tablets.html) * * [password](http://docs.handsontable.com/demo-password.html) * * [select](http://docs.handsontable.com/demo-select.html) * * text * * Or you can [register](http://docs.handsontable.com/tutorial-cell-editor.html#registering-an-editor) the custom editor under specified name and use * its name as an alias in your configuration. * * To disable cell editing completely set `editor` property to `false`. * * @example * ```js * ... * columns: [ * { * editor: 'select' * }, * { * editor: false * } * ] * ... * ``` * * @type {String|Function|Boolean} * @default 'text' */ editor: void 0, /** * @description * Autocomplete definitions. See [autocomplete demo](http://docs.handsontable.com/demo-autocomplete.html) for examples and definitions. * * @type {Array} * @default undefined */ autoComplete: void 0, /** * Control number of choices for the autocomplete (or dropdown) typed cells. After exceeding it, a scrollbar for the dropdown list of choices will appear. * * @since 0.18.0 * @type {Number} * @default 10 */ visibleRows: 10, /** * Makes autocomplete or dropdown width the same as the edited cell width. If `false` then editor will be scaled * according to its content. * * @since 0.17.0 * @type {Boolean} * @default true */ trimDropdown: true, /** * Setting to true enables the debug mode, currently used to test the correctness of the row and column * header fixed positioning on a layer above the master table. * * @type {Boolean} * @default false */ debug: false, /** * When set to `true`, the text of the cell content is wrapped if it does not fit in the fixed column width. * * @type {Boolean} * @default true * @since 0.11.0 */ wordWrap: true, /** * CSS class name added to cells with cell meta `wordWrap: false`. * * @type {String} * @default 'htNoWrap' * @since 0.11.0 */ noWordWrapClassName: 'htNoWrap', /** * @description * Defines if the right-click context menu should be enabled. Context menu allows to create new row or * column at any place in the grid among [other features](http://docs.handsontable.com/demo-context-menu.html). * Possible values: * * `true` (to enable default options), * * `false` (to disable completely) * * or array of any available strings: * * `["row_above", "row_below", "col_left", "col_right", * "remove_row", "remove_col", "---------", "undo", "redo"]`. * * See [the context menu demo](http://docs.handsontable.com/demo-context-menu.html) for examples. * * @example * ```js * ... * // as a boolean * contextMenu: true * ... * // as a array * contextMenu: ['row_above', 'row_below', '--------', 'undo', 'redo'] * ... * ``` * * @type {Boolean|Array|Object} * @default undefined */ contextMenu: void 0, /** * @description * Defines new actions copy/paste for context menu. This functionality is dependent on ZeroClipboard from which you * should pass the swf file path under `swfPath` object key. * * @example * ```js * ... * contextMenuCopyPaste: {swfPath: '[path to file]'} * ... * ``` * * @type {Object} */ contextMenuCopyPaste: void 0, /** * @description * Disable or enable the copy/paste functionality. * * @example * ```js * ... * copyPaste: false, * ... * ``` * * @type {Boolean} * @default undefined */ copyPaste: void 0, /** * If `true`, undo/redo functionality is enabled. * * @type {Boolean} * @default undefined */ undo: void 0, /** * @description * Turns on [Column sorting](http://docs.handsontable.com/demo-sorting-data.html). * Can be either a boolean (true/false) or an object with a declared sorting options. See the below example: * * @example * ```js * ... * // as boolean * columnSorting: true * ... * // as a object with initial order (sort ascending column at index 2) * columnSorting: { * column: 2, * sortOrder: true, // true = ascending, false = descending, undefined = original order * sortEmptyCells: true // true = the table sorts empty cells, false = the table moves all empty cells to the end of the table * } * ... * ``` * * @type {Boolean|Object} * @default undefined */ columnSorting: void 0, /** * @description * Turns on [Manual column move](http://docs.handsontable.com/demo-moving-rows-and-columns.html), if set to a boolean or define initial * column order, if set to an array of column indexes. * * @example * ```js * ... * // as boolean * manualColumnMove: true * ... * // as a array with initial order (move column index at 0 to 1 and move column index at 1 to 4) * manualColumnMove: [1, 4] * ... * ``` * * @type {Boolean|Array} * @default undefined */ manualColumnMove: void 0, /** * @description * Turns on [Manual column resize](http://docs.handsontable.com/demo-resizing.html), if set to a boolean or define initial * column resized widths, if set to an array of numbers. * * @example * ```js * ... * // as boolean * manualColumnResize: true * ... * // as a array with initial widths (column at 0 index has 40px and column at 1 index has 50px) * manualColumnResize: [40, 50] * ... * ``` * * @type {Boolean|Array} * @default undefined */ manualColumnResize: void 0, /** * @description * Turns on [Manual row move](http://docs.handsontable.com/demo-moving-rows-and-columns.html), if set to a boolean or define initial * row order, if set to an array of row indexes. * * @example * ```js * ... * // as boolean * manualRowMove: true * ... * // as a array with initial order (move row index at 0 to 1 and move row index at 1 to 4) * manualRowMove: [1, 4] * ... * ``` * * @type {Boolean|Array} * @default undefined * @since 0.11.0 */ manualRowMove: void 0, /** * @description * Turns on [Manual row resize](http://docs.handsontable.com/demo-resizing.html), if set to a boolean or define initial * row resized heights, if set to an array of numbers. * * @example * ```js * ... * // as boolean * manualRowResize: true * ... * // as a array with initial heights (row at 0 index has 40px and row at 1 index has 50px) * manualRowResize: [40, 50] * ... * ``` * * @type {Boolean|Array} * @default undefined * @since 0.11.0 */ manualRowResize: void 0, /** * @description * If set to `true`, it enables a possibility to merge cells. If set to an array of objects, it merges the cells provided in the objects (see the example below). * [More information on the demo page.](http://docs.handsontable.com/demo-merge-cells.html) * * @example * ```js * // enables the mergeCells plugin: * margeCells: true * ... * // declares a list of merged sections: * mergeCells: [ * {row: 1, col: 1, rowspan: 3, colspan: 3}, // rowspan and colspan properties declare the width and height of a merged section in cells * {row: 3, col: 4, rowspan: 2, colspan: 2}, * {row: 5, col: 6, rowspan: 3, colspan: 3} * ] * ``` * @type {Boolean|Array} * @default false */ mergeCells: false, /** * Number of rows to be rendered outside of the visible part of the table. * By default, it's set to `'auto'`, which makes Handsontable to attempt to calculate the best offset performance-wise. * * You may test out different values to find the best one that works for your specific implementation. * * @type {Number|String} * @default 'auto' */ viewportRowRenderingOffset: 'auto', /** * Number of columns to be rendered outside of the visible part of the table. * By default, it's set to `'auto'`, which makes Handsontable try calculating the best offset performance-wise. * * You may experiment with the value to find the one that works best for your specific implementation. * * @type {Number|String} * @default 'auto' */ viewportColumnRenderingOffset: 'auto', /** * A function, regular expression or a string, which will be used in the process of cell validation. * If a function is used, be sure to execute the callback argument with either `true` (`callback(true)`) if the validation passed * or with `false` (`callback(false)`), if the validation failed. * Note, that `this` in the function points to the `cellProperties` object. * * If a string is provided, it may be one of the following predefined values: * * `autocomplete`, * * `date`, * * `numeric`, * * `time`. * * Or you can [register](http://docs.handsontable.com/demo-data-validation.html) the validator function under specified name and use * its name as an alias in your configuration. * * See more [in the demo](http://docs.handsontable.com/demo-data-validation.html). * * @example * ```js * // as a function * columns: [ * { * validator: function(value, callback) { // validation rules } * } * ] * ... * // as a regexp * columns: [ * { * validator: /^[0-9]$/ // regular expression * } * ] * // as a string * columns: [ * { * validator: 'numeric' * } * ] * ``` * @type {Function|RegExp|String} * @default undefined * @since 0.9.5 */ validator: void 0, /** * @description * Disable visual cells selection. * * Possible values: * * `true` - Disables any type of visual selection (current and area selection), * * `false` - Enables any type of visual selection. This is default value. * * `current` - Disables the selection of a currently selected cell, the area selection is still present. * * `area` - Disables the area selection, the currently selected cell selection is still present. * * @type {Boolean|String|Array} * @default false * @since 0.13.2 * @example * ```js * ... * // as boolean * disableVisualSelection: true, * ... * * ... * // as string ('current' or 'area') * disableVisualSelection: 'current', * ... * * ... * // as array * disableVisualSelection: ['current', 'area'], * ... * ``` */ disableVisualSelection: false, /** * @description * Set whether to display the current sorting order indicator (a triangle icon in the column header, specifying the sorting order). * * @type {Boolean} * @default false * @since 0.15.0-beta3 */ sortIndicator: void 0, /** * Disable or enable ManualColumnFreeze plugin. * * @type {Boolean} * @default false */ manualColumnFreeze: void 0, /** * @description * Defines whether Handsontable should trim the whitespace at the beginning and the end of the cell contents. * * @type {Boolean} * @default true */ trimWhitespace: true, settings: void 0, /** * @description * Defines data source for Autocomplete or Dropdown cell types. * * @example * ```js * ... * // source as a array * columns: [{ * type: 'autocomplete', * source: ['A', 'B', 'C', 'D'] * }] * ... * // source as a function * columns: [{ * type: 'autocomplete', * source: function(query, callback) { * fetch('http://example.com/query?q=' + query, function(response) { * callback(response.items); * }) * } * }] * ... * ``` * * @type {Array|Function} * @default undefined */ source: void 0, /** * @description * Defines the column header name. * * @example * ```js * ... * columns: [{ * title: 'First name', * type: 'text', * }, * { * title: 'Last name', * type: 'text', * }] * ... * ``` * * @type {String} * @default undefined */ title: void 0, /** * Data template for `'checkbox'` type when checkbox is checked. * * @example * ```js * checkedTemplate: 'good' * * // if a checkbox-typed cell is checked, then getDataAtCell(x,y), where x and y are the coordinates of the cell * // will return 'good'. * ``` * @type {Boolean|String} * @default true */ checkedTemplate: void 0, /** * Data template for `'checkbox'` type when checkbox is unchecked. * * @example * ```js * uncheckedTemplate: 'bad' * * // if a checkbox-typed cell is not checked, then getDataAtCell(x,y), where x and y are the coordinates of the cell * // will return 'bad'. * ``` * @type {Boolean|String} * @default false */ uncheckedTemplate: void 0, /** * @description * Object which describes if renderer should create checkbox element with label element as a parent. Option desired for * [checkbox](http://docs.handsontable.com/demo-checkbox.html)-typed cells. * * By default the [checkbox](http://docs.handsontable.com/demo-checkbox.html) renderer renders the checkbox without a label. * * Possible object properties: * * `property` - Defines the property name of the data object, which will to be used as a label. * (eg. `label: {property: 'name.last'}`). This option works only if data was passed as an array of objects. * * `position` - String which describes where to place the label text (before or after checkbox element). * Valid values are `'before'` and '`after`' (defaults to `'after'`). * * `value` - String or a Function which will be used as label text. * * @example * ```js * ... * columns: [{ * type: 'checkbox', * label: {position: 'after', value: 'My label: '} * }] * ... * ``` * * @since 0.19.0 * @type {Object} * @default undefined */ label: void 0, /** * Display format. See [numbrojs](http://numbrojs.com). This option is desired for * [numeric](http://docs.handsontable.com/demo-numeric.html)-typed cells. * * Since 0.26.0 Handsontable uses [numbro](http://numbrojs.com/) as a main library for numbers formatting. * * @example * ```js * ... * columns: [{ * type: 'numeric', * format: '0,00' * }] * ... * ``` * * @type {String} * @default '0' */ format: void 0, /** * Language display format. See [numbrojs](http://numbrojs.com/languages.html#supported-languages). This option is desired for * [numeric](http://docs.handsontable.com/demo-numeric.html)-typed cells. * * Since 0.26.0 Handsontable uses [numbro](http://numbrojs.com/) as a main library for numbers formatting. * * @example * ```js * ... * columns: [{ * type: 'numeric', * language: 'en-US' * }] * ... * ``` * * @type {String} * @default 'en-US' */ language: void 0, /** * @description * Data source for [select](http://docs.handsontable.com/demo-select.html)-typed cells. * * @example * ```js * ... * columns: [{ * editor: 'select', * selectOptions: ['A', 'B', 'C'], * }] * ... * ``` * * @type {Array} */ selectOptions: void 0, /** * Enables or disables the autoColumnSize plugin. Default value is `undefined`, which has the same effect as `true`. * Disabling this plugin can increase performance, as no size-related calculations would be done. * * Column width calculations are divided into sync and async part. Each of this parts has their own advantages and * disadvantages. Synchronous calculations are faster but they block the browser UI, while the slower asynchronous operations don't * block the browser UI. * * To configure the sync/async distribution, you can pass an absolute value (number of columns) or a percentage value. * `syncLimit` option is available since 0.16.0. * * You can also use the `useHeaders` option to take the column headers with into calculation. * * @example * ```js * ... * // as a number (300 columns in sync, rest async) * autoColumnSize: {syncLimit: 300}, * ... * * ... * // as a string (percent) * autoColumnSize: {syncLimit: '40%'}, * ... * * ... * // use headers width while calculation the column width * autoColumnSize: {useHeaders: true}, * ... * * ``` * * @type {Object|Boolean} * @default {syncLimit: 50} */ autoColumnSize: void 0, /** * Enables or disables autoRowSize plugin. Default value is `undefined`, which has the same effect as `false` (disabled). * Enabling this plugin can decrease performance, as size-related calculations would be performed. * * Row height calculations are divided into sync and async stages. Each of these stages has their own advantages and * disadvantages. Synchronous calculations are faster but they block the browser UI, while the slower asynchronous operations don't * block the browser UI. * * To configure the sync/async distribution, you can pass an absolute value (number of columns) or a percentage value. * `syncLimit` options is available since 0.16.0. * * @example * ```js * ... * // as number (300 columns in sync, rest async) * autoRowSize: {syncLimit: 300}, * ... * * ... * // as string (percent) * autoRowSize: {syncLimit: '40%'}, * ... * ``` * @type {Object|Boolean} * @default {syncLimit: 1000} */ autoRowSize: void 0, /** * Date validation format. * * Option desired for `'date'` - typed cells. * * @example * ```js * ... * columns: [{ * type: 'date', * dateFormat: 'MM/DD/YYYY' * }] * ... * ``` * * @type {String} * @default 'DD/MM/YYYY' */ dateFormat: void 0, /** * If `true` then dates will be automatically formatted to match the desired format. * * Option desired for `'date'`-typed typed cells. * * @example * ```js * ... * columns: [{ * type: 'date', * dateFormat: 'YYYY-MM-DD', * correctFormat: true * }] * ... * ``` * * @type {Boolean} * @default false */ correctFormat: false, /** * Definition of default value which will fill the empty cells. * * Option desired for `'date'`-typed cells. * * @example * ```js * ... * columns: [{ * type: 'date', * defaultData: '2015-02-02' * }] * ... * ``` * * @type {String} */ defaultDate: void 0, /** * If set to `true`, the value entered into the cell must match (case-sensitive) the autocomplete source. Otherwise, cell won't pass the validation. * When filtering the autocomplete source list, the editor will be working in case-insensitive mode. * * Option desired for `autocomplete`-typed cells. * * @example * ```js * ... * columns: [{ * type: 'autocomplete', * source: ['A', 'B', 'C'], * strict: true * }] * ... * ``` * * @type {Boolean} */ strict: void 0, /** * @description * If typed `true`, data defined in `source` of the autocomplete or dropdown cell will be treated as HTML. * * __Warning:__ Enabling this option can cause serious XSS vulnerabilities. * * Option desired for `'autocomplete'`-typed cells. * @example * ```js * ... * columns: [{ * type: 'autocomplete', * allowHtml: true, * source: ['foo', 'bar'] * }] * ... * ``` * @type {Boolean} * @default false */ allowHtml: false, /** * If typed `true` then virtual rendering mechanism for handsontable will be disabled. * * @type {Boolean} */ renderAllRows: void 0, /** * Prevents table to overlap outside the parent element. If `'horizontal'` option is chosen then table will appear horizontal * scrollbar in case where parent's width is narrower then table's width. * * Possible values: * * `false` - Disables functionality (Default option). * * `horizontal` - Prevents horizontal overflow table. * * `vertical` - Prevents vertical overflow table (Not implemented yet). * * @since 0.20.3 * @example * ```js * ... * preventOverflow: 'horizontal' * ... * ``` * * @type {String|Boolean} */ preventOverflow: false, /** * @description * Plugin allowing binding the table rows with their headers. * If the plugin is enabled, the table row headers will "stick" to the rows, when they are hidden/moved. Basically, if at the initialization * row 0 has a header titled "A", it will have it no matter what you do with the table. * * @pro * @since 1.0.0-beta1 * @type {Boolean|String} * @example * * ```js * ... * var hot = new Handsontable(document.getElementById('example'), { * date: getData(), * bindRowsWithHeaders: true * }); * ... * ``` * */ bindRowsWithHeaders: void 0, /** * @description * The CollapsibleColumns plugin allows collapsing of columns, covered by a header with the `colspan` property defined. * * Clicking the "collapse/expand" button collapses (or expands) all "child" headers except the first one. * * Setting the `collapsibleColumns` property to `true` will display a "collapse/expand" button in every header with a defined * `colspan` property. * * To limit this functionality to a smaller group of headers, define the `collapsibleColumns` property as an array of objects, as in * the example below. * * @pro * @since 1.0.0-beta1 * @type {Boolean|Array} * @example * ```js * ... * collapsibleColumns: [ * {row: -4, col: 1, collapsible: true}, * {row: -3, col: 5, collapsible: true} * ] * ... * // or * ... * collapsibleColumns: true * ... * ``` */ collapsibleColumns: void 0, /** * @description * Allows making pre-defined calculations on the cell values and display the results within Handsontable. * See the demo for more information. * * @pro * @since 1.0.0-beta1 * @type {Object} */ columnSummary: void 0, /** * This plugin allows adding a configurable dropdown menu to the table's column headers. * The dropdown menu acts like the Context Menu, but is triggered by clicking the button in the header. * * @pro * @since 1.0.0-beta1 * @type {Boolean|Object|Array} */ dropdownMenu: void 0, /** * The filters plugin. * It allows filtering the table data either by the built-in component or with the API. * * @pro * @since 1.0.0-beta1 * @type {Boolean} */ filters: void 0, /** * It allows Handsontable to process formula expressions defined in the provided data. * * @pro * @since 1.7.0 * @type {Boolean} */ formulas: void 0, /** * @description * GanttChart plugin enables a possibility to create a Gantt chart using a Handsontable instance. * In this case, the whole table becomes read-only. * * @pro * @since 1.0.0-beta1 * @type {Object} */ ganttChart: void 0, /** * @description * Allows adding a tooltip to the table headers. * * Available options: * * the `rows` property defines if tooltips should be added to row headers, * * the `columns` property defines if tooltips should be added to column headers, * * the `onlyTrimmed` property defines if tooltips should be added only to headers, which content is trimmed by the header itself (the content being wider then the header). * * @pro * @since 1.0.0-beta1 * @type {Boolean|Object} */ headerTooltips: void 0, /** * Plugin allowing hiding of certain columns. * * @pro * @since 1.0.0-beta1 * @type {Boolean|Object} */ hiddenColumns: void 0, /** * @description * Plugin allowing hiding of certain rows. * * @pro * @since 1.0.0-beta1 * @type {Boolean|Object} */ hiddenRows: void 0, /** * @description * Allows creating a nested header structure, using the HTML's colspan attribute. * * @pro * @since 1.0.0-beta1 * @type {Array} */ nestedHeaders: void 0, /** * @description * Plugin allowing hiding of certain rows. * * @pro * @since 1.0.0-beta1 * @type {Boolean|Array} */ trimRows: void 0, /** * @description * Allows setting a custom width of the row headers. You can provide a number or an array of widths, if many row header levels are defined. * * @since 0.22.0 * @type {Number|Array} */ rowHeaderWidth: void 0, /** * @description * Allows setting a custom height of the column headers. You can provide a number or an array of heights, if many column header levels are defined. * * @since 0.22.0 * @type {Number|Array} */ columnHeaderHeight: void 0, /** * @description * Enabling this plugin switches table into one-way data binding where changes are applied into data source (from outside table) * will be automatically reflected in the table. * * For every data change [afterChangesObserved](Hooks.html#event:afterChangesObserved) hook will be fired. * * @type {Boolean} * @default false */ observeChanges: void 0, /** * @description * When passed to the `column` property, allows specifying a custom sorting function for the desired column. * * @since 0.24.0 * @type {Function} * @example * ```js * columns: [ * { * sortFunction: function(sortOrder) { * return function(a, b) { * // sorting function body. * // * // Function parameters: * // sortOrder: If true, the order is ascending, if false - descending. undefined = original order * // a, b: Two compared elements. These are 2-element arrays, with the first element being the row index, the second - cell value. * } * } * } * ] * ``` */ sortFunction: void 0, /** * If defined as 'true', the Autocomplete's suggestion list would be sorted by relevance (the closer to the left the match is, the higher the suggestion). * * Option desired for cells of the `'autocomplete'` type. * * @type {Boolean} * @default true */ sortByRelevance: true, /** * If defined as 'true', when the user types into the input area the Autocomplete's suggestion list is updated to only * include those choices starting with what has been typed; if defined as 'false' all suggestions remain shown, with * those matching what has been typed marked in bold. * * @type {Boolean} * @default true */ filter: true, /** * If defined as 'true', filtering in the Autocomplete Editor will be case-sensitive. * * @type {Boolean} * @default: false */ filteringCaseSensitive: false }; export default DefaultSettings;