handsontable 11.0.0 → 12.0.0
Sign up to get free protection for your applications and to get access to all the features.
- package/3rdparty/walkontable/src/border.js +121 -99
- package/3rdparty/walkontable/src/border.mjs +122 -96
- package/3rdparty/walkontable/src/calculator/viewportColumns.js +1 -1
- package/3rdparty/walkontable/src/calculator/viewportColumns.mjs +1 -1
- package/3rdparty/walkontable/src/calculator/viewportRows.js +1 -1
- package/3rdparty/walkontable/src/calculator/viewportRows.mjs +1 -1
- package/3rdparty/walkontable/src/cell/coords.js +60 -18
- package/3rdparty/walkontable/src/cell/coords.mjs +56 -18
- package/3rdparty/walkontable/src/cell/range.d.ts +10 -2
- package/3rdparty/walkontable/src/cell/range.js +279 -100
- package/3rdparty/walkontable/src/cell/range.mjs +274 -100
- package/3rdparty/walkontable/src/core/_base.js +452 -0
- package/3rdparty/walkontable/src/core/_base.mjs +440 -0
- package/3rdparty/walkontable/src/core/clone.js +97 -0
- package/3rdparty/walkontable/src/core/clone.mjs +80 -0
- package/3rdparty/walkontable/src/core/core.js +183 -0
- package/3rdparty/walkontable/src/core/core.mjs +160 -0
- package/3rdparty/walkontable/src/event.js +100 -67
- package/3rdparty/walkontable/src/event.mjs +100 -64
- package/3rdparty/walkontable/src/facade/core.js +251 -0
- package/3rdparty/walkontable/src/facade/core.mjs +243 -0
- package/3rdparty/walkontable/src/filter/column.js +1 -1
- package/3rdparty/walkontable/src/filter/column.mjs +1 -1
- package/3rdparty/walkontable/src/filter/row.js +1 -1
- package/3rdparty/walkontable/src/filter/row.mjs +1 -1
- package/3rdparty/walkontable/src/index.js +3 -47
- package/3rdparty/walkontable/src/index.mjs +3 -13
- package/3rdparty/walkontable/src/overlay/_base.js +125 -58
- package/3rdparty/walkontable/src/overlay/_base.mjs +126 -59
- package/3rdparty/walkontable/src/overlay/bottom.js +86 -76
- package/3rdparty/walkontable/src/overlay/bottom.mjs +86 -76
- package/3rdparty/walkontable/src/overlay/{bottomLeftCorner.js → bottomInlineStartCorner.js} +35 -58
- package/3rdparty/walkontable/src/overlay/{bottomLeftCorner.mjs → bottomInlineStartCorner.mjs} +34 -57
- package/3rdparty/walkontable/src/overlay/constants.js +25 -9
- package/3rdparty/walkontable/src/overlay/constants.mjs +14 -4
- package/3rdparty/walkontable/src/overlay/index.js +10 -19
- package/3rdparty/walkontable/src/overlay/index.mjs +4 -5
- package/3rdparty/walkontable/src/overlay/{left.js → inlineStart.js} +102 -80
- package/3rdparty/walkontable/src/overlay/{left.mjs → inlineStart.mjs} +101 -79
- package/3rdparty/walkontable/src/overlay/top.js +84 -79
- package/3rdparty/walkontable/src/overlay/top.mjs +84 -79
- package/3rdparty/walkontable/src/overlay/{topLeftCorner.js → topInlineStartCorner.js} +56 -57
- package/3rdparty/walkontable/src/overlay/{topLeftCorner.mjs → topInlineStartCorner.mjs} +51 -52
- package/3rdparty/walkontable/src/overlays.js +226 -157
- package/3rdparty/walkontable/src/overlays.mjs +226 -156
- package/3rdparty/walkontable/src/renderer/_base.js +1 -1
- package/3rdparty/walkontable/src/renderer/_base.mjs +1 -1
- package/3rdparty/walkontable/src/renderer/cells.js +5 -4
- package/3rdparty/walkontable/src/renderer/cells.mjs +5 -4
- package/3rdparty/walkontable/src/renderer/colGroup.js +3 -3
- package/3rdparty/walkontable/src/renderer/colGroup.mjs +3 -3
- package/3rdparty/walkontable/src/renderer/columnHeaders.js +3 -3
- package/3rdparty/walkontable/src/renderer/columnHeaders.mjs +3 -3
- package/3rdparty/walkontable/src/renderer/index.js +1 -1
- package/3rdparty/walkontable/src/renderer/index.mjs +1 -1
- package/3rdparty/walkontable/src/renderer/rowHeaders.js +3 -3
- package/3rdparty/walkontable/src/renderer/rowHeaders.mjs +3 -3
- package/3rdparty/walkontable/src/renderer/rows.js +3 -3
- package/3rdparty/walkontable/src/renderer/rows.mjs +3 -3
- package/3rdparty/walkontable/src/renderer/table.js +1 -1
- package/3rdparty/walkontable/src/renderer/table.mjs +1 -1
- package/3rdparty/walkontable/src/scroll.js +61 -88
- package/3rdparty/walkontable/src/scroll.mjs +61 -88
- package/3rdparty/walkontable/src/selection.js +12 -16
- package/3rdparty/walkontable/src/selection.mjs +12 -14
- package/3rdparty/walkontable/src/settings.js +236 -127
- package/3rdparty/walkontable/src/settings.mjs +236 -126
- package/3rdparty/walkontable/src/table/bottom.js +21 -6
- package/3rdparty/walkontable/src/table/bottom.mjs +20 -6
- package/3rdparty/walkontable/src/table/{bottomLeftCorner.js → bottomInlineStartCorner.js} +31 -15
- package/3rdparty/walkontable/src/table/{bottomLeftCorner.mjs → bottomInlineStartCorner.mjs} +30 -15
- package/3rdparty/walkontable/src/table/{left.js → inlineStart.js} +27 -15
- package/3rdparty/walkontable/src/table/{left.mjs → inlineStart.mjs} +26 -15
- package/3rdparty/walkontable/src/table/master.js +23 -13
- package/3rdparty/walkontable/src/table/master.mjs +23 -13
- package/3rdparty/walkontable/src/table/mixin/calculatedColumns.js +12 -6
- package/3rdparty/walkontable/src/table/mixin/calculatedColumns.mjs +12 -6
- package/3rdparty/walkontable/src/table/mixin/calculatedRows.js +12 -6
- package/3rdparty/walkontable/src/table/mixin/calculatedRows.mjs +12 -6
- package/3rdparty/walkontable/src/table/mixin/{stickyColumnsLeft.js → stickyColumnsStart.js} +13 -7
- package/3rdparty/walkontable/src/table/mixin/{stickyColumnsLeft.mjs → stickyColumnsStart.mjs} +13 -7
- package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.js +11 -5
- package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.mjs +11 -5
- package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.js +9 -3
- package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.mjs +9 -3
- package/3rdparty/walkontable/src/table/top.js +21 -6
- package/3rdparty/walkontable/src/table/top.mjs +20 -6
- package/3rdparty/walkontable/src/table/{topLeftCorner.js → topInlineStartCorner.js} +31 -15
- package/3rdparty/walkontable/src/table/{topLeftCorner.mjs → topInlineStartCorner.mjs} +30 -15
- package/3rdparty/walkontable/src/table.js +236 -141
- package/3rdparty/walkontable/src/table.mjs +232 -135
- package/3rdparty/walkontable/src/types.js +103 -0
- package/3rdparty/walkontable/src/types.mjs +102 -0
- package/3rdparty/walkontable/src/utils/column.js +23 -34
- package/3rdparty/walkontable/src/utils/column.mjs +23 -31
- package/3rdparty/walkontable/src/utils/nodesPool.js +1 -1
- package/3rdparty/walkontable/src/utils/nodesPool.mjs +1 -1
- package/3rdparty/walkontable/src/utils/orderView/sharedView.js +3 -3
- package/3rdparty/walkontable/src/utils/orderView/sharedView.mjs +3 -3
- package/3rdparty/walkontable/src/utils/orderView/view.js +1 -1
- package/3rdparty/walkontable/src/utils/orderView/view.mjs +1 -1
- package/3rdparty/walkontable/src/utils/orderView/viewSize.js +1 -1
- package/3rdparty/walkontable/src/utils/orderView/viewSize.mjs +1 -1
- package/3rdparty/walkontable/src/utils/orderView/viewSizeSet.js +1 -1
- package/3rdparty/walkontable/src/utils/orderView/viewSizeSet.mjs +1 -1
- package/3rdparty/walkontable/src/utils/row.js +10 -5
- package/3rdparty/walkontable/src/utils/row.mjs +10 -5
- package/3rdparty/walkontable/src/viewport.js +78 -81
- package/3rdparty/walkontable/src/viewport.mjs +78 -78
- package/CHANGELOG.md +94 -17
- package/README.md +10 -7
- package/base.js +2 -2
- package/base.mjs +2 -2
- package/cellTypes/timeType/timeType.d.ts +6 -6
- package/cellTypes/timeType/timeType.js +4 -5
- package/cellTypes/timeType/timeType.mjs +4 -5
- package/core.d.ts +9 -3
- package/core.js +590 -157
- package/core.mjs +599 -169
- package/dataMap/dataMap.js +2 -2
- package/dataMap/dataMap.mjs +2 -2
- package/dataMap/index.js +8 -0
- package/dataMap/index.mjs +3 -1
- package/dataMap/metaManager/index.js +3 -3
- package/dataMap/metaManager/index.mjs +3 -3
- package/dataMap/metaManager/lazyFactoryMap.js +1 -1
- package/dataMap/metaManager/lazyFactoryMap.mjs +1 -1
- package/dataMap/metaManager/metaLayers/cellMeta.js +1 -1
- package/dataMap/metaManager/metaLayers/cellMeta.mjs +1 -1
- package/dataMap/metaManager/metaLayers/columnMeta.js +1 -1
- package/dataMap/metaManager/metaLayers/columnMeta.mjs +1 -1
- package/dataMap/metaManager/metaLayers/globalMeta.js +7 -3
- package/dataMap/metaManager/metaLayers/globalMeta.mjs +7 -3
- package/dataMap/metaManager/metaLayers/tableMeta.js +3 -3
- package/dataMap/metaManager/metaLayers/tableMeta.mjs +3 -3
- package/dataMap/metaManager/metaSchema.js +2931 -2676
- package/dataMap/metaManager/metaSchema.mjs +2931 -2676
- package/dataMap/metaManager/mods/dynamicCellMeta.js +1 -1
- package/dataMap/metaManager/mods/dynamicCellMeta.mjs +1 -1
- package/dataMap/metaManager/mods/extendMetaProperties.js +126 -0
- package/dataMap/metaManager/mods/extendMetaProperties.mjs +113 -0
- package/dataMap/replaceData.js +140 -0
- package/dataMap/replaceData.mjs +124 -0
- package/dataSource.js +1 -1
- package/dataSource.mjs +1 -1
- package/dist/README.md +2 -2
- package/dist/handsontable.css +424 -166
- package/dist/handsontable.full.css +559 -298
- package/dist/handsontable.full.js +47163 -41289
- package/dist/handsontable.full.min.css +8 -13
- package/dist/handsontable.full.min.js +143 -142
- package/dist/handsontable.js +28270 -24105
- package/dist/handsontable.min.css +8 -11
- package/dist/handsontable.min.js +3 -3
- package/dist/languages/all.js +69 -38
- package/dist/languages/all.min.js +1 -1
- package/dist/languages/ar-AR.js +167 -0
- package/dist/languages/ar-AR.min.js +1 -0
- package/dist/languages/de-CH.js +32 -33
- package/dist/languages/de-CH.min.js +1 -1
- package/dist/languages/de-DE.js +5 -6
- package/dist/languages/de-DE.min.js +1 -1
- package/dist/languages/en-US.js +5 -6
- package/dist/languages/en-US.min.js +1 -1
- package/dist/languages/es-MX.js +5 -6
- package/dist/languages/es-MX.min.js +1 -1
- package/dist/languages/fr-FR.js +5 -6
- package/dist/languages/fr-FR.min.js +1 -1
- package/dist/languages/it-IT.js +5 -6
- package/dist/languages/it-IT.min.js +1 -1
- package/dist/languages/ja-JP.js +5 -6
- package/dist/languages/ja-JP.min.js +1 -1
- package/dist/languages/ko-KR.js +37 -42
- package/dist/languages/ko-KR.min.js +1 -1
- package/dist/languages/lv-LV.js +4 -6
- package/dist/languages/lv-LV.min.js +1 -1
- package/dist/languages/nb-NO.js +4 -6
- package/dist/languages/nb-NO.min.js +1 -1
- package/dist/languages/nl-NL.js +4 -6
- package/dist/languages/nl-NL.min.js +1 -1
- package/dist/languages/pl-PL.js +4 -6
- package/dist/languages/pl-PL.min.js +1 -1
- package/dist/languages/pt-BR.js +4 -6
- package/dist/languages/pt-BR.min.js +1 -1
- package/dist/languages/ru-RU.js +4 -6
- package/dist/languages/ru-RU.min.js +1 -1
- package/dist/languages/zh-CN.js +4 -6
- package/dist/languages/zh-CN.min.js +1 -1
- package/dist/languages/zh-TW.js +25 -27
- package/dist/languages/zh-TW.min.js +1 -1
- package/editorManager.js +121 -268
- package/editorManager.mjs +129 -279
- package/editors/autocompleteEditor/autocompleteEditor.js +19 -17
- package/editors/autocompleteEditor/autocompleteEditor.mjs +19 -17
- package/editors/baseEditor/baseEditor.js +207 -36
- package/editors/baseEditor/baseEditor.mjs +202 -34
- package/editors/checkboxEditor/checkboxEditor.js +3 -3
- package/editors/checkboxEditor/checkboxEditor.mjs +3 -3
- package/editors/dateEditor/dateEditor.js +22 -9
- package/editors/dateEditor/dateEditor.mjs +23 -10
- package/editors/dropdownEditor/dropdownEditor.js +4 -4
- package/editors/dropdownEditor/dropdownEditor.mjs +4 -4
- package/editors/handsontableEditor/handsontableEditor.js +107 -56
- package/editors/handsontableEditor/handsontableEditor.mjs +107 -56
- package/editors/index.d.ts +3 -0
- package/editors/index.js +6 -0
- package/editors/index.mjs +3 -1
- package/editors/numericEditor/numericEditor.js +3 -3
- package/editors/numericEditor/numericEditor.mjs +3 -3
- package/editors/passwordEditor/passwordEditor.js +4 -4
- package/editors/passwordEditor/passwordEditor.mjs +4 -4
- package/editors/selectEditor/selectEditor.js +66 -111
- package/editors/selectEditor/selectEditor.mjs +67 -110
- package/editors/textEditor/caretPositioner.js +49 -0
- package/editors/textEditor/caretPositioner.mjs +42 -0
- package/editors/textEditor/textEditor.js +206 -182
- package/editors/textEditor/textEditor.mjs +200 -180
- package/editors/timeEditor/index.d.ts +1 -0
- package/editors/timeEditor/index.js +9 -0
- package/editors/timeEditor/index.mjs +1 -0
- package/editors/timeEditor/timeEditor.d.ts +7 -0
- package/editors/timeEditor/timeEditor.js +105 -0
- package/editors/timeEditor/timeEditor.mjs +84 -0
- package/eventManager.js +11 -5
- package/eventManager.mjs +11 -5
- package/helpers/data.js +1 -1
- package/helpers/data.mjs +1 -1
- package/helpers/dom/element.js +1 -1
- package/helpers/dom/element.mjs +1 -1
- package/helpers/feature.js +1 -1
- package/helpers/feature.mjs +1 -1
- package/helpers/mixed.js +3 -3
- package/helpers/mixed.mjs +3 -3
- package/helpers/number.js +4 -4
- package/helpers/number.mjs +4 -4
- package/helpers/object.js +1 -1
- package/helpers/object.mjs +1 -1
- package/i18n/languages/ar-AR.js +41 -0
- package/i18n/languages/ar-AR.mjs +17 -0
- package/i18n/languages/de-CH.js +1 -1
- package/i18n/languages/de-DE.js +1 -1
- package/i18n/languages/en-US.js +1 -1
- package/i18n/languages/es-MX.js +1 -1
- package/i18n/languages/fr-FR.js +1 -1
- package/i18n/languages/index.js +4 -0
- package/i18n/languages/index.mjs +2 -1
- package/i18n/languages/it-IT.js +1 -1
- package/i18n/languages/ja-JP.js +1 -1
- package/i18n/languages/ko-KR.js +1 -1
- package/i18n/languages/lv-LV.js +1 -1
- package/i18n/languages/nb-NO.js +1 -1
- package/i18n/languages/nl-NL.js +1 -1
- package/i18n/languages/pl-PL.js +1 -1
- package/i18n/languages/pt-BR.js +1 -1
- package/i18n/languages/ru-RU.js +1 -1
- package/i18n/languages/zh-CN.js +1 -1
- package/i18n/languages/zh-TW.js +1 -1
- package/i18n/registry.js +1 -1
- package/index.d.ts +4 -0
- package/index.js +1 -1
- package/languages/all.js +69 -38
- package/languages/ar-AR.js +167 -0
- package/languages/ar-AR.mjs +19 -0
- package/languages/de-CH.js +32 -33
- package/languages/de-DE.js +5 -6
- package/languages/en-US.js +5 -6
- package/languages/es-MX.js +5 -6
- package/languages/fr-FR.js +5 -6
- package/languages/index.js +69 -38
- package/languages/index.mjs +2 -1
- package/languages/it-IT.js +5 -6
- package/languages/ja-JP.js +5 -6
- package/languages/ko-KR.js +37 -42
- package/languages/lv-LV.js +4 -6
- package/languages/nb-NO.js +4 -6
- package/languages/nl-NL.js +4 -6
- package/languages/pl-PL.js +4 -6
- package/languages/pt-BR.js +4 -6
- package/languages/ru-RU.js +4 -6
- package/languages/zh-CN.js +4 -6
- package/languages/zh-TW.js +25 -27
- package/package.json +26 -8
- package/pluginHooks.d.ts +2 -0
- package/pluginHooks.js +58 -27
- package/pluginHooks.mjs +58 -27
- package/plugins/autoColumnSize/autoColumnSize.js +14 -9
- package/plugins/autoColumnSize/autoColumnSize.mjs +14 -9
- package/plugins/autoRowSize/autoRowSize.js +15 -10
- package/plugins/autoRowSize/autoRowSize.mjs +15 -10
- package/plugins/autofill/autofill.js +50 -34
- package/plugins/autofill/autofill.mjs +50 -33
- package/plugins/autofill/utils.js +10 -11
- package/plugins/autofill/utils.mjs +10 -10
- package/plugins/base/base.d.ts +8 -2
- package/plugins/base/base.js +68 -5
- package/plugins/base/base.mjs +67 -5
- package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.js +4 -4
- package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.mjs +4 -4
- package/plugins/bindRowsWithHeaders/maps/looseBindsMap.js +4 -4
- package/plugins/bindRowsWithHeaders/maps/looseBindsMap.mjs +4 -4
- package/plugins/bindRowsWithHeaders/maps/strictBindsMap.js +4 -4
- package/plugins/bindRowsWithHeaders/maps/strictBindsMap.mjs +4 -4
- package/plugins/collapsibleColumns/collapsibleColumns.js +49 -30
- package/plugins/collapsibleColumns/collapsibleColumns.mjs +49 -30
- package/plugins/columnSorting/columnSorting.d.ts +1 -1
- package/plugins/columnSorting/columnSorting.js +10 -12
- package/plugins/columnSorting/columnSorting.mjs +10 -11
- package/plugins/columnSorting/columnStatesManager.js +3 -3
- package/plugins/columnSorting/columnStatesManager.mjs +3 -3
- package/plugins/columnSummary/columnSummary.js +4 -4
- package/plugins/columnSummary/columnSummary.mjs +4 -4
- package/plugins/columnSummary/endpoints.js +1 -1
- package/plugins/columnSummary/endpoints.mjs +1 -1
- package/plugins/comments/commentEditor.js +24 -4
- package/plugins/comments/commentEditor.mjs +25 -5
- package/plugins/comments/comments.js +63 -104
- package/plugins/comments/comments.mjs +63 -102
- package/plugins/comments/displaySwitch.js +1 -1
- package/plugins/comments/displaySwitch.mjs +1 -1
- package/plugins/contextMenu/commandExecutor.js +1 -1
- package/plugins/contextMenu/commandExecutor.mjs +1 -1
- package/plugins/contextMenu/contextMenu.js +11 -7
- package/plugins/contextMenu/contextMenu.mjs +11 -7
- package/plugins/contextMenu/cursor.js +1 -1
- package/plugins/contextMenu/cursor.mjs +1 -1
- package/plugins/contextMenu/itemsFactory.js +1 -1
- package/plugins/contextMenu/itemsFactory.mjs +1 -1
- package/plugins/contextMenu/menu.js +223 -111
- package/plugins/contextMenu/menu.mjs +220 -112
- package/plugins/contextMenu/predefinedItems/alignment.js +1 -1
- package/plugins/contextMenu/predefinedItems/clearColumn.js +1 -1
- package/plugins/contextMenu/predefinedItems/columnLeft.js +13 -5
- package/plugins/contextMenu/predefinedItems/columnLeft.mjs +11 -4
- package/plugins/contextMenu/predefinedItems/columnRight.js +10 -10
- package/plugins/contextMenu/predefinedItems/columnRight.mjs +9 -9
- package/plugins/contextMenu/predefinedItems/readOnly.js +1 -1
- package/plugins/contextMenu/predefinedItems/redo.js +1 -1
- package/plugins/contextMenu/predefinedItems/removeColumn.js +1 -1
- package/plugins/contextMenu/predefinedItems/removeRow.js +1 -1
- package/plugins/contextMenu/predefinedItems/rowAbove.js +1 -1
- package/plugins/contextMenu/predefinedItems/rowBelow.js +1 -1
- package/plugins/contextMenu/predefinedItems/undo.js +1 -1
- package/plugins/contextMenu/predefinedItems.js +1 -1
- package/plugins/contextMenu/utils.js +2 -2
- package/plugins/contextMenu/utils.mjs +2 -2
- package/plugins/copyPaste/clipboardData.js +1 -1
- package/plugins/copyPaste/clipboardData.mjs +1 -1
- package/plugins/copyPaste/contextMenuItem/copy.js +1 -1
- package/plugins/copyPaste/contextMenuItem/cut.js +1 -1
- package/plugins/copyPaste/copyPaste.js +29 -19
- package/plugins/copyPaste/copyPaste.mjs +28 -19
- package/plugins/copyPaste/focusableElement.js +1 -1
- package/plugins/copyPaste/focusableElement.mjs +1 -1
- package/plugins/copyPaste/pasteEvent.js +6 -2
- package/plugins/copyPaste/pasteEvent.mjs +6 -2
- package/plugins/customBorders/contextMenuItem/bottom.js +1 -1
- package/plugins/customBorders/contextMenuItem/left.js +5 -4
- package/plugins/customBorders/contextMenuItem/left.mjs +4 -3
- package/plugins/customBorders/contextMenuItem/noBorders.js +1 -1
- package/plugins/customBorders/contextMenuItem/right.js +5 -4
- package/plugins/customBorders/contextMenuItem/right.mjs +4 -3
- package/plugins/customBorders/contextMenuItem/top.js +1 -1
- package/plugins/customBorders/customBorders.js +141 -85
- package/plugins/customBorders/customBorders.mjs +139 -82
- package/plugins/customBorders/utils.js +131 -27
- package/plugins/customBorders/utils.mjs +115 -27
- package/plugins/dragToScroll/dragToScroll.js +11 -6
- package/plugins/dragToScroll/dragToScroll.mjs +11 -6
- package/plugins/dropdownMenu/dropdownMenu.js +8 -7
- package/plugins/dropdownMenu/dropdownMenu.mjs +8 -7
- package/plugins/exportFile/dataProvider.js +1 -1
- package/plugins/exportFile/dataProvider.mjs +1 -1
- package/plugins/exportFile/exportFile.js +3 -3
- package/plugins/exportFile/exportFile.mjs +3 -3
- package/plugins/exportFile/types/_base.js +1 -1
- package/plugins/exportFile/types/_base.mjs +1 -1
- package/plugins/exportFile/types/csv.js +3 -3
- package/plugins/exportFile/types/csv.mjs +3 -3
- package/plugins/filters/component/_base.js +1 -1
- package/plugins/filters/component/_base.mjs +1 -1
- package/plugins/filters/component/actionBar.js +3 -3
- package/plugins/filters/component/actionBar.mjs +3 -3
- package/plugins/filters/component/condition.js +4 -4
- package/plugins/filters/component/condition.mjs +4 -4
- package/plugins/filters/component/operators.js +3 -3
- package/plugins/filters/component/operators.mjs +3 -3
- package/plugins/filters/component/value.js +4 -4
- package/plugins/filters/component/value.mjs +4 -4
- package/plugins/filters/condition/beginsWith.js +1 -1
- package/plugins/filters/condition/between.js +1 -1
- package/plugins/filters/condition/contains.js +1 -1
- package/plugins/filters/condition/date/after.js +1 -1
- package/plugins/filters/condition/date/before.js +1 -1
- package/plugins/filters/condition/date/today.js +1 -1
- package/plugins/filters/condition/date/tomorrow.js +1 -1
- package/plugins/filters/condition/date/yesterday.js +1 -1
- package/plugins/filters/condition/empty.js +1 -1
- package/plugins/filters/condition/endsWith.js +1 -1
- package/plugins/filters/condition/equal.js +1 -1
- package/plugins/filters/condition/greaterThan.js +1 -1
- package/plugins/filters/condition/greaterThanOrEqual.js +1 -1
- package/plugins/filters/condition/lessThan.js +1 -1
- package/plugins/filters/condition/lessThanOrEqual.js +1 -1
- package/plugins/filters/condition/none.js +1 -1
- package/plugins/filters/condition/notBetween.js +1 -1
- package/plugins/filters/condition/notContains.js +1 -1
- package/plugins/filters/condition/notEmpty.js +1 -1
- package/plugins/filters/condition/notEqual.js +1 -1
- package/plugins/filters/conditionCollection.js +1 -1
- package/plugins/filters/conditionCollection.mjs +1 -1
- package/plugins/filters/conditionUpdateObserver.js +1 -1
- package/plugins/filters/conditionUpdateObserver.mjs +1 -1
- package/plugins/filters/dataFilter.js +1 -1
- package/plugins/filters/dataFilter.mjs +1 -1
- package/plugins/filters/filters.js +12 -9
- package/plugins/filters/filters.mjs +12 -9
- package/plugins/filters/logicalOperations/conjunction.js +1 -1
- package/plugins/filters/logicalOperations/disjunction.js +1 -1
- package/plugins/filters/logicalOperations/disjunctionWithExtraCondition.js +1 -1
- package/plugins/filters/ui/_base.js +2 -2
- package/plugins/filters/ui/_base.mjs +1 -1
- package/plugins/filters/ui/input.js +4 -4
- package/plugins/filters/ui/input.mjs +4 -4
- package/plugins/filters/ui/link.js +4 -4
- package/plugins/filters/ui/link.mjs +4 -4
- package/plugins/filters/ui/multipleSelect.js +19 -32
- package/plugins/filters/ui/multipleSelect.mjs +19 -32
- package/plugins/filters/ui/radioInput.js +4 -4
- package/plugins/filters/ui/radioInput.mjs +4 -4
- package/plugins/filters/ui/select.js +5 -5
- package/plugins/filters/ui/select.mjs +5 -5
- package/plugins/formulas/engine/register.js +1 -1
- package/plugins/formulas/engine/register.mjs +1 -1
- package/plugins/formulas/engine/settings.js +2 -2
- package/plugins/formulas/engine/settings.mjs +2 -2
- package/plugins/formulas/formulas.js +10 -10
- package/plugins/formulas/formulas.mjs +10 -10
- package/plugins/hiddenColumns/contextMenuItem/hideColumn.js +1 -1
- package/plugins/hiddenColumns/contextMenuItem/showColumn.js +3 -3
- package/plugins/hiddenColumns/contextMenuItem/showColumn.mjs +2 -2
- package/plugins/hiddenColumns/hiddenColumns.js +10 -5
- package/plugins/hiddenColumns/hiddenColumns.mjs +10 -5
- package/plugins/hiddenRows/contextMenuItem/hideRow.js +1 -1
- package/plugins/hiddenRows/contextMenuItem/showRow.js +3 -3
- package/plugins/hiddenRows/contextMenuItem/showRow.mjs +2 -2
- package/plugins/hiddenRows/hiddenRows.js +10 -5
- package/plugins/hiddenRows/hiddenRows.mjs +10 -5
- package/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.js +2 -2
- package/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.mjs +1 -1
- package/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.js +2 -2
- package/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.mjs +1 -1
- package/plugins/manualColumnFreeze/manualColumnFreeze.js +26 -13
- package/plugins/manualColumnFreeze/manualColumnFreeze.mjs +26 -13
- package/plugins/manualColumnMove/manualColumnMove.js +73 -62
- package/plugins/manualColumnMove/manualColumnMove.mjs +74 -63
- package/plugins/manualColumnMove/ui/_base.js +26 -13
- package/plugins/manualColumnMove/ui/_base.mjs +25 -13
- package/plugins/manualColumnMove/ui/backlight.js +4 -4
- package/plugins/manualColumnMove/ui/backlight.mjs +4 -4
- package/plugins/manualColumnMove/ui/guideline.js +4 -4
- package/plugins/manualColumnMove/ui/guideline.mjs +4 -4
- package/plugins/manualColumnResize/manualColumnResize.js +38 -22
- package/plugins/manualColumnResize/manualColumnResize.mjs +38 -22
- package/plugins/manualRowMove/manualRowMove.js +27 -17
- package/plugins/manualRowMove/manualRowMove.mjs +27 -17
- package/plugins/manualRowMove/ui/_base.js +1 -1
- package/plugins/manualRowMove/ui/_base.mjs +1 -1
- package/plugins/manualRowMove/ui/backlight.js +4 -4
- package/plugins/manualRowMove/ui/backlight.mjs +4 -4
- package/plugins/manualRowMove/ui/guideline.js +4 -4
- package/plugins/manualRowMove/ui/guideline.mjs +4 -4
- package/plugins/manualRowResize/manualRowResize.js +35 -20
- package/plugins/manualRowResize/manualRowResize.mjs +35 -20
- package/plugins/mergeCells/calculations/autofill.js +7 -6
- package/plugins/mergeCells/calculations/autofill.mjs +7 -5
- package/plugins/mergeCells/calculations/selection.js +10 -5
- package/plugins/mergeCells/calculations/selection.mjs +10 -5
- package/plugins/mergeCells/cellCoords.js +17 -5
- package/plugins/mergeCells/cellCoords.mjs +17 -4
- package/plugins/mergeCells/cellsCollection.js +28 -21
- package/plugins/mergeCells/cellsCollection.mjs +28 -20
- package/plugins/mergeCells/contextMenuItem/toggleMerge.js +1 -1
- package/plugins/mergeCells/mergeCells.js +83 -50
- package/plugins/mergeCells/mergeCells.mjs +83 -48
- package/plugins/multiColumnSorting/multiColumnSorting.js +5 -7
- package/plugins/multiColumnSorting/multiColumnSorting.mjs +5 -6
- package/plugins/multipleSelectionHandles/multipleSelectionHandles.js +52 -58
- package/plugins/multipleSelectionHandles/multipleSelectionHandles.mjs +53 -58
- package/plugins/nestedHeaders/nestedHeaders.js +26 -19
- package/plugins/nestedHeaders/nestedHeaders.mjs +26 -19
- package/plugins/nestedHeaders/stateManager/headersTree.js +3 -3
- package/plugins/nestedHeaders/stateManager/headersTree.mjs +3 -3
- package/plugins/nestedHeaders/stateManager/index.js +3 -3
- package/plugins/nestedHeaders/stateManager/index.mjs +3 -3
- package/plugins/nestedHeaders/stateManager/sourceSettings.js +3 -3
- package/plugins/nestedHeaders/stateManager/sourceSettings.mjs +3 -3
- package/plugins/nestedHeaders/utils/ghostTable.js +1 -1
- package/plugins/nestedHeaders/utils/ghostTable.mjs +1 -1
- package/plugins/nestedRows/data/dataManager.js +2 -2
- package/plugins/nestedRows/data/dataManager.mjs +2 -2
- package/plugins/nestedRows/nestedRows.js +11 -5
- package/plugins/nestedRows/nestedRows.mjs +11 -5
- package/plugins/nestedRows/ui/_base.js +6 -2
- package/plugins/nestedRows/ui/_base.mjs +6 -2
- package/plugins/nestedRows/ui/collapsing.js +3 -3
- package/plugins/nestedRows/ui/collapsing.mjs +3 -3
- package/plugins/nestedRows/ui/contextMenu.js +3 -3
- package/plugins/nestedRows/ui/contextMenu.mjs +3 -3
- package/plugins/nestedRows/ui/headers.js +3 -3
- package/plugins/nestedRows/ui/headers.mjs +3 -3
- package/plugins/nestedRows/utils/rowMoveController.js +3 -5
- package/plugins/nestedRows/utils/rowMoveController.mjs +3 -4
- package/plugins/persistentState/persistentState.js +10 -5
- package/plugins/persistentState/persistentState.mjs +10 -5
- package/plugins/persistentState/storage.js +1 -1
- package/plugins/persistentState/storage.mjs +1 -1
- package/plugins/search/search.js +10 -5
- package/plugins/search/search.mjs +10 -5
- package/plugins/touchScroll/touchScroll.js +32 -26
- package/plugins/touchScroll/touchScroll.mjs +32 -25
- package/plugins/trimRows/trimRows.js +10 -5
- package/plugins/trimRows/trimRows.mjs +10 -5
- package/plugins/undoRedo/index.js +1 -1
- package/plugins/undoRedo/undoRedo.js +54 -48
- package/plugins/undoRedo/undoRedo.mjs +54 -47
- package/renderers/autocompleteRenderer/autocompleteRenderer.js +1 -3
- package/renderers/autocompleteRenderer/autocompleteRenderer.mjs +1 -2
- package/renderers/checkboxRenderer/checkboxRenderer.js +48 -43
- package/renderers/checkboxRenderer/checkboxRenderer.mjs +48 -41
- package/renderers/index.d.ts +4 -1
- package/renderers/index.js +6 -0
- package/renderers/index.mjs +3 -1
- package/renderers/numericRenderer/numericRenderer.js +1 -0
- package/renderers/numericRenderer/numericRenderer.mjs +1 -0
- package/renderers/timeRenderer/index.d.ts +1 -0
- package/renderers/timeRenderer/index.js +9 -0
- package/renderers/timeRenderer/index.mjs +1 -0
- package/renderers/timeRenderer/timeRenderer.d.ts +5 -0
- package/renderers/timeRenderer/timeRenderer.js +31 -0
- package/renderers/timeRenderer/timeRenderer.mjs +20 -0
- package/selection/highlight/highlight.js +3 -3
- package/selection/highlight/highlight.mjs +3 -3
- package/selection/highlight/types/activeHeader.js +2 -2
- package/selection/highlight/types/activeHeader.mjs +2 -2
- package/selection/highlight/types/area.js +2 -2
- package/selection/highlight/types/area.mjs +2 -2
- package/selection/highlight/types/cell.js +2 -2
- package/selection/highlight/types/cell.mjs +2 -2
- package/selection/highlight/types/customSelection.js +2 -2
- package/selection/highlight/types/customSelection.mjs +2 -2
- package/selection/highlight/types/fill.js +2 -2
- package/selection/highlight/types/fill.mjs +2 -2
- package/selection/highlight/types/header.js +2 -2
- package/selection/highlight/types/header.mjs +2 -2
- package/selection/highlight/types/index.js +2 -2
- package/selection/highlight/types/index.mjs +2 -2
- package/selection/highlight/visualSelection.js +17 -16
- package/selection/highlight/visualSelection.mjs +18 -17
- package/selection/mouseEventHandler.js +15 -10
- package/selection/mouseEventHandler.mjs +15 -9
- package/selection/range.js +5 -6
- package/selection/range.mjs +5 -6
- package/selection/selection.js +27 -20
- package/selection/selection.mjs +27 -18
- package/selection/transformation.js +5 -7
- package/selection/transformation.mjs +5 -6
- package/selection/utils.js +1 -1
- package/selection/utils.mjs +1 -1
- package/settings.d.ts +3 -1
- package/shortcuts/context.d.ts +20 -0
- package/shortcuts/context.js +296 -0
- package/shortcuts/context.mjs +268 -0
- package/shortcuts/index.d.ts +1 -0
- package/shortcuts/index.js +8 -0
- package/shortcuts/index.mjs +1 -0
- package/shortcuts/keyObserver.js +67 -0
- package/shortcuts/keyObserver.mjs +58 -0
- package/shortcuts/manager.d.ts +10 -0
- package/shortcuts/manager.js +183 -0
- package/shortcuts/manager.mjs +174 -0
- package/shortcuts/recorder.js +183 -0
- package/shortcuts/recorder.mjs +171 -0
- package/shortcuts/utils.js +77 -0
- package/shortcuts/utils.mjs +54 -0
- package/tableView.js +138 -80
- package/tableView.mjs +138 -70
- package/translations/changesObservable/observable.js +1 -1
- package/translations/changesObservable/observable.mjs +1 -1
- package/translations/changesObservable/observer.js +1 -2
- package/translations/changesObservable/observer.mjs +1 -2
- package/translations/indexMapper.d.ts +1 -0
- package/translations/indexMapper.js +25 -2
- package/translations/indexMapper.mjs +24 -2
- package/translations/mapCollections/aggregatedCollection.js +3 -3
- package/translations/mapCollections/aggregatedCollection.mjs +3 -3
- package/translations/mapCollections/mapCollection.js +1 -1
- package/translations/mapCollections/mapCollection.mjs +1 -1
- package/translations/maps/hidingMap.js +5 -3
- package/translations/maps/hidingMap.mjs +5 -3
- package/translations/maps/indexMap.js +3 -1
- package/translations/maps/indexMap.mjs +3 -1
- package/translations/maps/indexesSequence.js +6 -4
- package/translations/maps/indexesSequence.mjs +6 -4
- package/translations/maps/linkedPhysicalIndexToValueMap.js +6 -4
- package/translations/maps/linkedPhysicalIndexToValueMap.mjs +6 -4
- package/translations/maps/physicalIndexToValueMap.js +6 -4
- package/translations/maps/physicalIndexToValueMap.mjs +6 -4
- package/translations/maps/trimmingMap.js +5 -3
- package/translations/maps/trimmingMap.mjs +5 -3
- package/utils/dataStructures/linkedList.js +3 -3
- package/utils/dataStructures/linkedList.mjs +3 -3
- package/utils/dataStructures/queue.js +1 -1
- package/utils/dataStructures/queue.mjs +1 -1
- package/utils/dataStructures/stack.js +1 -1
- package/utils/dataStructures/stack.mjs +1 -1
- package/utils/dataStructures/tree.js +3 -3
- package/utils/dataStructures/tree.mjs +3 -3
- package/utils/dataStructures/uniqueMap.js +14 -1
- package/utils/dataStructures/uniqueMap.mjs +14 -1
- package/utils/dataStructures/uniqueSet.js +9 -0
- package/utils/dataStructures/uniqueSet.mjs +9 -0
- package/utils/ghostTable.js +14 -3
- package/utils/ghostTable.mjs +15 -4
- package/utils/interval.js +1 -1
- package/utils/interval.mjs +1 -1
- package/utils/samplesGenerator.js +1 -1
- package/utils/samplesGenerator.mjs +1 -1
- package/3rdparty/walkontable/src/core.js +0 -309
- package/3rdparty/walkontable/src/core.mjs +0 -293
- package/3rdparty/walkontable/src/overlay/registerer.js +0 -70
- package/3rdparty/walkontable/src/overlay/registerer.mjs +0 -57
- package/utils/keyStateObserver.js +0 -121
- package/utils/keyStateObserver.mjs +0 -103
@@ -27,7 +27,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons
|
|
27
27
|
|
28
28
|
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
29
29
|
|
30
|
-
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
|
30
|
+
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
31
31
|
|
32
32
|
/**
|
33
33
|
* @class DynamicCellMetaMod
|
@@ -9,7 +9,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons
|
|
9
9
|
|
10
10
|
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
11
11
|
|
12
|
-
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
|
12
|
+
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
13
13
|
|
14
14
|
import Hooks from "../../../pluginHooks.mjs";
|
15
15
|
import { hasOwnProperty } from "../../../helpers/object.mjs";
|
@@ -0,0 +1,126 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
exports.__esModule = true;
|
4
|
+
exports.ExtendMetaPropertiesMod = void 0;
|
5
|
+
|
6
|
+
require("core-js/modules/es.array.iterator.js");
|
7
|
+
|
8
|
+
require("core-js/modules/es.object.to-string.js");
|
9
|
+
|
10
|
+
require("core-js/modules/es.set.js");
|
11
|
+
|
12
|
+
require("core-js/modules/es.string.iterator.js");
|
13
|
+
|
14
|
+
require("core-js/modules/web.dom-collections.iterator.js");
|
15
|
+
|
16
|
+
require("core-js/modules/es.map.js");
|
17
|
+
|
18
|
+
require("core-js/modules/web.dom-collections.for-each.js");
|
19
|
+
|
20
|
+
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
21
|
+
|
22
|
+
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
23
|
+
|
24
|
+
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
25
|
+
|
26
|
+
/**
|
27
|
+
* @class ExtendMetaPropertiesMod
|
28
|
+
*/
|
29
|
+
var ExtendMetaPropertiesMod = /*#__PURE__*/function () {
|
30
|
+
function ExtendMetaPropertiesMod(metaManager) {
|
31
|
+
_classCallCheck(this, ExtendMetaPropertiesMod);
|
32
|
+
|
33
|
+
/**
|
34
|
+
* @type {MetaManager}
|
35
|
+
*/
|
36
|
+
this.metaManager = metaManager;
|
37
|
+
/**
|
38
|
+
* @type {Set}
|
39
|
+
*/
|
40
|
+
|
41
|
+
this.usageTracker = new Set();
|
42
|
+
/**
|
43
|
+
* @type {Map}
|
44
|
+
*/
|
45
|
+
|
46
|
+
this.propDescriptors = new Map([['fixedColumnsLeft', {
|
47
|
+
target: 'fixedColumnsStart',
|
48
|
+
onChange: function onChange(propName) {
|
49
|
+
var isRtl = this.metaManager.hot.isRtl();
|
50
|
+
|
51
|
+
if (isRtl && propName === 'fixedColumnsLeft') {
|
52
|
+
throw new Error('The `fixedColumnsLeft` is not supported for RTL. Please use option `fixedColumnsStart`.');
|
53
|
+
}
|
54
|
+
|
55
|
+
if (this.usageTracker.has('fixedColumnsLeft') && this.usageTracker.has('fixedColumnsStart')) {
|
56
|
+
throw new Error('The `fixedColumnsLeft` and `fixedColumnsStart` should not be used together. ' + 'Please use only the option `fixedColumnsStart`.');
|
57
|
+
}
|
58
|
+
}
|
59
|
+
}], ['layoutDirection', {
|
60
|
+
onChange: function onChange(propName, value, isInitialChange) {
|
61
|
+
if (!isInitialChange) {
|
62
|
+
throw new Error("The `".concat(propName, "` option can not be updated after the Handsontable is initialized."));
|
63
|
+
}
|
64
|
+
}
|
65
|
+
}]]);
|
66
|
+
this.extendMetaProps();
|
67
|
+
}
|
68
|
+
/**
|
69
|
+
* Extends the meta options based on the object descriptors from the `propDescriptors` list.
|
70
|
+
*/
|
71
|
+
|
72
|
+
|
73
|
+
_createClass(ExtendMetaPropertiesMod, [{
|
74
|
+
key: "extendMetaProps",
|
75
|
+
value: function extendMetaProps() {
|
76
|
+
var _this = this;
|
77
|
+
|
78
|
+
this.propDescriptors.forEach(function (descriptor, alias) {
|
79
|
+
var target = descriptor.target,
|
80
|
+
_descriptor$onChange = descriptor.onChange,
|
81
|
+
onChange = _descriptor$onChange === void 0 ? function () {} : _descriptor$onChange;
|
82
|
+
var hasTarget = typeof target === 'string';
|
83
|
+
var targetProp = hasTarget ? target : alias;
|
84
|
+
var origProp = "_".concat(targetProp);
|
85
|
+
_this.metaManager.globalMeta.meta[origProp] = _this.metaManager.globalMeta.meta[targetProp];
|
86
|
+
|
87
|
+
_this.installPropWatcher(alias, origProp, onChange);
|
88
|
+
|
89
|
+
if (hasTarget) {
|
90
|
+
_this.installPropWatcher(target, origProp, onChange);
|
91
|
+
}
|
92
|
+
});
|
93
|
+
}
|
94
|
+
/**
|
95
|
+
* Installs the property watcher to the `propName` option and forwards getter and setter to
|
96
|
+
* the new one.
|
97
|
+
*
|
98
|
+
* @param {string} propName The property to watch.
|
99
|
+
* @param {string} origProp The property from/to the value is forwarded.
|
100
|
+
* @param {Function} onChange The callback.
|
101
|
+
*/
|
102
|
+
|
103
|
+
}, {
|
104
|
+
key: "installPropWatcher",
|
105
|
+
value: function installPropWatcher(propName, origProp, onChange) {
|
106
|
+
var self = this;
|
107
|
+
Object.defineProperty(this.metaManager.globalMeta.meta, propName, {
|
108
|
+
get: function get() {
|
109
|
+
return this[origProp];
|
110
|
+
},
|
111
|
+
set: function set(value) {
|
112
|
+
var isInitialChange = !self.usageTracker.has(propName);
|
113
|
+
self.usageTracker.add(propName);
|
114
|
+
onChange.call(self, propName, value, isInitialChange);
|
115
|
+
this[origProp] = value;
|
116
|
+
},
|
117
|
+
enumerable: true,
|
118
|
+
configurable: true
|
119
|
+
});
|
120
|
+
}
|
121
|
+
}]);
|
122
|
+
|
123
|
+
return ExtendMetaPropertiesMod;
|
124
|
+
}();
|
125
|
+
|
126
|
+
exports.ExtendMetaPropertiesMod = ExtendMetaPropertiesMod;
|
@@ -0,0 +1,113 @@
|
|
1
|
+
import "core-js/modules/es.array.iterator.js";
|
2
|
+
import "core-js/modules/es.object.to-string.js";
|
3
|
+
import "core-js/modules/es.set.js";
|
4
|
+
import "core-js/modules/es.string.iterator.js";
|
5
|
+
import "core-js/modules/web.dom-collections.iterator.js";
|
6
|
+
import "core-js/modules/es.map.js";
|
7
|
+
import "core-js/modules/web.dom-collections.for-each.js";
|
8
|
+
|
9
|
+
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
10
|
+
|
11
|
+
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
12
|
+
|
13
|
+
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
14
|
+
|
15
|
+
/**
|
16
|
+
* @class ExtendMetaPropertiesMod
|
17
|
+
*/
|
18
|
+
export var ExtendMetaPropertiesMod = /*#__PURE__*/function () {
|
19
|
+
function ExtendMetaPropertiesMod(metaManager) {
|
20
|
+
_classCallCheck(this, ExtendMetaPropertiesMod);
|
21
|
+
|
22
|
+
/**
|
23
|
+
* @type {MetaManager}
|
24
|
+
*/
|
25
|
+
this.metaManager = metaManager;
|
26
|
+
/**
|
27
|
+
* @type {Set}
|
28
|
+
*/
|
29
|
+
|
30
|
+
this.usageTracker = new Set();
|
31
|
+
/**
|
32
|
+
* @type {Map}
|
33
|
+
*/
|
34
|
+
|
35
|
+
this.propDescriptors = new Map([['fixedColumnsLeft', {
|
36
|
+
target: 'fixedColumnsStart',
|
37
|
+
onChange: function onChange(propName) {
|
38
|
+
var isRtl = this.metaManager.hot.isRtl();
|
39
|
+
|
40
|
+
if (isRtl && propName === 'fixedColumnsLeft') {
|
41
|
+
throw new Error('The `fixedColumnsLeft` is not supported for RTL. Please use option `fixedColumnsStart`.');
|
42
|
+
}
|
43
|
+
|
44
|
+
if (this.usageTracker.has('fixedColumnsLeft') && this.usageTracker.has('fixedColumnsStart')) {
|
45
|
+
throw new Error('The `fixedColumnsLeft` and `fixedColumnsStart` should not be used together. ' + 'Please use only the option `fixedColumnsStart`.');
|
46
|
+
}
|
47
|
+
}
|
48
|
+
}], ['layoutDirection', {
|
49
|
+
onChange: function onChange(propName, value, isInitialChange) {
|
50
|
+
if (!isInitialChange) {
|
51
|
+
throw new Error("The `".concat(propName, "` option can not be updated after the Handsontable is initialized."));
|
52
|
+
}
|
53
|
+
}
|
54
|
+
}]]);
|
55
|
+
this.extendMetaProps();
|
56
|
+
}
|
57
|
+
/**
|
58
|
+
* Extends the meta options based on the object descriptors from the `propDescriptors` list.
|
59
|
+
*/
|
60
|
+
|
61
|
+
|
62
|
+
_createClass(ExtendMetaPropertiesMod, [{
|
63
|
+
key: "extendMetaProps",
|
64
|
+
value: function extendMetaProps() {
|
65
|
+
var _this = this;
|
66
|
+
|
67
|
+
this.propDescriptors.forEach(function (descriptor, alias) {
|
68
|
+
var target = descriptor.target,
|
69
|
+
_descriptor$onChange = descriptor.onChange,
|
70
|
+
onChange = _descriptor$onChange === void 0 ? function () {} : _descriptor$onChange;
|
71
|
+
var hasTarget = typeof target === 'string';
|
72
|
+
var targetProp = hasTarget ? target : alias;
|
73
|
+
var origProp = "_".concat(targetProp);
|
74
|
+
_this.metaManager.globalMeta.meta[origProp] = _this.metaManager.globalMeta.meta[targetProp];
|
75
|
+
|
76
|
+
_this.installPropWatcher(alias, origProp, onChange);
|
77
|
+
|
78
|
+
if (hasTarget) {
|
79
|
+
_this.installPropWatcher(target, origProp, onChange);
|
80
|
+
}
|
81
|
+
});
|
82
|
+
}
|
83
|
+
/**
|
84
|
+
* Installs the property watcher to the `propName` option and forwards getter and setter to
|
85
|
+
* the new one.
|
86
|
+
*
|
87
|
+
* @param {string} propName The property to watch.
|
88
|
+
* @param {string} origProp The property from/to the value is forwarded.
|
89
|
+
* @param {Function} onChange The callback.
|
90
|
+
*/
|
91
|
+
|
92
|
+
}, {
|
93
|
+
key: "installPropWatcher",
|
94
|
+
value: function installPropWatcher(propName, origProp, onChange) {
|
95
|
+
var self = this;
|
96
|
+
Object.defineProperty(this.metaManager.globalMeta.meta, propName, {
|
97
|
+
get: function get() {
|
98
|
+
return this[origProp];
|
99
|
+
},
|
100
|
+
set: function set(value) {
|
101
|
+
var isInitialChange = !self.usageTracker.has(propName);
|
102
|
+
self.usageTracker.add(propName);
|
103
|
+
onChange.call(self, propName, value, isInitialChange);
|
104
|
+
this[origProp] = value;
|
105
|
+
},
|
106
|
+
enumerable: true,
|
107
|
+
configurable: true
|
108
|
+
});
|
109
|
+
}
|
110
|
+
}]);
|
111
|
+
|
112
|
+
return ExtendMetaPropertiesMod;
|
113
|
+
}();
|
@@ -0,0 +1,140 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
exports.__esModule = true;
|
4
|
+
exports.replaceData = replaceData;
|
5
|
+
|
6
|
+
require("core-js/modules/es.array.splice.js");
|
7
|
+
|
8
|
+
require("core-js/modules/es.array.concat.js");
|
9
|
+
|
10
|
+
require("core-js/modules/es.symbol.js");
|
11
|
+
|
12
|
+
require("core-js/modules/es.symbol.description.js");
|
13
|
+
|
14
|
+
require("core-js/modules/es.object.to-string.js");
|
15
|
+
|
16
|
+
require("core-js/modules/es.symbol.iterator.js");
|
17
|
+
|
18
|
+
require("core-js/modules/es.array.iterator.js");
|
19
|
+
|
20
|
+
require("core-js/modules/es.string.iterator.js");
|
21
|
+
|
22
|
+
require("core-js/modules/web.dom-collections.iterator.js");
|
23
|
+
|
24
|
+
var _string = require("../helpers/string");
|
25
|
+
|
26
|
+
var _function = require("../helpers/function");
|
27
|
+
|
28
|
+
var _dataMap = _interopRequireDefault(require("./dataMap"));
|
29
|
+
|
30
|
+
var _object = require("../helpers/object");
|
31
|
+
|
32
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
33
|
+
|
34
|
+
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
35
|
+
|
36
|
+
/**
|
37
|
+
* Loads new data to Handsontable.
|
38
|
+
*
|
39
|
+
* @private
|
40
|
+
* @param {Array} data Array of arrays or array of objects containing data.
|
41
|
+
* @param {Function} setDataMapFunction Function that updates the datamap instance.
|
42
|
+
* @param {Function} callbackFunction Function that takes care of updating Handsontable to the new dataset. Called
|
43
|
+
* right before the `after-` hooks.
|
44
|
+
* @param {object} config The configuration object containing all the needed dependency references and information.
|
45
|
+
* @param {Handsontable.Core} config.hotInstance The Handsontable instance.
|
46
|
+
* @param {DataMap} config.dataMap The current `dataMap` instance.
|
47
|
+
* @param {DataSource} config.dataSource The current `dataSource` instance.
|
48
|
+
* @param {string} config.internalSource The immediate internal source of the `replaceData` call.
|
49
|
+
* @param {string} config.source The source of the call.
|
50
|
+
* @param {boolean} config.firstRun `true` if it's a first call in the Handsontable lifecycle, `false` otherwise.
|
51
|
+
* @fires Hooks#beforeLoadData
|
52
|
+
* @fires Hooks#beforeUpdateData
|
53
|
+
* @fires Hooks#afterLoadData
|
54
|
+
* @fires Hooks#afterUpdateData
|
55
|
+
* @fires Hooks#afterChange
|
56
|
+
*/
|
57
|
+
function replaceData(data, setDataMapFunction, callbackFunction, config) {
|
58
|
+
var hotInstance = config.hotInstance,
|
59
|
+
dataMap = config.dataMap,
|
60
|
+
dataSource = config.dataSource,
|
61
|
+
internalSource = config.internalSource,
|
62
|
+
source = config.source,
|
63
|
+
firstRun = config.firstRun;
|
64
|
+
var capitalizedInternalSource = (0, _string.toUpperCaseFirst)(internalSource);
|
65
|
+
var tableMeta = hotInstance.getSettings();
|
66
|
+
|
67
|
+
if (Array.isArray(tableMeta.dataSchema)) {
|
68
|
+
hotInstance.dataType = 'array';
|
69
|
+
} else if ((0, _function.isFunction)(tableMeta.dataSchema)) {
|
70
|
+
hotInstance.dataType = 'function';
|
71
|
+
} else {
|
72
|
+
hotInstance.dataType = 'object';
|
73
|
+
}
|
74
|
+
|
75
|
+
if (dataMap) {
|
76
|
+
dataMap.destroy();
|
77
|
+
}
|
78
|
+
|
79
|
+
data = hotInstance.runHooks("before".concat(capitalizedInternalSource), data, firstRun, source);
|
80
|
+
var newDataMap = new _dataMap.default(hotInstance, data, tableMeta); // We need to apply the new dataMap immediately, because of some asynchronous logic in the
|
81
|
+
// `autoRowSize`/`autoColumnSize` plugins.
|
82
|
+
|
83
|
+
setDataMapFunction(newDataMap);
|
84
|
+
|
85
|
+
if (_typeof(data) === 'object' && data !== null) {
|
86
|
+
if (!(data.push && data.splice)) {
|
87
|
+
// check if data is array. Must use duck-type check so Backbone Collections also pass it
|
88
|
+
// when data is not an array, attempt to make a single-row array of it
|
89
|
+
// eslint-disable-next-line no-param-reassign
|
90
|
+
data = [data];
|
91
|
+
}
|
92
|
+
} else if (data === null) {
|
93
|
+
var dataSchema = newDataMap.getSchema(); // eslint-disable-next-line no-param-reassign
|
94
|
+
|
95
|
+
data = [];
|
96
|
+
var row;
|
97
|
+
var r = 0;
|
98
|
+
var rlen = 0;
|
99
|
+
|
100
|
+
for (r = 0, rlen = tableMeta.startRows; r < rlen; r++) {
|
101
|
+
if ((hotInstance.dataType === 'object' || hotInstance.dataType === 'function') && tableMeta.dataSchema) {
|
102
|
+
row = (0, _object.deepClone)(dataSchema);
|
103
|
+
data.push(row);
|
104
|
+
} else if (hotInstance.dataType === 'array') {
|
105
|
+
row = (0, _object.deepClone)(dataSchema[0]);
|
106
|
+
data.push(row);
|
107
|
+
} else {
|
108
|
+
row = [];
|
109
|
+
|
110
|
+
for (var c = 0, clen = tableMeta.startCols; c < clen; c++) {
|
111
|
+
row.push(null);
|
112
|
+
}
|
113
|
+
|
114
|
+
data.push(row);
|
115
|
+
}
|
116
|
+
}
|
117
|
+
} else {
|
118
|
+
throw new Error("".concat(internalSource, " only accepts array of objects or array of arrays (").concat(_typeof(data), " given)"));
|
119
|
+
}
|
120
|
+
|
121
|
+
if (Array.isArray(data[0])) {
|
122
|
+
hotInstance.dataType = 'array';
|
123
|
+
}
|
124
|
+
|
125
|
+
tableMeta.data = data;
|
126
|
+
newDataMap.dataSource = data;
|
127
|
+
dataSource.data = data;
|
128
|
+
dataSource.dataType = hotInstance.dataType;
|
129
|
+
dataSource.colToProp = newDataMap.colToProp.bind(newDataMap);
|
130
|
+
dataSource.propToCol = newDataMap.propToCol.bind(newDataMap);
|
131
|
+
dataSource.countCachedColumns = newDataMap.countCachedColumns.bind(newDataMap); // Run the logic for reassuring that the table structure fits the new dataset.
|
132
|
+
|
133
|
+
callbackFunction(newDataMap);
|
134
|
+
hotInstance.runHooks("after".concat(capitalizedInternalSource), data, firstRun, source); // TODO: rethink the way the `afterChange` hook is being run here in the core `init` method.
|
135
|
+
|
136
|
+
if (!firstRun) {
|
137
|
+
hotInstance.runHooks('afterChange', null, internalSource);
|
138
|
+
hotInstance.render();
|
139
|
+
}
|
140
|
+
}
|
@@ -0,0 +1,124 @@
|
|
1
|
+
import "core-js/modules/es.array.splice.js";
|
2
|
+
import "core-js/modules/es.array.concat.js";
|
3
|
+
import "core-js/modules/es.symbol.js";
|
4
|
+
import "core-js/modules/es.symbol.description.js";
|
5
|
+
import "core-js/modules/es.object.to-string.js";
|
6
|
+
import "core-js/modules/es.symbol.iterator.js";
|
7
|
+
import "core-js/modules/es.array.iterator.js";
|
8
|
+
import "core-js/modules/es.string.iterator.js";
|
9
|
+
import "core-js/modules/web.dom-collections.iterator.js";
|
10
|
+
|
11
|
+
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
12
|
+
|
13
|
+
import { toUpperCaseFirst } from "../helpers/string.mjs";
|
14
|
+
import { isFunction } from "../helpers/function.mjs";
|
15
|
+
import DataMap from "./dataMap.mjs";
|
16
|
+
import { deepClone } from "../helpers/object.mjs";
|
17
|
+
/**
|
18
|
+
* Loads new data to Handsontable.
|
19
|
+
*
|
20
|
+
* @private
|
21
|
+
* @param {Array} data Array of arrays or array of objects containing data.
|
22
|
+
* @param {Function} setDataMapFunction Function that updates the datamap instance.
|
23
|
+
* @param {Function} callbackFunction Function that takes care of updating Handsontable to the new dataset. Called
|
24
|
+
* right before the `after-` hooks.
|
25
|
+
* @param {object} config The configuration object containing all the needed dependency references and information.
|
26
|
+
* @param {Handsontable.Core} config.hotInstance The Handsontable instance.
|
27
|
+
* @param {DataMap} config.dataMap The current `dataMap` instance.
|
28
|
+
* @param {DataSource} config.dataSource The current `dataSource` instance.
|
29
|
+
* @param {string} config.internalSource The immediate internal source of the `replaceData` call.
|
30
|
+
* @param {string} config.source The source of the call.
|
31
|
+
* @param {boolean} config.firstRun `true` if it's a first call in the Handsontable lifecycle, `false` otherwise.
|
32
|
+
* @fires Hooks#beforeLoadData
|
33
|
+
* @fires Hooks#beforeUpdateData
|
34
|
+
* @fires Hooks#afterLoadData
|
35
|
+
* @fires Hooks#afterUpdateData
|
36
|
+
* @fires Hooks#afterChange
|
37
|
+
*/
|
38
|
+
|
39
|
+
function replaceData(data, setDataMapFunction, callbackFunction, config) {
|
40
|
+
var hotInstance = config.hotInstance,
|
41
|
+
dataMap = config.dataMap,
|
42
|
+
dataSource = config.dataSource,
|
43
|
+
internalSource = config.internalSource,
|
44
|
+
source = config.source,
|
45
|
+
firstRun = config.firstRun;
|
46
|
+
var capitalizedInternalSource = toUpperCaseFirst(internalSource);
|
47
|
+
var tableMeta = hotInstance.getSettings();
|
48
|
+
|
49
|
+
if (Array.isArray(tableMeta.dataSchema)) {
|
50
|
+
hotInstance.dataType = 'array';
|
51
|
+
} else if (isFunction(tableMeta.dataSchema)) {
|
52
|
+
hotInstance.dataType = 'function';
|
53
|
+
} else {
|
54
|
+
hotInstance.dataType = 'object';
|
55
|
+
}
|
56
|
+
|
57
|
+
if (dataMap) {
|
58
|
+
dataMap.destroy();
|
59
|
+
}
|
60
|
+
|
61
|
+
data = hotInstance.runHooks("before".concat(capitalizedInternalSource), data, firstRun, source);
|
62
|
+
var newDataMap = new DataMap(hotInstance, data, tableMeta); // We need to apply the new dataMap immediately, because of some asynchronous logic in the
|
63
|
+
// `autoRowSize`/`autoColumnSize` plugins.
|
64
|
+
|
65
|
+
setDataMapFunction(newDataMap);
|
66
|
+
|
67
|
+
if (_typeof(data) === 'object' && data !== null) {
|
68
|
+
if (!(data.push && data.splice)) {
|
69
|
+
// check if data is array. Must use duck-type check so Backbone Collections also pass it
|
70
|
+
// when data is not an array, attempt to make a single-row array of it
|
71
|
+
// eslint-disable-next-line no-param-reassign
|
72
|
+
data = [data];
|
73
|
+
}
|
74
|
+
} else if (data === null) {
|
75
|
+
var dataSchema = newDataMap.getSchema(); // eslint-disable-next-line no-param-reassign
|
76
|
+
|
77
|
+
data = [];
|
78
|
+
var row;
|
79
|
+
var r = 0;
|
80
|
+
var rlen = 0;
|
81
|
+
|
82
|
+
for (r = 0, rlen = tableMeta.startRows; r < rlen; r++) {
|
83
|
+
if ((hotInstance.dataType === 'object' || hotInstance.dataType === 'function') && tableMeta.dataSchema) {
|
84
|
+
row = deepClone(dataSchema);
|
85
|
+
data.push(row);
|
86
|
+
} else if (hotInstance.dataType === 'array') {
|
87
|
+
row = deepClone(dataSchema[0]);
|
88
|
+
data.push(row);
|
89
|
+
} else {
|
90
|
+
row = [];
|
91
|
+
|
92
|
+
for (var c = 0, clen = tableMeta.startCols; c < clen; c++) {
|
93
|
+
row.push(null);
|
94
|
+
}
|
95
|
+
|
96
|
+
data.push(row);
|
97
|
+
}
|
98
|
+
}
|
99
|
+
} else {
|
100
|
+
throw new Error("".concat(internalSource, " only accepts array of objects or array of arrays (").concat(_typeof(data), " given)"));
|
101
|
+
}
|
102
|
+
|
103
|
+
if (Array.isArray(data[0])) {
|
104
|
+
hotInstance.dataType = 'array';
|
105
|
+
}
|
106
|
+
|
107
|
+
tableMeta.data = data;
|
108
|
+
newDataMap.dataSource = data;
|
109
|
+
dataSource.data = data;
|
110
|
+
dataSource.dataType = hotInstance.dataType;
|
111
|
+
dataSource.colToProp = newDataMap.colToProp.bind(newDataMap);
|
112
|
+
dataSource.propToCol = newDataMap.propToCol.bind(newDataMap);
|
113
|
+
dataSource.countCachedColumns = newDataMap.countCachedColumns.bind(newDataMap); // Run the logic for reassuring that the table structure fits the new dataset.
|
114
|
+
|
115
|
+
callbackFunction(newDataMap);
|
116
|
+
hotInstance.runHooks("after".concat(capitalizedInternalSource), data, firstRun, source); // TODO: rethink the way the `afterChange` hook is being run here in the core `init` method.
|
117
|
+
|
118
|
+
if (!firstRun) {
|
119
|
+
hotInstance.runHooks('afterChange', null, internalSource);
|
120
|
+
hotInstance.render();
|
121
|
+
}
|
122
|
+
}
|
123
|
+
|
124
|
+
export { replaceData };
|
package/dataSource.js
CHANGED
@@ -25,7 +25,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons
|
|
25
25
|
|
26
26
|
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
27
27
|
|
28
|
-
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
|
28
|
+
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
29
29
|
|
30
30
|
/**
|
31
31
|
* @class DataSource
|
package/dataSource.mjs
CHANGED
@@ -7,7 +7,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons
|
|
7
7
|
|
8
8
|
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
9
9
|
|
10
|
-
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
|
10
|
+
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
11
11
|
|
12
12
|
import { createObjectPropListener, getProperty, isObject, objectEach, setProperty } from "./helpers/object.mjs";
|
13
13
|
import { countFirstRowKeys as _countFirstRowKeys } from "./helpers/data.mjs";
|
package/dist/README.md
CHANGED
@@ -39,7 +39,7 @@ If you are a "Bob the Builder" kind of hacker, you will need to load Handsontabl
|
|
39
39
|
## Internationalization
|
40
40
|
It is possible to include files which will register languages dictionaries. They allow to translate parts of Handsontable UI. You can either use only particular languages files or include all of them at once as a single file.
|
41
41
|
|
42
|
-
All the information about the API and additional options can be found at our [official documentation](https://handsontable.com/docs/
|
42
|
+
All the information about the API and additional options can be found at our [official documentation](https://handsontable.com/docs/internationalization-i18n/).
|
43
43
|
|
44
44
|
```html
|
45
45
|
<!-- Internationalization, Polish - Poland language-country file -->
|
@@ -51,4 +51,4 @@ All the information about the API and additional options can be found at our [of
|
|
51
51
|
|
52
52
|
## Custom distribution
|
53
53
|
|
54
|
-
If you want to build your own custom Handsontable package distribution check out our [guide](https://
|
54
|
+
If you want to build your own custom Handsontable package distribution check out our [guide](https://handsontable.com/docs/building/) covering all the details.
|