{"version":3,"file":"spreadsheet.min.js","sources":["../sources/locale.js","../sources/locales/en.js","../sources/views/align.js","../sources/views/border.js","../sources/views/color.js","../node_modules/@xbs/muon/dist/muon.js","../sources/mathematics/methods.js","../sources/views/date.js","../sources/views/dialog.js","../sources/views/form.js","../sources/views/formlate.js","../sources/views/icons.js","../sources/views/list_suggest.js","../sources/operations/undo_group.js","../sources/operations/save.js","../sources/helpers/column_names.js","../sources/toolbar/defaults.js","../sources/operations/styles.js","../sources/helpers/array.js","../sources/operations/formats.js","../sources/mathematics/parser.js","../sources/operations/types.js","../sources/views/suggest_formula.js","../sources/views/button.js","../sources/views/live_editor.js","../sources/views/separator.js","../sources/views/sheets.js","../sources/views/toggle.js","../sources/views/toolbar_title.js","../sources/views/multicheckbox.js","../sources/views/formlist.js","../sources/views/ui.js","../sources/views/series.js","../sources/views/bar.js","../sources/editors/date.js","../sources/editors/richselect.js","../sources/toolbar/actions.js","../sources/toolbar/buttons.js","../sources/toolbar/all_elements.js","../sources/toolbar.js","../sources/toolbar/helpers.js","../sources/operations/column_operations.js","../sources/operations/lock_cell.js","../sources/operations/spans.js","../sources/helpers/conditional.js","../sources/operations/conditional_formats.js","../sources/operations/data.js","../sources/sheets.js","../sources/operations/show_cells.js","../sources/table.js","../sources/hotkeys.js","../sources/editor.js","../sources/dialogs/common.js","../sources/mathematics/writer.js","../sources/dialogs/imagecell.js","../sources/dialogs/imagetop.js","../sources/operations/undo.js","../sources/operations/views.js","../sources/chart.js","../sources/dialogs/sparkline.js","../sources/dialogs/ranges.js","../sources/dialogs/dropdown.js","../sources/mathematics/ranges.js","../sources/operations/filter.js","../sources/dialogs/filter.js","../sources/dialogs/format.js","../sources/dialogs/conditional.js","../sources/dialogs/export.js","../sources/dialogs/link.js","../sources/operations/print.js","../sources/dialogs/print.js","../sources/dialogs/comments.js","../sources/dialogs/sizing.js","../sources/dialogs/index.js","../sources/operations/add_row_col.js","../sources/operations/dropdown.js","../sources/operations/clipboard.js","../sources/operations/hide_row_col.js","../sources/operations/resize.js","../sources/operations/selection.js","../sources/helpers/expand_selection.js","../sources/operations/sorting.js","../sources/mathematics/sheets.js","../sources/operations/hide_gridlines.js","../sources/operations/hide_headers.js","../sources/operations/comments.js","../sources/operations/show_formulas.js","../sources/operations/states.js","../sources/operations/import.js","../sources/operations/export.js","../sources/operations/load.js","../sources/operations/clear_styles.js","../sources/api/row_col_operations.js","../sources/api/lock_cell.js","../sources/api/freeze.js","../sources/api/hide_gridlines.js","../sources/api/hide_headers.js","../sources/api/hide_rows.js","../sources/api/math.js","../sources/api/operations.js","../sources/api/core.js","../sources/api/save.js","../sources/api/dropdown.js","../sources/api/filter.js","../sources/api/confirm.js","../sources/api/undo.js","../sources/api/number_formats.js","../sources/api/show_formulas.js","../sources/api/print.js","../sources/menu.js","../sources/spreadsheet.js","../sources/context.js","../sources/operations/index.js","../sources/api/index.js"],"sourcesContent":["import en from \"./locales/en\";\nwebix.i18n.spreadsheet = en;","export default {\n\tlabels:{\n\t\t// formats\n\t\t\"common\": \"Common\",\n\t\t\"currency\": \"Currency\",\n\t\t\"number\": \"Number\",\n\t\t\"percent\": \"Percent\",\n\t\t\"date\": \"Date\",\n\t\t\"string\": \"Text\",\n\t\t\"custom-format\": \"Custom\",\n\t\t\"decimal-places\":\"Decimal places\",\n\t\t\"separator\":\"Group separator\",\n\t\t\"negative\":\"Negative number\",\n\t\t\"currency-symbol\":\"Сurrency\",\n\t\t\"date-format\":\"Date format\",\n\t\t\"format-docs\":\"How to create a format\",\n\t\t// titles\n\t\t\"undo-redo\": \"Undo/Redo\",\n\t\t\"font\": \"Font\",\n\t\t\"text\": \"Text\",\n\t\t\"cell\": \"Cell\",\n\t\t\"align\": \"Align\",\n\t\t\"format\": \"Number\",\n\t\t\"column\": \"Column\",\n\t\t\"borders\": \"Borders\",\n\t\t\"px\": \"px\",\n\t\t\"apply\": \"Apply\",\n\t\t// popups and dialogs\n\t\t\"cancel\": \"Cancel\",\n\t\t\"save\": \"Save\",\n\t\t// multisheets\n\t\t\"sheet\": \"Sheet\",\n\t\t// conditions\n\t\t\"conditional-format\": \"Conditional Format\",\n\t\t\"conditional-common\": \"Common\",\n\t\t\"conditional-text\": \"Text\",\n\t\t\"condition\": \"Condition\",\n\t\t\"conditional-style\": \"Style\",\n\t\t\"conditional-operator\": \"Operator\",\n\t\t\"conditional-between\":\"between\",\n\t\t\"conditional-not-equal\":\"not equal\",\n\t\t// ranges\n\t\t\"range\": \"Range\",\n\t\t\"range-title\": \"Named ranges\",\n\t\t\"range-name\": \"Name\",\n\t\t\"range-cells\": \"Range\",\n\t\t\"range-scope\": \"Scope\",\n\t\t\"range-global\": \"Book\",\n\t\t// images\n\t\t\"image-or\": \"or\",\n\t\t\"image-title\": \"Add image\",\n\t\t\"image-upload\": \"Select file for upload\",\n\t\t\"image-url\": \"URL (e.g. http://*)\",\n\t\t// sparklines\n\t\t\"sparkline-title\": \"Add sparkline\",\n\t\t\"sparkline-type\": \"Type\",\n\t\t\"sparkline-range\": \"Range\",\n\t\t\"sparkline-color\": \"Color\",\n\t\t\"sparkline-positive\": \"Positive\",\n\t\t\"sparkline-negative\": \"Negative\",\n\t\t// custom format\n\t\t\"format-title\": \"Set format\",\n\t\t\"format-pattern\": \"Format pattern\",\n\t\t//dropdown\n\t\t\"dropdown-empty\": \"Empty cells\",\n\t\t\"dropdown-title\": \"Add dropdown\",\n\t\t\"dropdown-range\": \"Range\",\n\t\t// confirm\n\t\t\"ok\": \"OK\",\n\t\t// import/export\n\t\t\"import-title\": \"Import\",\n\t\t\"import-not-support\": \"Sorry, your browser does not support import\",\n\t\t\"export-title\": \"Export\",\n\t\t\"export-name\": \"Name of xslx file\",\n\t\t\"export-all-sheets\":\"Export all sheets\",\n\t\t// add link\n\t\t\"link-title\": \"Add Link\",\n\t\t\"link-name\": \"Text\",\n\t\t\"link-url\": \"URL\",\n\t\t//images\n\t\t\"image\": \"Image\",\n\t\t\"add-image-cell\":\"Add to cell\",\n\t\t\"add-image-top\":\"Add above cells\",\n\t\t//charts\n\t\t\"graph\": \"Graph\",\n\t\t\"add-sparkline\":\"Add to cell\",\n\t\t\"add-chart\":\"Add above cells\",\n\t\t//conditional format labels\n\t\t\"display\" : \"Display\",\n\t\t\"value\" : \"Value\",\n\t\t// confirm messages\n\t\t\"range-remove-confirm\": \"Are you sure you want to remove the range permanently?\",\n\t\t\"sheet-remove-confirm\": \"Are you sure you want to remove the sheet permanently?\",\n\t\t\"merge-cell-confirm\":\"Only the left top value will remain after merging. Continue?\",\n\t\t\"error-range\": \"The range is incorrect!\",\n\t\t\"error-link\": \"The link is incorrect!\",\n\t\t//print\n\t\t\"print\":\"Print\",\n\t\t\"print-title\":\"Before you print..\",\n\t\t\"print-settings\":\"General settings\",\n\t\t\"print-paper\":\"Paper size\",\n\t\t\"print-layout\":\"Layout\",\n\t\t\"sheets\":\"Sheets:\",\n\t\t\"selection\":\"Selected cells\",\n\t\t\"borderless\":\"Hide gridlines\",\n\t\t\"sheet-names\":\"Show sheet names\",\n\t\t\"skip-rows\":\"Skip empty rows\",\n\t\t\"margin\":\"Hide margins\",\n\t\t\"page-letter\":\"Letter\",\n\t\t\"page-a4\":\"A4 (210x297mm)\",\n\t\t\"page-a3\":\"A3 (297x420mm)\",\n\t\t\"page-width\":\"Page width\",\n\t\t\"page-actual\":\"Actual Size\",\n\t\t\"page-portrait\":\"Portrait\",\n\t\t\"page-landscape\":\"Landscape\",\n\t\t\"external-ui\":\"External UI\",\n\t\t\"print-borders\": \"Show print borders\",\n\t\t//comment\n\t\t\"comment\":\"Comment\",\n\t\t//resize\n\t\t\"width\":\"Width\",\n\t\t\"height\":\"Height\",\n\t\t\"fit-content\": \"Fit to content\",\n\t\t\"default-size\":\"Reset to default\",\n\t\t//views\n\t\t\"edit-view\":\"Edit\",\n\t\t\"remove-view\":\"Remove\",\n\t\t\"chart-edit\":\"Edit chart\",\n\n\t\t\"chart-common\":\"Common\",\n\t\t\"chart-series\":\"Series\",\n\t\t\"chart-extras\":\"Extras\",\n\n\t\t\"export-view\":\"Download\",\n\t\t\"export-view-pdf\":\"PDF document\",\n\t\t\"export-view-png\":\"PNG image\",\n\t\t\"export-view-excel\":\"Excel file\",\n\n\t\t\"line-chart\":\"Line\",\n\t\t\"area-chart\":\"Area\",\n\t\t\"bar-chart\":\"Bar\",\n\t\t\"donut-chart\":\"Donut\",\n\t\t\"pie-chart\":\"Pie\",\n\t\t\"radar-chart\":\"Radar\",\n\t\t\"spline-chart\":\"Spline\",\n\t\t\"splinearea-chart\":\"Spline Area\",\n\n\t\t\"chart-scale\":\"Scale\",\n\t\t\"chart-x-axis\":\"X axis\",\n\t\t\"chart-y-axis\":\"Y axis\",\n\t\t\"chart-lines\":\"Lines\",\n\t\t\"chart-scale-color\":\"Scale color\",\n\t\t\"chart-xAxis-title\":\"Title\",\n\t\t\"chart-yAxis-title\":\"Title\",\n\t\t\"chart-col-xAxis\":\"Use left column as xAxis\",\n\t\t\"chart-col-yAxis\":\"Use left column as yAxis\",\n\t\t\"chart-row-xAxis\":\"Use top row as xAxis\",\n\t\t\"chart-row-yAxis\":\"Use top row as yAxis\",\n\t\t\"chart-xAxis-range\":\"Range\",\n\t\t\"chart-yAxis-origin\":\"Origin\",\n\t\t\"chart-yAxis-start\":\"Start\",\n\t\t\"chart-yAxis-end\":\"End\",\n\t\t\"chart-yAxis-step\":\"Step\",\n\t\t\"chart-yAxis-note\":\"* Set all the following parameters to see the effect\",\n\n\t\t\"chart-legend\":\"Legend\",\n\t\t\"chart-row-legend\":\"Use top row as legend\",\n\t\t\"chart-col-legend\":\"Use left column as legend\",\n\t\t\"chart-legend-range\":\"Legend range\",\n\t\t\"chart-legend-align\":\"Align\",\n\t\t\"chart-legend-left\":\"Left\",\n\t\t\"chart-legend-right\":\"Right\",\n\t\t\"chart-legend-center\":\"Center\",\n\t\t\"chart-legend-valign\":\"Vertical align\",\n\t\t\"chart-legend-top\":\"Top\",\n\t\t\"chart-legend-middle\":\"Middle\",\n\t\t\"chart-legend-bottom\":\"Bottom\",\n\n\t\t\"chart-item\":\"Data\",\n\t\t\"stacked-chart\":\"Stacked\",\n\t\t\"horizontal-chart\":\"Horizontal\",\n\t\t\"chart-range\":\"Range\",\n\t\t\"chart-series-color\":\"Color\",\n\t\t\"add-line\":\"Add line\",\n\t\t\"chart-type\":\"Type\",\n\t\t\"chart-tooltip\":\"Tooltips\",\n\t\t\"chart-label\":\"Labels\",\n\n\t\t\"chart-data-from\":\"Data series from\",\n\t\t\"chart-columns\":\"columns\",\n\t\t\"chart-rows\":\"rows\",\n\n\t\t\"chart-markers\":\"Markers\",\n\t\t\"chart-markers-square\":\"Square\",\n\t\t\"chart-markers-triangle\":\"Triangle\",\n\t\t\"chart-markers-diamond\":\"Diamond\",\n\t\t\"chart-markers-round\":\"Round\",\n\n\t\t\"chart-pie-3d\":\"3D\",\n\n\t\t\"chart-radar-circle\":\"Circled lines\"\n\t},\n\ttooltips: {\n\t\t\"color\": \"Font color\",\n\t\t\"background\": \"Background color\",\n\t\t\"font-family\": \"Font family\",\n\t\t\"font-size\": \"Font size\",\n\t\t\"text-align\": \"Horizontal align\",\n\t\t\"vertical-align\": \"Vertical align\",\n\t\t\"borders\": \"Borders\",\n\t\t\"borders-no\": \"Clear borders\",\n\t\t\"borders-left\": \"Left border\",\n\t\t\"borders-top\": \"Top border\",\n\t\t\"borders-right\": \"Right border\",\n\t\t\"borders-bottom\": \"Bottom border\",\n\t\t\"borders-all\": \"All borders\",\n\t\t\"borders-outer\": \"Outer borders\",\n\t\t\"borders-top-bottom\": \"Top and bottom borders\",\n\t\t\"borders-color\": \"Border color\",\n\t\t\"align-left\": \"Left align\",\n\t\t\"align-center\": \"Center align\",\n\t\t\"align-right\": \"Right align\",\n\t\t\"align-top\": \"Top align\",\n\t\t\"align-middle\": \"Middle align\",\n\t\t\"align-bottom\": \"Bottom align\",\n\t\t\"span\": \"Merge\",\n\t\t\"wrap\": \"Text wrap\",\n\t\t\"undo\": \"Undo\",\n\t\t\"redo\": \"Redo\",\n\t\t\"format\": \"Number format\",\n\t\t\"increase-decimals\":\"Increase decimal places\",\n\t\t\"decrease-decimals\":\"Decrease decimal places\",\n\t\t\"font-weight\": \"Bold\",\n\t\t\"font-style\": \"Italic\",\n\t\t\"underline\": \"Underline\",\n\t\t\"strike\": \"Strike\",\n\t\t\"hide-gridlines\": \"Hide/show gridlines\",\n\t\t\"hide-headers\": \"Hide/show headers\",\n\t\t\"show-formulas\": \"Hide/show formulas\",\n\t\t\"print-borders\": \"Hide/show print borders\",\n\t\t\"create-filter\": \"Create/remove filters\",\n\t\t\"freeze-columns\" : \"Freeze/unfreeze columns\",\n\t\t\"add-range\": \"Set name for the selected range\",\n\t\t\"conditional\": \"Conditional formatting\",\n\t\t\"add-sheet\": \"Add Sheet\",\n\t\t\"lock-cell\": \"Lock/unlock cell\",\n\t\t\"clear\": \"Clear\",\n\t\t\"add-link\": \"Add link\",\n\t\t\"row\": \"Rows\",\n\t\t\"column\": \"Columns\",\n\t\t\"sheet\": \"Sheet\",\n\t\t\"add-image\": \"Image\",\n\t\t\"add-sparkline\": \"Graph\",\n\t\t\"add-comment\": \"Comment\",\n\t\t\"increase-indent\" : \"Increase indent\",\n\t\t\"decrease-indent\": \"Decrease indent\",\n\t\t\"show-sheet\": \"Show sheet\"\n\t},\n\tmenus:{\n\t\t\"remove-sheet\": \"Remove sheet\",\n\t\t\"rename-sheet\": \"Rename sheet\",\n\t\t\"hide-sheet\": \"Hide sheet\",\n\t\t\"file\": \"File\",\n\t\t\"new\": \"New\",\n\t\t\"new-sheet\": \"New sheet\",\n\t\t\"excel-import\": \"Import from Excel\",\n\t\t\"excel-export\": \"Export to Excel\",\n\t\t\"sheet\": \"Sheets\",\n\t\t\"copy-sheet\": \"Copy to new sheet\",\n\t\t\"edit\": \"Edit\",\n\t\t\"undo\": \"Undo\",\n\t\t\"redo\": \"Redo\",\n\t\t\"columns\": \"Columns\",\n\t\t\"insert-column\": \"Insert column\",\n\t\t\"delete-column\": \"Delete column\",\n\t\t\"show-column\": \"Show column\",\n\t\t\"hide-column\": \"Hide column\",\n\t\t\"resize-column\": \"Resize column\",\n\t\t\"rows\": \"Rows\",\n\t\t\"insert-row\": \"Insert row\",\n\t\t\"delete-row\": \"Delete row\",\n\t\t\"show-row\": \"Show row\",\n\t\t\"hide-row\": \"Hide row\",\n\t\t\"resize-row\": \"Resize row\",\n\t\t\"insert\": \"Insert\",\n\t\t\"conditional-format\": \"Conditional format\",\n\t\t\"common\": \"common\",\n\t\t\"text\": \"text\",\n\t\t\"clear\": \"Clear\",\n\t\t\"clear-value\":\"Values\",\n\t\t\"clear-style\":\"Styles\",\n\t\t\"clear-conditional-formats\":\"Conditional formats\",\n\t\t\"clear-dropdown-editors\":\"Dropdowns and filters\",\n\t\t\"clear-comments\":\"Comments\",\n\t\t\"clear-all\":\"All\",\n\t\t\"image\": \"Image\",\n\t\t\"add-image-cell\":\"Add to cell\",\n\t\t\"add-image-top\":\"Add above cells\",\n\t\t\"graph\": \"Graph\",\n\t\t\"add-sparkline\":\"Add to cell\",\n\t\t\"add-chart\":\"Add above cells\",\n\t\t\"data\": \"Data\",\n\t\t\"add-link\": \"Add link\",\n\t\t\"add-range\": \"Named ranges\",\n\t\t\"sort\": \"Sort\",\n\t\t\"sort-asc\": \"Sort A to Z\",\n\t\t\"sort-desc\": \"Sort Z to A\",\n\t\t\"view\": \"View\",\n\t\t\"freeze-columns\": \"Freeze/unfreeze columns\",\n\t\t\"freeze-rows\": \"Freeze/unfreeze rows\",\n\t\t\"hide-gridlines\": \"Hide/show gridlines\",\n\t\t\"hide-headers\": \"Hide/show headers\",\n\t\t\"show-formulas\": \"Hide/show formulas\",\n\t\t\"create-filter\": \"Create/remove filters\",\n\t\t\"add-dropdown\": \"Add dropdown\",\n\t\t\"lock-cell\": \"Lock/unlock cell\",\n\t\t\"print\": \"Print\",\n\t\t\"print-borders\": \"Hide/show print borders\",\n\t\t\"add-comment\":\"Comment\",\n\t\t\"cut\": \"Cut\",\n\t\t\"copy\": \"Copy\",\n\t\t\"paste\": \"Paste\",\n\t\t\"special-paste\": \"Special paste\",\n\t\t\"paste-values\": \"Values\",\n\t\t\"paste-formulas\": \"Formulas\",\n\t\t\"paste-styles\": \"Styles\",\n\t\t\"paste-conditions\": \"Conditional formats\"\n\t},\n\ttable:{\n\t\t\"math-error\":\"#ERROR!\",\n\t\t\"math-ref-error\":\"#REF!\",\n\t\t\"format-error\":\"INCORRECT FORMAT\"\n\t},\n\tliveEditor:{\n\t\t\"edit\":\"Edit:\"\n\t},\n\tformats:{\n\t\t\"dateFormat\": \"mm/dd/yyyy\",\n\t\t\"timeFormat\": \"hh:mm AM/PM\",\n\t\t\"longDateFormat\": \"dd mmmm yyyy\",\n\t\t\"fullDateFormat\": \"mm/dd/yyyy hh:mm AM/PM\",\n\t\t\"parseDateTime\": \"%m/%d/%Y %G:%i:%s\",\n\t\t\"parseDate\": \"%m/%d/%Y\",\n\t\t\"currencies\": [\n\t\t\t\"{obj} €\",\n\t\t\t\"¥{obj}\",\n\t\t\t\"R$ {obj}\",\n\t\t\t\"{obj} rub.\"\n\t\t]\n\t}\n};\n","webix.protoUI({\n\tname: \"ssheet-align\",\n\t$cssName:\"richselect\",\n\t$init: function(config){\n\t\tconfig.options = {\n\t\t\tview:\"datasuggest\",\n\t\t\tbody:{\n\t\t\t\tview: \"ssheet-icons\",\n\t\t\t\ttooltip: {\n\t\t\t\t\ttemplate:\"#tooltip#\"\n\t\t\t\t},\n\t\t\t\txCount:3, yCount:1\n\t\t\t},\n\t\t\tdata: config.data\n\t\t};\n\t}\n},webix.ui.richselect);","webix.protoUI({\n\tname: \"ssheet-borders-suggest\",\n\tdefaults:{\n\t\twidth: 300\n\t},\n\t$init: function(config){\n\t\tconst skin = webix.skin.$name;\n\t\tconfig.body = {\n\t\t\tmargin: 6,\n\t\t\tcols:[\n\t\t\t\t{ view: \"ssheet-icons\", scroll: false, select: true,\n\t\t\t\t\txCount: 4,\n\t\t\t\t\tyCount: 2,\n\t\t\t\t\ttooltip: {\n\t\t\t\t\t\ttemplate: function(obj){\n\t\t\t\t\t\t\treturn webix.i18n.spreadsheet.tooltips[\"borders-\"+obj.id];\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\ton:{\n\t\t\t\t\t\tonAfterSelect: function(){\n\t\t\t\t\t\t\tvar suggest = this.getParentView().getParentView();\n\t\t\t\t\t\t\tsuggest.updateMasterValue(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\ttemplate: function(obj){\n\t\t\t\t\t\tvar css = \"webix_ssheet_button_icon webix_ssheet_icon ssi-borders-\"+obj.value;\n\t\t\t\t\t\treturn \"\";\n\t\t\t\t\t},\n\t\t\t\t\tdata: config.data\n\t\t\t\t},\n\t\t\t\t{ view: \"ssheet-separator\"},\n\t\t\t\t{\n\t\t\t\t\trows:[\n\t\t\t\t\t\t{ view: \"ssheet-color\", css: config.css, name: config.name, width: 68,\n\t\t\t\t\t\t\tvalue: (skin == \"contrast\" || skin == \"dark\") ? \"#ffffff\" : \"#000000\",\n\t\t\t\t\t\t\ttooltip: webix.i18n.spreadsheet.tooltips[\"borders-color\"],\n\t\t\t\t\t\t\ttitle: \"\",\n\t\t\t\t\t\t\ton:{\n\t\t\t\t\t\t\t\tonChange: function(){\n\t\t\t\t\t\t\t\t\tvar suggest = this.getParentView().getParentView().getParentView();\n\t\t\t\t\t\t\t\t\tsuggest.updateMasterValue(false);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tview: \"richselect\", css:\"webix_ssheet_border_type\", value:\"thin\", suggest:{\n\t\t\t\t\t\t\t\tfitMaster:false,\n\t\t\t\t\t\t\t\twidth:130,\n\t\t\t\t\t\t\t\tcss: \"webix_ssheet_suggest\",\n\t\t\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\t\t\ttemplate:\"
\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdata:[\n\t\t\t\t\t\t\t\t\t{ id:\"thin\" },\n\t\t\t\t\t\t\t\t\t{ id:\"medium\" },\n\t\t\t\t\t\t\t\t\t{ id:\"thick\" },\n\t\t\t\t\t\t\t\t\t{ id:\"dashed\" }, \n\t\t\t\t\t\t\t\t\t{ id:\"dotted\" },\n\t\t\t\t\t\t\t\t\t{ id:\"double\" }\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{ }\n\t\t\t\t\t]\n\t\t\t\t}\n\n\t\t\t]\n\t\t};\n\t},\n\tupdateMasterValue: function(hide){\n\t\tconst value = this.getValue();\n\t\tconst master = webix.$$(this.config.master);\n\t\tmaster.setValue(value, \"user\");\n\t\tif(hide)\n\t\t\tthis.hide();\n\t},\n\tsetValue: function(value){\n\t\tif(value[0])\n\t\t\tthis.getList().select(value[0]);\n\t\tif(value[1])\n\t\t\tthis.getColorView().setValue(value[1]);\n\t\tif(value[2])\n\t\t\tthis.getTypeView().setValue(value[2]);\n\t},\n\tgetValue: function(){\n\t\treturn [this.getList().getSelectedId(), this.getColorView().getValue()||\"\", this.getTypeView().getValue()||\"\"];\n\t},\n\tgetList: function(){\n\t\treturn this.getBody().getChildViews()[0];\n\t},\n\tgetColorView: function(){\n\t\treturn this.getBody().getChildViews()[2].getChildViews()[0];\n\t},\n\tgetTypeView: function(){\n\t\treturn this.getBody().getChildViews()[2].getChildViews()[1];\n\t},\n\tgetItemText:function(){\n\t\treturn \"\";\n\t}\n},webix.ui.suggest);\n\nwebix.protoUI({\n\tname: \"ssheet-borders\",\n\t$cssName: \"richselect\",\n\t$init: function(config){\n\t\tconfig.options = {\n\t\t\tview: \"ssheet-borders-suggest\",\n\t\t\tfitMaster: false,\n\t\t\tdata: config.data\n\t\t};\n\n\t\tthis.$ready.push(webix.bind(function(){\n\t\t\tthis.getPopup().config.master = this.config.id;\n\t\t},this));\n\n\t},\n\tsetValue: function(value, config){\n\t\tif(webix.isArray(value)){\n\t\t\tif(!this.config.value || value[0] != this.config.value[0] || value[1] != this.config.value[1]){\n\t\t\t\tthis.getPopup().setValue(value);\n\t\t\t}\n\t\t\tconst old = this.config.value;\n\t\t\tthis.config.value = value;\n\t\t\tif (value[0])\n\t\t\t\tthis.callEvent(\"onChange\", [this.getValue(), old, config]);\n\t\t}\n\t\treturn value;\n\t},\n\tgetValue: function(){\n\t\treturn this.getPopup().getValue().join(\",\");\n\t},\n\tgetList: function(){\n\t\treturn this.getPopup().getBody().getChildViews()[0];\n\t},\n\tgetColorView: function(){\n\t\treturn this.getPopup().getBody().getChildViews()[1].getChildViews()[0];\n\t}\n},webix.ui.richselect);","// toolbar: color selector\nwebix.protoUI({\n\t$cssName: \"colorboard\",\n\tname: \"ssheet-colorboard\",\n\tdefaults:{\n\t\theight: 196,\n\t\twidth: 244,\n\t\tcss: \"webix_ssheet_colorboard\",\n\t\tpalette: [\n\t\t\t[\"#000000\", \"#434343\", \"#666666\", \"#999999\", \"#b7b7b7\", \"#cccccc\", \"#d9d9d9\", \"#efefef\", \"#f3f3f3\", \"#ffffff\"],\n\t\t\t[\"#980000\", \"#ff0000\", \"#ff9900\", \"#ffff00\", \"#00ff00\", \"#00ffff\", \"#4a86e8\", \"#0000ff\", \"#9900ff\", \"#ff00ff\"],\n\t\t\t[\"#e6b8af\", \"#f4cccc\", \"#fce5cd\", \"#fff2cc\", \"#d9ead3\", \"#d0e0e3\", \"#c9daf8\", \"#cfe2f3\", \"#d9d2e9\", \"#ead1dc\"],\n\t\t\t[\"#dd7e6b\", \"#ea9999\", \"#f9cb9c\", \"#ffe599\", \"#b6d7a8\", \"#a2c4c9\", \"#a4c2f4\", \"#9fc5e8\", \"#b4a7d6\", \"#d5a6bd\"],\n\t\t\t[\"#cc4125\", \"#e06666\", \"#f6b26b\", \"#ffd966\", \"#93c47d\", \"#76a5af\", \"#6d9eeb\", \"#6fa8dc\", \"#8e7cc3\", \"#c27ba0\"],\n\t\t\t[\"#a61c00\", \"#cc0000\", \"#e69138\", \"#f1c232\", \"#6aa84f\", \"#45818e\", \"#3c78d8\", \"#3d85c6\", \"#674ea7\", \"#a64d79\"],\n\t\t\t[\"#85200c\", \"#990000\", \"#b45f06\", \"#bf9000\", \"#38761d\", \"#134f5c\", \"#1155cc\", \"#0b5394\", \"#351c75\", \"#741b47\"],\n\t\t\t[\"#5b0f00\", \"#660000\", \"#783f04\", \"#7f6000\", \"#274e13\", \"#0c343d\", \"#1c4587\", \"#073763\", \"#20124d\", \"#4c1130\"]\n\t\t]\n\t},\n\t$init:function(){\n\t\tthis.attachEvent(\"onSelect\", function(value){\n\t\t\tthis.getParentView().setMasterValue({ value }, false, \"user\");\n\t\t});\n\t}\n}, webix.ui.colorboard);\n\nwebix.protoUI({\n\t$cssName: \"richselect\",\n\tname: \"ssheet-color\",\n\tdefaults:{\n\t\tcss: \"webix_ssheet_color\",\n\t\ticon: \"wxi-menu-down\",\n\t\tsuggest:{\n\t\t\tborderless: true,\n\t\t\tbody:{\n\t\t\t\tview: \"ssheet-colorboard\"\n\t\t\t}\n\t\t}\n\t},\n\t$init: function(){\n\t\tthis.$view.className += \" webix_ssheet_color\";\n\t},\n\t$renderInput: function(config, divStart, id){\n\t\tconst color = this.renderColor.call(this);\n\t\tdivStart = divStart.replace(/([^>]>)(.*)(<\\/div)/, function(match, p1, p2, p3){\n\t\t\treturn p1+config.title +color+p3;\n\t\t});\n\n\t\treturn webix.ui.colorpicker.prototype.$renderInput.call(this,config, divStart, id);\n\t},\n\t$setValue: function(value){\n\t\tvalue = value || \"\";\n\t\tthis.getColorNode().style.backgroundColor = value;\n\t},\n\trenderColor: function(){\n\t\treturn \"
\";\n\t},\n\tgetColorNode: function(){\n\t\treturn this.$view.firstChild.firstChild.childNodes[1];\n\t},\n\t$renderIcon:function(){\n\t\treturn webix.ui.text.prototype.$renderIcon.apply(this,arguments);\n\t}\n},webix.ui.colorpicker);","\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:!0});var t,r={1:\"#ERROR\",2:\"#ERROR\",3:\"#REF!\"},e=function(){return e=Object.assign||function(t){for(var r,e=1,n=arguments.length;e>18:t/262144&16777215,t>>6&4095,63&t]}function i(t){return t<2147483648?t>>18:t/262144&16777215}function a(t){return t>>6&4095}function u(t){return 63&t}function f(t,r,e){for(var n=o(t),i=n[0],a=n[1],u=o(r),f=u[0]-i,s=u[1]-a,h=0;h<=f;h++)for(var c=0;c<=s;c++)e(t+64*c+4096*h*64)}function s(t,r){for(var e,n,i,a,f,s,c,p,v=t.code,g=t.source,l=\"\",d=v.length,b=0;b0;){var i=r%26;0===i&&(i=26),o=String.fromCharCode(64+i)+o,r=(r-i)/26}return n+=o,1&e&&(n+=\"$\"),n+=t+1}function c(t){return t<=122}function p(t){return t<=122?t>=65||35===t||36===t||46===t:t>191}function v(t){return t>=97}function g(t){var r=t.charCodeAt(0);return r>=48&&r<=57}function l(t,r){var e;do{r++,e=t.charCodeAt(r)}while(e>=48&&e<=57);return r}function d(t){return\" \"===t||\"\\t\"===t||\"\\n\"===t||\"\\r\"===t}function b(t,r){var e;do{e=t[++r]}while(d(e));return r}function M(t,r){if(\"<\"===t[r]){var e=t[r+1];\">\"!==e&&\"=\"!==e||r++}else\">\"===t[r]&&\"=\"===t[r+1]&&r++;return r+1}function y(r,e,n){for(var o=r.length,i=!0,a=e,u=!1,f=!1,s=!1,h=0;a=0;h--){var c=r[h].charCodeAt(0);36!==c?c<58?(i+=(c-48)*a,a*=10):(s||(a=1,o=i,i=0,s=!0,u+=1),i+=(c-(c>96?96:64))*a,a*=26):f+=u}i>4095?t.push(3,0,0):t.push(9,n(o-1,i-1,e),f)}function _(r,e){var n,o,a=[];t=!1;for(var u,f,h=-1,c=0;c-1))if(\"{\"!=p||\"{\"!=r[c+1])if(\"'\"==p||((f=p.charCodeAt(0))<=122?f>=65||35===f||36===f:f>191)){var v=y(r,c,0),_=(L=v[0],P=v[1],v[2]),w=v[3],E=a.length;if(7!==w&&8!==w||5!==a[a.length-3])u=e.z,a.push(w,L,P);else{var I=\"'\"===r[L-2]?1:0,C=a[E-2],T=a[E-1];void 0===(u=e.page(r.substr(C,T)))&&(a.push(3,0,0),u=0),a.push(w,L-T-2*I-1,P+T+2*I+1)}if(c=_-1,6===w)e.name(a,r,e);else if(8===w){var D=a.length;if(m(a,r.substr(L,P),u),L=(n=y(r,c+2,0))[0],P=n[1],_=n[2],5===(w=n[3])&&(L=(o=y(r,_+1,0))[0],P=o[1],_=o[2],w=o[3]),7!==w){a[D-3]=7;continue}m(a,r.substr(L,P),u);var N=a[D+1],A=a[D+4];(N>A||i(N)>i(A))&&(a[D+1]=A,a[D+4]=N),a[D-1]+=P+1,c=_-1}else 7===w?m(a,r.substr(L,P),u):3!==w&&5!==w||c++}else if(d(p)){var S=b(r,c);a.push(12,c,S-c),c=S-1}else if(g(p)){var O=l(r,c);a.push(11,c,O-c),c=O-1}else{var x=M(r,c);a.push(10,c,x-c),c=x-1}else{var R=y(r,c+2,2),L=R[0],P=R[1],F=R[2];a.push(2,L,P),c=F+2-1}}else h>-1?(a.push(1,h+1,c-h-1),h=-1):h=c}var U={code:a,source:r,exec:null,broken:0,triggers:null};return t&&(U.source=s(U,e)),U}function w(t){return\" \".substr(0,10-t.length)}var E=[\">\",\"<\",\"=\",\"+\"];function I(t,r){var e=function(t,r){for(var e=t.code,n=t.source,o=\"\",i=0,a=[],u=e.length,f=0;f\"===(v=n.substr(e[f+1],e[f+2]))?\"!=\":v}else o+=n.substr(e[f+1],e[f+2]);break;case 11:o+=n.substr(e[f+1],e[f+2]);break;case 3:return\"\"}}return o}(t,r);if(!e)return t.broken=3,void(t.exec=null);try{t.exec=new Function(\"ctx\",\"return \"+e)}catch(r){t.broken=1,t.exec=null}}var C=\"#DIV/0!\",T=\"#VALUE!\",D=\"#NUM!\",N=\"#N/A\";function A(t){var r=new Date(t.getFullYear(),0,0),e=t.valueOf()-r.valueOf()+60*(r.getTimezoneOffset()-t.getTimezoneOffset())*1e3;return Math.floor(e/864e5)}function S(t){var r=new Date(Math.round(86400*(t-25569)*1e3));return new Date(r.getTime()+6e4*r.getTimezoneOffset())}function O(t){return 25569+(t.getTime()-6e4*t.getTimezoneOffset())/864e5}function x(t){return!(!t&&0!==t||(t*=1,isNaN(t)))&&t}function R(t){if(1===t.length){var r=t[0];return\"object\"==typeof r?r:[r]}for(var e=[],n=0;nn&&(i=n),u<-1)throw D;u&&(u=Math.floor(+u));var f=t<0&&16===o?\"FF\":\"\";if(a=n<2147483648?(i>>>0&n-e).toString(o):(i>>>0).toString(o),u&&a.length>u)throw D;return(f+a).padStart(u,\"0\").toUpperCase()}function V(t,r){var e=+yt(t),n=+mt(t),o=+yt(r),i=+mt(r);return ht(e*o-n*i,e*i+n*o)}function X(t,r){var e=+yt(t),n=+mt(t);return ht(e+ +yt(r),n+ +mt(r))}function H(t){return t>0?Math.floor(t):Math.ceil(t)}function Y(t){return t<0?Math.floor(t):Math.ceil(t)}function B(){for(var t=[],r=0;re&&(e=i)}return e===-1/0?0:e}function W(){for(var t=[],r=0;r-1){var e=Math.floor(r);return 0===e||1===e?1:(at[e]>0||(at[e]=ut(e-1)*e),at[e])}}function ft(t,r){var e=x(t),n=x(r);if(\"number\"==typeof e&&\"number\"==typeof n)return ut(e)/(ut(n)*ut(e-n))}var st=[\"\",\"C\",\"CC\",\"CCC\",\"CD\",\"D\",\"DC\",\"DCC\",\"DCCC\",\"CM\",\"\",\"X\",\"XX\",\"XXX\",\"XL\",\"L\",\"LX\",\"LXX\",\"LXXX\",\"XC\",\"\",\"I\",\"II\",\"III\",\"IV\",\"V\",\"VI\",\"VII\",\"VIII\",\"IX\"];function ht(t,r,e){void 0===e&&(e=\"i\");var n=x(t),o=x(r);if(\"number\"!=typeof n&&\"number\"!=typeof o)throw D;var i=\"\",a=\"\";return t&&(i=t.toString()),r&&1!==r?a=r+e:1===r&&(a=e),r>0?(i?i+\"+\":\"\")+a:i+a}function ct(t,r){return void 0===r&&(r=null),k(t,r,-512,511,2)}function pt(t,r){return void 0===r&&(r=null),k(t,r,-274877906944,274877906943,16)}function vt(t,r){return void 0===r&&(r=null),k(t,r,-536870912,536870911,8)}var gt=[-1.3026537197817094,.6419697923564902,.019476473204185836,-.00956151478680863,-.000946595344482036,.000366839497852761,42523324806907e-18,-20278578112534e-18,-1624290004647e-18,130365583558e-17];function lt(t){for(var r,e=t<0,n=0,o=0,i=2/(2+(t=Math.abs(t))),a=4*i-2,u=gt.length-1;u>0;u--)r=a*n-o+gt[u],o=n,n=r;var f=i*Math.exp(-t*t+.5*(gt[0]+a*n)-o);return e?f-1:1-f}function dt(t,r){var e=x(t),n=x(r);if(\"number\"==typeof e)return\"number\"==typeof n?lt(n)-lt(e):lt(e);throw T}var bt=[.9999999999998099,676.5203681218851,-1259.1392167224028,771.3234287776531,-176.6150291621406,12.507343278686905,-.13857109526572012,9984369578019572e-21,1.5056327351493116e-7];var Mt=Math.pow(2,39);function yt(t){if(\"string\"!=typeof t)throw T;if([\"i\",\"+i\",\"1i\",\"+1i\",\"-i\",\"-1i\",\"j\",\"+j\",\"1j\",\"+1j\",\"-j\",\"-1j\"].indexOf(t)>=0)return 0;var r=t.indexOf(\"+\"),e=t.indexOf(\"-\");0===r&&(r=t.indexOf(\"+\",1)),0===e&&(e=t.indexOf(\"-\",1));var n=t.substring(t.length-1,t.length),o=\"i\"===n||\"j\"===n;if(r>=0||e>=0){if(!o)throw D;if(r>=0){if(isNaN(+t.substring(0,r))||isNaN(+t.substring(r+1,t.length-1)))throw D;return Number(t.substring(0,r))}if(isNaN(+t.substring(0,e))||isNaN(+t.substring(e+1,t.length-1)))throw D;return Number(t.substring(0,e))}if(o){if(isNaN(+t.substring(0,t.length-1)))throw D;return 0}if(isNaN(+t))throw D;return+t}function mt(t){if(\"string\"!=typeof t)throw T;if([\"i\",\"j\"].indexOf(t)>=0)return 1;var r=(t=t.replace(\"+i\",\"+1i\").replace(\"-i\",\"-1i\").replace(\"+j\",\"+1j\").replace(\"-j\",\"-1j\")).indexOf(\"+\"),e=t.indexOf(\"-\");0===r&&(r=t.indexOf(\"+\",1)),0===e&&(e=t.indexOf(\"-\",1));var n=t.substring(t.length-1,t.length),o=\"i\"===n||\"j\"===n;if(r>=0||e>=0){if(!o)throw D;if(r>=0){if(isNaN(+t.substring(0,r))||isNaN(+t.substring(r+1,t.length-1)))throw D;return Number(t.substring(r+1,t.length-1))}if(isNaN(+t.substring(0,e))||isNaN(+t.substring(e+1,t.length-1)))throw D;return-Number(t.substring(e+1,t.length-1))}if(o){var i=+t.substring(0,t.length-1);if(isNaN(i))throw D;return i}if(isNaN(+t))throw D;return 0}function _t(t){var r=+yt(t),e=+mt(t);return ht(Math.cos(r)*Math.cosh(e),-Math.sin(r)*Math.sinh(e))}function wt(t){var r=+yt(t),e=+mt(t);return ht(Math.cos(e)*(Math.exp(r)+Math.exp(-r))/2,Math.sin(e)*(Math.exp(r)-Math.exp(-r))/2)}function Et(t,r){var e=+yt(t),n=+mt(t),o=+yt(r),i=+mt(r),a=Math.pow(o,2)+Math.pow(i,2);return ht((e*o+n*i)/a,(n*o-e*i)/a)}function It(t){var r=+yt(t),e=+mt(t);return ht(Math.sin(r)*Math.cosh(e),Math.cos(r)*Math.sinh(e))}function Ct(t){var r=+yt(t),e=+mt(t);return ht(Math.cos(e)*(Math.exp(r)-Math.exp(-r))/2,Math.sin(e)*(Math.exp(r)+Math.exp(-r))/2)}var Tt=Math.pow(2,29);function Dt(t,r,e){var n=x(r);if(\"number\"!=typeof n||r<0||r>1||e&&(0===r||1===r))throw T;var o=R(t).sort((function(t,r){return t-r}));e&&(o=function(){for(var t=0,r=0,e=arguments.length;r=i)return a}},\"BINOM.DIST.RANGE\":function(t,r,e,n){var o=U(t),i=U(r),a=U(e),u=x(n);\"number\"!=typeof u&&(u=a);for(var f=0,s=a;s<=u;s++){f+=ft(o,s)*Math.pow(i,s)*Math.pow(1-i,o-s)}return f},\"BINOM.DIST\":St,BITAND:function(t,r){var e=x(t),n=x(r);if(\"number\"==typeof e&&\"number\"==typeof n)return e&n;throw T},BITLSHIFT:function(t,r){var e=x(t),n=x(r);if(\"number\"==typeof e&&\"number\"==typeof n)return n>0?e<>-n;throw T},BITOR:function(t,r){var e=x(t),n=x(r);if(\"number\"==typeof e&&\"number\"==typeof n)return e|n;throw T},BITRSHIFT:function(t,r){var e=x(t),n=x(r);if(\"number\"==typeof e&&\"number\"==typeof n)return n>0?e>>n:e<<-n;throw T},BITXOR:function(t,r){var e=x(t),n=x(r);if(\"number\"==typeof e&&\"number\"==typeof n)return e^n;throw T},CEILING:function(t,r,e){void 0===r&&(r=1),void 0===e&&(e=0);var n=x(t),o=x(r),i=x(e);if(\"number\"==typeof n&&\"number\"==typeof o&&\"number\"==typeof i)return 0===o?0:(o=Math.abs(o),n>=0?Math.ceil(n/o)*o:0===e?-1*Math.floor(Math.abs(n)/o)*o:-1*Math.ceil(Math.abs(n)/o)*o)},COMBIN:ft,COMBINA:function(t,r){var e=x(t),n=x(r);if(\"number\"==typeof e&&\"number\"==typeof n)return 0===e&&0===n?1:ft(e+n-1,e-1)},COMPLEX:ht,CORREL:function(t,r){if(t.length!==r.length)throw N;for(var e=t.filter((function(t){return\"number\"==typeof t})),n=r.filter((function(t){return\"number\"==typeof t})),o=e.length,i=e.reduce((function(t,r){return t+r}),0)/o,a=n.reduce((function(t,r){return t+r}),0)/o,u=0,f=0,s=0,h=0;h1&&n<37)return parseInt(\"\"+e,n)},DEGREES:function(t){var r=x(t);if(\"number\"==typeof r)return 180*r/Math.PI},DELTA:function(t,r){var e=x(t),n=x(r);if(\"number\"==typeof e||\"number\"==typeof e)return+(e===n);throw T},DEVSQ:function(){for(var t=[],r=0;r-1&&r<1)return.5*Math.log((1+r)/(1-r));throw T},FISHERINV:function(t){var r=x(t);if(\"number\"==typeof r){var e=Math.exp(2*r);return(e-1)/(e+1)}throw T},FLOOR:function(t,r){var e=x(t),n=x(r);if(\"number\"==typeof e&&\"number\"==typeof n){var o=Math.abs(n);return e>=0?Math.floor(e/o)*o:-1*Math.ceil(Math.abs(e)/o)*o}},GAMMA:function t(r){var e=x(r);if(\"number\"!=typeof e)throw T;if(!(Number.isInteger(e)&&e<=0)){if(e<.5)return Math.PI/(Math.sin(Math.PI*e)*t(1-e));e-=1;for(var n=bt[0],o=1;o<9;o++)n+=bt[o]/(e+o);var i=e+7+.5;return Math.sqrt(2*Math.PI)*Math.pow(i,e+.5)*Math.exp(-i)*n}throw D},GCD:function(){for(var t=[],r=0;re.length)throw\"The arguments should contain at least one numeric value\";i++}for(var a=o<0?-o:o;if?a%=f:f%=a;a+=f}}return a},GEOMEAN:function(){for(var t=[],r=0;r=r);throw T},GT:function(t,r){var e=x(t),n=x(r);if(\"number\"==typeof e&&\"number\"==typeof n)return e>n},GTE:function(t,r){var e=x(t),n=x(r);if(\"number\"==typeof e&&\"number\"==typeof n)return e>=n},HARMEAN:function(){for(var t=[],r=0;rMt;n&&(e=-(e-2*Mt));var o=r?x(r):null,i=e.toString();return(n?\"-\":\"\")+(o?i.padStart(o,\"0\"):i)},HEX2OCT:function(t,r){void 0===r&&(r=null);var e=parseInt(t.toString(),16);return e>Mt&&(e^=Mt),vt(e,r)},IMABS:function(t){var r=yt(t),e=mt(t);if(!Number.isFinite(+r)||!Number.isFinite(+e))throw T;return Math.sqrt(Math.pow(+r,2)+Math.pow(+e,2))},IMAGINARY:mt,IMCONJUGATE:function(t){return ht(+yt(t),-+mt(t))},IMCOS:_t,IMCOSH:wt,IMCOT:function(t){return Et(_t(t),It(t))},IMCSC:function(t){return Et(\"1\",It(t))},IMCSCH:function(t){return Et(\"1\",Ct(t))},IMDIV:Et,IMEXP:function(t){var r=+yt(t),e=+mt(t),n=Math.exp(r);return ht(n*Math.cos(e),n*Math.sin(r))},IMLN:function(t){var r=+yt(t),e=+mt(t);return ht(Math.log(Math.sqrt(r*r+e*e)),Math.atan(e/r))},IMPOWER:function(t,r){var e=x(r);if(\"number\"!=typeof e)throw T;var n=+yt(t),o=+mt(t),i=Math.sqrt(n*n+o*o),a=Math.pow(i,e),u=Math.atan(o/n);return ht(a*Math.cos(e*u),a*Math.sin(e*u))},IMPRODUCT:function(){for(var t=[],r=0;r0?o:-o}},MROUND:function(t,r){var e=x(t),n=x(r);if(\"number\"==typeof e&&\"number\"==typeof n&&e*n>-1)return Math.round(e/n)*n},MULTINOMIAL:function(){for(var t=[],r=0;r=0)return Math.sqrt(r)},SQRTPI:function(t){var r=x(t);if(\"number\"==typeof r&&r>-1)return Math.sqrt(r*Math.PI)},STDEV:et,\"STDEV.S\":et,\"STDEV.P\":nt,STDEVA:function(){for(var t=[],r=0;r1?e.length-1:0]:null}},REGEXMATCH:function(t,r){if(\"string\"==typeof t&&\"string\"==typeof r)return!!t.match(new RegExp(r))},REGEXREPLACE:function(t,r,e){if(\"string\"==typeof t&&\"string\"==typeof r)return t.replace(new RegExp(r),\"\"+e)},REPT:function(t,r){var e=x(r);if(\"number\"==typeof e)return new Array(e+1).join(\"\"+t)},SEARCH:function(t,r,e){void 0===e&&(e=0);var n=x(e);if(\"number\"==typeof n){var o=(\"\"+r).toLowerCase().indexOf((\"\"+t).toLowerCase(),n-1)+1;if(0!==o)return o;throw\"not found\"}},SUBSTITUTE:function(t,r,e,n){if(!t||!r||!e&&\"\"!==e)return\"\"+t;if(void 0===n)return(\"\"+t).replace(new RegExp(\"\"+r,\"g\"),\"\"+e);for(var o=0,i=0;(\"\"+t).indexOf(\"\"+r,o)>0;)if(o=(\"\"+t).indexOf(\"\"+r,o+1),++i===n)return(\"\"+t).substring(0,o)+e+(\"\"+t).substring(o+(\"\"+r).length)},T:function(t){return\"string\"==typeof t&&\"TRUE\"!==t&&\"FALSE\"!==t?\"\"+t:\"\"},JOIN:function(t){for(var r=[],e=1;ei&&(i=r,o=e)})):-1===e&&r.forEach((function(r,e){r>=t&&r0?c.getUTCDay():c.getDay(),v=!1;p!==a[0]&&p!==a[1]||(v=!0);for(var g=0;gs||a===s&&i>=f)?((u===h&&Gt(u)||function(t,r){var e=t.getFullYear(),n=new Date(e,2,1);if(Gt(e)&&t=n)return!0;var o=r.getFullYear(),i=new Date(o,2,1);return Gt(o)&&r>=i&&t1&&\"number\"==typeof n){if(r.lengthu)throw\"Period cannot be greater than life\";if(a>=i)return 0;for(var h=+(1-Math.pow(a/i,1/u)).toFixed(3),c=i*h*s/12,p=c,v=0,g=n===u?u-1:n,l=2;l<=g;l++)p+=v=(i-p)*h;return 1===n?c:n===u?(i-p)*h:v},DDB:function(t,r,e,n,o){void 0===o&&(o=2);var i=U(t),a=U(r),u=U(e),f=U(n),s=U(o);if(i<0||a<0||u<0||f<0||s<0)throw\"Parameters cannot be negative\";if(f>u)throw\"Period cannot be greater than life\";if(a>=i)return 0;for(var h=0,c=0,p=1;p<=n;p++)h+=c=Math.min(s/u*(i-h),i-a-h);return c},DOLLAR:function(t,r){void 0===r&&(r=2);var e=x(t),n=x(r);if(\"number\"==typeof e&&\"number\"==typeof n){if(n>=0)return\"$\"+e.toFixed(n);var o=Math.pow(10,-n);return\"$\"+Math.trunc(e/o)*o}},DOLLARDE:function(t,r){var e=U(t),n=U(r);if(n<0)throw\"Fraction cannot be negative\";if(n>=0&&n<1)throw\"Fraction cannot be zero\";n=parseInt(\"\"+n,10);var o=parseInt(\"\"+t,10);o+=e%1*Math.pow(10,Math.ceil(Math.log(n)/Math.LN10))/n;var i=Math.pow(10,Math.ceil(Math.log(n)/Math.LN2)+1);return o=Math.round(o*i)/i},DOLLARFR:function(t,r){var e=U(t),n=U(r);if(n<0)throw\"Fraction cannot be negative\";if(n>=0&&n<1)throw\"Fraction cannot be zero\";n=parseInt(\"\"+n,10);var o=parseInt(\"\"+t,10);return o+=e%1*Math.pow(10,-Math.ceil(Math.log(n)/Math.LN10))*n},EFFECT:function(t,r){var e=U(t),n=U(r);if(e<=0)throw\"Rate cannot be less than or equal to zero\";if(n<1)throw\"Periods cannot be less than 1\";return n=parseInt(\"\"+n,10),Math.pow(1+e/n,n)-1},FVSCHEDULE:function(t,r){for(var e=U(t),n=r.map((function(t){return U(t)})),o=n.length,i=e,a=0;a0&&(u=!0),e[s]<0&&(f=!0);if(!u||!f)throw\"Values should contain at least one positive value and one negative value\";var h,c,p,v=n=void 0===r?.1:n,g=!0;do{h=v-(p=o(e,a,v))/i(e,a,v),c=Math.abs(h-v),v=h,g=c>1e-10&&Math.abs(p)>1e-10}while(g);return v},IPMT:Zt,ISPMT:function(t,r,e,n){var o=U(t),i=U(r),a=U(e);return U(n)*o*(i/a-1)},NPV:function(){for(var t=[],r=0;rn)return 100*(1-i*Math.round((o.getTime()-n.getTime())/864e5)/360)},TBILLYIELD:function(t,r,e){var n=F(t),o=F(r),i=U(e);if(\"number\"==typeof i&&o>n)return(100-i)/i*360/Math.round((o.getTime()-n.getTime())/864e5)}}),rr={number:Rt,string:Pt,date:$t,other:Wt,information:Kt,financial:tr,lookup:kt},er=e(e(e(e(e(e(e({},Rt),Pt),$t),Wt),Kt),tr),kt);var nr=Math.pow(10,8);function or(t,r,e){e.add?t.has(r)||e.add(r):t.add(r)}function ir(t){if(t.keys)return Array.from(t.keys());var r=[];return t.forEach((function(t,e){return r.push(e)})),r}function ar(t){if(t.values)return t.values();var r=[];t.forEach((function(t,e){return r.push(e)}));var e=0;return{add:function(t){r.push(t)},next:function(){var t=r[e];return{done:++e>r.length,value:t}}}}var ur=function(){function t(t){var r=this;(t=t||{get:null,set:null,strict:!1})&&(this._getter=t.get,this._setter=t.set,this._strict=t.strict),this._parser=_,this._printer=I,this._parseContext={name:function(){},pageName:function(){return\"\"},pageObj:function(){return null},page:function(){return 0},z:0},this.$count=0,this._data=new Map,this._triggers=new Map,this._holders={},this._context={v:function(t){if(-1===t)throw new Error;var e=r._getter(t);return void 0===e?null:e},r:function(t,e){var n=o(t),i=n[0],a=n[1],u=o(e),f=u[0]-i,s=u[1]-a+1,h=[];h.$width=s;for(var c=0;c<=f;c++)for(var p=0;p1)return e.set(t,a),a;var u=this._data.get(i.value);u&&u.triggers&&u.triggers.forEach((function(t){return or(n,t,o)}))}return e.set(t,3),3},t.prototype._setMathAt=function(t,r){if(this._removeTriggers(t,r)){if(r.triggers)if(-1===r.triggers.indexOf(t)&&3!==r.broken)for(var n=0;n0&&2!==t.broken)return r[t.broken];try{var e=t.exec(this._context);return t.broken=0,\"number\"==typeof e?isFinite(e)?Math.round(e*nr)/nr:this._setErr(t):e}catch(r){return this._setErr(t,r)}},t.prototype.toString=function(t,r){return s(t,r||this._parseContext)},t.prototype.regenerate=function(t,r,n){var o=this;n=e({},n||this._parseContext),ir(this._data).forEach((function(e){var i=!1,a=o._data.get(e),f=u(e);if(r&&f===t)o._removeTriggers(e,null);else{for(var h=0;h10){var a=new Set;r=r.filter((function(t){return!a.has(t)&&(a.add(t),!0)}))}return r.length?r:null}(n),n},t.prototype._execAndTrigger=function(t,r){this.$count+=1;var e=this._data.get(t);if(e){var n=this._exec(e);this._setter(t,n,2)&&this.trigger(t,r)}},t.prototype._errorAndTrigger=function(t,r){var e=this._data.get(t),n=this._setErr(e);this._setter(t,n,2)&&this.trigger(t,r)},t.prototype.debug=function(t){console.log(function(t){for(var r=t.code,e=t.source,n=\"\",o=r.length,i=0;i=h||l>=s)&&(_=n(l>=s?l+r:l,d>=h?d+i:d,b)),M!==m||t!==_){if(v.set(t,m),b===c&&(i<0&&d>=h&&d=s&&l0&&this._triggerRow(s,r,g),i>0&&this._triggerColumn(h,i,g),r<0&&this._triggerColumn(s-1,2,g),i<0&&this._triggerColumn(h-1,2,g),this.triggerSet(g)},t.prototype._triggerColumn=function(t,r,e){var n=this,o=r?t+r:t;ir(this._triggers).forEach((function(r){var i=a(r);i>=t&&i=t&&a=r&&(h&&(c=[].concat(c),h=!1),((l+=i)=e&&(h&&(c=[].concat(c),h=!1),((d+=a)0?w>=r:w>r)&&(h&&(c=[].concat(c),h=!1),(w+=i)<0&&(c[v]=3)),(p||0==(1&m))&&C>=r&&(h&&(c=[].concat(c),h=!1),(C+=i)0?E>=e:E>e)&&(h&&(c=[].concat(c),h=!1),(E+=a)<0&&(c[v]=3)),(p||0==(2&m))&&T>=e&&(h&&(c=[].concat(c),h=!1),(T+=a)r&&(r=t.length)})),[t,r]},t.prototype.getContext=function(){return this._parseContext},t.prototype.addRow=function(t,r){this._data.splice.apply(this._data,sr(t,r)),this._store.transpose(n(t,0,this._id),r,0,this._parseContext)},t.prototype.removeRow=function(t,r){this._data.splice(t,r),this._store.transpose(n(t,0,this._id),-r,0,this._parseContext)},t.prototype.addColumn=function(t,r){var e=sr(t,r);this._data.forEach((function(t){t&&t.splice.apply(t,e)})),this._store.transpose(n(0,t,this._id),0,r,this._parseContext)},t.prototype.removeColumn=function(t,r){this._data.forEach((function(e){e&&e.splice(t,r)})),this._store.transpose(n(0,t,this._id),0,-r,this._parseContext)},t.prototype.setCell=function(t,r,n){var o=this._data[t];o||(o=this._data[t]=[]);var i=o[r];o[r]=i?e(e(e({},i),n),{value:i.value}):n,void 0!==n.value&&this.setValue(t,r,n.value)},t.prototype.setValue=function(t,r,e,o){\"string\"==typeof e&&e.length>1&&\"=\"===e[0]?this._store.setMath(n(t,r,this._id),e.substr(1),this._parseContext):this._store.setValue(n(t,r,this._id),e,o)},t.prototype.getCell=function(t,r,e){var n=this._data[t],o=n?n[r]:null;return o||!e||(n||(n=this._data[t]=[]),(o=n[r])||(o=n[r]={value:\"\"})),o},t.prototype.getValue=function(t,r,e){if(e){var o=this._store.getMath(n(t,r,this._id));if(o)return\"=\"+o.source}var i=this.getCell(t,r,!1);return i?i.value:null},t.prototype.getRange=function(t,r,e,n){for(var o=[],i=t;i<=e;i++)for(var a=r;a<=n;a++)o.push(this.getValue(i,a,!1));return o},t.prototype.getCellRange=function(t,r,e,n){for(var o=[],i=t;i<=e;i++)for(var a=r;a<=n;a++)o.push(this.getCell(i,a));return o},t.prototype.eachCell=function(t){this._data.forEach((function(r,e){r&&r.forEach((function(r,n){r&&t(e,n,r)}))}))},t.prototype.serialize=function(t){var r=this,o=[];return this.eachCell((function(i,a,u){if(u=e({},u),t){var f=r._store.getMath(n(i,a,r.getID()));f&&(u.value=\"=\"+f.source)}o.push([i,a,u])})),o},t.prototype.parse=function(t,r){var o=this;this._store.each((function(t){u(t)===o._id&&o._store.clean(t)})),this._data=[];var i=new Set;t.forEach((function(t){var a=t[0],u=t[1],f=t[2],s=o._data[a];s||(s=o._data[a]=[]);var h=(f=s[u]=e({},f)).value;if(h)if(\"string\"==typeof h&&h.length>1&&\"=\"===h[0]){var c=n(a,u,o._id),p=h.substr(1);o._store.setMath(c,p,o.getContext(),!0),i.add(c)}else if(r){f.value=null;c=n(a,u,o._id);o._store.setValue(c,h,null,!0),o._store.trigger(c,i)}})),this._store.triggerSet(i)},t}();function sr(t,r){for(var e=[t,0],n=0;n ``,\n\t\tHYPERLINK: (url, text) => {\n\t\t\tconst escape = webix.template.escape;\n\t\t\tlet attrs;\n\n\t\t\tif(url[0] == \"#\")\n\t\t\t\tattrs = `href=\"javascript:void(0);\" class=\"webix_ssheet_ref\" data-ref=\"${escape(url.substr(1))}\"`;\n\t\t\telse\n\t\t\t\tattrs = `target=\"blank\" href=\"${escape(url)}\"`;\n\n\t\t\treturn `${escape(text || url)}`;\n\t\t},\n\t\tSPARKLINE: (arr, type, color1, color2) => {\n\t\t\tconst config = { type, color: color1, negativeColor:color2, paddingX:2, paddingY:2 };\n\n\t\t\tif(type == \"donut\")\n\t\t\t\twebix.extend(config, {type:\"pie\", donut:1}, true);\n\t\t\telse if(type == \"barH\")\n\t\t\t\twebix.extend(config, {type:\"bar\", horizontal:1}, true);\n\n\t\t\tfor(let i = 0 ; i < arr.length; i++)\n\t\t\t\tarr[i] = arr[i]||0;\n\n\t\t\tconst tableConfig = view.$$(\"cells\").config;\n\n\t\t\t//[FIXME] we do not know from which cell the method was called, so this is not the real width and height\n\t\t\tconst isCircle = config.type == \"pie\" || type == \"radar\";\n\t\t\tconst width = isCircle ? 100 : tableConfig.columnWidth;\n\t\t\tconst height = isCircle ? 100 : tableConfig.rowHeight;\n\t\t\treturn webix.Sparklines.getTemplate(config)(arr, { width, height });\n\t\t}\n\t};\n\n\tconst keys = Object.keys(math);\n\tkeys.forEach((key, i) => addMath(view, key, math[key], i == keys.length - 1));\n}\n\nexport function addMath(view, name, handler, sort){\n\tname = name.toUpperCase();\n\taddMethod(name, handler);\n\tif(view.$$(\"liveEditor\")){\n\t\tconst sid = view.$$(\"liveEditor\").config.suggest;\n\t\tconst list = webix.$$(sid).getList();\n\t\tif(!list.exists(name)){\n\t\t\tlist.add({id:name, value:name});\n\t\t\tif(sort)\n\t\t\t\tlist.sort(\"value\", \"asc\", \"string\");\n\t\t}\n\t}\n}\n\nexport function getJsDateFromExcel(excelDate) {\n\tconst date = new Date(Math.round((excelDate - 25569) * 86400 * 1000));\n\treturn new Date(date.getTime() + date.getTimezoneOffset() * 60000);\n}\n\nexport function getExcelDateFromJs(jsDate) {\n\tconst returnDateTime = 25569 + ((jsDate.getTime() - (jsDate.getTimezoneOffset() * 60000)) / (86400 * 1000));\n\treturn returnDateTime.toString();\n}","import {getJsDateFromExcel, getExcelDateFromJs} from \"../mathematics/methods\";\n\nfunction getJsDate(value){\n\tif ((value || value === 0) && !(value instanceof Date) && !isNaN(value)){\n\t\tvalue = getJsDateFromExcel(value);\n\t}\n\treturn value;\n}\n\nfunction getExcelDate(value){\n\tif (value && value instanceof Date){\n\t\tvalue = getExcelDateFromJs(value);\n\t}\n\treturn value;\n}\n\nwebix.protoUI({\n\t$cssName: \"datepicker\",\n\tname: \"ssheet-datepicker\",\n\tgetValue:function(){\n\t\tconst value = webix.ui.datepicker.prototype.getValue.apply(this);\n\t\treturn getExcelDate(value) || \"\";\n\t},\n\t$prepareValue:function(value){\n\t\tvalue = getJsDate(value);\n\t\treturn webix.ui.datepicker.prototype.$prepareValue.apply(this, [value]);\n\t}\n}, webix.ui.datepicker);\n\nwebix.protoUI({\n\t$cssName: \"daterangepicker\",\n\tname: \"ssheet-daterangepicker\",\n\tgetValue:function(){\n\t\tlet value = webix.ui.datepicker.prototype.getValue.apply(this);\n\t\tif (value){\n\t\t\tvalue = webix.copy(value);\n\t\t\tvalue.start = getExcelDate(value.start);\n\t\t\tvalue.end = getExcelDate(value.end);\n\t\t}\n\t\treturn value || \"\";\n\t},\n\t$prepareValue:function(value){\n\t\tif (!value){\n\t\t\tvalue = { start:null, end:null };\n\t\t}\n\t\telse if (!value.start && !value.end)\n\t\t\tvalue = { start:value };\n\n\t\tvalue.start = getJsDate(value.start);\n\t\tvalue.end = getJsDate(value.end);\n\n\t\treturn webix.ui.daterangepicker.prototype.$prepareValue.apply(this, [value]);\n\t}\n}, webix.ui.daterangepicker);","webix.protoUI({\n\t$cssName: \"window\",\n\tname: \"ssheet-dialog\",\n\t$init: function(config){\n\t\tthis.$view.className += \" webix_ssheet_dialog\";\n\t\tthis.config.buttons = config.buttons;\n\t\tthis.config.close = true;\n\t},\n\tgetBodyConfig: function(content){\n\t\tcontent.borderless = true;\n\t\tvar elements = this.getFormElements(content);\n\t\tvar config = {\n\t\t\tview: \"form\",\n\t\t\tcss: \"webix_ssheet_form\",\n\t\t\tpadding: webix.skin.$active.layoutPadding.form,\n\t\t\telements: elements\n\t\t};\n\t\treturn config;\n\t},\n\tgetFormElements: function(content){\n\t\tvar elements;\n\t\tif(webix.isArray(content))\n\t\t\telements= content;\n\t\telse{\n\t\t\telements = [];\n\t\t\telements.push(content);\n\t\t}\n\t\tif(this.config.buttons){\n\t\t\telements.push({height:1});\n\t\t\telements.push( {\n\t\t\t\tmargin: 10,\n\t\t\t\tcols:[\n\t\t\t\t\t{},\n\t\t\t\t\t{view: \"button\", css: \"ssheet_cancel_button\", label: webix.i18n.spreadsheet.labels.cancel, autowidth:true, click: function(){\n\t\t\t\t\t\tvar parentView = this.getTopParentView();\n\t\t\t\t\t\tparentView.callEvent(\"onCancelClick\",[]);\n\t\t\t\t\t}},\n\t\t\t\t\t{view: \"button\", label: webix.i18n.spreadsheet.labels.save, hotkey: \"enter\", autowidth:true, click: function(){\n\t\t\t\t\t\tvar parentView = this.getTopParentView();\n\t\t\t\t\t\tparentView.callEvent(\"onSaveClick\",[]);\n\t\t\t\t\t}}\n\t\t\t\t]\n\t\t\t});\n\t\t}\n\t\treturn elements;\n\t},\n\tbody_setter: function(value){\n\t\tif(typeof value == \"object\"){\n\t\t\tif(webix.isUndefined(value.padding))\n\t\t\t\tvalue.padding = webix.skin.$active.layoutPadding.form;\n\t\t\tif(value.view == \"form\" && value.elements){\n\t\t\t\tvalue.elements = this.getFormElements(value.elements);\n\t\t\t\tif(!value.css)\n\t\t\t\t\tvalue.css = \"webix_ssheet_form\";\n\t\t\t}\n\t\t\telse\n\t\t\t\tvalue = this.getBodyConfig(value);\n\t\t}\n\n\t\treturn webix.ui.window.prototype.body_setter.call(this,value);\n\t},\n\tdefaults:{\n\t\tmove:true,\n\t\thead: \"Dialog\",\n\t\tbuttons: true,\n\t\tclose:true,\n\t\t//we need to retain focus in table area, so disabling the autofocusing feature\n\t\tautofocus:false,\n\t\twidth: 350\n\t}\n}, webix.ui.window, webix.IdSpace);\n\n\n\nwebix.protoUI({\n\t$cssName: \"datatable\",\n\tname: \"ssheet-dialog-table\",\n\t$init: function(config){\n\t\tif(!config.headerRowHeight)\n\t\t\tconfig.headerRowHeight = 34;\n\t\tthis.$view.className += \" webix_ssheet_dialog_table\";\n\t}\n},webix.ui.datatable);","webix.protoUI({\n\tname: \"ssheet-suggest-labels\",\n\tdefaults:{\n\t\tfitMaster:false,\n\t\tpadding:0,\n\t\tborderless: true\n\t},\n\t$init: function(){\n\t\tthis.$view.className += \" webix_ssheet_suggest\";\n\t},\n\tgetItemText: function(id){\n\t\treturn this.getList().getItem(id).value;\n\t}\n}, webix.ui.suggest);\n\nwebix.protoUI({\n\tname: \"ssheet-form-suggest\",\n\tdefaults:{\n\t\tpadding:0,\n\t\tborderless: true\n\t},\n\t$init: function(){\n\t\tthis.$view.className += \" webix_ssheet_suggest\";\n\t}\n}, webix.ui.suggest);\n\nwebix.protoUI({\n\t$cssName: \"colorpicker\",\n\tname: \"ssheet-colorpicker\",\n\t$init: function(){\n\t\tthis.$view.className += \" webix_ssheet_colorpicker\";\n\t},\n\tdefaults:{\n\t\tsuggest:{\n\t\t\tborderless: true,\n\t\t\tbody:{\n\t\t\t\tview: \"ssheet-colorboard\",\n\t\t\t}\n\t\t}\n\t}\n}, webix.ui.colorpicker);","webix.protoUI({\n\tname:\"formlate\",\n\tsetValue:function(a){ return this.setHTML(a); },\n\tgetValue:function(){ return \"\"; }\n}, webix.ui.template);","webix.protoUI({\n\tname:\"ssheet-icons\",\n\t$cssName: \"dataview\",\n\t$init: function(){\n\t\tthis.$view.className += \" webix_ssheet_dataview\";\n\t},\n\tdefaults:{\n\t\tborderless: true,\n\t\ttemplate: \"\",\n\t\ttype:{\n\t\t\twidth: 36,\n\t\t\theight: 36\n\t\t}\n\t}\n},webix.ui.dataview);","webix.protoUI({\n\tname: \"ssheet-suggest\",\n\tdefaults:{\n\t\tpadding:0,\n\t\tcss: \"webix_ssheet_suggest\"\n\t}\n},webix.ui.contextmenu);","const group = {\n\tvalue: null,\n\tset: function(method, master){\n\t\tif(!this.value){\n\t\t\tthis.start();\n\t\t\tmethod.call(master);\n\t\t\tthis.end();\n\t\t}\n\t\telse\n\t\t\tmethod.call(master);\n\t},\n\tstart(){\n\t\tthis.value = webix.uid();\n\t},\n\tend(){\n\t\tthis.value = null;\n\t}\n};\n\nexport default group;","export function init(view){\n\tconst events = [\n\t\t{name:\"onSheetAdd\", type:\"insert\"},\n\t\t{name:\"onSheetRemove\", type:\"remove\"},\n\t\t{name:\"onSheetRename\", type:\"rename\"},\n\t\t{name:\"onSheetStateChange\", type:\"state\"},\n\t\t{name:\"onCellChange\"},\n\t\t{name:\"onStyleChange\"},\n\t\t{name:\"onAction\"},\n\t\t{name:\"onRowOperation\"},\n\t\t{name:\"onColumnOperation\"},\n\t\t{name:\"onAfterConditionSet\"},\n\t\t{name:\"onAfterRangeSet\"},\n\t\t{name:\"onAfterSpan\"},\n\t\t{name:\"onAfterSplit\"},\n\t\t{name:\"onAfterFilter\", view: \"cells\"},\n\t\t{name:\"onRowResize\", view: \"cells\"},\n\t\t{name:\"onColumnResize\", view: \"cells\"}\n\t];\n\n\tlet thread;\n\tfor (let i = 0; i < events.length; i++){\n\t\tconst handler = events[i];\n\t\t(handler.view ? view.$$(handler.view) : view).attachEvent(handler.name, function(name, newName, _, page){\n\t\t\tif (view._loading_data) return;\n\n\t\t\tlet params;\n\t\t\tif(handler.type)\n\t\t\t\tparams = handler.type == \"rename\" ? [handler.type, newName, name] : [handler.type, name];\n\t\t\telse{\n\t\t\t\tlet activeSheet = view.getActiveSheet();\n\t\t\t\tif(handler.name == \"onCellChange\" && page != activeSheet)\n\t\t\t\t\tactiveSheet = page;\n\t\t\t\tparams = [\"update\", activeSheet];\n\t\t\t}\n\n\t\t\tclearTimeout(thread);\n\t\t\tthread = webix.delay(() => view.callEvent(\"onChange\", params));\n\t\t});\n\t}\n\n\tview.attachEvent(\"onChange\", function(){\n\t\tsave(view, \"all\");\n\t});\n}\n\nexport function save(view, name, data){\n\tvar save = view.config.save;\n\tvar url;\n\tif (!save) return;\n\n\tif(name == \"all\"){\n\t\tif(!save.all)\n\t\t\treturn;\n\t\tdata = { data: view.serialize({ sheets: true }) };\n\t\turl = save.all;\n\t}\n\telse{\n\t\turl = typeof save === \"string\" ? save + \"/\" + name : save[name];\n\t}\n\n\turl = webix.proxy.$parse(url);\n\n\tif(url){\n\t\tif (typeof url === \"function\")\n\t\t\treturn url(name, data);\n\n\t\tif (url.$proxy && url.save)\n\t\t\treturn url.save(view, data, null, null);\n\n\t\tvar ajax = webix.ajax();\n\t\tif (name === \"all\")\n\t\t\tajax.headers({ \"Content-type\" : \"application/json\" });\n\t\tajax.post(url, data);\n\t}\n}","export const decode = {};\nexport const encode = {};\n\nconst alpha = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n\nfunction indexToHeader(index){\n\tconst chars = alpha.length;\n\tconst quotient = Math.floor(--index / chars);\n\tif (quotient > 0)\n\t\treturn indexToHeader(quotient) + alpha[index % chars];\n\n\treturn alpha[index % chars];\n}\n\nexport function updateMaxColumn(maxColumn){\n\tconst lastColumn = Object.keys(encode).length;\n\n\tfor(let i = lastColumn + 1; i <= maxColumn; i++){\n\t\tlet str = indexToHeader(i);\n\n\t\tdecode[str] = i;\n\t\tencode[i] = str;\n\t}\n}\n\nexport function adress(text){\n\tlet size;\n\tfor(let i = 0; i < text.length; i++)\n\t\tif(text.charCodeAt(i) < 59){\n\t\t\tsize = i;\n\t\t\tbreak;\n\t\t}\n\n\tconst col = text.substr(0, size);\n\tconst row = text.substr(size);\n\n\treturn [row*1, decode[col]];\n}\n\nexport function range(text, view, page){\n\tconst nind = text.indexOf(\"!\");\n\tlet sheet = page || \"\";\n\n\t//parse sheet names\n\tif (nind !== -1){\n\t\tsheet = text.substr(0, nind);\n\t\tif (sheet[0] === \"'\")\n\t\t\tsheet = sheet.substr(1, sheet.length-2);\n\t\ttext = text.substr(nind+1);\n\t}\n\n\tlet parts = text.split(\":\");\n\tif (parts.length != 2){\n\t\tif(view){\n\t\t\tlet code = view.ranges.getCode(text, sheet);\n\t\t\tif(!code){\n\t\t\t\t// global named range\n\t\t\t\tcode = view.ranges.getCode(text, true);\n\t\t\t\tif(!code)\n\t\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tconst rangeParts = code.split(\"!\");\n\t\t\tif(rangeParts[0] != page || view.getActiveSheet())\n\t\t\t\tsheet = rangeParts[0].replace(/'/g,\"\");\n\t\t\tcode = rangeParts[1];\n\t\t\tparts = code.split(\":\");\n\t\t}\n\t\telse\n\t\t\treturn null;\n\t} \n\n\tconst d1 = adress(parts[0]);\n\tconst d2 = adress(parts[1]);\n\n\tif(d1[0] && d1[1] && d2[0] && d2[1])\n\t\treturn [d1[0], d1[1], d2[0], d2[1], sheet];\n}\n\n\nexport function escapeSheet(sheet){\n\treturn sheet.indexOf(\" \") == -1 ? sheet : `'${sheet}'`;\n}\n\nexport function toRange(x,y,x2,y2,sheet){\n\treturn (sheet?(escapeSheet(sheet)+\"!\"):\"\")+encode[y]+x+\":\"+encode[y2]+x2;\n}\nexport function toSheetRange(x,y,sheet){\n\treturn (sheet?(escapeSheet(sheet)+\"!\"):\"\")+x+\":\"+y;\n}\n\nexport function rangeObj(text, view){\n\tif (typeof text === \"object\") return text;\n\tconst a = range(text, view);\n\treturn { start:{ row:a[0], column:a[1]}, end:{ row:a[2], column:a[3] }, sheet: a[4] };\n}\n\nexport function eachRange(text, view, callback, data){\n\tconst range = rangeObj(text);\n\tfor (let row = range.start.row; row <= range.end.row; row++) {\n\t\tfor (let column = range.start.column; column <= range.end.column; column++) {\n\t\t\tcallback(view, {row: row, column: column}, data);\n\t\t}\n\t}\n}\n\nexport function isRange(text){\n\tif(typeof text == \"string\"){\n\t\tconst cells = text.split(\":\");\n\t\tif(cells.length == 2){\n\t\t\tfor(let i = 0; i < cells.length; i++){\n\t\t\t\tconst parts = cells[i].split(\"!\");\n\t\t\t\tif(!isCell(parts.pop()))\n\t\t\t\t\treturn;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t}\n}\n\nconst cellTest = /^[A-Z]+[0-9]+$/;\nexport function isCell(text){\n\treturn cellTest.test(text);\n}\n\nexport function changeRange(text,name,inc,start){\n\tlet updated = false;\n\n\tif(isRange(text)){\n\t\tlet [r1,c1,r2,c2,sheet] = range(text);\n\n\t\t//ranges like B2:A1\n\t\tif(r1 > r2)\n\t\t\t[r1, r2] = [r2, r1];\n\t\tif(c1 > c2)\n\t\t\t[c1, c2] = [c2, c1];\n\n\t\tif (name === \"row\" && start.row <= r2){\n\t\t\tif((inc < 0 && start.row < r1) || (inc > 0 && start.row <= r1))\n\t\t\t\tr1 += inc;\n\t\t\tr2 += inc;\n\n\t\t\tif(r2 0 && start.column <= c1))\n\t\t\t\tc1 += inc;\n\t\t\tc2 += inc;\n\n\t\t\tif(c2 \"\",\n\t\"text-align\": {\n\t\tleft: () => \"justify-content:flex-start;\",\n\t\tcenter: () => \"justify-content:center;text-align:center;\",\n\t\tright: () => \"justify-content:flex-end;text-align:right;\"\n\t},\n\t\"vertical-align\": {\n\t\ttop: () => \"align-items:flex-start;\",\n\t\tmiddle: () => \"align-items:center;\",\n\t\tbottom: () => \"align-items:flex-end;\"\n\t},\n\twrap: {\n\t\twrap: ()=> {\n\t\t\treturn \"white-space: normal !important;\";\n\t\t}\n\t},\n\t\"border-left\": obj => {\n\t\treturn getBorderCss(\"border-left\", obj);\n\t},\n\t\"border-top\": obj => {\n\t\treturn getBorderCss(\"border-top\", obj);\n\t},\n\t\"border-right\": obj => {\n\t\treturn getBorderCss(\"border-right\", obj);\n\t},\n\t\"border-bottom\": obj => {\n\t\treturn getBorderCss(\"border-bottom\", obj);\n\t},\n\t\"font-weight\": obj => {\n\t\t//Roboto bold - font-weight:500 (looks better, than 700). Roboto is default font for material skins.\n\t\tif(obj[\"font-weight\"] == \"bold\"){\n\t\t\tconst family = obj[\"font-family\"] || defaultStyles[\"font-family\"];\n\t\t\treturn \"font-weight:\" + (family == \"'Roboto', sans-serif\" ? 500 : 700) + \";\";\n\t\t}\n\t\treturn \"\";\n\t},\n\tunderline: obj => {\n\t\tconst underline = obj.underline == \"underline\" ? \"underline\" : \"\";\n\t\tif(underline){\n\t\t\tconst strike = obj.strike == \"strike\" ? \"line-through\" : \"\";\n\t\t\treturn `text-decoration: ${underline} ${strike};`;\n\t\t}\n\t\treturn \"\";\n\t},\n\tstrike: obj => {\n\t\tif(obj.underline != \"underline\" && obj.strike == \"strike\")\n\t\t\treturn \"text-decoration: line-through;\";\n\t\treturn \"\";\n\t},\n\tindent: obj => {\n\t\tconst count = obj.indent * 1;\n\t\tif(count > 0){\n\t\t\tconst pos = obj[\"text-align\"] == \"right\" ? \"right\" : \"left\";\n\t\t\treturn { innerCss: `margin-${pos}:${count * 8 + 12}px;` }; // 12 - default cell margin\n\t\t}\n\t}\n};\n\nfunction getBorderCss(pos, obj){\n\tlet border = obj[pos];\n\tif(border){\n\t\tlet [color, type] = border.split(\",\");\n\n\t\ttype = type || \"thin\";\n\t\tlet size = \"1px\";\n\t\tif(type == \"medium\")\n\t\t\tsize = \"2px\";\n\t\telse if(type == \"thick\" || type == \"double\")\n\t\t\tsize = \"3px\";\n\n\t\tif([\"thin\", \"medium\", \"thick\"].indexOf(type) != -1)\n\t\t\ttype = \"solid\";\n\n\t\treturn `${pos}: ${size} ${type} ${color} !important;`;\n\t}\n\treturn \"\";\n}\n\nconst border_checks = {\n\t\"border-left\":\t\tfunction(cell, area, mode){ return cell.column == area.start.column || mode ==\"no\"; },\n\t\"border-right\":\t\tfunction(cell, area, mode){ return cell.column == area.end.column || mode == \"all\" || mode ==\"no\"; },\n\t\"border-top\":\t\tfunction(cell, area , mode){ return cell.row == area.start.row || mode ==\"no\"; },\n\t\"border-bottom\":\tfunction(cell, area, mode){ return cell.row == area.end.row || mode == \"all\"|| mode ==\"no\"; }\n};\n\nconst _style_handlers = {\n\t\"borders\": function(view, style, value, cell){\n\t\tconst area = view.$$(\"cells\").getSelectArea();\n\t\tvalue = value.split(\",\");\n\t\tconst type = value[0];\n\t\tlet color = value[1];\n\t\tlet lineStyle = value[2];\n\n\t\tvar modes = [\"border-left\", \"border-right\", \"border-bottom\", \"border-top\"];\n\n\t\tif(type == \"top-bottom\"){\n\t\t\tmodes = [\"border-top\",\"border-bottom\"];\n\t\t}\n\t\telse if (type != \"no\" && type != \"all\" && type != \"outer\")\n\t\t\tmodes = [\"border-\"+type];\n\n\t\tfor (var i = 0; i < modes.length; i++){\n\t\t\tvar mode = modes[i];\n\t\t\tlet result = view.callEvent(\"onAction\", [\"check-borders\", {row:cell.row, column:cell.column, area, type, mode}]);\n\t\t\tif (result === true || border_checks[mode](cell, area, type)){\n\t\t\t\tconst border = type == \"no\" ? \"\" : `${color},${lineStyle}`;\n\t\t\t\tstyle = _updateStyle(view, style, mode, border, cell);\n\t\t\t}\n\t\t}\n\t\treturn style;\n\t}\n};\n\nvar sizeEl;\nexport function init(view){\n\tview.attachEvent(\"onStyleSet\", (name, value) => _applyStyles(view, name, value));\n\tview.attachEvent(\"onDataParse\", (data) => _parse(view, data));\n\tview.attachEvent(\"onDataSerialize\", (data) => _serialize(view, data));\n\tview.attachEvent(\"onReset\", () => reset(view));\n\tview.attachEvent(\"onUndo\", (type, row, column, style) => {\n\t\tif(type == \"style\")\n\t\t\t_undoStyle(view, row, column, style);\n\t});\n\n\treset(view);\n\n\tif (!sizeEl)\n\t\tsizeEl = webix.html.create(\"DIV\", { style:\"visibility:hidden; position:absolute; top:0px; left:0px; height:auto;\"}, \"\");\n}\n\nfunction reset(view){\n\tview._styles = {};\n\tview._styles_cache = {};\n\tview._styles_max = 1;\n\n\tlet prefix = \".wss_\"+view.$index;\n\twebix.html.removeStyle(prefix);\n}\n\nexport function getStyle(view, cell){\n\tconst obj = view._mPage.getCell(cell.row-1, cell.column-1);\n\tconst span = view.$$(\"cells\").getSpan(cell.row, cell.column);\n\n\tif(span && span[0] == cell.row && span[1] == cell.column){\n\t\tconst spanStyles = span[5].split(\" \");\n\t\tfor (let i = 0; i < spanStyles.length; i++){\n\t\t\tconst spanStyle = view._styles[spanStyles[i]];\n\t\t\tif(spanStyle)\n\t\t\t\treturn spanStyle;\n\t\t}\n\t}\n\n\tif (obj && obj.style)\n\t\treturn view._styles[obj.style];\n\n\treturn null;\n}\n\nexport function getFormat(view, row, column){\n\tvar obj = view._mPage.getCell(row-1, column-1);\n\treturn (obj && obj.format) || \"\";\n}\n\n// undo\nfunction _undoStyle(view, row, column, style){\n\tvar cell = {row: row, column: column};\n\tsetStyle(view, cell, style);\n}\n\nfunction _serialize(view, obj){\n\tvar styles = [];\n\n\tfor (var key in view._styles_cache)\n\t\tstyles.push([view._styles_cache[key].id, key]);\n\n\tobj.styles = styles;\n}\n\nexport function addStyle(view, props, origin){\n\tvar style = {\n\t\tprops: styleFromText( style_names.map(()=>\"\").join(\";\") )\n\t};\n\n\tif (origin)\n\t\tfor (var key in origin.props)\n\t\t\tstyle.props[key] = origin.props[key];\n\n\tfor (let key in props)\n\t\tstyle.props[key] = props[key];\n\n\n\tstyle.text = styleToText(style);\n\tvar cache = view._styles_cache[style.text];\n\tif (cache)\n\t\treturn cache;\n\n\t_addStyle(view, style);\n\n\treturn style;\n}\n\nfunction _parse(view, obj){\n\tif (obj.styles)\n\t\tfor (let i=0; i < obj.styles.length; i++){\n\t\t\tvar styleObj = obj.styles[i];\n\t\t\tvar style = {\n\t\t\t\tid: styleObj[0],\n\t\t\t\ttext:styleObj[1],\n\t\t\t\tprops: styleFromText(styleObj[1])\n\t\t\t};\n\n\t\t\t_addStyle(view, style, true);\n\t\t}\n\n\tfor (let i = 0; i < obj.data.length; i++){\n\t\tvar [row, column, , css] = obj.data[i];\n\n\t\tif (css)\n\t\t\tupdate_style_data(view, row, column, view._styles[css]);\n\t}\n}\n\nfunction _applyStyles(view, name, value){\n\tgroup.set(function(){\n\t\tview.eachSelectedCell(function(cell){\n\t\t\tconst span = view.$$(\"cells\").getSpan(cell.row, cell.column);\n\t\t\tif(!span || (span && span[0] == cell.row && span[1] == cell.column))\n\t\t\t\t_applyCellStyles(view, cell, name, value);\n\t\t});\n\t});\n\tview.refresh();\n}\n\nfunction _applyCellStyles(view, cell, name, value){\n\tconst ostyle = getStyle(view, cell);\n\n\tif(name == \"indent\"){\n\t\tconst oldVal = ((ostyle && ostyle.props[name]) || 0) * 1;\n\n\t\tif(!oldVal && value == -1)\n\t\t\treturn;\n\n\t\tvalue += oldVal;\n\t}\n\n\tconst nstyle = _updateStyle(view, ostyle, name, value, cell);\n\n\tif (nstyle && nstyle != ostyle)\n\t\t_setStyle(view, cell, nstyle, ostyle, true);\n}\n\nfunction _updateStyle(view, style, name, value, cell){\n\n\tif(_style_handlers[name]){\n\t\treturn _style_handlers[name](view, style, value, cell);\n\t}\n\n\tif (style && style.props[name] == value) return style;\n\n\tvar nstyle = { text:\"\", id:0, props: (style?webix.copy(style.props):{}) };\n\tnstyle.props[name] = value;\n\tnstyle.text = styleToText(nstyle);\n\n\tvar cache = view._styles_cache[nstyle.text];\n\tif (cache)\n\t\treturn cache;\n\n\t_addStyle(view,nstyle);\n\n\treturn nstyle;\n}\n\nfunction update_style_data(view, row, column, style){\n\tconst obj = view._mPage.getCell(row-1, column-1, true);\n\tobj.style = style && style.id;\n\tobj.format = style && style.props.format;\n}\n\nexport function setStyle(view, cell, style){\n\tconst old = getStyle(view, cell);\n\treturn _setStyle(view, cell, style, old);\n}\n\nexport function setRangeStyle(view, range, style) {\n\teachRange(range, view, _setStyle, style);\n}\n\nexport function getTextSize(view, text, css, baseWidth){\n\tsizeEl.innerHTML = text;\n\tsizeEl.style.width = baseWidth ? baseWidth+\"px\" : \"auto\";\n\n\tsizeEl.className = \"webix_table_cell webix_cell \"+css;\n\tview._table.$view.appendChild(sizeEl);\n\n\tconst width = Math.max(0, sizeEl.offsetWidth+1);\n\tconst height = Math.max(0, sizeEl.offsetHeight+1);\n\n\tview._table.$view.removeChild(sizeEl);\n\tsizeEl.innerHTML = \"\";\n\n\treturn { width, height };\n}\n\nfunction _setStyle(view, cell, style, old, toolbar){\n\tif(view.callEvent(\"onBeforeStyleChange\", [cell.row, cell.column, style, old])){\n\t\tgroup.set(()=>{\n\t\t\tconst format = style && style.props.format || null;\n\t\t\tconst oldFormat = old && old.props.format || null;\n\t\t\tconst formatChanged = format != oldFormat;\n\t\t\tif(!formatChanged || formatChanged && view.callEvent(\"onBeforeFormatChange\", [cell.row, cell.column, format, oldFormat])){\n\t\t\t\tupdate_style_data(view, cell.row, cell.column, style);\n\t\t\t\tview.callEvent(\"onStyleChange\", [cell.row, cell.column, style, old]);\n\n\t\t\t\tif(formatChanged)\n\t\t\t\t\tview.callEvent(\"onFormatChange\", [cell.row, cell.column, format, oldFormat]);\n\n\t\t\t\tview.saveCell(cell.row,cell.column);\n\n\t\t\t\tconst sel = view.getSelectedId();\n\t\t\t\tif(!toolbar && sel && sel.row == cell.row && sel.column == cell.column)\n\t\t\t\t\tview.callEvent(\"onCommand\", [{id:\"toolbar-update\"}]);\n\t\t\t}\n\t\t});\n\t}\n}\n\nfunction _buildCssString(style) {\n\tlet css = \"\";\n\tlet innerCss = \"\";\n\n\tfor (var key in style){\n\t\tif (style[key]){\n\t\t\tif( _style_map[key]){\n\t\t\t\tif(_style_map[key][style[key]])\n\t\t\t\t\tcss += _style_map[key][style[key]](style);\n\t\t\t\telse if(typeof _style_map[key] == \"function\"){\n\t\t\t\t\tconst outCss = _style_map[key](style);\n\n\t\t\t\t\tif(typeof outCss == \"object\"){\n\t\t\t\t\t\tcss += outCss.css || \"\";\n\t\t\t\t\t\tinnerCss += outCss.innerCss || \"\";\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tcss += _style_map[key](style);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t\tcss+= key+\":\"+style[key]+\";\";\n\t\t}\n\t}\n\n\treturn {css, innerCss};\n}\n\nfunction _addStyle(view, style, silent){\n\tview._styles_cache[style.text] = style;\n\n\twhile (!style.id || view._styles[style.id])\n\t\tstyle.id = \"wss\"+(view._styles_max++);\n\tview._styles[style.id] = style;\n\n\tconst {css, innerCss} = _buildCssString(style.props);\n\tconst prefix = \".wss_\"+view.$index;\n\twebix.html.addStyle(prefix+\" .\"+style.id+\"{\"+css+\"}\", prefix);\n\twebix.html.addStyle(prefix+\" .\"+style.id+\" div:first-child{\"+innerCss+\"}\", prefix);\n\n\tif (!silent)\n\t\tsave(view, \"styles\", { name:style.id, text: style.text } );\n}\n\nexport function styleToText(style){\n\tvar id = [];\n\tfor (var i=0; irows) rows=line[0];\n\t\tif (line[1]>cols) cols=line[1];\n\t}\n\n\tif(spans)\n\t\tfor(let i = 0; i < spans.length; i++){\n\t\t\t// spans[i] - [ row, column, colCount, rowCount ]\n\t\t\tconst spanEndRow = spans[i][0] + spans[i][3] - 1;\n\t\t\tconst spanEndCol = spans[i][1] + spans[i][2] - 1;\n\n\t\t\tif(spanEndRow > rows) rows = spanEndRow;\n\t\t\tif(spanEndCol > cols) cols = spanEndCol;\n\t\t}\n\n\treturn [rows*1, cols*1];\n}","import {addStyle, styleFromText} from \"./styles\";\nimport {getJsDateFromExcel} from \"../mathematics/methods\";\nimport group from \"./undo_group\";\nimport * as arr from \"../helpers/array\";\n\nexport function init(view){\n\tview.attachEvent(\"onDataParse\", (data) => load(view, data));\n\tview.attachEvent(\"onDataSerialize\", (data, config) => serialize(view, data, config));\n}\n\nexport let formatHelpers = {};\nexport let currencies = [];\nconst defaultFormats = {common:1};\n\n\nexport let formatsCount;\nexport let formatCache;\n\nlet formats;\nlet formatSources;\n\nfunction getCurrencySymbol(format){\n\treturn webix.template(format)(\"\");\n}\n\nexport function setDefaultFormats(){\n\tconst formatsLocale = webix.i18n.spreadsheet.formats;\n\n\tcurrencies = [ webix.i18n.price ];\n\tcurrencies = currencies.concat(webix.copy(formatsLocale.currencies));\n\n\tcurrencies = currencies.map(format => {\n\t\tconst id = getCurrencySymbol(format);\n\t\treturn {\n\t\t\tformat,\n\t\t\tid,\n\t\t\tvalue: id.trim()\n\t\t};\n\t});\n\n\tformats = {};\n\tformatsCount = 0;\n\tformatSources = {};\n\tformatCache = {};\n\tformatHelpers = {\n\t\tprice : {\n\t\t\tgetFormat : function(value, extra){\n\t\t\t\textra.css = \"webix_ssheet_format_price\";\n\t\t\t\tconst minusSign = value < 0 ? \"-\" : \"\";\n\t\t\t\tif(minusSign) value = Math.abs(value);\n\t\t\t\treturn minusSign+webix.i18n.priceFormat(value);\n\t\t\t},\n\t\t\tvalues:webix.extend({\n\t\t\t\tzeros: webix.i18n.priceSettings.decimalSize, \n\t\t\t\tsymbol: webix.i18n.priceFormat(\"\"),\n\t\t\t\tseparator: 1, negative:1, type: \"price\"\n\t\t\t}, getDelimiters(\"price\"))\n\t\t},\n\t\t\"int\" : {\n\t\t\tgetFormat : function(value, extra){\n\t\t\t\textra.css = \"webix_ssheet_format_int\";\n\t\t\t\treturn webix.i18n.numberFormat(value);\n\t\t\t},\n\t\t\tvalues:webix.extend({\n\t\t\t\tzeros: webix.i18n.decimalSize,\n\t\t\t\tseparator: 1, negative:1, type: \"int\",\n\t\t\t}, getDelimiters(\"int\"))\n\t\t},\n\t\tpercent : {\n\t\t\tgetFormat : function(value, extra){\n\t\t\t\textra.css = \"webix_ssheet_format_percent\";\n\t\t\t\treturn Math.round(value*100)+\"%\";\n\t\t\t},\n\t\t\tvalues:webix.extend({\n\t\t\t\tzeros: 0, separator: 0, negative:1, type: \"percent\",\n\t\t\t}, getDelimiters(\"percent\"))\n\t\t},\n\t\tdate : {\n\t\t\tgetFormat : function(value, extra){\n\t\t\t\textra.css = \"webix_ssheet_format_date\";\n\t\t\t\treturn format2code(formatsLocale.dateFormat, getDelimiters(\"date\"))(value);\n\t\t\t},\n\t\t\tvalues: { type:\"date\", date:formatsLocale.dateFormat }\n\t\t},\n\t\tstring : {\n\t\t\tgetFormat : function(value, extra){\n\t\t\t\textra.css = \"webix_ssheet_format_text\";\n\t\t\t\treturn value;\n\t\t\t},\n\t\t\tvalues: { type:\"string\" }\n\t\t}\n\t};\n\n\tfor(let i in formatHelpers){\n\t\tdefaultFormats[i] = 1;\n\t\tformatSources[i] = serializeFormat(formToValues(i, formatHelpers[i].values));\n\t\tformatCache[formatSources[i]] = i;\n\t}\n}\n\nexport function getDelimiters(type){\n\tif(type == \"price\")\n\t\treturn { groupSign:webix.i18n.priceSettings.groupDelimiter, decimalSign:webix.i18n.priceSettings.decimalDelimiter };\n\telse \n\t\treturn { groupSign:webix.i18n.groupDelimiter, decimalSign:webix.i18n.decimalDelimiter };\n}\n\nfunction serialize(view, data){\n\tconst formats = [];\n\n\tfor(let i in formatSources){\n\t\tif(!defaultFormats[i]) //exclude default formats\n\t\t\tformats.push([i,formatSources[i]]);\n\t}\n\tdata.formats = formats;\n}\n\nfunction load(view,data){\n\tvar i,\n\t\tformats = data.formats;\n\n\tif(formats)\n\t\tfor(i = 0; i < formats.length; i++)\n\t\t\tcreateFormatName(formats[i][1],formats[i][0]);\n}\n\nexport function getFormat(name){\n\treturn formatHelpers[name] ? formatHelpers[name].getFormat : formatHelpers[name];\n}\n\nexport function getFormatSource(name, toexcel){\n\tif(toexcel){\n\t\tlet parsed = parseFormat({values: formatHelpers[name].values, format: formatSources[name]});\n\t\treturn serializeFormat(parsed, true);\n\t}\n\telse\n\t\treturn formatSources[name];\n}\n\nfunction createFormatName(str, values){\n\tif (formatCache[str]) return formatCache[str];\n\n\tlet name = typeof(values) == \"object\" ? \"fmt\"+(formatsCount) : values;\n\tformatsCount++;\n\n\tformats[name] = str;\n\n\tif(typeof(values) == \"string\")\n\t\tvalues = formatToForm(str);\n\n\twebix.extend(\n\t\tvalues,\n\t\tgetDelimiters(\"custom\")\n\t);\n\n\tformatHelpers[name] = {\n\t\tgetFormat:format2code(str, {decimalSign: values.decimalSign, groupSign: values.groupSign}),\n\t\tvalues: values\n\t};\n\n\tformatSources[name] = str;\n\tformatCache[str] = name;\n\n\treturn name;\n}\n\nexport function addFormat(view, row, column, format, type){\n\tif(!type)\n\t\ttype = {format:format, type: \"custom\"};\n\tconst old = view.getStyle(row, column);\n\tconst nev = addStyle(view, { format:createFormatName(format, type) }, old);\n\tview.setStyle(row, column, nev);\n}\n\nexport function removeFormat(view, row, column){\n\tconst old = view.getStyle(row, column);\n\tconst nev = addStyle(view, { format:\"\" }, old);\n\tview.setStyle(row, column, nev);\n}\n\nfunction splitFormat(str){\n\tvar conditional = str.match(/.*\\[[><=].*/g);\n\tvar parts = str.split(\";\");\n\tif (!conditional){\n\t\tif (parts.length > 1){\n\t\t\tparts[0] = (parts.length > 2 ? \"[>0]\" : \"[>=0]\")+parts[0];\n\t\t\tparts[1] = \"[<0]\"+parts[1];\n\t\t\tif (parts[2])\n\t\t\t\tparts[2] = \"[=0]\"+parts[2];\n\t\t}\n\t}\n\treturn parts;\n}\n\nexport function format2code(str, delimiters){\n\tconst errorMessage = webix.i18n.spreadsheet.table[\"format-error\"];\n\tlet parts = splitFormat(str);\n\tlet code = [\"var spaces = \\\"            \\\";\"];\n\tfor (var i=0; i 0, delimiters));\n\t}\n\n\tlet method;\n\ttry {\n\t\tmethod = new Function(\"val\",\"extra\", `try{ ${code.join(\"\\n\")} return val; } catch(err) { return \"${errorMessage}\"; }`);\n\t}\n\tcatch(err){\n\t\tmethod = function(){return errorMessage;};\n\t}\n\treturn method;\n}\n\nfunction genCode(check, color, symbol, line, ind, isAbs, delimiters){\n\tvar str = \"\";\n\tif (check){\n\t\tif (!ind) str+=\"if\"; else str+=\"else if\";\n\t\tif (check[0] === \"=\") check = \"=\"+check;\n\t\tstr+=\"(val\"+check+\"){\";\n\t\tif (isAbs) str+=\"val = Math.abs(val);\";\n\t}\n\tif (color)\n\t\tstr+=\"extra.css = \\\"webix_ssheet_format_\"+color+\"\\\";\";\n\n\tstr += genFormatCode(line, delimiters, symbol);\n\n\treturn str+(check?\"}\":\"\");\n}\n\nconst dateTypes = {\n\t\"yy\": \"%y\",\n\t\"yyyy\": \"%Y\",\n\t\"m\": \"%n\",\n\t\"mm\": \"%m\",\n\t\"mmm\": \"%M\",\n\t\"mmmm\": \"%F\",\n\t\"mmmmm\":\"%F\", //not supported by webix\n\t\"d\": \"%j\",\n\t\"dd\": \"%d\",\n\t\"ddd\": \"%D\",\n\t\"dddd\": \"%l\"\n};\n\nconst timeTypes = {\n\t\"h\": \"%G\",\n\t\"hh\": \"%H\",\n\t\"m\": \"%i\", //not supported by webix\n\t\"mm\": \"%i\",\n\t\"s\": \"%s\", //not supported by webix\n\t\"ss\": \"%s\",\n\t\"AM/PM\": \"%A\"\n};\n\nconst dateOrder = Object.keys(dateTypes).sort((a, b) => b.length - a.length);\nconst timeOrder = Object.keys(timeTypes).sort((a, b) => b.length - a.length);\n\nfunction excelDateToWebix(text, lastDateType){\n\tconst typesOrder = [\n\t\t{name:\"date\", order:dateOrder, types:dateTypes}, \n\t\t{name:\"time\", order:timeOrder, types:timeTypes}\n\t];\n\n\t// \"m\"/\"mm\" format can be either date (%n/%m) or time (%i), so check last date type\n\tconst basedOnLast = /^m{1,2}(?!m)/.test(text);\n\tif(basedOnLast && lastDateType != \"date\")\n\t\ttypesOrder.reverse();\n\n\tfor(let i = 0; i < typesOrder.length; i++){\n\t\tconst type = typesOrder[i];\n\t\tfor(let j = 0; j < type.order.length; j++)\n\t\t\tif(text.indexOf(type.order[j]) == 0)\n\t\t\t\treturn {\n\t\t\t\t\tformat: type.types[type.order[j]],\n\t\t\t\t\tlength: type.order[j].length,\n\t\t\t\t\ttype: type.name\n\t\t\t\t};\n\t}\n}\n\nfunction genFormatCode(line, delimiters, symbol){\n\tif (!line)\n\t\treturn \"return val;\";\n\n\tlet str = \"return \\\"\\\"\";\n\n\tlet isQuote;\n\tlet fmt = \"\";\n\tlet multiply = 1;\n\tlet comma, numberPlaceholder, textPlaceholder;\n\tlet date = [];\n\tlet lastDateType = \"date\";\n\n\tlet symbolPos;\n\tif(symbol){\n\t\tconst currency = arr.find(currencies, val => val.id == symbol);\n\t\tsymbolPos = \"left\";\n\n\t\tif(currency)\n\t\t\tsymbolPos = arr.findIndex(currency.format.split(\"{obj}\"), val => val) ? \"right\" : \"left\";\n\t}\n\n\tfor (var i=0; i {\n\t\t\t\tswitch(datePart){\n\t\t\t\t\tcase \"%G\": return \"%g\";\n\t\t\t\t\tcase \"%H\": return \"%h\";\n\t\t\t\t\tdefault: return datePart;\n\t\t\t\t}\n\t\t\t});\n\n\t\tfor(let i = 0; i < date.length; i++)\n\t\t\tstr = str.replace(\"/*date*/\", `+dateParts[${i}]`);\n\t}\n\n\treturn `\n\t\t${date.length ? `val = (${getJsDateFromExcel})(val); var dateParts = webix.Date.dateToStr(\"${date.join(\";\")}\")(val).split(\";\");` : \"\"}\n\t\t${fmt ? `${numberFormat(fmt, comma, delimiters, multiply)};` : \"\"}\n\t\t${str};`;\n}\n\nfunction numberFormat(fmt, comma, delimiters, multiply){\n\tvar str = `if(/^@+$/.test(\"${fmt}\") || isNaN(val)){ var fmt = val; }else {`;\n\tvar decimal = delimiters.decimalSign;\n\tvar [left, right] = getParts(fmt, decimal);\n\tright = (right || \"\").split(\"\").reverse().join(\"\");\n\n\t//calculate indexes in mask\n\tvar lzeros = left.indexOf(\"0\"); if (lzeros>=0) lzeros = left.length - lzeros;\n\tvar lfills = left.indexOf(\"?\"); if (lfills>=0) lfills = left.length - lfills;\n\tvar rzeros = right.indexOf(\"0\"); if (rzeros>=0) rzeros = right.length - rzeros;\n\tvar rfills = right.indexOf(\"?\"); if (rfills>=0) rfills = right.length - rfills;\n\tvar rmax = right.length;\n\n\tstr += `\n\tval = val*${multiply};\n\tvar parts = val.toFixed(${rmax}).split(\".\");\n\tvar left = parts[0];\n\tvar lsize = left.length; \n\tvar right = parts[1] || \"\";\n\tif (left.length < ${lzeros}) left = \"0000000000\".substr(0, ${lzeros} - left.length)+left;\n\tif (left.length < ${lfills}) left = spaces.substr(0, 6*(${lfills} - left.length))+left;\n\tif (${comma}) {\n\t\tvar buf = [];\n\t\tvar start = 3;\n\t\twhile (lsize > start) { buf.push(left.substr(left.length-start,3)); start+=3; }\n\t\tvar last = left.substr(0,left.length-start+3);\n\t\tif (last !== \"-\")\n\t\t\tbuf.push(last);\n\t\telse\n\t\t\tbuf.push(\"-\"+buf.pop());\n\n\t\tleft = buf.reverse().join(\"${delimiters.groupSign}\");\n\t}\n\tif (right){\n\t\tvar zpoint = right.length-1;\n\t\twhile (zpoint >= ${rzeros}){\n\t\t\tif (right[zpoint] !== \"0\"){\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tzpoint--;\n\t\t}\n\n\t\tif (zpoint <= right.length)\n\t\t\tright = right.substr(0, zpoint+1);\n\n\t\tif (right.length < ${rfills}){\n\t\t\tright += spaces.substr(0, 6*(${rfills} - right.length));\n\t\t}\n\t}\n\tvar fmt = left+(right?\"${decimal}\":\"\")+right;\n\t`;\n\n\treturn str+\"}\\n\";\n}\n\nfunction updateDecimals(fmt, inc, val){\n\tlet parsed = parseFormat(fmt);\n\tfor(let i = 0; i < parsed.length; i++){\n\t\tif(parsed[i].decimals){\n\t\t\tif(inc>0)\n\t\t\t\tparsed[i].right.placeholders += Array(inc+1).join(\"0\");\n\t\t\telse\n\t\t\t\tparsed[i].right.placeholders = parsed[i].right.placeholders.slice(0, inc);\n\t\t}\n\t\telse{\n\t\t\tconst withoutText = !parsed[i].left.text && !parsed[i].right.text;\n\t\t\tconst withoutPlaceholders = !parsed[i].left.placeholders && !parsed[i].right.placeholders;\n\t\t\t//check if cell value have decimals (not cell format)\n\t\t\tif(inc < 0 && withoutText && withoutPlaceholders && webix.rules.isNumber(val) && val.indexOf(\".\") > -1){\n\t\t\t\tparsed[i].left.placeholders = \"0\";\n\t\t\t\tparsed[i].right.placeholders = Array(val.split(\".\")[1].length).join(Array(inc+1).join(\"0\"));\n\t\t\t}\n\t\t\t//ignore text\n\t\t\telse if(inc > 0 && (parsed[i].left.placeholders || withoutText)){\n\t\t\t\tparsed[i].left.placeholders = parsed[i].left.placeholders || \"0\";\n\t\t\t\tparsed[i].right.placeholders = Array(inc+1).join(\"0\");\n\t\t\t\tparsed[i].decimals = true;\n\t\t\t}\n\t\t}\n\t\tparsed[i].decimals = parsed[i].right.placeholders.length > 0;\n\t}\n\n\treturn serializeFormat(parsed);\n}\n\nexport function changeAreaDecimals(view, inc, row, column){\n\tlet cells = getCells(view, row, column);\n\tif(cells.length == 0)\n\t\treturn;\n\n\tconst obj = view._mPage.getCell(cells[0].row-1, cells[0].column-1);\n\tconst oldFormat = obj && obj.format;\n\tconst value = (obj && obj.value) ? obj.value.toString() : \"\";\n\t\n\tif(webix.rules.isNumber(value) || oldFormat){\n\t\tgroup.set(function(){\n\t\t\tfor(let i = 0; i < cells.length; i++)\n\t\t\t\tchangeCellDecimals(view, inc, cells[i]);\n\t\t});\n\t\tview.refresh();\n\n\t\tlet format = getFormatName(view, cells[0].row, cells[0].column) || \"common\";\n\t\tformat = isCustom(format) ? \"custom\" : format;\n\t\tview.callEvent(\"onCommand\", [{id:\"toolbar-update\", name:\"format\", value:format}]);\n\t}\n}\n\nexport function changeCellDecimals(view, inc, cell){\n\tlet format;\n\tconst obj = view._mPage.getCell(cell.row-1, cell.column-1);\n\tconst oldFormat = obj && obj.format;\n\tconst value = (obj && obj.value) ? obj.value.toString() : \"\";\n\n\tif(oldFormat){\n\t\tformat = webix.copy({values:formatHelpers[oldFormat].values, format:getFormatSource(oldFormat)});\n\t\tformat.format = updateDecimals(format, inc, value);\n\n\t\tif(format.values && format.values.hasOwnProperty(\"zeros\"))\n\t\t\tformat.values.zeros = Math.max(format.values.zeros+inc, 0);\n\t}\n\t//add format for cell without format\n\telse{\n\t\tconst zeros = webix.rules.isNumber(value) && value.split(\".\")[1] ? Math.max(value.split(\".\")[1].length+inc, 0) : Math.max(inc, 0);\n\n\t\tformat = {values:{negative:1, zeros:zeros, separator:0, type:\"int\"}};\n\t\tformat.format = serializeFormat(formToValues(format.values.type, format.values));\n\t}\n\taddFormat(view, cell.row, cell.column, format.format, format.values);\n}\n\nexport function isCustom(name){\n\treturn !defaultFormats[name];\n}\n\nexport function formToValues(type, formValues){\n\tif(type == \"string\")\n\t\treturn [{left:{text:\"@\"}}];\n\tif(formValues.date)\n\t\treturn [{left:{text:formValues.date}}];\n\n\tlet values = [{condition:\">=0\", left:{text:\"\"},right:{text:\"\"}}, {condition:\"<0\", left:{text:\"\"}, right:{text:\"\"}}];\n\twebix.extend(values, getDelimiters(type));\n\tvalues[0].right.placeholders = values[1].right.placeholders = formValues.zeros ? Array(formValues.zeros + 1).join(\"0\") : \"\";\n\tvalues[0].separator = values[1].separator = formValues.separator && type != \"percent\";\n\tvalues[0].left.placeholders = values[1].left.placeholders = values[0].separator ? \"#\"+values.groupSign +\"0\" : \"0\";\n\tvalues[0].decimals = values[1].decimals = formValues.zeros ? true : false;\n\tvalues[1].color = formValues.negative != 1 ? \"red\" : \"\";\n\tvalues[1].left.text += formValues.negative < 3 ? \"-\" : \"\";\n\tif(formValues.negative == 4)\n\t\tvalues[1].left.text += \"(\";\n\n\tif(type === \"percent\")\n\t\tvalues[0].right.text = values[1].right.text += \"%\";\n\telse if(type === \"price\"){\n\t\tconst symbolId = formValues.symbol;\n\t\tconst currency = arr.find(currencies, val => val.id == symbolId);\n\t\tconst pos = arr.findIndex(currency.format.split(\"{obj}\"), val => val) ? \"right\" : \"left\";\n\n\t\tvalues[0][pos].symbol = values[1][pos].symbol = symbolId;\n\t}\n\n\tif(formValues.negative == 4)\n\t\tvalues[1].right.text += \")\";\n\n\treturn values;\n}\n\nfunction formatToForm(format){\n\tconst formatsLocale = webix.i18n.spreadsheet.formats;\n\tconst dates = [\n\t\tformatsLocale.dateFormat,\n\t\tformatsLocale.timeFormat,\n\t\tformatsLocale.fullDateFormat,\n\t\tformatsLocale.longDateFormat\n\t];\n\tconst form = {format, type:\"custom\"};\n\n\tif(arr.find(dates, date => date == format)){\n\t\twebix.extend(form, {\n\t\t\ttype:\"date\", date:format\n\t\t}, true);\n\t}\n\telse{\n\t\tlet [first, second] = format.split(\";\");\n\t\tif(first && second){\n\t\t\tif(first.indexOf(\"[>=0]\") == 0 && second.indexOf(\"[<0]\") == 0){\n\t\t\t\tfirst = first.replace(\"[>=0]\", \"\");\n\t\t\t\tsecond = second.replace(\"[<0]\", \"\");\n\n\t\t\t\tlet red;\n\t\t\t\tif(second.indexOf(\"[red]\") == 0){\n\t\t\t\t\tsecond = second.replace(\"[red]\", \"\");\n\t\t\t\t\tred = true;\n\t\t\t\t}\n\n\t\t\t\tif(second[0] == \"-\"){\n\t\t\t\t\tsecond = second.substring(1);\n\t\t\t\t\tform.negative = red ? 2 : 1;\n\t\t\t\t}\n\t\t\t\telse if(red){\n\t\t\t\t\tif(second[0] == \"(\" && second[second.length-1] == \")\"){\n\t\t\t\t\t\tform.negative = 4;\n\t\t\t\t\t\tsecond = second.substring(1, second.length-1);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tform.negative = 3;\n\t\t\t\t}\n\n\t\t\t\tif(form.negative && first == second){\n\t\t\t\t\tlet type = \"int\";\n\t\t\t\t\tlet priceBrackets = first.indexOf(\"[$\") != -1;\n\n\t\t\t\t\tif(first[first.length-1] == \"%\"){\n\t\t\t\t\t\tfirst = first.substring(0, first.length-1);\n\t\t\t\t\t\ttype = \"percent\";\n\t\t\t\t\t}\n\t\t\t\t\telse{\n\t\t\t\t\t\tfor(let i = 0; i < currencies.length; i++){\n\t\t\t\t\t\t\tconst currency = currencies[i].id;\n\t\t\t\t\t\t\tlet isPrice;\n\n\t\t\t\t\t\t\tif(priceBrackets){\n\t\t\t\t\t\t\t\tif(first.indexOf(`[$${currency}]`) != -1){\n\t\t\t\t\t\t\t\t\tfirst = first.replace(`[$${currency}]`, \"\");\n\t\t\t\t\t\t\t\t\tisPrice = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if(first.indexOf(currency) != -1){\n\t\t\t\t\t\t\t\tfirst = first.replace(currency, \"\");\n\t\t\t\t\t\t\t\tisPrice = true;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif(isPrice){\n\t\t\t\t\t\t\t\ttype = \"price\";\n\t\t\t\t\t\t\t\tform.symbol = currency;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst delimiters = getDelimiters(type);\n\n\t\t\t\t\tif(first.indexOf(\"#\"+delimiters.groupSign) == 0){\n\t\t\t\t\t\tfirst = first.replace(\"#\"+delimiters.groupSign, \"\");\n\t\t\t\t\t\tform.separator = 1;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst [integer, decimal] = first.split(delimiters.decimalSign);\n\t\t\t\t\tif((!integer || integer == \"0\") && (!decimal || /^[0]+$/.test(decimal))){\n\t\t\t\t\t\tform.type = type;\n\t\t\t\t\t\tform.delimiters = delimiters;\n\t\t\t\t\t\tform.zeros = decimal ? decimal.length : 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn form;\n}\n\nexport function serializeFormat(values, toExcel){\n\tlet fmt = \"\";\n\tfor(let i = 0; i < values.length; i++){\n\t\tif(values[i].condition)\n\t\t\tfmt += \"[\"+values[i].condition+\"]\";\n\t\tif(values[i].color)\n\t\t\tfmt += \"[\"+values[i].color+\"]\";\n\n\t\tif(values[i].left){\n\t\t\tif(values[i].left.text){\n\t\t\t\tlet leftText = values[i].left.text;\n\t\t\t\tfmt += leftText;\n\t\t\t}\n\t\t\tif(values[i].left.symbol)\n\t\t\t\tfmt += \"[$\"+values[i].left.symbol+\"]\";\n\t\t\tif(values[i].left.placeholders){\n\t\t\t\tlet leftPlaceholders = values[i].left.placeholders;\n\t\t\t\tfmt += toExcel ? leftPlaceholders.replace(values.groupSign, \",\") : leftPlaceholders;\n\t\t\t}\n\t\t}\n\n\t\tif(values[i].decimals)\n\t\t\tfmt += toExcel ? \".\" : values.decimalSign;\n\n\t\tif(values[i].right){\n\t\t\tif(values[i].right.placeholders)\n\t\t\t\tfmt += values[i].right.placeholders;\n\t\t\tif(values[i].right.symbol)\n\t\t\t\tfmt += \"[$\"+values[i].right.symbol+\"]\";\n\t\t\tif(values[i].right.text){\n\t\t\t\tlet rightText = values[i].right.text;\n\n\t\t\t\tfmt += rightText;\n\t\t\t}\n\t\t}\n\t\tif(i != values.length - 1)\n\t\t\tfmt += \";\";\n\t}\n\treturn fmt;\n}\n\nfunction parseFormat(fmt){\n\tconst fmtParts = fmt.format.split(\";\");\n\tlet values = [];\n\n\tfor(let i = 0; i < fmtParts.length; i++){\n\t\tlet separated = separateFmt(fmtParts[i]);\n\t\tvalues[i] = {color:separated.color, condition:separated.condition ,left:{}, right:{}};\n\n\t\tconst format = separated.fmt;\n\n\t\tvalues.groupSign = fmt.values.groupSign;\n\t\tvalues.decimalSign = fmt.values.decimalSign;\n\n\t\tif(format.indexOf(values.groupSign) > -1)\n\t\t\tvalues[i].separator = true;\n\n\t\tconst sepFmtParts = getParts(format, values.decimalSign);\n\n\t\tlet left = sepFmtParts[0];\n\t\tlet right = sepFmtParts[1] || \"\";\n\n\t\tif(sepFmtParts[1])\n\t\t\tvalues[i].decimals = true;\n\n\t\tleft = getFmtPartValues(left, \"left\", values.groupSign);\n\t\tright = getFmtPartValues(right, \"right\", values.groupSign);\n\n\t\tvalues[i].left = {\n\t\t\ttext: left.leftText,\n\t\t\tplaceholders: left.placeholders\n\t\t};\n\n\t\tvalues[i].right = {\n\t\t\ttext: left.rightText + right.rightText,\n\t\t\tplaceholders: right.placeholders\n\t\t};\n\n\t\tconst symbol = separated.symbol;\n\t\tif(symbol){\n\t\t\tconst currency = arr.find(currencies, val => val.id == symbol);\n\t\t\tlet pos = \"left\";\n\n\t\t\tif(currency)\n\t\t\t\tpos = arr.findIndex(currency.format.split(\"{obj}\"), val => val) ? \"right\" : \"left\";\n\n\t\t\tvalues[i][pos].symbol = symbol;\n\t\t}\n\t}\n\treturn values;\n}\n\nfunction getFmtPartValues(fmtPart, type, groupSign){\n\tlet firstPlaceholder;\n\tif(type == \"left\"){\n\t\tfirstPlaceholder = fmtPart.match(/[#?0]/);\n\t\tfirstPlaceholder = firstPlaceholder ? firstPlaceholder.index : Infinity;\n\t}\n\n\tlet leftText = \"\";\n\tlet rightText = \"\";\n\tlet placeholders = \"\";\n\tfor(let k = 0; k < fmtPart.length; k++){\n\t\tif(!placeholder(fmtPart[k])){\n\t\t\tif(fmtPart[k] == groupSign && placeholder(fmtPart[k+1]) && placeholder(fmtPart[k-1])){\n\t\t\t\tplaceholders += fmtPart[k];\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif(type == \"left\")\n\t\t\t\tif(k < firstPlaceholder){\n\t\t\t\t\tleftText += fmtPart[k];\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\trightText += fmtPart[k];\n\t\t}\n\t\telse\n\t\t\tplaceholders += fmtPart[k];\n\t}\n\treturn {leftText: leftText, rightText: rightText, placeholders: placeholders};\n}\n\nfunction separateFmt(line){\n\tlet color = \"\";\n\tlet check = \"\";\n\tlet symbol = \"\";\n\n\tlet start = line.indexOf(\"[\");\n\tif (start != -1){\n\t\tif (line[1].match(/[><=]/)){\n\t\t\tlet end = line.indexOf(\"]\");\n\t\t\tcheck = line.substr(start+1, end-start-1);\n\t\t\tline = line.substr(end+1);\n\t\t}\n\t}\n\n\tstart = line.indexOf(\"[$\");\n\tif(start != -1){\n\t\tlet end = start + line.substr(start).indexOf(\"]\");\n\t\tsymbol = line.substr(start+2, end-start-2);\n\t\tline = line.substr(0, start)+line.substr(end+1);\n\t}\n\n\tstart = line.indexOf(\"[\");\n\tif (start != -1){\n\t\tlet end = line.indexOf(\"]\");\n\t\tcolor = line.substr(start+1, end-start-1);\n\t\tline = line.substr(end+1);\n\t}\n\treturn {condition:check, color, symbol, fmt:line};\n}\n\nfunction getCells(view, row, column){\n\tif(row && column){\n\t\tif (typeof row === \"object\" && typeof column === \"object\"){\n\t\t\tlet cells = [];\n\t\t\tfor (let r = row.row; r<=column.row; r++)\n\t\t\t\tfor (let c = row.column; c<=column.column; c++)\n\t\t\t\t\tcells.push({row: r, column: c});\n\t\t\treturn cells;\n\t\t}\n\t\telse\n\t\t\treturn [{row: row, column: column}];\n\t}\n\telse\n\t\treturn view.getSelectedId(true);\n}\n\nfunction placeholder(val){\n\treturn val === \"0\" || val === \"#\" || val === \"?\";\n}\n\nfunction getParts(str, decimal){\n\t// it is nessesary to use \"/\" before decimal to escape regex special characters\n\tconst match = str.match(\"[#?0][/\"+decimal+\"][#?0]\");\n\tif(match)\n\t\treturn [str.substring(0, match.index+1), str.substring(match.index+2)];\n\telse\n\t\treturn [str];\n}\n\n//simple check: take into account only first condition\nexport function checkFormat(format, type, checkTime){\n\tformat = format && format.fmt ? format.fmt : getFormatSource(format);\n\tif(!format) return;\n\tconst parts = splitFormat(format);\n\tconst separated = separateFmt(parts[0]).fmt;\n\n\tlet quot;\n\tif(separated)\n\t\tfor(let i = 0; i < separated.length; i++){\n\t\t\tif(separated[i] == \"\\\"\")\n\t\t\t\tquot = !quot;\n\t\t\tif(quot) continue;\n\n\t\t\tif(type == \"date\" && /[a-zA-Z]/.test(separated)){\n\t\t\t\tconst datePart = excelDateToWebix(separated.substr(i), \"date\");\n\t\t\t\tif(datePart){\n\t\t\t\t\tif(checkTime){\n\t\t\t\t\t\tif(datePart.type == \"time\")\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(type == \"string\" && separated[i] == \"@\")\n\t\t\t\treturn true;\n\t\t}\n}\n\nexport function getFormatName(view, row, col){\n\tconst item = view._mPage.getCell(row-1, col-1);\n\treturn (item && item.format) || null;\n}\n\nexport function isDateInvalid(value){\n\treturn value < -99974430.925 || value > 100025569.125;\n}\n\nexport function getDateEditFormat(view, row, col){\n\tconst formatName = getFormatName(view, row, col);\n\tconst locale = webix.i18n.spreadsheet.formats;\n\tconst isTime = checkFormat(formatName, \"date\", true);\n\n\treturn webix.Date.dateToStr( locale[isTime ? \"parseDateTime\" : \"parseDate\"] );\n}\n\nexport function getFormatFromData(data, array){\n\tconst styleName = array[3];\n\tlet fmt;\n\tif(styleName){\n\t\tlet style = arr.find(data.styles, arr => arr[0] == styleName);\n\t\tif(style){\n\t\t\tstyle = style[1];\n\t\t\tconst fmtName = styleFromText(style).format;\n\t\t\tif(fmtName){\n\t\t\t\tif(data.formats)\n\t\t\t\t\tfmt = arr.find(data.formats, arr => arr[0] == fmtName);\n\n\t\t\t\tif(fmt)\n\t\t\t\t\tfmt = fmt[1];\n\t\t\t\telse\n\t\t\t\t\tfmt = getFormatSource(fmtName); //default formats (int, percent, etc.)\n\t\t\t}\n\t\t}\n\t}\n\treturn fmt;\n}","import {getFormatName, getFormatSource} from \"../operations/formats\";\n\nexport function isChar(char) {\n\tconst code = char.charCodeAt(0);\n\treturn code <= 122 ? code >= 65 || code === 35 || code === 36 : code > 191;\n}\n\nexport function getLastCharIndex(str, includeNumbers){\n\tlet lastChar = str.length;\n\tfor(let i = lastChar - 1; i >= 0; i--){\n\t\tif(!isChar(str[i])){\n\t\t\tif(includeNumbers && isNumber(str[i]))\n\t\t\t\tcontinue;\n\t\t\treturn lastChar;\n\t\t}\n\t\telse\n\t\t\tlastChar = i;\n\t}\n}\n\nfunction isNumber(char){\n\tvar code = char.charCodeAt(0);\n\treturn code>=48 && code<=57;\n}\n\nfunction getWord(formula, i){\n\tlet sheet = \"\";\n\tlet quotes = false;\n\n\tlet j;\n\tfor(j=i; j=0; j--){\n\t\tvar key = word[j].charCodeAt(0);\n\t\tif (key === 36) {\n\t\t\tflags = flags+mode;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (key < 58){\n\t\t\t//numeric\n\t\t\tsum += (key - 48)*x;\n\t\t\tx *= 10;\n\t\t} else {\n\t\t\tif (!chars){\n\t\t\t\tx = 1; row = sum; sum = 0; chars = true; mode += 1;\n\t\t\t}\n\t\t\t//alpha\n\t\t\tsum += (key - 64)*x;\n\t\t\tx*=26;\n\t\t}\n\t}\n\n\t/*\n\t\t$X$Y => flags = 3\n\t\t$XY => flags = 2\n\t\tX$Y => flags = 1\n\t\tXY => flags = 0\n\t*/\n\treturn [row, sum, flags];\n}\n\nexport function split(formula, view, crosssheet, fromSheet){\n\tconst activeSheet = view.getActiveSheet();\n\tvar lines = [];\n\tvar index = 0;\n\tvar quotes = false, ph = false;\n\tfor (var i = formula[i] === \"=\" ? 1 : 0; i < formula.length; i++){\n\t\tvar key = formula[i];\n\t\tif (key == \"\\\"\"){\n\t\t\tquotes = !quotes;\n\t\t} else if (!quotes){\n\t\t\tif (key == \"{\" && formula[i+1] == \"{\"){\n\t\t\t\tph = true;\n\t\t\t} else if (key == \"}\" && formula[i+1] == \"}\"){\n\t\t\t\tph = false;\n\t\t\t} else if (!ph){\n\t\t\t\tconst escaped = key === \"'\";\n\t\t\t\tif (escaped || isChar(key)){\n\t\t\t\t\tlet [word, end, ,sheet] = getWord(formula, i);\n\t\t\t\t\tlet next = end - 1;\n\t\t\t\t\tlet value;\n\n\t\t\t\t\tif(formula[next+1] !== \"(\"){\n\t\t\t\t\t\tif(isPosition(word)){\n\t\t\t\t\t\t\tif(!sheet || sheet == activeSheet || crosssheet){\n\t\t\t\t\t\t\t\tvalue = sheet ? [sheet, word, escaped] : word;\n\t\t\t\t\t\t\t\tpushLine(lines, formula, i, index, value);\n\t\t\t\t\t\t\t\tindex = next+1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse{\n\t\t\t\t\t\t\tif(crosssheet){\n\t\t\t\t\t\t\t\tvalue = sheet ? [sheet, word, escaped] : word;\n\t\t\t\t\t\t\t\tpushLine(lines, formula, i, index, value);\n\t\t\t\t\t\t\t\tindex = next+1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse{\n\t\t\t\t\t\t\t\t//specified sheet or active sheet (if not specified) range\n\t\t\t\t\t\t\t\tlet range = view.ranges.getCode(word, sheet || fromSheet);\n\n\t\t\t\t\t\t\t\t//global range\n\t\t\t\t\t\t\t\tif(!range)\n\t\t\t\t\t\t\t\t\trange = view.ranges.getCode(word, true);\n\n\t\t\t\t\t\t\t\tif(range){\n\t\t\t\t\t\t\t\t\tconst parts = range.split(\"!\");\n\t\t\t\t\t\t\t\t\tif(parts[0] == activeSheet){\n\t\t\t\t\t\t\t\t\t\tvalue = [sheet, word, escaped, parts[1]];\n\t\t\t\t\t\t\t\t\t\tpushLine(lines, formula, i, index, value);\n\t\t\t\t\t\t\t\t\t\tindex = next+1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ti = next;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (index!=formula.length)\n\t\tlines.push(formula.substr(index));\n\treturn lines;\n}\n\nfunction pushLine(lines, formula, i, index, value){\n\tif (i!==0)\n\t\tlines.push(formula.substr(index, i-index));\n\tlines.push(value);\n}\n\nexport function getMathFormat(view, value){\n\tlet level = 0;\n\tlet blockLevel;\n\n\tconst parts = split(value, view);\n\n\tfor(let i = 0; i < parts.length; i++){\n\t\t// parts[i] can contain numbers, math operators, formulas, etc.\n\t\tif(i%2 === 0){\n\t\t\t// check formulas and round brackets which are not in quotes\n\t\t\tconst methods = parts[i].match(/(([a-zA-Z]*\\()|\\))(?=(?:[^\"]|\"[^\"]*\")*$)/g);\n\t\t\tif(methods)\n\t\t\t\tmethods.forEach(part => {\n\t\t\t\t\tif(part.indexOf(\"(\") > -1){\n\t\t\t\t\t\tlevel++;\n\t\t\t\t\t\t// some methods block format addition (like count,odd,etc.)\n\t\t\t\t\t\tconst safeMethods = /^(SUM|AVERAGE|MAX|MIN|INT|ROUND|ROUNDDOWN|ROUNDUP|TRUNC)?\\($/gi;\n\t\t\t\t\t\tif(!blockLevel && !safeMethods.test(part))\n\t\t\t\t\t\t\tblockLevel = level;\n\t\t\t\t\t}\n\t\t\t\t\telse if(--level < blockLevel)\n\t\t\t\t\t\tblockLevel = null;\n\t\t\t\t});\n\t\t}\n\t\t// parts[i] can be named range, cell from the active / non-active sheet\n\t\telse if(!blockLevel){\n\t\t\tif(webix.isArray(parts[i])){\n\t\t\t\tif(/^[A-Za-z]+$/.test(parts[i][1]))\n\t\t\t\t\tparts[i] = parts[i][3].split(\":\")[0];\n\t\t\t\telse if(parts[i][0] == view.getActiveSheet())\n\t\t\t\t\tparts[i] = parts[i][1];\n\t\t\t\telse\n\t\t\t\t\tcontinue; // ignore non-active sheets\n\t\t\t}\n\n\t\t\t// if range - check first cell position\n\t\t\tconst cell = position(parts[i]);\n\t\t\tconst name = getFormatName(view, cell[0], cell[1]);\n\n\t\t\t// first cell with number format\n\t\t\tif(name)\n\t\t\t\treturn {fmt: getFormatSource(name)};\n\t\t}\n\t}\n}","import {getFormatName, checkFormat, isDateInvalid, getFormatFromData, getFormatSource} from \"./formats\";\nimport {getExcelDateFromJs} from \"../mathematics/methods\";\nimport {getMathFormat} from \"../mathematics/parser\";\n\nexport function init(view){\n\tview.attachEvent(\"onCellChange\", function(row, col, value, page){\n\t\tif(page == this.getActiveSheet() && !this._setType){\n\t\t\tconst formatName = getFormatName(this, row, col);\n\t\t\tconst cell = {\n\t\t\t\trow,\n\t\t\t\tcol,\n\t\t\t\tvalue,\n\t\t\t\tfmt: formatName ? {fmt: getFormatSource(formatName)} : null\n\t\t\t};\n\t\t\tsetType(this, cell);\n\t\t}\n\t});\n\n\tview.attachEvent(\"onBeforeFormatChange\", function(row, col, formatName){\n\t\tif(!this._setType){\n\t\t\tconst cell = {\n\t\t\t\trow,\n\t\t\t\tcol,\n\t\t\t\tvalue: view.getCellValue(row, col),\n\t\t\t\tfmt: {fmt:getFormatSource(formatName)}\n\t\t\t};\n\t\t\tsetType(this, cell, true);\n\t\t}\n\t});\n\n\tview.attachEvent(\"onAction\", function(action, values){\n\t\tif(action == \"dropdown\" && values.newValue && values.newValue.editor == \"excel_date\"){\n\t\t\tconst format = getFormatName(this, values.row, values.column);\n\t\t\tif(getFormatType(format) != \"date\")\n\t\t\t\tthis.setFormat(values.row, values.column, webix.i18n.spreadsheet.formats.dateFormat);\n\t\t}\n\t});\n}\n\nexport function loadCell(view, data, item){\n\tconst fmt = getFormatFromData(data, item);\n\tconst cell = {\n\t\tvalue: item[2],\n\t\tfmt: fmt ? {fmt} : null,\n\t\ttype: item[4]\n\t};\n\tsetType(view, cell);\n\treturn cell;\n}\n\nfunction getExpectType(view, cell, parseDate, isFormula, formatType, style){\n\t//date based math\n\tlet type = \"string\";\n\tif(!webix.isUndefined(cell.value)){\n\t\tif(isFormula){\n\t\t\ttype = \"number\";\n\n\t\t\tif(/^=(now|date|time)\\(/i.test(cell.value))\n\t\t\t\ttype = \"date\";\n\t\t\telse if(/^=(sparkline|image)\\(/i.test(cell.value))\n\t\t\t\ttype = \"string\";\n\t\t}\n\t\telse if(!isNaN(cell.value))\n\t\t\ttype = \"number\";\n\t\telse if(formatType != \"string\" && parseDate){\n\t\t\t//if user types a date string, or it comes from Excel import\n\t\t\t//set date type and convert string to Excel date\n\t\t\tconst parser = webix.Date.strToDate( webix.i18n.spreadsheet.formats.parseDateTime );\n\t\t\tconst value = parser(cell.value);\n\t\t\tif(value != \"\" && !isNaN(value)){\n\t\t\t\t//change cell style - value changes once (some value -> 35767.5)\n\t\t\t\t//change cell value - value changes twice (some value -> \"12/03/97\" -> 35767.5)\n\t\t\t\t//so ignore undo for cell value change\n\t\t\t\tif(style)\n\t\t\t\t\tdateToExcel(view, cell, value);\n\t\t\t\telse\n\t\t\t\t\tview.ignoreUndo(() => dateToExcel(view, cell, value));\n\n\t\t\t\ttype = \"date\";\n\t\t\t}\n\t\t}\n\t}\n\treturn type;\n}\n\nfunction dateToExcel(view, cell, date){\n\tdate = getExcelDateFromJs(date);\n\tcell.value = date;\n\n\tif(!(view._loading_data || view._page_value_set))\n\t\tview.setCellValue(cell.row, cell.col, date);\n}\n\nfunction checkType(type, expectType, formatType, isFormula, value){\n\ttype = type || expectType;\n\n\t//strings will always have string type regardless of format\n\tif(expectType == \"string\")\n\t\ttype = \"string\";\n\telse if(formatType)\n\t\ttype = formatType;\n\n\tif(type == \"date\" && !isFormula && isDateInvalid(value))\n\t\ttype = \"number\";\n\n\treturn type;\n}\n\nfunction getFormatType(format){\n\tlet formatType = format ? \"number\" : null;\n\tif(checkFormat(format, \"string\"))\n\t\tformatType = \"string\";\n\telse if(checkFormat(format, \"date\"))\n\t\tformatType = \"date\";\n\treturn formatType;\n}\n\nexport function getType(view, row, column, page){\n\tpage = page ? view._mData.getPage(page) : view._mPage;\n\tconst item = page.getCell(row-1, column-1);\n\treturn (item && item.type) || null;\n}\n\nfunction setType(view, cell, style){\n\tconst parseToStore = !(cell.row && cell.col);\n\n\t//prevent type change during value or format change\n\tview._setType = true;\n\n\tconst isFormula = typeof cell.value == \"string\" && cell.value[0] == \"=\";\n\tconst parseDate = (!style || cell.fmt == getFormatSource(\"date\")) && (!view._loading_data || view._page_value_set || cell.type == \"date\");\n\n\tlet mathFormat;\n\tif(!parseToStore)\n\t\tmathFormat = isFormula && !cell.fmt ? getMathFormat(view, cell.value) : null;\n\n\tconst formatType = getFormatType(cell.fmt || mathFormat);\n\tconst expectType = getExpectType(view, cell, parseDate, isFormula, formatType, style);\n\n\tcell.type = checkType(cell.type, expectType, formatType, isFormula, cell.value);\n\n\tif(!parseToStore){\n\t\tconst item = view._mPage.getCell(cell.row-1, cell.col-1, true);\n\t\titem.$format = formatType == \"string\" ? 1 : 0;\n\t\tupdateCell(view, cell, expectType, formatType, mathFormat);\n\t\titem.type = cell.type;\n\t}\n\n\tdelete view._setType;\n}\n\nfunction updateCell(view, cell, expectType, formatType, mathFormat){\n\tconst row = cell.row;\n\tconst col = cell.col;\n\tconst isString = typeof cell.value == \"string\";\n\n\tconst isFormula = isString && cell.value[0] == \"=\";\n\tconst cellEditor = view.getCellEditor(row, col);\n\n\t//update cell value if set number format (5e5 -> 500000, 005 -> 5)\n\tif(!(view._loading_data || view._page_value_set) && cell.type === \"number\" && isString && !isFormula && cell.value !== \"\")\n\t\tview.setCellValue(row, col, cell.value*1);\n\n\tif(mathFormat)\n\t\tview.setFormat(row, col, mathFormat.fmt);\n\telse if(cell.type == \"date\"){\n\t\t// add default date format\n\t\tif(formatType != \"date\"){\n\t\t\tconst isTime = isFormula && cell.value.toUpperCase().indexOf(\"=TIME(\") == 0;\n\t\t\tconst locale = webix.i18n.spreadsheet.formats;\n\t\t\tconst format = isTime ? locale.timeFormat : locale.dateFormat;\n\t\t\tview.setFormat(row, col, format);\n\t\t}\n\n\t\t//set date editor for cells with date type\n\t\tif(!isFormula && !cellEditor)\n\t\t\tview.setCellEditor(row, col, {editor: \"excel_date\"});\n\t}\n\telse if(formatType != \"string\" && cell.type == \"string\" && expectType != \"string\"){\n\t\t//force text format for numbers typed as strings\n\t\tview.setFormat(row, col, \"@\");\n\t}\n\n\t//remove date editor\n\tif((cell.type != \"date\" || isFormula) && cellEditor && cellEditor.editor == \"excel_date\")\n\t\tview.setCellEditor(row, col, null);\n}\n","import {isChar, getLastCharIndex} from \"../mathematics/parser\";\n\nwebix.protoUI({\n\tname: \"suggest-formula\",\n\tdefaults: {\n\t\tfitMaster: false,\n\t\twidth: 200,\n\t\tfilter(item, value) {\n\t\t\tconst editor = webix.$$(this.config.master);\n\t\t\tconst cursor = editor.getInputNode().selectionStart;\n\t\t\tconst val = editor.getValue();\n\n\t\t\tif(val.charAt(0) !== \"=\") return;\n\n\t\t\tconst str = val.substring(0, cursor);\n\t\t\tconst search = str.substring( getLastCharIndex(str, true) );\n\t\t\tconst nextSymbol = val.charAt(cursor);\n\n\t\t\tif(search && (cursor === val.length || !(isChar(nextSymbol) || /^[0-9]/.test(nextSymbol))))\n\t\t\t\tvalue = search;\n\n\t\t\treturn item.value.toString().toLowerCase().indexOf(value.toLowerCase()) === 0;\n\t\t}\n\t},\n\t$init() {\n\t\tthis.attachEvent(\"onBeforeShow\", (node) => {\n\t\t\tif(node.tagName){\n\t\t\t\tconst editor = webix.$$(this.config.master);\n\t\t\t\tconst text = editor.getValue();\n\n\t\t\t\t//only for formulas\n\t\t\t\tif(!text || text.charAt(0) !== \"=\") return false;\n\n\t\t\t\tconst sizes = webix.html.offset(node);\n\n\t\t\t\tconst selectionStart = editor.getInputNode().selectionStart;\n\t\t\t\tconst textWidth = webix.html.getTextSize(text.substring(0, selectionStart), \"webix_ssheet_formula\").width;\n\n\t\t\t\tconst y = sizes.y + sizes.height;\n\t\t\t\tconst x = sizes.x + textWidth;\n\n\t\t\t\twebix.ui.popup.prototype.show.apply(this, [{x, y}]);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t},\n\tsetMasterValue(data, refresh) {\n\t\tconst text = data.id ? this.getItemText(data.id) : (data.text||data.value);\n\t\twebix.$$(this.config.master).setValueHere(text);\n\n\t\tif (!refresh)\n\t\t\tthis.hide(true);\n\n\t\tthis.callEvent(\"onValueSuggest\", [data, text]);\n\t},\n\t$enterKey: function() {\n\t\tif (this.isVisible())\n\t\t\treturn webix.ui.suggest.prototype.$enterKey.apply(this, arguments);\n\t}\n}, webix.ui.suggest);","webix.protoUI({\n\tname: \"ssheet-button\",\n\t$cssName: \"button\",\n\tdefaults:{\n\t\ttype:\"htmlbutton\",\n\t\twidth: 40\n\t},\n\t$init: function(config){\n\t\tconst arrowCss = config.arrow ? \" webix_ssheet_button_menu\" : \"\";\n\t\tconst iconCss = config.label ? \"\" : \" webix_ssheet_icon_only\";\n\t\tthis.$view.className += \" webix_ssheet_button\"+arrowCss+iconCss;\n\t\tif(config.label || config.icon){\n\t\t\tlet icon = (config.icon||config.name),\n\t\t\t\ttext = config.label||\"\";\n\t\t\tif(config.arrow){\n\t\t\t\tconst right = webix.skin.$active.inputSpacing/2;\n\t\t\t\ttext += \"\";\n\t\t\t}\n\t\t\tconfig.label = \" \"+text;\n\t\t\tconfig.tooltip = webix.i18n.spreadsheet.tooltips[config.name]||\"\";\n\t\t}\n\t\tif(config.options && !config.popup)\n\t\t\tconfig.popup = getPopupConfig(config.options);\n\t}\n},webix.ui.button);\n\n\nwebix.protoUI({\n\tname: \"ssheet-button-icon-top\",\n\t$cssName: \"button\",\n\tdefaults:{\n\t\ttype:\"htmlbutton\",\n\t\twidth: 70,\n\t\theight: 70\n\t},\n\t$init: function(config){\n\t\tthis.$view.className += \" ssheet_button_icon_top\";\n\t\tif(config.label) {\n\t\t\tlet icon = (config.icon || config.name||\"\"),\n\t\t\t\ttext = config.label;\n\t\t\tconfig.label = \"
\";\n\t\t\tconfig.label += \"\"+text+\"\";\n\t\t\tif (config.arrow)\n\t\t\t\tconfig.label += \"
\";\n\t\t\tconfig.tooltip = webix.i18n.spreadsheet.tooltips[config.name]||\"\";\n\t\t}\n\t\tif(config.options && !config.popup)\n\t\t\tconfig.popup = getPopupConfig(config.options);\n\t}\n},webix.ui.button);\n\n\nfunction getPopupConfig(options){\n\treturn {\n\t\tview: \"ssheet-suggest\",\n\t\tcss: \"webix_ssheet_suggest\",\n\t\tautowidth:true,\n\t\ttemplate: function(obj){\n\t\t\tvar text = \"\";\n\t\t\tif(obj.icon)\n\t\t\t\ttext += \" \";\n\t\t\ttext += obj.value || webix.i18n.spreadsheet.menus[obj.id] || obj.id;\n\t\t\treturn text;\n\t\t},\n\t\tdata: options,\n\t\ton:{\n\t\t\tonItemClick: function(id){\n\t\t\t\tvar button = this.config.master;\n\t\t\t\tif(button){\n\t\t\t\t\tlet view = webix.$$(button).getTopParentView();\n\t\t\t\t\tvar params = [this.getItem(id)];\n\t\t\t\t\tif(webix.$$(button).config.area){\n\t\t\t\t\t\tlet area = view.$$(\"cells\").getSelectArea();\n\t\t\t\t\t\tif(area)\n\t\t\t\t\t\t\tparams = params.concat([area.start,area.end]);\n\t\t\t\t\t}\n\t\t\t\t\tview.callEvent(\"onCommand\",params);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}","import \"./suggest_formula\";\nimport {getJsDateFromExcel} from \"../mathematics/methods\";\nimport {getType} from \"../operations/types\";\nimport {getDateEditFormat} from \"../operations/formats\";\nimport {split, position, getLastCharIndex} from \"../mathematics/parser\";\n\nwebix.protoUI({\n\tname: \"live-editor\",\n\t$cssName:\"texthighlight\",\n\t$init(config){\n\t\tconfig.suggest = {\n\t\t\tview: \"suggest-formula\",\n\t\t\tdata: config.suggestData\n\t\t};\n\t\tconfig.highlight = this.highlight;\n\n\t\tthis._highlightedCells = {};\n\t\tthis.$view.className += \" webix_ssheet_formula\";\n\n\t\tthis.attachEvent(\"onKeyPress\", (code, e) => {\n\t\t\tdelete this._update_range;\n\t\t\tif(code == 13) {\n\t\t\t\t//ignore Enter key if it was pressed to select some value from suggest\n\t\t\t\tif ((new Date() - (this._last_value_set || 0)) > 300){\n\t\t\t\t\tconst cell = this.config.activeCell;\n\t\t\t\t\tthis.showActiveSheet(true);\n\t\t\t\t\tthis.updateCellValue(cell);\n\t\t\t\t\t//blur to avoid calling highlight function after selection move\n\t\t\t\t\tthis.getInputNode().blur();\n\t\t\t\t\t//we have 'enter' hot key to activate editor\n\t\t\t\t}\n\t\t\t\twebix.html.preventEvent(e);\n\t\t\t}\n\t\t\t//esc - cancel editing\n\t\t\telse if(code == 27){\n\t\t\t\tthis.showActiveSheet();\n\n\t\t\t\twebix.delay(()=>{\n\t\t\t\t\tconst master = this.getTopParentView();\n\t\t\t\t\tconst cell = master.getSelectedId();\n\t\t\t\t\tconst oldVal = this.getCellValue(cell.row, cell.column);\n\n\t\t\t\t\tif(this.getValue() == oldVal)\n\t\t\t\t\t\tmaster.$$(\"cells\").refresh(cell.row);\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.setValue(oldVal);\n\n\t\t\t\t\tdelete master.$handleSelection;\n\n\t\t\t\t\twebix.UIManager.setFocus(master.$$(\"cells\"));\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\tthis.attachEvent(\"onAfterRender\", function(){\n\t\t\twebix.eventRemove(this.keydownEv);\n\n\t\t\tthis.keydownEv = webix.event(this.getInputNode(), \"keydown\", e => {\n\t\t\t\tthis.endEdit(e);\n\t\t\t});\n\t\t});\n\t},\n\thighlight(value){\n\t\tlet html = \"\";\n\t\tconst master = this.getTopParentView();\n\t\tconst escapeText = webix.template.escape;\n\n\t\tfor(let area in this._highlightedCells){\n\t\t\tconst cells = this._highlightedCells[area];\n\t\t\tthis.changeCellCss(cells[0], cells[1], cells[2], true);\n\t\t}\n\t\tthis._highlightedCells = {};\n\n\t\t//value can be null\n\t\tif(value && value[0]==\"=\"){\n\t\t\tconst parts = split(value, master, null, this._activeMath);\n\t\t\tconst sheet = master.getActiveSheet();\n\n\t\t\tlet colorIndex = 1;\n\n\t\t\tfor(let i = 0; i < parts.length; i++){\n\t\t\t\tif(i%2 === 0)\n\t\t\t\t\thtml += escapeText(parts[i]);\n\t\t\t\telse{\n\t\t\t\t\tconst crossheet = webix.isArray(parts[i]);\n\t\t\t\t\tconst cellSheet = crossheet ? this.prepareSheet(parts[i][0], parts[i][2]) : \"\";\n\t\t\t\t\tconst activeMath = this._activeMath;\n\n\t\t\t\t\tconst activeSheet = !crossheet && (!activeMath || activeMath == sheet);\n\t\t\t\t\tlet cell = position(crossheet ? parts[i][1] : parts[i]);\n\t\t\t\t\tconst cellText = crossheet ? cellSheet+parts[i][1] : parts[i];\n\n\t\t\t\t\tconst rangeName = crossheet && !getLastCharIndex(parts[i][1]);\n\n\t\t\t\t\tif(rangeName || activeSheet || (crossheet && parts[i][0] == sheet)){\n\t\t\t\t\t\tlet repeatedColor;\n\t\t\t\t\t\t//range\n\t\t\t\t\t\tif((parts[i+1] == \":\" && parts[i+2]) || rangeName){\n\t\t\t\t\t\t\tlet nextCell, nextCellText;\n\n\t\t\t\t\t\t\tif(rangeName){\n\t\t\t\t\t\t\t\tconst cells = parts[i][3].split(\":\");\n\n\t\t\t\t\t\t\t\tcell = position(cells[0]);\n\t\t\t\t\t\t\t\tnextCell = position(cells[1]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse{\n\t\t\t\t\t\t\t\tnextCell = position(webix.isArray(parts[i+2]) ? parts[i+2][1] : parts[i+2]);\n\t\t\t\t\t\t\t\tnextCellText = webix.isArray(parts[i+2]) ? cellSheet+parts[i+2][1] : parts[i+2];\n\t\t\t\t\t\t\t\ti+=2;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\trepeatedColor = this.setColor(cell[0], cell[1], nextCell[0], nextCell[1], colorIndex);\n\t\t\t\t\t\t\thtml += `${rangeName ? cellText : cellText+\":\"+nextCellText}`;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t//OtherSheet!A1:A3 - do not highlight A3\n\t\t\t\t\t\telse if(parts[i-1] && parts[i-1][ parts[i-1].length-1 ] == \":\"){\n\t\t\t\t\t\t\thtml += cellText;\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t//cell\n\t\t\t\t\t\telse{\n\t\t\t\t\t\t\trepeatedColor = this.setColor(cell[0], cell[1], cell[0], cell[1], colorIndex);\n\t\t\t\t\t\t\thtml += `${cellText}`;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst colors = 7;\n\t\t\t\t\t\tif(!repeatedColor)\n\t\t\t\t\t\t\tcolorIndex += colorIndex == colors ? -1*(colors-1) : 1;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\thtml += cellText;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse\n\t\t\thtml = escapeText(value);\n\n\t\tmaster.$$(\"cells\").refresh();\n\n\t\tif(document.activeElement == this.getInputNode())\n\t\t\tthis.paintValue();\n\t\treturn html;\n\t},\n\tshowActiveSheet(enter){\n\t\tconst master = this.getTopParentView();\n\t\tconst grid = master._table;\n\n\t\tif(this._activeMath){\n\t\t\tif(this._activeMath != master.getActiveSheet()){\n\t\t\t\tconst cell = this.config.activeCell;\n\n\t\t\t\tthis.define({activeCell:null});\n\n\t\t\t\tmaster.showSheet(this._activeMath);\n\n\t\t\t\twebix.delay(()=>{\n\t\t\t\t\tgrid.select(cell.row + (enter ? 1 : 0), cell.column);\n\t\t\t\t});\n\t\t\t}\n\t\t\tdelete this._activeMath;\n\t\t}\n\t\telse if(enter){\n\t\t\twebix.delay(()=>{\n\t\t\t\tgrid.moveSelection(\"down\");\n\t\t\t});\n\t\t}\n\t},\n\tchangeCellCss(row, col, index, remove){\n\t\tconst css = `webix_ssheet_highlight_background_${index}`;\n\t\tfor (let r = row.start; r <= row.end; r++)\n\t\t\tfor (let c = col.start; c <= col.end; c++)\n\t\t\t\tthis.getTopParentView().$$(\"cells\")[remove?\"removeCellCss\":\"addCellCss\"](r, c, css, true);\n\t},\n\tendEdit(e){\n\t\tconst code = e.which || e.keyCode;\n\n\t\t//if it is a formula - force user to finish it by click outside or 'enter'\n\t\tif(code == 9){\n\t\t\twebix.html.preventEvent(e);\n\n\t\t\tthis.getInputNode().blur();\n\t\t\tthis.updateCellValue();\n\t\t\tthis.getTopParentView()._table.moveSelection(e.shiftKey ? \"left\" : \"right\");\n\t\t}\n\t},\n\tpaintValue(){\n\t\tconst master = this.getTopParentView();\n\t\tif(!this._activeMath || this._activeMath == master.getActiveSheet()){\n\t\t\tconst cell = this.config.activeCell;\n\t\t\tconst node = master._table.getItemNode(cell);\n\t\t\tif(cell && node) \n\t\t\t\tnode.innerHTML = `
${webix.template.escape(this.getValue())}
`;\n\t\t}\n\t},\n\tupdateCellValue(cell) {\n\t\tconst newv = this.getValue();\n\t\tconst master = this.getTopParentView();\n\t\tcell = cell || this.config.activeCell;\n\n\t\tif (!cell)\n\t\t\tthis.setValue(\"\");\n\t\telse{\n\t\t\tconst val = master.getCellValue(cell.row, cell.column);\n\n\t\t\tif(newv !== val){\n\t\t\t\tthis.config.value = newv;\n\t\t\t\tmaster.setCellValue(cell.row, cell.column, newv);\n\t\t\t\tmaster.refresh();\n\t\t\t}\n\t\t}\n\n\t\tdelete master.$handleSelection;\n\t},\n\t$setValueHere(value){\n\t\tthis.setValueHere(value);\n\t},\n\tsetValueHere(value) {\n\t\tthis._last_value_set = new Date();\n\n\t\tconst formula = this.getValue();\n\t\tif(formula && formula.charAt(0)===\"=\"){\n\t\t\tconst cursor = this.getInputNode().selectionStart;\n\t\t\tlet str1 = formula.substring(0, cursor);\n\t\t\tconst str2 = formula.substring(cursor);\n\n\t\t\tif(str1[str1.length-1] == \"(\")\n\t\t\t\tstr1 = str1.substring(0, str1.length-1);\n\n\t\t\tstr1 = str1.substring(0, getLastCharIndex(str1, true));\n\n\t\t\t//suggest called via up/down key\n\t\t\tstr1 += value + (str2[0] == \"(\" ? \"\" : \"(\");\n\n\t\t\tthis.setValue(str1 + str2);\n\t\t\tthis.getInputNode().setSelectionRange(str1.length, str1.length);\n\t\t}\n\t},\n\texpectOperator(){\n\t\tconst text = this.getValue();\n\n\t\tif(text[0] == \"=\"){\n\t\t\tlet cursor = this.getInputNode().selectionStart;\n\t\t\twhile(text[cursor-1] == \" \")\n\t\t\t\tcursor--;\n\t\t\treturn text[cursor-1] && text[cursor-1].match(/[+&\\-/*=(:,]/);\n\t\t}\n\t},\n\tsetRange(range, replace){\n\t\tconst cursor = this.getInputNode().selectionStart;\n\t\tconst formula = this.getValue();\n\n\t\tlet str1, str2;\n\n\t\t//check if range was added by click\n\t\tif(replace)\n\t\t\treplace = this._update_range && cursor == this._update_range.pos + this._update_range.len;\n\n\t\tconst lastPos = replace ? this._update_range.pos : cursor;\n\n\t\tstr1 = formula.substring(0, lastPos) + range;\n\t\tstr2 = formula.substring(cursor);\n\n\t\tthis._update_range = {pos: lastPos, len: range.length};\n\n\t\tthis.setValue(str1 + str2);\n\t},\n\tprepareSheet(sheet, escaped){\n\t\tif(!sheet)\n\t\t\treturn \"\";\n\t\tconst condition = webix.isUndefined(escaped) ? sheet.indexOf(\" \") != -1 : escaped;\n\t\treturn (condition ? `'${sheet}'` : sheet) + \"!\";\n\t},\n\tprepareArea(first, second){\n\t\treturn {\n\t\t\tstart: Math.min(first, second),\n\t\t\tend: Math.max(first, second)\n\t\t};\n\t},\n\tsetColor(row1, col1, row2, col2, color){\n\t\tconst row = this.prepareArea(row1, row2);\n\t\tconst col = this.prepareArea(col1, col2);\n\t\tconst index = [row.start, row.end, col.start, col.end].join(\",\");\n\t\tconst coloredArea = this._highlightedCells[index];\n\n\t\tif(!coloredArea){\n\t\t\tthis._highlightedCells[index] = [row, col, color];\n\t\t\tthis.changeCellCss(row, col, color);\n\t\t}\n\t\telse\n\t\t\treturn coloredArea[2];\n\t},\n\tgetCellValue(row, column){\n\t\tconst master = this.getTopParentView();\n\t\tlet value = master.getCellValue(row, column);\n\t\tif(getType(master, row, column) == \"date\" && value[0] != \"=\"){\n\t\t\tconst format = getDateEditFormat(master, row, column);\n\t\t\tvalue = format(getJsDateFromExcel(value));\n\t\t}\n\t\treturn value;\n\t}\n}, webix.ui.texthighlight);","webix.protoUI({\n\tname: \"ssheet-separator\",\n\tdefaults:{\n\t\tcss: \"webix_ssheet_toolbar_spacer\",\n\t\ttemplate: \" \",\n\t\twidth: 1,\n\t\tborderless: true\n\t}\n},webix.ui.view);","webix.protoUI({\n\tname: \"sheets\",\n\tdefaults:{\n\t\tlayout: \"x\",\n\t\tborderless: true,\n\t\tcss:\"ssheet_list_sheets\",\n\t\tselect: true,\n\t\tdrag: \"order\",\n\t\tdragscroll:\"x\",\n\t\tscroll:false\n\t}\n},webix.EditAbility,webix.ui.list);","// toolbar: toogle button\nwebix.protoUI({\n\t$cssName: \"toggle\",\n\tname:\"ssheet-toggle\",\n\ttoggle:function(){\n\t\tconst old = this.getValue();\n\n\t\tif(!old || old == this.config.offValue)\n\t\t\tthis.config.value = this.config.onValue || true;\n\t\telse\n\t\t\tthis.config.value = this.config.offValue || false;\n\n\t\tconst val = this.getValue();\n\t\tthis.$setValue(val);\n\t\tthis.callEvent(\"onChange\", [val, old, \"user\"]);\n\t},\n\t$setValue:function(value){\n\t\tif(value == this.config.offValue)\n\t\t\tvalue = false;\n\t\telse if(value == this.config.onValue)\n\t\t\tvalue = true;\n\t\twebix.ui.toggle.prototype.$setValue.call(this,value);\n\t},\n\tgetValue:function(){\n\t\tvar config = this.config;\n\t\tvar value = config.value;\n\t\treturn !value || value==config.offValue?(config.offValue||false):(config.onValue||true);\n\t},\n\tdefaults:{\n\t\ttemplate:function(obj, common){\n\t\t\tvar css = (obj.value === true || obj.value == obj.onValue) ? \" webix_pressed\" : \"\";\n\t\t\tvar inp = common.$renderInput(obj, common);\n\t\t\treturn \"
\"+inp+\"
\";\n\t\t}\n\t}\n}, webix.ui.toggle);\n\n\n// toolbar: silent toggle button\nwebix.protoUI({\n\tname:\"ssheet-toggle-silent\",\n\t$cssName:\"toggle\",\n\t$allowsClear:false,\n\tsetValue:function(){\n\t\tthis.blockEvent();\n\t\twebix.ui.toggle.prototype.setValue.apply(this, arguments);\n\t\tthis.unblockEvent();\n\t}\n}, webix.ui.toggle);","webix.protoUI({\n\tname: \"ssheet-bar-title\",\n\tdefaults:{\n\t\tborderless: true\n\t},\n\t$init: function(){\n\t\tthis.$view.className += \" webix_ssheet_subbar_title\";\n\t}\n},webix.ui.template);","import * as arr from \"../helpers/array\";\n\nwebix.protoUI({\n\tname:\"multicheckbox\",\n\tdefaults:{\n\t\tpadding:0,\n\t\ttype:\"clean\",\n\t\tborderless:true,\n\t\telementsConfig:{\n\t\t\tlabelWidth:0\n\t\t}\n\t},\n\t$init:function(config){\n\t\tconfig.rows = [{height:0.000001}];\n\t\tthis.$ready.push(function(){\n\t\t\tthis._initOnChange();\n\t\t});\n\t},\n\t_initOnChange(){\n\t\tthis.attachEvent(\"onChange\", function(newv){\n\t\t\tconst name = this.$eventSource.config.name;\n\n\t\t\tthis.blockEvent();\n\t\t\tif(name == \"$all\"){\n\t\t\t\tfor(let i in this.elements)\n\t\t\t\t\tthis.elements[i].setValue(newv);\n\t\t\t\tif(!newv)\n\t\t\t\t\tthis._getCheckboxes()[0].setValue(1);\n\t\t\t}\n\t\t\telse{\n\t\t\t\tconst value = this.getValue(true);\n\n\t\t\t\tif(webix.isArray(value) && (!value.length || !arr.find(value, config => !config.$hiddenSheet))){\n\t\t\t\t\tconst checkboxes = this._getCheckboxes();\n\t\t\t\t\tarr.find(checkboxes, c => !c.config.$hiddenSheet).setValue(1);\n\t\t\t\t}\n\n\t\t\t\tthis.elements.$all.setValue(this.getValue(true) === true ? 1 : 0);\n\t\t\t}\n\t\t\tthis.unblockEvent();\n\t\t});\n\t},\n\tsetValue:function(value){\n\t\tthis.elements = {};\n\t\tthis._count = value.length;\n\n\t\tif(value.length > 1){\n\t\t\tlet elements = [];\n\t\t\tlet base = [];\n\t\t\tconst maxHeight = 400;\n\n\t\t\tvalue.forEach(sheet => {\n\t\t\t\tconst icon = ``;\n\t\t\t\tbase.push({ view: \"checkbox\", labelRight: icon + sheet.name, name: sheet.name, value: sheet.active, $hiddenSheet: sheet.hidden });\n\t\t\t});\n\n\t\t\tconst baseHeight = base.length * webix.skin.$active.inputHeight;\n\t\t\tconst scroll = baseHeight > maxHeight;\n\n\t\t\telements.push({\n\t\t\t\tview:\"scrollview\", body:{rows:base},\n\t\t\t\tscroll: scroll,\n\t\t\t\theight: scroll ? maxHeight : baseHeight\n\t\t\t});\n\n\t\t\telements.push({ template:\"
\", height:10 });\n\t\t\telements.push({ view:\"checkbox\", labelRight:webix.i18n.spreadsheet.labels[\"export-all-sheets\"], name:\"$all\", value:0 });\n\n\t\t\twebix.ui(elements, this);\n\t\t}\n\t\telse if(this.getChildViews().length > 1){\n\t\t\twebix.ui([{height:0.000001}], this);\n\t\t}\n\t},\n\tgetValue:function(config){\n\t\tconst checkboxes = this._getCheckboxes();\n\t\tlet output = [];\n\n\t\t//save order\n\t\tfor(let i = 0; i < checkboxes.length; i++)\n\t\t\tif(checkboxes[i].getValue()){\n\t\t\t\tconst cfg = checkboxes[i].config;\n\t\t\t\toutput.push(config ? cfg : cfg.name);\n\t\t\t}\n\n\t\tif(output.length == this._count)\n\t\t\treturn true;\n\n\t\treturn output;\n\t},\n\t_getCheckboxes(){\n\t\tconst scrollview = this.queryView(\"scrollview\");\n\t\treturn scrollview ? scrollview.getBody().getChildViews() : [];\n\t}\n}, webix.ui.form);","webix.protoUI({\n\tname:\"formlist\",\n\tdefaults:{\n\t\tpaddingY: 5,\n\t\theight: 120,\n\t},\n\t$init:function(config){\n\n\t\tconfig.cols = [\n\t\t\t{\n\t\t\t\tcss:\"webix_inp_label\",\n\t\t\t\ttemplate:config.label,\n\t\t\t\twidth:config.labelWidth,\n\t\t\t\tborderless:true\n\t\t\t},\n\t\t\t{\n\t\t\t\tview:\"list\",\n\t\t\t\tdata:config.data,\n\t\t\t\tcss:config.css,\n\t\t\t\ttemplate:config.template,\n\t\t\t\tselect: true,\n\t\t\t\tscroll:false,\n\t\t\t\tborderless:true,\n\t\t\t\ton:{\n\t\t\t\t\tonSelectChange:()=>{\n\t\t\t\t\t\tthis.getParentView().callEvent(\"onChange\", []);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t];\n\t},\n\tsetValue:function(value){this.getChildViews()[1].select(value);},\n\tgetValue:function(){return this.getChildViews()[1].getSelectedId();},\n\trefresh: function(){this.getChildViews()[1].refresh();},\n\tfocus:function(){}\n}, webix.ui.layout);","webix.protoUI({\n\tname: \"ssheet-ui\",\n\tdefaults:{\n\t\tmove:true,\n\t\tcss:\"webix_shadow_none webix_ssheet_ui\",\n\t\thead:false,\n\t\tresize:true,\n\t\ttoFront:true,\n\t\tminWidth:50,\n\t\tminHeight:200,\n\t\tescHide:false,\n\t\tautofit:false\n\t},\n\t$init:function(){\n\t\t// prevent block selection\n\t\tthis.$view.setAttribute(\"webixignore\", \"1\");\n\n\t\tthis.$ready.push(function(){\n\t\t\twebix.UIManager.addHotKey(\"delete\", webix.bind(this._removeView, this));\n\t\t\twebix.UIManager.addHotKey(\"backspace\", webix.bind(this._removeView, this));\n\t\t\tthis.getMenu();\n\t\t});\n\t\tthis.attachEvent(\"onDestruct\", function(){\n\t\t\twebix.eventRemove(this._clickEv);\n\t\t\tthis._menu.destructor();\n\t\t});\n\t},\n\tmove_setter:function(value){\n\t\tif (value){\n\t\t\twebix.DragControl.addDrag(this.$view, this);\n\t\t}\n\t\treturn value;\n\t},\n\t$dragPos:function(pos, e){\n\t\tthis.callEvent(\"onViewMove\", [pos, e]);\n\t\treturn pos;\n\t},\n\t$dragCreate:function(object, e){\n\t\tconst trg = e.target;\n\t\tif (!trg.getAttribute || trg.getAttribute(\"webix_disable_drag\") || trg.getAttribute(\"webixignore\"))\n\t\t\treturn;\n\n\t\tthis.getMenu().hide();\n\t\tconst elOffset = webix.html.offset(object);\n\t\tconst elPos = webix.html.pos(e);\n\t\tconst pOffset = webix.html.offset(object.parentNode);\n\t\tconst state = webix.$$(this.config.master).getScrollState();\n\n\t\twebix.DragControl.top = elOffset.y - elPos.y - pOffset.y;\n\t\twebix.DragControl.left = elOffset.x - elPos.x - pOffset.x + state.x;\n\n\t\treturn webix.toNode(this.$view);\n\t},\n\t$dragDestroy:function(node, drag){\n\t\tconst x = this.config.left = parseInt(drag.style.left,10);\n\t\tconst y = this.config.top = parseInt(drag.style.top,10);\n\n\t\twebix.DragControl.top = webix.DragControl.left = 0;\n\n\t\tthis.callEvent(\"onViewMoveEnd\", [x, y]);\n\t\treturn;\n\t},\n\tgetMenu:function(){\n\t\tconst labels = webix.i18n.spreadsheet.labels;\n\t\tif(!this._menu){\n\t\t\tlet data = [\n\t\t\t\t{ value:labels[\"export-view\"], submenu:[\n\t\t\t\t\t{ id:\"pdf\", value:labels[\"export-view-pdf\"] },\n\t\t\t\t\t{ id:\"png\", value:labels[\"export-view-png\"] },\n\t\t\t\t\t{ id:\"excel\", value:labels[\"export-view-excel\"] }\n\t\t\t\t] }\n\t\t\t];\n\n\t\t\tif(!webix.$$(this.config.master).getTopParentView().config.readonly)\n\t\t\t\tdata = [\n\t\t\t\t\t{ id:\"edit\", value:labels[\"edit-view\"] },\n\t\t\t\t\t...data,\n\t\t\t\t\t{ id:\"del\", value:labels[\"remove-view\"] }\n\t\t\t\t];\n\n\t\t\tthis._menu = webix.ui({\n\t\t\t\tview:\"contextmenu\",\n\t\t\t\tsubmenuConfig:{\n\t\t\t\t\texternalUI: this.config.id\n\t\t\t\t},\n\t\t\t\tdata:data,\n\t\t\t\ton:{\n\t\t\t\t\tonMenuItemClick: id => this._menuActions(id),\n\t\t\t\t\tonBeforeShow: () => this._toggleExcel()\n\t\t\t\t}\n\t\t\t});\n\t\t\tconst dots = webix.html.create(\"span\", {\"class\":\"webix_ssheet_view_menu webix_icon wxi-dots\"});\n\t\t\tthis._clickEv = webix.event(dots, \"click\", ()=> {\n\t\t\t\tif(this._menu.isVisible())\n\t\t\t\t\tthis._menu.hide();\n\t\t\t\telse\n\t\t\t\t\tthis._menu.show(dots);\n\t\t\t});\n\t\t\tthis.$view.firstChild.appendChild(dots);\n\t\t}\n\t\treturn this._menu;\n\t},\n\t_menuActions:function(id){\n\t\tswitch(id){\n\t\t\tcase \"del\":\n\t\t\t\tthis.callEvent(\"onViewRemove\", []);\n\t\t\t\tbreak;\n\t\t\tcase \"edit\":\n\t\t\t\tthis.callEvent(\"onViewEdit\", []);\n\t\t\t\tbreak;\n\t\t\tcase \"pdf\":\n\t\t\t\twebix.toPDF(this.getBody(), {display:\"image\"});\n\t\t\t\tbreak;\n\t\t\tcase \"png\":\n\t\t\t\twebix.toPNG(this.getBody());\n\t\t\t\tbreak;\n\t\t\tcase \"excel\":\n\t\t\t\twebix.toExcel(this.getBody(), {header: false});\n\t\t\t\tbreak;\n\t\t}\n\t},\n\t_toggleExcel:function(){\n\t\tconst view = this.getBody();\n\t\tif(view.data && view.data.pull)\n\t\t\tthis._menu.showMenuItem(\"excel\");\n\t\telse\n\t\t\tthis._menu.hideMenuItem(\"excel\");\n\t},\n\t_removeView:function(view){\n\t\tif(view && view.getTopParentView() == this)\n\t\t\tthis.callEvent(\"onViewRemove\", []);\n\t}\n}, webix.ui.window);","webix.protoUI({\n\tname: \"ssheet-series\",\n\t$init: function(config){\n\t\tthis.hidden = {};\n\t\tconfig.rows = [\n\t\t\t{\n\t\t\t\tview: \"scrollview\",\n\t\t\t\tborderless: true,\n\t\t\t\tbody: {\n\t\t\t\t\tview: \"accordion\",\n\t\t\t\t\tcss: \"webix_ssheet_accordion\",\n\t\t\t\t\tmargin: webix.skin.$active.layoutMargin.form,\n\t\t\t\t\tmulti: true,\n\t\t\t\t\ttype: \"clean\",\n\t\t\t\t\trows: [\n\t\t\t\t\t\tthis.getSectionConfig()\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\ton:{\n\t\t\t\t\tonAfterScroll:function(){\n\t\t\t\t\t\t//close possibly open selector popups\n\t\t\t\t\t\twebix.callEvent(\"onClick\", []);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t{ view:\"button\", label:webix.i18n.spreadsheet.labels[\"add-line\"], click:()=>{\n\t\t\t\tthis.addSection();\n\t\t\t}}\n\t\t];\n\t},\n\tgetSectionConfig: function(i){\n\t\tconst view = this;\n\t\tconst labels = webix.i18n.spreadsheet.labels;\n\t\tconst trashIcon = \"\";\n\t\tconst padding = webix.skin.$active.dataPadding-2;\n\n\t\treturn {\n\t\t\tview:\"accordionitem\",\n\t\t\theader:`${labels[\"chart-item\"]} ${i ? i+1 : 1} ${trashIcon}`,\n\t\t\tbody:{\n\t\t\t\tview:\"form\",\n\t\t\t\tpadding,\n\t\t\t\telementsConfig:{\n\t\t\t\t\tlabelWidth:180\n\t\t\t\t},\n\t\t\t\ton:{\n\t\t\t\t\tonChange: () => {\n\t\t\t\t\t\tthis.callEvent(\"onChange\", []);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\telements:[\n\t\t\t\t\t{ view:\"text\", label:labels[\"chart-range\"], name:\"range\", range:true, on:{\n\t\t\t\t\t\tonChange: function(val, oldVal) {\n\t\t\t\t\t\t\tconst upper = val.toUpperCase();\n\t\t\t\t\t\t\tif(val != upper){\n\t\t\t\t\t\t\t\tthis.blockEvent();\n\t\t\t\t\t\t\t\tthis.setValue(upper);\n\t\t\t\t\t\t\t\tthis.unblockEvent();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tview.callEvent(\"onRangeChange\", [upper, oldVal]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}},\n\t\t\t\t\t{ view:\"ssheet-colorpicker\", label:labels[\"chart-series-color\"], name:\"color\", hidden: this.hidden.color},\n\t\t\t\t\t{ view:\"checkbox\", label:labels[\"chart-tooltip\"], name:\"tooltip\" },\n\t\t\t\t\t{ view:\"checkbox\", label:labels[\"chart-label\"], name:\"label\", hidden: this.hidden.label },\n\t\t\t\t\t{ view:\"richselect\", label:labels[\"chart-markers\"], value:\"square\", name:\"marker\", hidden: this.hidden.marker,\n\t\t\t\t\t\tsuggest:{\n\t\t\t\t\t\t\tview: \"ssheet-form-suggest\",\n\t\t\t\t\t\t\tdata: [\n\t\t\t\t\t\t\t\t{id:\"square\", value:labels[\"chart-markers-square\"]},\n\t\t\t\t\t\t\t\t{id:\"triangle\", value:labels[\"chart-markers-triangle\"]},\n\t\t\t\t\t\t\t\t{id:\"diamond\", value:labels[\"chart-markers-diamond\"]},\n\t\t\t\t\t\t\t\t{id:\"round\", value:labels[\"chart-markers-round\"]}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\tonClick:{\n\t\t\t\t\"wxi-trash\": function(){\n\t\t\t\t\tconst layout = this.getParentView();\n\t\t\t\t\tlayout.removeView(this);\n\n\t\t\t\t\tconst childs = layout.getChildViews();\n\n\t\t\t\t\tfor (let i = 0; i < childs.length; i++) {\n\t\t\t\t\t\tchilds[i].define({header:`${labels[\"chart-item\"]} ${i+1} ${trashIcon}`});\n\t\t\t\t\t\tchilds[i].refresh();\n\t\t\t\t\t}\n\n\t\t\t\t\tview.callEvent(\"onChange\", []);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t},\n\taddSection: function(){\n\t\tconst layout = this.getLayout();\n\t\tconst lastIndex = layout.getChildViews().length;\n\t\tconst layoutId = layout.addView(this.getSectionConfig(lastIndex));\n\n\t\twebix.$$(layoutId).queryView({name: \"range\"}).focus();\n\t},\n\tsetValue: function(value){\n\t\tvalue = value || [];\n\n\t\tconst layout = this.getLayout();\n\t\tconst childs = layout.getChildViews();\n\t\tconst count = childs.length;\n\n\t\tif(count > value.length)\n\t\t\tfor(let i = count; i > value.length; i--)\n\t\t\t\tthis.getLayout().removeView(childs[i-1]);\n\t\telse if(value.length > count)\n\t\t\tfor(let i = value.length; i > count; i--)\n\t\t\t\tthis.addSection();\n\n\t\tfor(let i = 0; i < childs.length; i++){\n\t\t\tconst form = childs[i].getChildViews()[0];\n\t\t\tconst range = form.queryView({name: \"range\"});\n\n\t\t\t//block range events to ignore onRangeChange\n\t\t\trange.blockEvent();\n\t\t\tform.setValues(value[i]);\n\t\t\trange.unblockEvent();\n\t\t}\n\t},\n\tsetSubValue: function(sub, value){\n\t\tsub.blockEvent();\n\t\tsub.setValue(value);\n\t\tsub.unblockEvent();\n\t},\n\tgetLayout(){\n\t\treturn this.queryView(\"scrollview\").getBody();\n\t},\n\thideSubviews(name, show){\n\t\tthis.hidden[name] = !show;\n\n\t\tthis.queryView({ name }, \"all\").forEach(view => {\n\t\t\tif(show)\n\t\t\t\tview.show();\n\t\t\telse\n\t\t\t\tview.hide();\n\t\t});\n\t},\n\tgetValue: function(){\n\t\tconst value = [];\n\n\t\tconst layout = this.getLayout();\n\t\tlayout.getChildViews().forEach(child => {\n\t\t\tvalue.push(child.getChildViews()[0].getValues());\n\t\t});\n\t\treturn value;\n\t}\n}, webix.ui.layout);","webix.protoUI({\n\tname: \"ssheet-toolbar-scrollview\",\n\t$getSize: function(){\n\t\tconst size = webix.ui.scrollview.prototype.$getSize.apply(this, arguments);\n\t\tconst bodySize = this.getBody().$getSize(0, 0);\n\n\t\tlet scroll = 0;\n\t\tif(this.config.scroll)\n\t\t\tscroll = webix.env.scrollSize;\n\t\telse\n\t\t\tthis.$view.style[\"overflow-x\"] = \"hidden\";\n\n\t\tsize[2] = size[3] = bodySize[2] + scroll;\n\n\t\treturn size;\n\t},\n\t$setSize: function(x,y){\n\t\tconst bodySize = this.getBody().$getSize(0, 0);\n\t\tconst oldScroll = this.config.scroll;\n\t\tconst scroll = x < bodySize[0] ? \"x\" : false;\n\n\t\tif(scroll != oldScroll){\n\t\t\tthis.define({scroll});\n\t\t\treturn webix.delay(()=>{\n\t\t\t\tthis.resize();\n\t\t\t});\n\t\t}\n\n\t\twebix.ui.scrollview.prototype.$setSize.apply(this, [x, y]);\n\t}\n},webix.ui.scrollview);","import {getJsDateFromExcel, getExcelDateFromJs} from \"../mathematics/methods\";\nimport {getDateEditFormat} from \"../operations/formats\";\n\nwebix.editors.excel_date = webix.extend({\n\tcreatePopup:function(){\n\t\tconst editor = webix.editors.excel_date;\n\n\t\tif(!editor.popup){\n\t\t\tconst popup = webix.ui({\n\t\t\t\tview:\"popup\",\n\t\t\t\tbody:{ \n\t\t\t\t\tview:\"calendar\",\n\t\t\t\t\ticons:true,\n\t\t\t\t\ttimepicker:true,\n\t\t\t\t\ton:{\n\t\t\t\t\t\tonChange: function(val){\n\t\t\t\t\t\t\tval = val[0];\n\t\t\t\t\t\t\tthis.getParentView()._last_input_target.value = val ? getExcelDateFromJs(val) : \"\";\n\t\t\t\t\t\t\twebix.callEvent(\"onEditEnd\", []);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\ton:{\n\t\t\t\t\tonEnter: function(){\n\t\t\t\t\t\twebix.callEvent(\"onEditEnd\", []);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\teditor.popup = popup.config.id;\n\t\t}\n\n\t\treturn editor.popup;\n\t},\n\trender:function(){\n\t\tconst node = webix.html.create(\"div\", {\n\t\t\t\"class\":\"webix_dt_editor\"\n\t\t}, \"\");\n\n\t\tthis.popup = this.createPopup();\n\n\t\twebix.event(node.firstChild, \"click\", ()=> this.getPopup().show(node));\n\n\t\treturn node;\n\t},\n\tgetPopup(){\n\t\treturn webix.$$(this.popup);\n\t},\n\tshowPopup:function(){\n\t\tconst input = this.getInputNode();\n\t\tconst popup = this.getPopup();\n\n\t\tpopup._last_input_target = input;\n\t\tpopup.show(input);\n\n\t\tinput.setAttribute(\"aria-expanded\", \"true\");\n\t},\n\tupdateCalendar(value){\n\t\tconst calendar = this.getPopup().getBody();\n\n\t\tcalendar.blockEvent();\n\t\tcalendar.setValue(value);\n\t\tcalendar.unblockEvent();\n\t},\n\tafterRender:function(){\n\t\tthis.showPopup();\n\t},\n\tsetValue:function(value){\n\t\tconst noDate = (value === \"\" || isNaN(value*1));\n\t\tvalue = noDate ? new Date() : getJsDateFromExcel(value);\n\t\tthis.updateCalendar(value);\n\n\t\tconst view = webix.$$(this.config.node).queryView(a => a.name === \"spreadsheet\", \"parent\");\n\t\tconst format = getDateEditFormat(view, this.config.row.id, this.config.id);\n\t\tthis.getInputNode().value = format(value);\n\t},\n\tgetValue:function(){\n\t\tconst value = this.getInputNode().value;\n\t\tthis.getPopup().hide();\n\t\treturn value;\n\t}\n}, webix.editors.text);","webix.editors.ss_richselect = webix.extend({\n\tgetFormat:function(value){\n\t\tconst list = this.getInputNode();\n\t\tlet item;\n\n\t\tif (value && list.exists(value))\n\t\t\titem = list.getItem(value);\n\t\treturn item && item.format;\n\t},\n\tpopupInit:function(popup){\n\t\twebix.editors.richselect.popupInit.apply(this, arguments);\n\n\t\tpopup.getList().define(\"template\", function(obj){\n\t\t\treturn obj.$value || obj.value;\n\t\t});\n\t}\n}, webix.editors.richselect);","import {changeAreaDecimals} from \"../operations/formats\";\n\nexport const actions = {\n\tspan: view => {\n\t\tconst range = view.$$(\"cells\").getSelectArea();\n\t\tif(range){\n\t\t\tif(isMerged(view,range))\n\t\t\t\tview.splitCell();\n\t\t\telse {\n\t\t\t\tconst values = [];\n\t\t\t\tfor(let r = range.start.row; r<=range.end.row; r++){\n\t\t\t\t\tfor(let c = range.start.column; c<=range.end.column; c++){\n\t\t\t\t\t\tlet value = view.getCellValue(r,c);\n\t\t\t\t\t\tif(value) values.push(value);\n\t\t\t\t\t\tif(values.length >1) break;\n\t\t\t\t\t}\n\t\t\t\t\tif(values.length >1) break;\n\t\t\t\t}\n\t\t\t\tif(values.length>1){\n\t\t\t\t\tview.confirm({\n\t\t\t\t\t\ttext:webix.i18n.spreadsheet.labels[\"merge-cell-confirm\"]\n\t\t\t\t\t}).then(()=> view.combineCells() );\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tview.combineCells();\n\t\t\t}\n\t\t}\n\t},\n\tundo: view => view.undo(),\n\tredo: view => view.redo(),\n\t\"hide-gridlines\": view => view.hideGridlines(\"toggle\"),\n\t\"hide-headers\": view => view.hideHeaders(\"toggle\"),\n\t\"freeze-columns\": view => view.freezeColumns(),\n\t\"freeze-rows\": view => view.freezeRows(),\n\t\"increase-decimals\": view => changeAreaDecimals(view, 1),\n\t\"decrease-decimals\": view => changeAreaDecimals(view, -1),\n\t\"increase-indent\": view => view.callEvent(\"onStyleSet\", [\"indent\", 1]),\n\t\"decrease-indent\": view => view.callEvent(\"onStyleSet\", [\"indent\", -1]),\n\t\"show-formulas\": view => view.showFormulas(\"toggle\"),\n\t\"print-borders\": view => view.showPrintBorders(\"toggle\"),\n};\n\nfunction isMerged(view,range){\n\tvar i, j,\n\t\tc0 = range.start,\n\t\tc1 = range.end;\n\n\tfor( i = c0.row*1; i <= c1.row*1; i++ ){\n\t\tfor( j = c0.column*1; j <= c1.column*1; j++ ){\n\t\t\tif(view.$$(\"cells\").getSpan(i, j))\n\t\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n","import {toolbarSizes, defaultStyles} from \"./defaults\";\nimport {formatHelpers} from \"../operations/formats\";\n\n// options for 'font-family' select\nexport const fontFamily = [\n\t{id: \"Arial\", value: \"Arial\"},\n\t{id: \"'Roboto', sans-serif\", value: \"Roboto\"},\n\t{id: \"'PT Sans', Tahoma\", value: \"PT Sans\"},\n\t{id: \"'Open Sans', sans-serif\", value:\"Open Sans\"},\n\t{id: \"Tahoma\", value: \"Tahoma\"},\n\t{id: \"Verdana\", value: \"Verdana\"},\n\t{id: \"Calibri, Tahoma\", value:\"Calibri\"}\n];\n\n// options for 'format' select\nfunction getCellFormats(){\n\tconst locale = webix.i18n.spreadsheet.labels;\n\treturn [\n\t\t{id: \"common\", value: locale.common },\n\t\t{id: \"price\", value: locale.currency, example: \"98.20\"},\n\t\t{id: \"int\", value: locale.number, example: \"2120.02\"},\n\t\t{id: \"percent\", value: locale.percent, example:\"0.5\"},\n\t\t{id: \"date\", value: locale.date, example:\"45000\"},\n\t\t{id: \"string\", value: locale.string, example:\"012345\"},\n\t\t{id: \"custom\", value: locale[\"custom-format\"]},\n\t];\n}\n\nexport function getColumnOperation(view){\n\tconst locale = webix.i18n.spreadsheet.menus;\n\tlet colOperations = [\n\t\t{ id:\"add\", group:\"column\", value:locale[\"insert-column\"]},\n\t\t{ id:\"del\", group:\"column\", value:locale[\"delete-column\"]},\n\t\t{ id:\"show\", group:\"column\", value:locale[\"show-column\"], neighbors:true},\n\t\t{ id:\"hide\", group:\"column\", value:locale[\"hide-column\"]}\n\t];\n\tif(view.config.resizeCell != false)\n\t\tcolOperations.push({ id:\"resize\", group:\"column\", value:locale[\"resize-column\"]});\n\treturn colOperations;\n}\n\nexport function getRowOperation(view){\n\tconst locale = webix.i18n.spreadsheet.menus;\n\tlet rowOperations = [\n\t\t{ id:\"add\", group:\"row\", value:locale[\"insert-row\"]},\n\t\t{ id:\"del\", group:\"row\", value:locale[\"delete-row\"]},\n\t\t{ id:\"show\", group:\"row\", value:locale[\"show-row\"], neighbors:true},\n\t\t{ id:\"hide\", group:\"row\", value:locale[\"hide-row\"]}\n\t];\n\tif(view.config.resizeCell != false)\n\t\trowOperations.push({ id:\"resize\", group:\"row\", value:locale[\"resize-row\"]});\n\treturn rowOperations;\n}\n\n// options for 'clear' select\nexport function getClearOperation(){\n\treturn [\n\t\t{id: \"clear-value\", value: getLocaleClear(\"value\")},\n\t\t{id: \"clear-style\", value: getLocaleClear(\"style\")},\n\t\t{id: \"clear-conditional-formats\", value: getLocaleClear(\"conditional-formats\")},\n\t\t{id: \"clear-dropdown-editors\", value: getLocaleClear(\"dropdown-editors\")},\n\t\t{id: \"clear-comments\", value: getLocaleClear(\"comments\")},\n\t\t{ $template: \"Separator\" },\n\t\t{id: \"clear-all\", value: getLocaleClear(\"all\")}\n\t];\n}\n\n// options for 'borders' select\nconst borders = [\n\t{id: \"no\", value: \"no\"},\n\t{id: \"left\", value: \"left\"},\n\t{id: \"top\", value: \"top\"},\n\t{id: \"right\", value: \"right\"},\n\t{id: \"bottom\", value: \"bottom\"},\n\t{id: \"all\", value: \"all\"},\n\t{id: \"outer\", value: \"outer\"},\n\t{id: \"top-bottom\", value: \"top-bottom\"}\n];\n\nfunction getLocaleClear(value){\n\tvar locale = webix.i18n.spreadsheet.menus;\n\treturn locale[\"clear\"] + \" \" + locale[\"clear-\"+value].toLowerCase();\n}\n\n// options for 'font-size' select\nfunction getFontSize(){\n\treturn [\n\t\t\"8\",\"9\",\"10\",\"11\",\"12\",\"14\",\"15\",\n\t\t\"16\",\"18\",\"20\",\"22\",\"24\",\"28\",\"36\"\n\t];\n}\n\nexport const styleFormats = {\n\t\"font-weight\": \"bold\",\n\t\"font-style\": \"italic\",\n\t\"underline\": \"underline\",\n\t\"strike\": \"strike\"\n};\n\nexport const ui = {\n\tbutton: function(config){\n\t\treturn {\n\t\t\tview: \"ssheet-toggle\", width: config.width||toolbarSizes.width, id: config.name, name: config.name, label: config.label,\n\t\t\tcss: config.css||\"\", onValue: styleFormats[config.name], offValue: \"normal\",\n\t\t\ttooltip: webix.i18n.spreadsheet.tooltips[config.name]||\"\"\n\t\t};\n\t},\n\tcolorButton: function(config){\n\t\treturn {\n\t\t\tview: \"ssheet-color\", css: config.css, name: config.name, width: config.width||toolbarSizes.width+24,\n\t\t\ttitle: \"\",\n\t\t\ttooltip: webix.i18n.spreadsheet.tooltips[config.name]||\"\"\n\t\t};\n\t},\n\ttoggleButton: function(config){\n\t\treturn {\n\t\t\tview: \"ssheet-toggle-silent\", width: toolbarSizes.width, id: config.name, name: config.name,\n\t\t\tlabel: \"\",\n\t\t\ttooltip: webix.i18n.spreadsheet.tooltips[config.name]||\"\"\n\t\t};\n\t},\n\ticonButton: function(config){\n\t\tvar btn = webix.copy(config);\n\t\twebix.extend(btn, {view: \"button\", width: toolbarSizes.width, id: config.name,\n\t\t\tlabel: \"\",\n\t\t\tcss: \"\",\n\t\t\ttooltip: webix.i18n.spreadsheet.tooltips[config.name]||webix.i18n.spreadsheet.menus[config.name]||\"\"\n\t\t});\n\t\tif(config.onValue){\n\t\t\twebix.extend(btn,{view: \"ssheet-toggle\", onValue: config.onValue, offValue: config.offValue},true);\n\t\t}\n\n\t\treturn btn;\n\t},\n\tsegmented: function(config){\n\t\treturn {\n\t\t\tview: \"segmented\", name: config.name, css:config.css||\"\", width: config.width||toolbarSizes.width+76, options:config.options\n\t\t};\n\t},\n\tselect: function(config){\n\t\twebix.extend(config,{\n\t\t\tview: \"richselect\",\n\t\t\tid: config.name,\n\t\t\tvalue: defaultStyles[config.name],\n\t\t\tsuggest: {\n\t\t\t\tcss: \"webix_ssheet_suggest\",\n\t\t\t\tpadding: 0,\n\t\t\t\tdata: config.options\n\t\t\t}\n\t\t});\n\n\t\tconfig.tooltip = webix.i18n.spreadsheet.tooltips[config.name]||\"\";\n\t\tif(config.popupWidth){\n\t\t\tconfig.suggest.fitMaster = false;\n\t\t\tconfig.suggest.width = config.popupWidth;\n\t\t}\n\t\tif(config.popupTemplate)\n\t\t\tconfig.suggest.body = {\n\t\t\t\ttemplate: config.popupTemplate\n\t\t\t};\n\t\tif(config.popupEvents){\n\t\t\tconfig.suggest.body = config.suggest.body || {};\n\t\t\tconfig.suggest.body.on = config.popupEvents;\n\t\t}\n\t\treturn config;\n\t},\n\tseparator: function(){\n\t\treturn {\n\t\t\tview: \"ssheet-separator\"\n\t\t};\n\t},\n\ttitle: function(config){\n\t\tvar title = config.title;\n\t\tif(title.indexOf(\"$\") === 0)\n\t\t\ttitle = \"\";\n\t\ttitle = webix.i18n.spreadsheet.labels[config.title]||title;\n\n\t\treturn {\n\t\t\ttemplate: title, view: \"ssheet-bar-title\", height: toolbarSizes.titleHeight\n\t\t};\n\t},\n\tborders: function(config){\n\t\treturn {view: \"ssheet-borders\", width:config.width||toolbarSizes.width+24, data: borders, id: config.name, name: config.name,\n\t\t\ttooltip: webix.i18n.spreadsheet.tooltips[config.name] };\n\t},\n\talign: function(config){\n\t\treturn {view: \"ssheet-align\", value: defaultStyles[config.name], width:config.width||toolbarSizes.width+24, data: config.options,\n\t\t\tname: config.name, tooltip: webix.i18n.spreadsheet.tooltips[config.name] };\n\t},\n\tcondFormat: function(config){\n\t\treturn {\n\t\t\tview: \"ssheet-cond-format\",\n\t\t\twidth: 40,\n\t\t\tid: config.name,\n\t\t\tname: config.name\n\t\t};\n\t}\n};\n\nexport const buttonsMap = {\n\t\"font-family\": function(){\n\t\treturn ui.select({name: \"font-family\", options:fontFamily, width: 100, view:\"combo\"});\n\t},\n\t\"font-size\": function(){\n\t\treturn ui.select({name: \"font-size\", options:getFontSize(), width: 70, view:\"text\", icon: \"wxi-menu-down\", css: \"webix_ssheet_text\",\n\t\t\ton: {\n\t\t\t\tonItemClick: function(){\n\t\t\t\t\tconst suggest = webix.$$(this.config.suggest);\n\t\t\t\t\tif(!suggest.isVisible())\n\t\t\t\t\t\tsuggest.show(this.getInputNode());\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n\t\"font-weight\": function(){\n\t\treturn ui.button({name:\"font-weight\",label: \"B\", css: \"webix_ssheet_bold\"});\n\t},\n\t\"font-style\": function(){\n\t\treturn ui.button({name: \"font-style\",label: \"I\",css:\"webix_ssheet_italic\"});\n\t},\n\t\"underline\": function(){\n\t\treturn ui.button({name: \"underline\",label: \"U\",css: \"webix_ssheet_underline\"});\n\t},\n\t\"strike\": function(){\n\t\treturn ui.button({name: \"strike\",label: \"S\",css: \"webix_ssheet_strike\"});\n\t},\n\t\"color\": function(){\n\t\treturn ui.colorButton({name: \"color\",icon:\"font\",css:\"webix_ssheet_color\"});\n\t},\n\t\"background\": function(){\n\t\treturn ui.colorButton({name: \"background\",icon:\"paint-brush\",css:\"webix_ssheet_background\", width: 70});\n\t},\n\t\"borders\": function(){\n\t\treturn ui.borders({ name: \"borders\" });\n\t},\n\t\"text-align\": function(){\n\t\tvar locale = webix.i18n.spreadsheet.tooltips;\n\t\treturn ui.align({name: \"text-align\", css: \"webix_ssheet_align\", options:[\n\t\t\t{id: \"left\", css: \"webix_ssheet_icon ssi-left\", tooltip: locale[\"align-left\"]},\n\t\t\t{id: \"center\", css: \"webix_ssheet_icon ssi-center\", tooltip: locale[\"align-center\"]},\n\t\t\t{id: \"right\", css: \"webix_ssheet_icon ssi-right\", tooltip: locale[\"align-right\"]}\n\t\t]});\n\t},\n\t\"vertical-align\": function(){\n\t\tvar locale = webix.i18n.spreadsheet.tooltips;\n\t\treturn ui.align({name: \"vertical-align\", css: \"webix_ssheet_align\", options:[\n\t\t\t{id: \"top\", css: \"webix_ssheet_icon ssi-top\", tooltip: locale[\"align-top\"]},\n\t\t\t{id: \"middle\", css: \"webix_ssheet_icon ssi-middle\", tooltip: locale[\"align-middle\"]},\n\t\t\t{id: \"bottom\", css: \"webix_ssheet_icon ssi-bottom\", tooltip: locale[\"align-bottom\"]}\n\t\t]});\n\t},\n\t\"wrap\": function(){\n\t\treturn ui.iconButton({name: \"wrap\", onValue:\"wrap\", offValue:\"nowrap\"});\n\t},\n\t\"format\": function(){\n\t\treturn ui.select({\n\t\t\tname: \"format\", width: 106, options:getCellFormats(), popupWidth: 180,\n\t\t\tpopupTemplate: function(obj){\n\t\t\t\t//make it look like an actual cell\n\t\t\t\tvar format = formatHelpers[obj.id] ? formatHelpers[obj.id].getFormat : \"\";\n\t\t\t\tvar cell = {css:\"\"};\n\t\t\t\tvar example = format && obj.example?format(obj.example, cell):\"\";\n\t\t\t\treturn obj.value + (format?\"\"+example+\"\":\"\");\n\t\t\t},\n\t\t\tpopupEvents:{\n\t\t\t\tonItemClick: function(id){\n\t\t\t\t\tif(id == \"custom\")\n\t\t\t\t\t\tthis.getTopParentView().callEvent(\"onCommand\", [{id:id}]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n\t\"column\": function(view){\n\t\treturn {\n\t\t\tname: \"column\",\n\t\t\tview: \"ssheet-button\", icon: \"column\",\n\t\t\tarrow: true, area: true, width: 58,\n\t\t\toptions:getColumnOperation(view)\n\t\t};\n\t},\n\t\"row\": function(view){\n\t\treturn {\n\t\t\tname: \"row\", view: \"ssheet-button\", icon: \"row\",\n\t\t\tarrow: true, area: true, width: 58,\n\t\t\toptions:getRowOperation(view)\n\t\t};\n\t},\n\t\"clear\": function(){\n\t\treturn {\n\t\t\tname: \"clear\", view: \"ssheet-button\", icon: \"clear-styles\",\n\t\t\tarrow: true, area: true, width: 58,\n\t\t\toptions:getClearOperation()\n\t\t};\n\t},\n\t\"image\":function(){\n\t\treturn {\n\t\t\tname:\"image\", view:\"ssheet-button\", icon:\"add-image\",\n\t\t\tarrow:true, options:[\n\t\t\t\t{id:\"add-image-cell\", value: webix.i18n.spreadsheet.labels[\"add-image-cell\"]},\n\t\t\t\t{id:\"add-image-top\", value: webix.i18n.spreadsheet.labels[\"add-image-top\"]}\n\t\t\t]\n\t\t};\n\t},\n\t\"graph\":function(){\n\t\treturn {\n\t\t\tname:\"graph\", view:\"ssheet-button\", icon:\"add-sparkline\",\n\t\t\tarrow:true, options:[\n\t\t\t\t{id:\"add-sparkline\", value:webix.i18n.spreadsheet.labels[\"add-sparkline\"]},\n\t\t\t\t{id:\"add-chart\", value: webix.i18n.spreadsheet.labels[\"add-chart\"]}\n\t\t\t]\n\t\t};\n\t},\n\t\"comment\": function(){\n\t\treturn {\n\t\t\tname: \"comment\",\n\t\t\tview: \"ssheet-button\", icon: \"comments\",\n\t\t\tarrow: true, area: true, width: 55\n\t\t};\n\t},\n\t\"create-filter\": function(){\n\t\treturn ui.toggleButton({name: \"create-filter\"});\n\t},\n\t\"hide-gridlines\": function(){\n\t\treturn ui.toggleButton({name: \"hide-gridlines\"});\n\t},\n\t\"hide-headers\": function(){\n\t\treturn ui.toggleButton({name: \"hide-headers\"});\n\t},\n\t\"show-formulas\": function(){\n\t\treturn ui.toggleButton({name: \"show-formulas\"});\n\t},\n\t\"print-borders\": function(){\n\t\treturn ui.toggleButton({name: \"print-borders\", icon:\"borders-no\"});\n\t}\n};","import {toolbarSizes} from \"./defaults\";\n\nfunction getText(text){\n\tvar locale = webix.i18n.spreadsheet;\n\treturn locale.menus[text] || locale.labels[text] || locale.tooltips[text] || text;\n}\nfunction calcButtons(){\n\tvar i, name, width,\n\t\tgroups = {\n\t\t\t\"undo\":[\"undo\",\"redo\"],\n\t\t\t\"insert\":[\"add-sparkline\",\"add-image\",\"add-comment\"]\n\t\t},\n\t\tresult = {};\n\n\tfor( name in groups){\n\t\tresult[name] = 0;\n\t\tfor(i=0; i < groups[name].length; i++){\n\t\t\twidth = webix.html.getTextSize(getText(groups[name][i]), \"webix_ssheet_button_measure\").width + 7;\n\t\t\tresult[name] = Math.max(width,result[name]);\n\t\t}\n\t}\n\treturn result;\n}\nexport function getAllElements(readonly){\n\tconst sizes = calcButtons();\n\tconst titleHeight = toolbarSizes.titleHeight;\n\n\tif(readonly)\n\t\treturn [\n\t\t\t{\n\t\t\t\tpadding: 3,\n\t\t\t\tmargin: 0,\n\t\t\t\trows: [\n\t\t\t\t\t{\n\t\t\t\t\t\tmargin: 2,\n\t\t\t\t\t\tcols:[\n\t\t\t\t\t\t\t{$button: \"excel-export\"},\n\t\t\t\t\t\t\t{$button: \"print\"},\n\t\t\t\t\t\t\t{$button: \"print-borders\"}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t{template: getText(\"file\"), view: \"ssheet-bar-title\", height: titleHeight}\n\t\t\t\t]\n\t\t\t},\n\t\t\t{view: \"ssheet-separator\"},\n\t\t\t{}\n\t\t];\n\n\treturn [\n\t\t{\n\t\t\tpadding: 3,\n\t\t\tmargin: 0,\n\t\t\trows:[\n\t\t\t\t{\n\t\t\t\t\tmargin: 2,\n\t\t\t\t\tcols: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"sheet\", view: \"ssheet-button-icon-top\", label: getText(\"sheet\"), arrow: true,\n\t\t\t\t\t\t\toptions:[\n\t\t\t\t\t\t\t\t{id: \"new-sheet\"},\n\t\t\t\t\t\t\t\t{id: \"copy-sheet\"},\n\t\t\t\t\t\t\t\t{id: \"remove-sheet\"},\n\t\t\t\t\t\t\t\t{id: \"hide-sheet\"}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\trows:[\n\t\t\t\t\t\t\t\t{$button: \"excel-import\"},\n\t\t\t\t\t\t\t\t{$button: \"excel-export\"}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\trows:[\n\t\t\t\t\t\t\t\t{$button: \"print\"},\n\t\t\t\t\t\t\t\t{$button: \"print-borders\"}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{template: getText(\"file\"), view: \"ssheet-bar-title\", height: titleHeight, width: 85}\n\t\t\t]\n\t\t},\n\t\t{view: \"ssheet-separator\"},\n\t\t{\n\t\t\tpadding: 3,\n\t\t\trows:[\n\t\t\t\t{$button: \"undo\", view: \"ssheet-button\", label: getText(\"undo\"), width: sizes.undo },\n\t\t\t\t{$button: \"redo\", view: \"ssheet-button\", label: getText(\"redo\"), width: sizes.undo},\n\t\t\t\t{template: getText(\"undo-redo\"), view: \"ssheet-bar-title\", height: titleHeight}\n\t\t\t]\n\t\t},\n\t\t{view: \"ssheet-separator\"},\n\t\t{\n\t\t\tpadding: 3,\n\t\t\trows:[\n\t\t\t\t{\n\t\t\t\t\tmargin: 2,\n\t\t\t\t\tcols:[\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tmargin: 2,\n\t\t\t\t\t\t\tcols:[\n\t\t\t\t\t\t\t\t{$button: \"font-family\", width: (webix.skin.$active.inputHeight+2)*4+6},\n\t\t\t\t\t\t\t\t{$button: \"font-size\"}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{$button: \"borders\"}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tmargin: 2,\n\t\t\t\t\tcols:[\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tmargin: 2,\n\t\t\t\t\t\t\tcols:[\n\t\t\t\t\t\t\t\t{$button: \"font-weight\"},\n\t\t\t\t\t\t\t\t{$button: \"font-style\"},\n\t\t\t\t\t\t\t\t{$button: \"underline\"},\n\t\t\t\t\t\t\t\t{$button: \"strike\"}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\t{$button: \"background\"},\n\t\t\t\t\t\t{$button: \"color\"}\n\t\t\t\t\t]\n\n\t\t\t\t},\n\t\t\t\t{template: getText(\"font\"), view: \"ssheet-bar-title\", height: titleHeight}\n\t\t\t]\n\t\t},\n\t\t{view: \"ssheet-separator\"},\n\t\t{\n\t\t\tpadding: 3,\n\t\t\trows:[\n\t\t\t\t{\n\t\t\t\t\tmargin: 2,\n\t\t\t\t\tcols:[\n\t\t\t\t\t\t{$button: \"text-align\"},\n\t\t\t\t\t\t{$button: \"span\"},\n\t\t\t\t\t\t{$button: \"increase-indent\"}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tmargin: 2,\n\t\t\t\t\tcols:[\n\t\t\t\t\t\t{$button: \"vertical-align\"},\n\t\t\t\t\t\t{$button: \"wrap\"},\n\t\t\t\t\t\t{$button: \"decrease-indent\"}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{template: getText(\"align\"), view: \"ssheet-bar-title\", height: titleHeight}\n\t\t\t]\n\t\t},\n\t\t{view: \"ssheet-separator\"},\n\t\t{\n\t\t\tpadding: 3,\n\t\t\trows:[\n\t\t\t\t{$button: \"format\"},\n\t\t\t\t{\n\t\t\t\t\tmargin: 2,\n\t\t\t\t\tcols:[\n\t\t\t\t\t\t{$button: \"increase-decimals\"},\n\t\t\t\t\t\t{$button: \"decrease-decimals\"}\n\t\t\t\t\t]\n\t\t\t\t},\n\n\t\t\t\t{template: getText(\"number\"), view: \"ssheet-bar-title\", height: titleHeight}\n\t\t\t]\n\t\t},\n\t\t{view: \"ssheet-separator\"},\n\t\t{\n\t\t\tpadding: 3,\n\t\t\trows:[\n\t\t\t\t{cols:[\n\t\t\t\t\t{ $button: \"sort-asc\"},\n\t\t\t\t\t{ $button: \"create-filter\"},\n\t\t\t\t\t{ $button: \"conditional-format\"},\n\t\t\t\t\t{ $button: \"add-link\"},\n\t\t\t\t\t{ $button: \"clear\"}\n\t\t\t\t]},\n\t\t\t\t{cols:[\n\t\t\t\t\t{ $button: \"sort-desc\"},\n\t\t\t\t\t{ $button: \"add-range\"},\n\t\t\t\t\t{ $button: \"lock-cell\"},\n\t\t\t\t\t{ $button: \"add-dropdown\"}\n\t\t\t\t]},\n\t\t\t\t{template: getText(\"edit\"), view: \"ssheet-bar-title\", height: titleHeight}\n\t\t\t]\n\t\t},\n\t\t{view: \"ssheet-separator\"},\n\t\t{\n\t\t\tpadding: 3,\n\t\t\trows:[\n\t\t\t\t{\n\t\t\t\t\tcols:[\n\t\t\t\t\t\t{$button: \"image\", view: \"ssheet-button\", label: getText(\"image\"), width:sizes.insert},\n\t\t\t\t\t\t{$button: \"add-comment\", view: \"ssheet-button\", label: getText(\"comment\"), width:sizes.insert},\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{$button: \"graph\", view: \"ssheet-button\", label: getText(\"graph\"), width:sizes.insert},\n\t\t\t\t{template: getText(\"insert\"), view: \"ssheet-bar-title\", height: titleHeight}\n\t\t\t]\n\t\t},\n\t\t{view: \"ssheet-separator\"},\n\t\t{\n\t\t\tpadding: 3,\n\t\t\trows:[\n\t\t\t\t{\n\t\t\t\t\tcols:[\n\t\t\t\t\t\t{rows:[\n\t\t\t\t\t\t\t{$button:\"row\"},\n\t\t\t\t\t\t\t{$button:\"column\"}\n\t\t\t\t\t\t]},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\trows:[\n\t\t\t\t\t\t\t\t{$button:\"hide-gridlines\"},\n\t\t\t\t\t\t\t\t{$button:\"hide-headers\"}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\trows:[\n\t\t\t\t\t\t\t\t{$button:\"freeze-rows\"},\n\t\t\t\t\t\t\t\t{$button:\"freeze-columns\"}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\trows:[\n\t\t\t\t\t\t\t\t{$button:\"show-formulas\"},\n\t\t\t\t\t\t\t\t{}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{template: getText(\"view\"), view: \"ssheet-bar-title\", height: titleHeight}\n\t\t\t]\n\t\t},\n\t\t{view: \"ssheet-separator\"},\n\t\t{}\n\t];\n}","import {actions} from \"./toolbar/actions\";\nimport {defaultStyles} from \"./toolbar/defaults\";\nimport {toolbarButtons, getButtons} from \"./toolbar/helpers\";\nimport * as elm from \"./toolbar/all_elements\";\nimport {isCustom} from \"./operations/formats\";\nimport {getStyle, getFormat} from \"./operations/styles\";\n\nconst buttons = {\n\t\"undo-redo\": [\"undo\",\"redo\"],\n\t\"font\": [\"font-family\",\"font-size\",\"font-weight\",\"font-style\",\"underline\",\"strike\",\"color\",\"background\",\"borders\"],\n\t\"align\": [\"text-align\",\"vertical-align\",\"wrap\",\"span\",\"increase-indent\",\"decrease-indent\"],\n\t\"format\": [\"format\"]\n};\n\n\nexport function init(view){\n\tview.attachEvent(\"onComponentInit\", () => ready(view));\n\tview.attachEvent(\"onCommand\", (action) => {\n\t\tif (action.id == \"toolbar-update\"){\n\t\t\tif(action.name)\n\t\t\t\tupdateValue(view, action.name, action.value);\n\t\t\telse\n\t\t\t\tsetValues(view, view.getSelectedId(true));\n\t\t}\n\t});\n\n\tlet elements = [];\n\n\tif(view.config.toolbar){\n\t\tlet allElements = view.config.toolbar;\n\t\tif(allElements == \"full\"){\n\t\t\tallElements = elm.getAllElements(view.config.readonly);\n\t\t\tif(webix.isUndefined(view.config.bottombar))\n\t\t\t\tview.config.bottombar = true;\n\t\t}\n\t\telements = toolbarButtons(view, allElements);\n\t}\n\telse\n\t\telements = getButtons(view, view.config.buttons || buttons);\n\n\tconst bar = {\n\t\tview: webix.env.$customScroll ? \"scrollview\" : \"ssheet-toolbar-scrollview\",\n\t\tscroll: \"x\",\n\t\tbody: {\n\t\t\tview:\"toolbar\",\n\t\t\tcss: \"webix_ssheet_toolbar webix_layout_toolbar\",\n\t\t\tid:\"bar\",\n\t\t\tpadding:0,\n\t\t\telements,\n\t\t\ton: {\n\t\t\t\tonChange: function (value, old, config){\n\t\t\t\t\tif(config == \"user\"){\n\t\t\t\t\t\tconst source = this.$eventSource;\n\t\t\t\t\t\tconst name = source.config.name;\n\t\t\t\t\t\tif(name == \"format\" && value == \"common\")\n\t\t\t\t\t\t\tvalue = \"\";\n\n\t\t\t\t\t\tconst size = name == \"font-size\";\n\t\t\t\t\t\tif((size || name == \"font-family\") && (!value || (size && isNaN(value))))\n\t\t\t\t\t\t\treturn source.setValue(old);\n\t\t\t\t\t\telse if(size){\n\t\t\t\t\t\t\tconst maxSize = Math.floor(400 / 0.75); // 400 pt - max excel font size; divide 0.75 - pt to px conversion\n\t\t\t\t\t\t\tconst limited = Math.max(1, Math.min(maxSize, value));\n\t\t\t\t\t\t\tif (limited != value){\n\t\t\t\t\t\t\t\tvalue = limited;\n\t\t\t\t\t\t\t\tsource.setValue(value);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tvalue += \"px\";\n\t\t\t\t\t\t}\n\n\n\t\t\t\t\t\tif(!(name == \"format\" && value == \"custom\"))\n\t\t\t\t\t\t\tview.callEvent(\"onStyleSet\", [name, value]);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tonItemClick: function (id){\n\t\t\t\t\tvar viewId = view.innerId(id);\n\t\t\t\t\tif (actions[viewId])\n\t\t\t\t\t\tactions[viewId].call(this, view);\n\t\t\t\t\telse\n\t\t\t\t\t\tview.callEvent(\"onCommand\", [{ id: viewId }]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tview.callEvent(\"onViewInit\", [\"toolbar\", bar]);\n\treturn bar;\n\n}\n\nfunction ready(view){\n\tview.attachEvent(\"onAfterSelect\", (selected) => setValues(view, selected));\n}\n\nfunction setValues(view, selected) {\n\tconst barStyles = getBarStyles(view, selected);\n\tview.$$(\"bar\").setValues(barStyles);\n}\n\nfunction updateValue(view, name, value){\n\tconst element = view.$$(\"bar\").elements[name];\n\n\tif (element)\n\t\telement.setValue(value);\n}\n\nfunction getBarStyles(view, selected){\n\tconst dropdowns = [\n\t\t\"font-family\",\n\t\t\"font-size\",\n\t\t\"text-align\",\n\t\t\"vertical-align\",\n\t\t\"format\",\n\t\t\"background\",\n\t\t\"color\"\n\t];\n\n\tconst cell = selected[0];\n\tconst barStyles = getCellStyles(view, cell);\n\n\tfor(let i = 1; i < selected.length; i++){\n\t\tconst cellStyle = getCellStyles(view, selected[i]);\n\n\t\tfor(let k = dropdowns.length-1; k >= 0; k--){\n\t\t\tconst property = dropdowns[k];\n\t\t\tif(barStyles[property] != cellStyle[property]){\n\t\t\t\tdelete barStyles[property];\n\t\t\t\tdropdowns.splice(k, 1);\n\t\t\t}\n\t\t}\n\n\t\tif(!dropdowns.length)\n\t\t\tbreak;\n\t}\n\n\treturn barStyles;\n}\n\nfunction getCellStyles(view, cell){\n\tconst span = view.$$(\"cells\").getSpan(cell.row, cell.column);\n\tif(span)\n\t\t[cell.row, cell.column] = span;\n\n\tconst obj = getStyle(view, cell);\n\tconst styles = obj ? webix.copy(obj.props) : {};\n\n\tfor (let i in defaultStyles)\n\t\tif(!styles[i])\n\t\t\tstyles[i] = defaultStyles[i];\n\n\tstyles[\"font-size\"] = styles[\"font-size\"].replace(\"px\", \"\");\n\n\tconst format = getFormat(view, cell.row, cell.column) || \"common\";\n\tstyles.format = isCustom(format) ? \"custom\" : format;\n\n\treturn styles;\n}\n","import {ui, buttonsMap} from \"./buttons\";\n\nexport function toolbarButtons(view,structure){\n\tvar checkButtons = function(cells){\n\t\tfor(var i =0; i < cells.length; i++){\n\t\t\tvar name = cells[i].$button;\n\t\t\tif (name){\n\t\t\t\tvar base = buttonsMap[name] ? buttonsMap[name](view) : ui.iconButton({name:name});\n\t\t\t\twebix.extend(cells[i], base);\n\t\t\t}\n\t\t\t\n\t\t\tif(cells[i].rows)\n\t\t\t\tcheckButtons(cells[i].rows);\n\t\t\tif(cells[i].cols)\n\t\t\t\tcheckButtons(cells[i].cols);\n\t\t}\n\t};\n\tcheckButtons(structure);\n\treturn structure;\n}\n\nexport function getButtons(view,structure){\n\tvar config = [];\n\tfor(var block in structure){\n\t\tconfig.push(elementsBlock(view, block, structure[block]));\n\t\tconfig.push(ui.separator());\n\t}\n\treturn config;\n}\n\nfunction blockColumns(view, buttons){\n\tvar cols = [];\n\tfor(var i =0; i < buttons.length; i++){\n\t\tlet name = buttons[i];\n\t\tif(typeof name == \"object\"){\n\t\t\tcols.push(name);\n\t\t}\n\t\telse {\n\t\t\tvar base = buttonsMap[name] ? buttonsMap[name](view) : ui.iconButton({name:name});\n\t\t\tcols.push(base);\n\t\t}\n\t}\n\treturn cols;\n}\n\n\nfunction elementsBlock(view, name, columns){\n\tvar block = {\n\t\trows:[\n\t\t\t{\n\t\t\t\tpadding:2,\n\t\t\t\tcols:[{\n\t\t\t\t\tmargin: 2,\n\t\t\t\t\tcols: blockColumns(view, columns)\n\t\t\t\t}]\n\t\t\t},\n\t\t\tui.title({title:name})\n\t\t]\n\t};\n\treturn block;\n}","import {getTextSize} from \"./styles\";\nimport {toRange} from \"../helpers/column_names\";\n\nexport function selectRow(row, view, endRow){\n\tvar columns = view.$$(\"cells\").config.columns;\n\tvar firstColumn = columns[0].id == \"rowId\" ? 1 : 0;\n\n\tvar start = {\n\t\trow:row,\n\t\tcolumn:columns[firstColumn].id\n\t};\n\tvar last = {\n\t\trow: (endRow || row),\n\t\tcolumn: columns[columns.length-1].id\n\t};\n\n\tif(start.column && last.column)\n\t\t_selectRange(start, last, view);\n}\n\nexport function selectAll(view){\n\tvar order = view.$$(\"cells\").data.order;\n\tvar columns = view.$$(\"cells\").config.columns;\n\tvar firstColumn = columns[0].id == \"rowId\" ? 1 : 0;\n\n\tvar start = {\n\t\trow: order[0],\n\t\tcolumn: columns[firstColumn].id\n\t};\n\tvar last = {\n\t\trow: order[order.length-1],\n\t\tcolumn: columns[columns.length-1].id\n\t};\n\n\tif(start.column && last.column)\n\t\t_selectRange(start, last, view);\n}\n\nexport function selectColumn(column, view, endColumn){\n\tvar order = view.$$(\"cells\").data.order;\n\tvar startRow = order[0];\n\tvar lastRow = order[order.length-1];\n\n\tvar start = {row: startRow, column: column};\n\tvar last = {row: lastRow, column: (endColumn || column) };\n\n\t_selectRange(start, last, view);\n}\n\nexport function isColSelected(column, view){\n\tconst selectedArea = view.$$(\"cells\").getSelectArea();\n\tif (selectedArea){\n\t\tif (column >= selectedArea.start.column && column <= selectedArea.end.column)\n\t\t\treturn true;\n\t}\n\treturn false;\n}\n\nexport function isCellSelected(row, column, view){\n\treturn isRowSelected(row, view) && isColSelected(column, view);\n}\n\nexport function isRowSelected(row, view){\n\tconst selectedArea = view.$$(\"cells\").getSelectArea();\n\tif (selectedArea){\n\t\tif (row >= selectedArea.start.row && row <= selectedArea.end.row)\n\t\t\treturn true;\n\t}\n\treturn false;\n}\n\nexport function selectColumns(column, view) {\n\tconst selectedArea = view.$$(\"cells\").getSelectArea();\n\n\tif (!selectedArea)\n\t\tselectColumn(column, view);\n\telse {\n\t\tlet col1 = Math.min(selectedArea.start.column, selectedArea.end.column, column);\n\t\tlet col2 = Math.max(selectedArea.start.column, selectedArea.end.column, column);\n\t\tselectColumn(col1, view, col2);\n\t}\n}\n\nfunction _selectRange(a, b, view){\n\tview.$$(\"cells\").addSelectArea(a, b);\n}\n\n\nexport function adjustColumn(column, view) {\n\tlet width = 25;\n\tconst columnWidth = view._table.getColumnConfig(column).width;\n\n\tview._table.eachRow(function(row) {\n\t\tconst span = view._table.getSpan(row, column);\n\t\tif(span && span[2] > 1)\n\t\t\treturn;\n\n\t\tconst text = this.getText(row, column);\n\t\tconst style = view.getStyle(row, column);\n\t\tconst css = style ? style.id : \"\";\n\n\t\tif (text.replace(/<\\/?[^>]+(>|$)/g, \"\")) {\n\t\t\tconst size = getTextSize(view, text, css);\n\n\t\t\tif(view.getCellEditor(row, column))\n\t\t\t\tsize.width += 20;\n\t\t\tif(view.getCellFilter(row, column))\n\t\t\t\tsize.width += 20;\n\n\t\t\tif(style && style.props.wrap == \"wrap\" && size.width > columnWidth)\n\t\t\t\tsize.width = columnWidth;\n\t\t\tif (size.width > width)\n\t\t\t\twidth = size.width;\n\t\t}\n\t});\n\tview._table.setColumnWidth(column, width);\n}\n\nexport function adjustRow(row, view) {\n\tlet height = 25;\n\n\tview._table.eachColumn(function(column) {\n\t\tif(column != \"rowId\"){\n\t\t\tconst text = this.getText(row, column);\n\n\t\t\t// if there is text wrap in cell we need to know width to get correct height\n\t\t\tlet width = this.getColumnConfig(column).width;\n\t\t\tconst span = view._table.getSpan(row, column);\n\t\t\tif(span)\n\t\t\t\twidth = view._table.getSpanNode({row:span[0], column:span[1]}).offsetWidth;\n\n\t\t\tlet style = view.getStyle(row, column);\n\t\t\tlet css = style ? style.id : \"\";\n\n\t\t\tif (text.replace(/<\\/?[^>]+(>|$)/g, \"\")) {\n\t\t\t\tlet size = getTextSize(view, text, css, width);\n\t\t\t\tif (size.height > height) height = size.height;\n\t\t\t}\n\t\t}\n\t});\n\tview._table.setRowHeight(row, height);\n}\n\nexport function highlightColRow(start, end, view){\n\tif(!view._table.config.header) return;\n\n\tconst grid = view._table;\n\n\tconst css = \"webix_highlight\";\n\n\tlet sr = start.row, er = end.row, sc = start.column, ec = end.column;\n\n\tconst columns = grid.config.columns;\n\tconst firstColumn = columns[1].id;\n\n\tif(sc == \"rowId\"){\n\t\tif(sc == ec){\n\t\t\tstart.column = sc = firstColumn;\n\t\t\tend.column = ec = columns[ columns.length-1 ].id;\n\t\t}\n\t\telse\n\t\t\tstart.column = sc = firstColumn;\n\t}\n\telse if(ec == \"rowId\")\n\t\tend.column = ec = firstColumn;\n\n\tif(er er)\n\t\t\tgrid.removeCellCss(row, \"rowId\", css, true);\n\t\telse\n\t\t\tgrid.addCellCss(row, \"rowId\", css, true);\n\t});\n\twebix.delay(() => grid.refresh());\n\n\tgrid.eachColumn(function(col){\n\t\tconst node = grid.getHeaderNode(col);\n\t\tif(col == \"rowId\" || !node) return;\n\n\t\tif(col < sc || col > ec)\n\t\t\twebix.html.removeCss(node, css);\n\t\telse\n\t\t\twebix.html.addCss(node, css, true);\n\t});\n\n\tif(view.$$(\"navigation\")){\n\t\tlet range = \"\";\n\n\t\tif(sc && ec){\n\t\t\tif(!sr){\n\t\t\t\tconst order = grid.data.order;\n\t\t\t\tsr = order[0];\n\t\t\t\ter = order[order.length-1];\n\t\t\t}\n\t\t\trange = toRange(sr, sc, er, ec);\n\t\t\tconst cells = range.split(\":\");\n\t\t\tif(cells[0] == cells[1])\n\t\t\t\trange = cells[0];\n\t\t}\n\n\t\tview.$$(\"navigation\").setValue(range);\n\t}\n}","import group from \"./undo_group\";\n\nexport const lockCss = \"webix_lock\";\n\nexport function init(view){\n\tview._locks = {};\n\tview.attachEvent(\"onReset\", () => reset(view));\n\tview.attachEvent(\"onUndo\", (type, row, column, mode) => {\n\t\tif (type === \"lock\") lockCell(view, row, column, !!mode, true);\n\t});\n\n\tview.attachEvent(\"onCommand\", (cm) => {\n\t\tif (cm.id === \"lock-cell\")\n\t\t\tlock(view);\n\t});\n\n\tview.attachEvent(\"onAction\", (action, p)=> {\n\t\tif(action == \"before-grid-change\")\n\t\t\tupdatePosition(view, p.name, p.inc, p.data, p.start);\n\t});\n}\n\nfunction reset(view){\n\tview._locks = {};\n}\n\nexport function lockCell(view, row, column, mode, silent){\n\tvar table = view.$$(\"cells\");\n\tif (typeof row === \"object\" && typeof column === \"object\"){\n\t\tgroup.set(function() {\n\t\t\t_mapCellsCalls(row, column, function(row, column){\n\t\t\t\tlockCell(view, row, column, mode, true);\n\t\t\t});\n\t\t});\n\t} else {\n\t\tmode = ((mode === false) ? false : true);\n\t\tvar objrow = view._locks[row] = view._locks[row] || {};\n\t\tobjrow[column] = mode;\n\t\tif (mode)\n\t\t\ttable.addCellCss(row, column, lockCss, true);\n\t\telse\n\t\t\ttable.removeCellCss(row, column, lockCss, true);\n\n\t\tview.callEvent(\"onAction\", [\"lock\", { row, column, value: !mode, newValue: mode }]);\n\t}\n\n\tif (!silent)\n\t\ttable.refresh();\n}\n\nfunction _mapCellsCalls(start, end, handler,master){\n\tfor (let x = start.row; x<=end.row; x++)\n\t\tfor (let y = start.column; y<=end.column; y++)\n\t\t\thandler.call(master||this, x, y);\n}\n\nexport function isCellLocked(view, row, column){\n\treturn view._locks[row]?view._locks[row][column]:false;\n}\n\nexport function serialize(view,data){\n\tvar row, column,\n\t\tlocked = [];\n\tfor(row in view._locks){\n\t\tfor(column in view._locks[row])\n\t\t\tif(view._locks[row][column])\n\t\t\t\tlocked.push([row,column]);\n\t}\n\tdata.locked = locked;\n}\n\nexport function load(view,data){\n\tvar i,\n\t\tlocked = data.locked;\n\n\tif(locked)\n\t\tfor(i = 0; i < locked.length; i++)\n\t\t\tlockCell(view, locked[i][0],locked[i][1],true, true);\n}\n\nfunction lock(view){\n\tvar block = view.$$(\"cells\").getSelectArea();\n\tif (block){\n\t\tvar mode = view.isCellLocked(block.start.row, block.start.column);\n\t\tview.lockCell(block.start, block.end, !mode);\n\t}\n}\n\nfunction updatePosition(view, name, inc, data, start){\n\tlet locked = data.locked,\n\t\ti = locked.length;\n\n\tif(inc){\n\t\twhile(i--){\n\t\t\tlet [row,column] = locked[i];\n\t\t\tif(row && name == \"row\" && row>= start.row || column && name == \"column\" && column >= start.column){\n\t\t\t\tif (name == \"row\"){\n\t\t\t\t\tif (row < start.row - inc)\t//delete lock mark if row was deleted\n\t\t\t\t\t\tlocked.splice(i,1);\n\t\t\t\t\telse\t\t\t\t\t\t//update mark position if upper row was deleted\n\t\t\t\t\t\tlocked[i][0] = row*1 + inc;\n\t\t\t\t} else if (name == \"column\"){\n\t\t\t\t\tif (column < start.column - inc){\n\t\t\t\t\t\tlocked.splice(i, 1);\n\t\t\t\t\t} else \n\t\t\t\t\t\tlocked[i][1] = column*1 + inc;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}","import {lockCss} from \"./lock_cell\";\nimport {save} from \"./save\";\nimport * as arr from \"../helpers/array\";\n\nexport function init(view){\n\tview.attachEvent(\"onStyleChange\", (row, column, style) => {\n\t\tvar span = getSpan(view, row, column);\n\t\tif (span){\n\t\t\tvar extraCss = getExtraCss(view, row, column);\n\t\t\tspan[3] = (style ? style.id : \"\") + (extraCss ? (\" \" + extraCss) : \"\");\n\t\t}\n\t});\n\n\tview.attachEvent(\"onDataParse\", (data) => {\n\t\tparse(view, data);\n\t});\n\n\tview.attachEvent(\"onDataSerialize\", (data) => {\n\t\tserialize(view, data);\n\t});\n\t\n\tview.attachEvent(\"onUndo\", (type, row, column, value, isUndo) => {\n\t\tif(type == \"span\" || type == \"split\"){\n\t\t\tif (type == \"span\") \n\t\t\t\tisUndo = !isUndo;\n\t\t\tundoSpan(view, row, column, value, isUndo);\n\t\t}\n\t});\n\n\tview.attachEvent(\"onAction\", (name, options) => {\n\t\tif(name == \"lock\")\n\t\t\tsetSpanCss(view, options.row, options.column, lockCss, options.newValue);\n\t\telse if(name == \"before-grid-change\")\n\t\t\tupdatePosition(view, options.name, options.inc, options.data, options.start);\n\t\telse if(name == \"check-borders\")\n\t\t\treturn checkSpanBorders(view, options.row, options.column, options.area, options.mode);\n\t});\n}\n\nfunction getSpan(view, row, column){\n\tvar item = view.$$(\"cells\").getSpan()[row];\n\tif (item)\n\t\treturn item[column];\n}\n\nfunction parse(view, data){\n\tif (data.spans)\n\t\tfor (var i = 0; i < data.spans.length; i++) {\n\t\t\tvar span = data.spans[i];\n\t\t\taddSpan( view,\n\t\t\t\t{ row: span[0], column: span[1] },\n\t\t\t\tspan[2]*1,\n\t\t\t\tspan[3]*1,\n\t\t\t\ttrue \n\t\t\t);\n\t\t}\n}\n\nexport function serialize(view, data){\n\tvar spans = [];\n\tvar pull = view.$$(\"cells\").getSpan();\n\tif (pull){\n\t\tfor (var rid in pull){\n\t\t\tvar row = pull[rid];\n\t\t\tfor (var cid in row){\n\t\t\t\tvar span = row[cid];\n\t\t\t\tspans.push([rid*1, cid*1, span[0], span[1]]);\n\t\t\t}\n\t\t}\n\n\t\tdata.spans = spans;\n\t}\n\treturn data;\n}\n\nexport function addSpan(view, cell, x, y, silent){\n\tif (x<2 && y<2) return;\n\n\tif(silent || view.callEvent(\"onBeforeSpan\", [cell.row, cell.column, [x, y]])){\n\t\tconst obj = view._mPage.getCell(cell.row-1, cell.column-1);\n\t\tlet css = ( obj && obj.style ) || \"\";\n\t\tvar extraCss = getExtraCss(view, cell.row, cell.column);\n\t\tif (extraCss)\n\t\t\tcss += \" \" + extraCss;\n\n\t\tsetSpanValue(view, cell, x, y);\n\t\tview.$$(\"cells\").addSpan(cell.row, cell.column, x, y, null, css);\n\t\tif (!silent){\n\t\t\tview.callEvent(\"onAfterSpan\", [cell.row, cell.column, [x, y]]);\n\t\t\tsave(view, \"spans\", {\n\t\t\t\trow:cell.row, column: cell.column,\n\t\t\t\tx:x, y:y\n\t\t\t});\n\t\t}\n\t}\n}\n\nexport function removeSpan(view, cell){\n\tvar span = view.$$(\"cells\").getSpan(cell.row, cell.column);\n\tif(span && view.callEvent(\"onBeforeSplit\", [ cell.row, cell.column, [span[2], span[3]] ])){\n\t\tview.$$(\"cells\").removeSpan(cell.row, cell.column);\n\t\tview.callEvent(\"onAfterSplit\", [ cell.row, cell.column, [span[2], span[3]] ]);\n\t\tsave(view, \"spans\", {\n\t\t\trow:cell.row, column: cell.column,\n\t\t\tx:0, y:0\n\t\t});\n\t}\n}\n\nexport function getRange(sel){\n\tvar lx, ly, rx, ry;\n\trx = ry = 0;\n\tlx = ly = Infinity;\n\n\tfor (var i=0; i=0;i--){\n\t\t\tlet [row,column] = spans[i];\n\n\t\t\tif(inc < 0){//deleting\n\t\t\t\tif(name == \"row\" && row <= start.row-inc-1)\n\t\t\t\t\tinc = start.row - spans[i][0];\n\t\t\t\telse if (name == \"column\" && column <= start.column-inc-1)\n\t\t\t\t\tinc = start.column - spans[i][1];\n\t\t\t}\n\n\t\t\tif(name == \"row\" && row>= start.row || name == \"column\" && column >= start.column){\n\t\t\t\tspans[i][0] = name == \"row\"?row*1 + inc:row;\n\t\t\t\tspans[i][1] = name == \"column\"?column*1 + inc:column;\n\t\t\t}\n\t\t}\n\t}\n}\n\nvar borderChecks = {\n\t\"border-right\":\t\tfunction(row, column, span, area){\n\t\treturn area.end.column == column+span[0]-1;\n\t},\n\t\"border-bottom\":\tfunction(row, column, span, area){\n\t\treturn area.end.row == row+span[1]-1;\n\t}\n};\n\nfunction checkSpanBorders(view, row, column, area, mode){\n\tvar span = getSpan(view, row, column);\n\treturn span&&borderChecks[mode]?borderChecks[mode](row, column, span, area):false;\n}\n\n// clear merged cells except the first one\nfunction setSpanValue(view, cell, x, y){\n\tvar i,j,value,\n\t\trow = cell.row*1,\n\t\tcolumn = cell.column*1,\n\t\tisEmpty = !view.getCellValue(row,column);\n\tfor(i = row; i < row+y; i++){\n\t\tfor(j = column; j < column+x; j++) {\n\t\t\tvalue = view.getCellValue(i,j);\n\t\t\tif(value!==\"\" && (j != column || i != row)){\n\t\t\t\tif(isEmpty){\n\t\t\t\t\tisEmpty = false;\n\t\t\t\t\tview.setCellValue(row,column,value);\n\t\t\t\t}\n\t\t\t\tview.setCellValue(i,j,\"\");\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function adjustSpan (span, action, start, end, view, data, spanData){\n\tvar length = action.group == \"row\" ? span[3] : span[2];\n\tvar checkSpan = action.group == \"row\" ? [span[0]*1, span[0]*1+span[3]-1] : [span[1]*1, span[1]*1+span[2]-1];\n\tvar selection = action.group == \"row\" ? [start.row, end.row] : [start.column, end.column];\n\n\t//if we add, the number of selected rows/cols is added to span, so we need original selection length\n\tvar inc = selection[1] - selection[0] + 1;\n\n\tselection[0] = Math.max(selection[0], checkSpan[0]);\n\tselection[1] = Math.min(selection[1], checkSpan[1]);\n\n\tvar isFirstCell = selection[0] == checkSpan[0];\n\n\tif(selection[0] <= selection[1]){ //selection is in span\n\t\tif(action.id == \"del\") //if we delete, only rows/cols included into span\n\t\t\tinc = (selection[1] - selection[0]+ 1) * -1;\n\t\t//delete smth which starts as span and less than it's length\n\t\tif(action.id == \"del\" && isFirstCell && length > -1*inc){\n\t\t\tconst item = arr.find(data, arr => arr[0] == span[0] && arr[1] == span[1]);\n\t\t\tif(item)\n\t\t\t\tspanData.push(item);\n\t\t}\n\n\t\tif(!(isFirstCell && action.id == \"add\")){\n\t\t\tspan[2] = action.group == \"column\" ? span[2]+inc : span[2];\n\t\t\tspan[3] = action.group == \"row\" ? span[3]+inc : span[3];\n\t\t}\n\t}\n\treturn span;\n}\n\nexport function pasteSpan(view, extra, row, col, cutted, translate){\n\t//existing span\n\tvar s = view._table.getSpan(row, col);\n\tif(extra && extra.span){\n\t\tvar span = extra.span;\n\t\t//if we are on start position for the future span\n\t\tif(row == span[0]*1+translate.row && col == span[1]*1+translate.column){\n\t\t\t//delete spans in future paste zone \n\t\t\tview._table.mapCells(row, col, span[3], span[2], (value, rid, cid) => {\n\t\t\t\ts = view._table.getSpan(rid,cid);\n\t\t\t\tif(s) removeSpan(view, {row:s[0], column:s[1]});\n\t\t\t}, true);\n\t\t\taddSpan(view, {row:row, column:col}, span[2], span[3]);\n\t\t\tif(cutted === 1)\n\t\t\t\tremoveSpan(view, {row:extra.row, column:extra.col});\n\t\t}\n\t}\n\telse if(s)\n\t\tremoveSpan(view, {row:s[0], column:s[1]});\n}","import {isDateInvalid} from \"../operations/formats\";\n\nfunction getText(text){\n\tvar locale = webix.i18n.spreadsheet.labels;\n\treturn locale[text] || text;\n}\nexport function getDefaultStyles(){\n\treturn [\n\t\t{name: getText(\"normal\"), css: \"webix_ssheet_condition_regular\"},\n\t\t{name: getText(\"neutral\"), css: \"webix_ssheet_condition_neutral\"},\n\t\t{name: getText(\"bad\"), css: \"webix_ssheet_condition_bad\"},\n\t\t{name: getText(\"good\"), css: \"webix_ssheet_condition_good\"}\n\t];\n}\n\nfunction isDate(value){\n\treturn value && !isNaN(value) && !isDateInvalid(value);\n}\n\nexport const conditions = {\n\tnumber:[\n\t\t{ id:\"greater\", batch:\"text\", handler:function(a,b){\n\t\t\treturn a !== \"\" && (a*1 > b*1);\n\t\t}},\n\t\t{ id:\"less\", batch:\"text\", handler:function(a,b){\n\t\t\treturn a !== \"\" && (a*1 < b*1);\n\t\t}},\n\t\t{ id:\"greaterOrEqual\", batch:\"text\", handler:function(a,b){\n\t\t\treturn a !== \"\" && (a*1 >= b*1);\n\t\t}},\n\t\t{ id:\"lessOrEqual\", batch:\"text\", handler:function(a,b){\n\t\t\treturn a !== \"\" && (a*1 <= b*1);\n\t\t}},\n\t\t{ id:\"equal\", batch:\"text\", handler:function(a,b){ return a == b; }},\n\t\t{ id:\"notEqual\", batch:\"text\", handler:function(a,b){ return a != b; }},\n\t\t{ id:\"contains\", batch:\"text\", handler:function(a,b){\n\t\t\treturn a.toString().toLowerCase().indexOf(b.toString().toLowerCase()) !== -1;\n\t\t}},\n\t\t{ id:\"notContains\", batch:\"text\", handler:function(a,b){\n\t\t\treturn a.toString().toLowerCase().indexOf(b.toString().toLowerCase()) === -1;\n\t\t}}\n\t],\n\ttext: [\n\t\t{ id:\"contains\", batch:\"text\", handler:function(a,b){\n\t\t\treturn a.toString().toLowerCase().indexOf(b.toString().toLowerCase()) !== -1;\n\t\t}},\n\t\t{ id:\"notContains\", batch:\"text\", handler:function(a,b){\n\t\t\treturn a.toString().toLowerCase().indexOf(b.toString().toLowerCase()) === -1;\n\t\t}},\n\t\t{ id:\"equal\", batch:\"text\", handler:function(a,b){\n\t\t\treturn a.toString().toLowerCase() === b.toString().toLowerCase();\n\t\t}},\n\t\t{ id:\"notEqual\", batch:\"text\", handler:function(a,b){\n\t\t\treturn a.toString().toLowerCase() !== b.toString().toLowerCase();\n\t\t}},\n\t\t{ id:\"beginsWith\", batch:\"text\", handler:function(a,b){\n\t\t\treturn a.toString().toLowerCase().lastIndexOf(b.toString().toLowerCase(), 0) === 0;\n\t\t}},\n\t\t{ id:\"notBeginsWith\", batch:\"text\", handler:function(a,b){\n\t\t\treturn a.toString().toLowerCase().lastIndexOf(b.toString().toLowerCase(), 0) !== 0;\n\t\t}},\n\t\t{ id:\"endsWith\", batch:\"text\", handler:function(a,b){\n\t\t\ta = a.toString();\n\t\t\tb = b.toString();\n\t\t\treturn a.toLowerCase().indexOf(b.toLowerCase(), a.length - b.length) !== -1;\n\t\t}},\n\t\t{ id:\"notEndsWith\", batch:\"text\", handler:function(a,b){\n\t\t\ta = a.toString();\n\t\t\tb = b.toString();\n\t\t\treturn a.toLowerCase().indexOf(b.toLowerCase(), a.length - b.length) === -1;\n\t\t}}\n\t],\n\tdate: [\n\t\t{ id:\"greater\", batch:\"datepicker\", handler: function(a, b){\n\t\t\treturn isDate(a) && a > b;\n\t\t}},\n\t\t{ id:\"less\", batch:\"datepicker\", handler: function(a, b){\n\t\t\treturn isDate(a) && a < b;\n\t\t}},\n\t\t{ id:\"greaterOrEqual\", batch:\"datepicker\", handler: function(a, b){\n\t\t\treturn isDate(a) && a >= b;\n\t\t}},\n\t\t{ id:\"lessOrEqual\", batch:\"datepicker\", handler: function(a, b){\n\t\t\treturn isDate(a) && a <= b;\n\t\t}},\n\t\t{ id:\"equal\", batch:\"datepicker\", handler: function(a, b){\n\t\t\treturn isDate(a) && a == b;\n\t\t}},\n\t\t{ id:\"notEqual\", batch:\"datepicker\", handler: function(a, b){\n\t\t\treturn !isDate(a) || a != b;\n\t\t}},\n\t\t{ id:\"between\", batch: \"daterangepicker\", handler: function(a, b){\n\t\t\tif (!isDate(a)) return false;\n\t\t\treturn (!b.start || a > b.start) && (!b.end || a < b.end);\n\t\t}},\n\t\t{ id:\"notBetween\", batch: \"daterangepicker\", handler: function(a, b){\n\t\t\tif (!isDate(a)) return false;\n\t\t\treturn (!b.start || a <= b.start) || (!b.end || a >= b.end);\n\t\t}}\n\t]\n};","import group from \"./undo_group\";\nimport {eachRange} from \"../helpers/column_names\";\nimport {setSpanCss} from \"./spans\";\nimport {conditions} from \"../helpers/conditional\";\nimport {getType} from \"./types\";\nimport * as arr from \"../helpers/array\";\n\nexport function init(view){\n\tview.conditions = {\n\t\t_empty:true,\n\t\t_pull: {},\n\t\thandlers: createRules(),\n\t\tadd: function(rId, cId, cond, val, style){\n\t\t\tadd.apply(this, [view, rId, cId, cond, val, style]);\n\t\t},\n\t\tupdate: function(r, c, data){\n\t\t\tupdate.apply(this, [view, r, c, data]);\n\t\t},\n\t\tremove,\n\t\tget,\n\t\tparse,\n\t\tserialize,\n\t\tclear\n\t};\n\n\tview.attachEvent(\"onConditionSet\", (data) => _setCondition(view, data));\n\n\tview.attachEvent(\"onUndo\", (type_action, row, column, value) => {\n\t\tif(type_action == \"condition\")\n\t\t\t_undoCondition(view, row, column, value);\n\t});\n\n\tview.attachEvent(\"onDataSerialize\", (data) => _serialize(view, data));\n\tview.attachEvent(\"onDataParse\", (data) => _parse(view, data));\n\n\tview.attachEvent(\"onReset\", () => view.conditions.clear() );\n\n\tview.attachEvent(\"onAction\", (action, p)=> {\n\t\tif(action == \"before-grid-change\")\n\t\t\tupdatePosition(view, p.name, p.inc, p.data, p.start);\n\t});\n\n\treset(view);\n}\n\nfunction createRules(){\n\tconst rules = webix.copy(conditions);\n\trules.number = rules.number.concat([\n\t\t{ id:\"between\", handler: function(a, b){\n\t\t\treturn (!b.start || a > b.start) && (!b.end || a < b.end);\n\t\t}},\n\t\t{ id:\"notBetween\", handler: function(a, b){\n\t\t\treturn (!b.start || a <= b.start) || (!b.end || a >= b.end);\n\t\t}}\n\t]);\n\treturn rules;\n}\n\nfunction getCellValue(view, value){\n\tif(isNaN(value*1)){\n\t\tif (value.charAt(0) == \"=\" && value.length > 1){\n\t\t\tvalue = view._mData.getStore().exec(value.substring(1), view._mPage.getContext());\n\t\t\tif(value === null)\n\t\t\t\tvalue = \"\";\n\t\t}\n\t}\n\telse {\n\t\tvalue = value*1;\n\t}\n\treturn value;\n}\n\nfunction reset(view){\n\tview.conditions.clear();\n}\n\nfunction _setCondition(view, data){\n\tgroup.set(function(){\n\t\tview.eachSelectedCell((cell) => {\n\t\t\tconst collection = view.conditions.get(cell.row, cell.column);\n\t\t\tif(collection)\n\t\t\t\tfor (let i = 0; i < collection.length; i++)\n\t\t\t\t\tsetSpanCss(view, cell.row, cell.column, collection[i][2], false);\n\t\t\t_changeCondition(\"update\", cell.row, cell.column, (collection||null), data, view);\n\t\t});\n\t});\n\tview.refresh();\n}\n\nfunction _undoCondition(view, row, column, value){\n\tif(view.conditions.get(row, column))\n\t\tview.conditions.remove(row, column);\n\tif(value)\n\t\tview.conditions.update(row, column, value);\n}\n\nfunction _serialize(view, obj){\n\tobj.conditions = view.conditions.serialize();\n}\n\nfunction _parse(view, obj){\n\tview.conditions.parse(obj.conditions);\n}\n\nexport function getConditionCss(view, row, column, rendered){\n\tlet css = \"\";\n\n\tif (!view.conditions._empty){\n\t\tconst collection = view.conditions.get(row, column);\n\t\tif(collection){\n\t\t\tconst span = view.$$(\"cells\").getSpan(row, column);\n\t\t\tlet value = view.getCellValue(row,column,false);\n\t\t\tif(!value && value !== 0)\n\t\t\t\tvalue = \"\";\n\n\t\t\tlet type = getType(view, row, column);\n\t\t\tif(!type || type == \"string\")\n\t\t\t\ttype = \"text\";\n\n\t\t\tfor (let i = collection.length - 1; i >= 0; i--){\n\t\t\t\tlet currentValue = value;\n\t\t\t\tconst rule = collection[i][0];\n\t\t\t\tconst handlers = view.conditions.handlers;\n\t\t\t\tlet handler;\n\n\t\t\t\tlet checkOrder = [\"text\", type, \"number\", \"date\"];\n\t\t\t\tcheckOrder = checkOrder.filter((v, i) => checkOrder.indexOf(v) == i);\n\n\t\t\t\tfor(let k = 0; k < checkOrder.length; k++){\n\t\t\t\t\tconst checkType = checkOrder[k];\n\n\t\t\t\t\thandler = arr.find(handlers[checkType], obj => obj.id == rule);\n\t\t\t\t\tif(handler){\n\t\t\t\t\t\thandler = handler.handler;\n\t\t\t\t\t\tif(checkType == \"text\" && rule != \"equal\" && rule != \"notEqual\")\n\t\t\t\t\t\t\tcurrentValue = rendered;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlet compare = collection[i][1];\n\t\t\t\tif(webix.isArray(compare))\n\t\t\t\t\tcompare = {\n\t\t\t\t\t\tstart: getCellValue(view, compare[0]),\n\t\t\t\t\t\tend: getCellValue(view, compare[1])\n\t\t\t\t\t};\n\t\t\t\telse\n\t\t\t\t\tcompare = getCellValue(view, compare);\n\n\t\t\t\tif(!css && handler && handler(currentValue, compare)){\n\t\t\t\t\tcss = collection[i][2];\n\t\t\t\t\tif(!span)\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tsetSpanCss(view, row, column, collection[i][2], true);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tsetSpanCss(view, row, column, collection[i][2], false);\n\t\t\t}\n\t\t}\n\t}\n\treturn css;\n}\n\n\nfunction addEmptyCollection(pull, row, column, state){\n\tstate._empty = false;\n\tif(!pull[row])\n\t\tpull[row] = {};\n\tif(!pull[row][column])\n\t\tpull[row][column] = [];\n\treturn pull[row][column];\n}\n\n\nfunction parse(data){\n\t//backward compatibility\n\tconst oldConditions = {\n\t\t\">\": \"greater\",\n\t\t\"<\": \"less\",\n\t\t\"=\": \"equal\",\n\t\t\"!=\": \"notEqual\",\n\t\t\"<>\": \"between\"\n\t};\n\n\tthis._empty = true;\n\tif (!data) return;\n\n\tlet i = data.length;\n\twhile(i--){\n\t\tconst c = data[i];\n\t\tconst collection = addEmptyCollection(this._pull,c[0],c[1],this);\n\t\tc[2] = oldConditions[ c[2] ] || c[2];\n\t\tcollection.push([c[2],c[3],c[4]]);\n\t}\n}\n\nfunction clear(){\n\tthis._pull = {};\n}\n\nfunction update(view, row, column, newData){\n\tvar collection = this.get(row, column);\n\tif(!collection)\n\t\taddEmptyCollection(this._pull, row, column, this);\n\n\tnewData.map(item => _normalizeValue(view, item) );\n\tthis._pull[row][column] = newData;\n}\n\nfunction get(rowId, columnId){\n\tif(!rowId)\n\t\treturn this._pull;\n\tif(!columnId)\n\t\treturn this._pull[rowId];\n\treturn this._pull[rowId]?this._pull[rowId][columnId]:null;\n}\n\nfunction add(view, rowId, columnId, condition, value, style){\n\tconst collection = addEmptyCollection(this._pull, rowId, columnId, this);\n\tcollection.push( _normalizeValue(view, [condition, value, style]) );\n}\n\nfunction remove(rowId, columnId){\n\tvar collection = this.get(rowId, columnId);\n\tif(collection)\n\t\tdelete this._pull[rowId][columnId];\n}\n\nfunction serialize(){\n\tvar column, condition, i, row,\n\t\tdata = [];\n\n\tfor( row in this._pull)\n\t\tfor( column in this._pull[row])\n\t\t\tfor(i=0; i < this._pull[row][column].length; i++){\n\t\t\t\tcondition = this._pull[row][column][i];\n\t\t\t\tdata.push([row,column, condition[0],condition[1],condition[2]]);\n\t\t\t}\n\n\treturn data;\n}\n\nfunction updatePosition(view, name, inc, data, start){\n\tlet conditions = data.conditions,\n\t\ti = conditions.length;\n\n\tif(inc){\n\t\twhile(i--){\n\t\t\tlet [row,column] = conditions[i];\n\t\t\tif(name == \"row\" && row>= start.row || name == \"column\" && column >= start.column){\n\t\t\t\tif (name == \"row\"){\n\t\t\t\t\tif (row < start.row - inc)\t//delete lock mark if row was deleted\n\t\t\t\t\t\tconditions.splice(i,1);\n\t\t\t\t\telse\t\t\t\t\t\t//update mark position if upper row was deleted\n\t\t\t\t\t\tconditions[i][0] = row*1 + inc;\n\t\t\t\t} else if (name == \"column\"){\n\t\t\t\t\tif (column < start.column - inc){\n\t\t\t\t\t\tconditions.splice(i, 1);\n\t\t\t\t\t} else \n\t\t\t\t\t\tconditions[i][1] = column*1 + inc;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function clearConditionalFormats(view, range){\n\tgroup.set(function(){\n\t\teachRange(range, view, function(view, cell){\n\t\t\tvar condition = view.conditions.get(cell.row, cell.column);\n\t\t\tif(condition)\n\t\t\t\t_changeCondition(\"remove\", cell.row, cell.column, condition, null, view);\t\t\t\t\n\t\t});\n\t\tview.refresh();\n\t});\n}\n\nexport function pasteCondition(view, extra, row, col, cutted){\n\tvar condition = extra.condition;\n\tvar collection = view.conditions.get(row,col);\n\t_changeCondition(\"update\", row, col, (collection||null), condition, view);\n\tif(cutted === 1)\n\t\t_changeCondition(\"remove\", extra.row, extra.col, condition, null, view);\n}\n\nexport function _changeCondition(name, row, column, oldCondition, newCondition, view){\n\tif (view.callEvent(\"onBeforeConditionSet\", [row, column, oldCondition, newCondition])){\n\t\tview.conditions[name].apply(view.conditions, [row, column, newCondition]);\n\t\tview.callEvent(\"onAfterConditionSet\", [row, column, oldCondition, newCondition]);\n\t}\n}\n\nfunction _normalizeValue(view, condition){\n\tconst val = condition[1];\n\tif(val[0] == \"=\")\n\t\tcondition[1] = view._mData.getStore().parse(val).source; //fixes formula\n\treturn condition;\n}","export function init(view){\n\t//parsing initial data\n\tview.attachEvent(\"onDataParse\", (data) => _parse(view, data));\n\tview.attachEvent(\"onDataSerialize\", (data, config) => _serialize(view, data, config));\n\n\t// undo\n\tview.attachEvent(\"onUndo\", (type, row, column, value) => {\n\t\tif(type == \"value\")\n\t\t\t_undoValue(view, row, column, value);\n\t});\n}\n\nfunction _serialize(view, obj, config){\n\tvar math = !config || config.math!==false;\n\n\tvar grid = view.$$(\"cells\");\n\tvar state = grid.getState();\n\tvar columns = state.ids.concat(state.hidden);\n\n\t// remove \"rowId\" column\n\tcolumns.splice(columns.indexOf(\"rowId\"), 1);\n\n\tobj.data = getSheetData(view, math);\n\n\tobj.table = {\n\t\tfrozenColumns : (view._frozenColumns || 0),\n\t\tfrozenRows : (view._frozenRows || 0)\n\t};\n}\n\nfunction _parse(view, obj){\n\tconst tconfig = obj.table || { frozenColumns : 0, frozenRows : 0 };\n\tview._frozenColumns = view._frozenRows = 0;\n\tif (tconfig){\n\t\tif (!webix.isUndefined(tconfig.frozenColumns))\n\t\t\tview.freezeColumns(tconfig.frozenColumns);\n\t\tif (!webix.isUndefined(tconfig.frozenRows))\n\t\t\tview.freezeRows(tconfig.frozenRows);\n\t}\n\n\tif(obj.sizes)\n\t\tview.$$(\"cells\").define(\"fixedRowHeight\", false);\n}\n\nfunction _undoValue(view, row, column, value){\n\tview.setCellValue(row, column, value);\n}\n\nexport function getSheetData(view, math, page){\n\tpage = page ? view._mData.getPage(page) : view._mPage;\n\treturn page.serialize(math)\n\t\t.map(arr =>{\n\t\t\tlet value = arr[2].value;\n\t\t\tif(value === null)\n\t\t\t\tvalue = \"\";\n\t\t\treturn [ ++arr[0], ++arr[1], value, arr[2].style||\"\", arr[2].type];\n\t\t})\n\t\t.filter(arr => {\n\t\t\treturn arr[2] || arr[2] === 0 || arr[3];\n\t\t});\n}","import * as arr from \"./helpers/array\";\nimport {getSheetData} from \"./operations/data\";\nimport {DataStore} from \"@xbs/muon\";\nimport {loadCell} from \"./operations/types\";\nimport {removeUnusedStyles, styleFromText, styleToText} from \"./operations/styles\";\nimport {getFormatFromData, checkFormat} from \"./operations/formats\";\nimport {updateMaxColumn, encode, escapeSheet} from \"./helpers/column_names\";\n\nconst options = [\n\t\"rename-sheet\",\n\t\"remove-sheet\",\n\t\"copy-sheet\",\n\t\"hide-sheet\"\n];\n\nconst actionMap = {\n\t\"remove-sheet\": view => _remove(view),\n\t\"rename-sheet\": view => edit(view),\n\t\"new-sheet\": view => add(view),\n\t\"copy-sheet\": view => copy(view),\n\t\"hide-sheet\": view => setState(view, view._activeSheet, \"hidden\")\n};\n\nexport function init(view){\n\tview.attachEvent(\"onComponentInit\", () => ready(view));\n}\n\nexport function defaultBottom(view){\n\tvar readonly = view.config.readonly;\n\tvar tabWidth = view.config.sheetTabWidth;\n\tvar toolbar = {\n\t\tview: \"toolbar\",\n\t\tid: \"bottom-toolbar\",\n\t\tcss: \"webix_ssheet_bottom_toolbar webix_layout_toolbar\",\n\t\tpaddingY: 0,\n\t\theight: 34,\n\t\telements:[\n\t\t\t{\n\t\t\t\thidden:readonly,\n\t\t\t\tpadding: {\n\t\t\t\t\ttop: 2,\n\t\t\t\t\tbottom: 2,\n\t\t\t\t\tleft: 4\n\t\t\t\t},\n\t\t\t\tcols:[\n\t\t\t\t\t{\n\t\t\t\t\t\tview:\"icon\", icon:\"wxi-plus\", width:30, id: \"add-sheet\", click: ()=> add(view),\n\t\t\t\t\t\ttooltip: webix.i18n.spreadsheet.tooltips[\"add-sheet\"]\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tview:\"icon\", icon:\"wxi-dots\", width:30, id: \"show-sheet\", popup: getSheetsPopup(view),\n\t\t\t\t\t\ttooltip: webix.i18n.spreadsheet.tooltips[\"show-sheet\"]\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\tid:\"sheets\",\n\t\t\t\tview:\"sheets\",\n\t\t\t\tmaxWidth: 5 * tabWidth,\n\t\t\t\teditable:!readonly,\n\t\t\t\teditaction: \"dblclick\",\n\t\t\t\teditor:\"text\",\n\t\t\t\teditValue:\"value\",\n\t\t\t\ttype:{\n\t\t\t\t\twidth: tabWidth,\n\t\t\t\t\theight: 32,\n\t\t\t\t\ttemplate: function(obj){\n\t\t\t\t\t\treturn \"
\"+obj.value+\"
\"+\n\t\t\t\t\t\t\t(!readonly?\"
\":\"\");\n\t\t\t\t\t},\n\t\t\t\t\t//remove skin selection css on dnd\n\t\t\t\t\tcss:\"ssheet_order_sheets\"\n\t\t\t\t},\n\t\t\t\tonClick:{\n\t\t\t\t\twebix_ssheet_sheet_arrow: function(e, id){\n\t\t\t\t\t\tinitSheetMenu(view, e, id);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\ton:{\n\t\t\t\t\tonItemClick: function(id){\n\t\t\t\t\t\tif(id != view._activeSheet)\n\t\t\t\t\t\t\tview.showSheet(id);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tview: \"button\", type:\"htmlbutton\", width: 34, id: \"prev-sheet\", disabled:true, hidden:true,\n\t\t\t\tlabel: \"\", batch:\"pager\",\n\t\t\t\tclick:function(){scrollSheets(view, -1);}\n\t\t\t},\n\t\t\t{\n\t\t\t\tview: \"button\", type:\"htmlbutton\", width: 34, id: \"next-sheet\", hidden:true,\n\t\t\t\tlabel: \"\", batch:\"pager\",\n\t\t\t\tclick:function(){scrollSheets(view, 1);}\n\t\t\t}\n\t\t]\n\t};\n\n\tview.callEvent(\"onViewInit\", [\"bottom-toolbar\", toolbar]);\n\n\treturn toolbar;\n}\n\nfunction scrollSheets(view, direction){\n\tvar sheets = view.$$(\"sheets\");\n\tsheets.scrollTo(sheets.getScrollState().x+(direction*view.config.sheetTabWidth), 0);\n}\n\nfunction menuInit(view){\n\tvar data = [];\n\tfor(var i=0; i < options.length;i++)\n\t\tdata.push({id: options[i], value:webix.i18n.spreadsheet.menus[options[i]]||options[i]});\n\n\tvar menu = {\n\t\tview: \"ssheet-suggest\",\n\t\tdata: data\n\t};\n\tview.callEvent(\"onViewInit\", [\"sheet-menu\", menu]);\n\treturn menu;\n}\n\nexport function reset(view, obj){\n\tconst tabs = view.$$(\"sheets\");\n\tif (tabs){\n\t\ttabs.clearAll();\n\t\tconst set = [];\n\t\tobj.sheets.forEach(function(sheet){\n\t\t\tset.push({id:sheet.name, value: sheet.name});\n\t\t});\n\t\ttabs.parse(set);\n\t\t_filterTabs(view);\n\t}\n}\n\nfunction ready(view){\n\tprepare(view);\n\n\tview.attachEvent(\"onAfterSheetShow\", (name) => selectSheet(view,name));\n\n\tview.attachEvent(\"onCommand\", function(command){\n\t\tif(actionMap[command.id])\n\t\t\tactionMap[command.id](this);\n\t});\n\n\tif(view.$$(\"sheets\")){\n\t\tview.$$(\"sheets\").data.attachEvent(\"onStoreUpdated\", () => {\n\t\t\tchangePagerVisability(view);\n\t\t\tchangePagerStatus(view);\n\t\t});\n\t\tview.$$(\"sheets\").attachEvent(\"onAfterRender\", webix.once(() => {\n\t\t\twebix.delay(()=> changePagerVisability(view));\n\t\t}));\n\t\tview.$$(\"sheets\").attachEvent(\"onAfterScroll\", () => changePagerStatus(view));\n\t\tview.$$(\"sheets\").attachEvent(\"onAfterDrop\", (context) => dataOrder(view,context.start,context.index));\n\t\tview.$$(\"sheets\").attachEvent(\"onAfterEditStop\", (state) => rename(view,state.old,state.value));\n\t}\n}\n\nfunction getSheetsPopup(view){\n\treturn {\n\t\tview: \"popup\",\n\t\tcss: \"webix_ssheet_suggest\",\n\t\twidth: 125,\n\t\tbody:{\n\t\t\tview: \"list\",\n\t\t\tselect: true,\n\t\t\tcss: \"webix_ssheet_show_list\",\n\t\t\ttemplate: \"#id#\",\n\t\t\ton:{\n\t\t\t\tonAfterSelect: function(id) {\n\t\t\t\t\tsetState(view, id, \"visible\");\n\t\t\t\t\tview.showSheet(id);\n\t\t\t\t\tthis.getParentView().hide();\n\t\t\t\t}\n\t\t\t},\n\t\t\tmaxHeight: 200,\n\t\t\tautoheight: true\n\t\t},\n\t\ton:{\n\t\t\tonShow: function(){\n\t\t\t\tthis.getBody().showItem(view.getActiveSheet());\n\t\t\t},\n\t\t\tonBeforeShow: function(){\n\t\t\t\tconst data = view._sheets\n\t\t\t\t\t.filter(sheet => sheet.state != \"veryHidden\")\n\t\t\t\t\t.map(sheet => {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tid: sheet.name,\n\t\t\t\t\t\t\ticon: sheet.state == \"hidden\" ? \"eye-slash\" : \"eye\"\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\n\t\t\t\tconst list = this.getBody();\n\t\t\t\tlist.clearAll();\n\t\t\t\tlist.parse(data);\n\t\t\t\tlist.select(view.getActiveSheet());\n\t\t\t}\n\t\t}\n\t};\n}\n\nfunction initSheetMenu(view, e, id){\n\tif(!view.$sheetMenu){\n\t\tview.$sheetMenu = webix.ui(menuInit(view));\n\t\tview._destroy_with_me.push(view.$sheetMenu);\n\t\tview.$sheetMenu.attachEvent(\"onItemClick\", id => callAction(view,id));\n\t}\n\n\tconst oneSheet = view.$$(\"sheets\").count() == 1;\n\n\tif(view.$sheetMenu.getItem(\"remove-sheet\"))\n\t\tview.$sheetMenu[oneSheet ? \"disableItem\" : \"enableItem\"](\"remove-sheet\");\n\n\tif(view.$sheetMenu.getItem(\"hide-sheet\"))\n\t\tview.$sheetMenu[oneSheet ? \"disableItem\" : \"enableItem\"](\"hide-sheet\");\n\n\tif(view.callEvent(\"onBeforeSheetMenu\", [id]))\n\t\tview.$sheetMenu.show(e);\n}\n\nfunction changePagerStatus(view){\n\tconst sheets = view.$$(\"sheets\");\n\tconst scrollPos = sheets.getScrollState().x;\n\n\tif(scrollPos == 0){\n\t\tview.$$(\"prev-sheet\").disable();\n\t}\n\telse{\n\t\tview.$$(\"prev-sheet\").enable();\n\t\tvar tabWidth = view.config.sheetTabWidth;\n\t\tif(scrollPos == (sheets.count()-(sheets.$width/tabWidth))*tabWidth){\n\t\t\tview.$$(\"next-sheet\").disable();\n\t\t\treturn;\n\t\t}\n\t}\n\tview.$$(\"next-sheet\").enable();\n}\n\nfunction changePagerVisability(view){\n\tvar toolbar = view.$$(\"bottom-toolbar\");\n\tvar sheets = view.$$(\"sheets\");\n\n\tif(sheets.count() <= (sheets.$width/view.config.sheetTabWidth))\n\t\ttoolbar.showBatch(\"pager\", false);\n\telse\n\t\ttoolbar.showBatch(\"pager\");\n}\n\nfunction dataOrder(view, name, num){\n\tfor (let id in view._sheets) {\n\t\tif (view._sheets[id].name == name) {\n\t\t\tconst item = view._sheets.splice(id, 1);\n\t\t\tview._sheets.splice(num, 0, item[0]);\n\t\t\tbreak;\n\t\t}\n\t}\n}\n\nexport function setState(view, sheet, state){\n\tconst tab = getSheet(view, sheet);\n\n\tif(state == tab.state || (state == \"visible\" && !tab.state))\n\t\treturn;\n\n\tif(state != \"visible\"){\n\t\tconst visibleSheets = getVisible(view);\n\n\t\t//don't hide last visible tab\n\t\tif(visibleSheets.length == 1 && visibleSheets[0] === tab)\n\t\t\treturn;\n\n\t\t//select the previous sheet in case we hide the selected sheet\n\t\tif(sheet == view._activeSheet)\n\t\t\tshowPrevious(view, sheet);\n\t}\n\n\ttab.state = state;\n\t_filterTabs(view);\n\n\tview.callEvent(\"onSheetStateChange\", [sheet, state]);\n}\n\nfunction _filterTabs(view){\n\tconst tabs = view.$$(\"sheets\");\n\tif(tabs)\n\t\ttabs.filter(obj => {\n\t\t\tconst state = getSheet(view, obj.id).state;\n\t\t\treturn state != \"hidden\" && state != \"veryHidden\";\n\t\t});\n}\n\nexport function add(view, content){\n\tvar index, name, newIndex;\n\n\tindex = arr.findIndex(view._sheets, x => x.name == view._activeSheet);\n\tnewIndex = index>-1?index+1:view._sheets.length;\n\tname = getNewTitle(view);\n\tcontent = content || {data:[]};\n\tview._sheets.splice(newIndex, 0, {\n\t\tname: name,\n\t\tcontent: content\n\t});\n\n\tif(view.$$(\"sheets\"))\n\t\tview.$$(\"sheets\").add({id: name, value: name},newIndex);\n\n\tview._mData.addPage(name);\n\n\tparseToStore(view, name, content, view.config.prepareData);\n\n\tview.showSheet(name);\n\tview.callEvent(\"onSheetAdd\", [name]);\n\treturn name;\n}\n\nfunction getNewTitle(view){\n\tvar index = view._sheets.length+1;\n\twhile(getSheet(view, (webix.i18n.spreadsheet.labels.sheet+index)))\n\t\tindex++;\n\tvar name = webix.i18n.spreadsheet.labels.sheet+index;\n\treturn name;\n}\n\nfunction selectSheet(view,name){\n\tif(view.$$(\"sheets\")){\n\t\tview.$$(\"sheets\").select(name);\n\t\tview.$$(\"sheets\").showItem(name);\n\t}\n}\n\nexport function edit(view,name){\n\tif(!name)\n\t\tname = view._activeSheet;\n\tview.$$(\"sheets\").edit(name);\n}\n\nfunction _remove(view){\n\tview.confirm({\n\t\ttext: webix.i18n.spreadsheet.labels[\"sheet-remove-confirm\"]\n\t}).then(()=>{\n\t\tremove(view, view._activeSheet);\n\t});\n}\n\nfunction getVisible(view){\n\treturn view._sheets.filter(s => s.state != \"hidden\" && s.state != \"veryHidden\");\n}\n\nfunction showPrevious(view, name){\n\tconst visibleSheets = getVisible(view);\n\n\tlet index = arr.findIndex(visibleSheets, x => x.name == name);\n\t\t\t\n\tlet prevIndex = index - 1;\n\tif(!visibleSheets[prevIndex])\n\t\tprevIndex = 0;\n\tvisibleSheets.splice(index, 1);\n\n\tview.showSheet(visibleSheets[prevIndex].name);\n}\n\nexport function remove(view, name){\n\tif(view._sheets.length > 1){\n\t\tconst visibleSheets = getVisible(view);\n\n\t\t//don't remove last visible tab\n\t\tif(visibleSheets.length == 1 && visibleSheets[0] === getSheet(view, name))\n\t\t\treturn;\n\n\t\t//select the previous sheet in case we remove the selected sheet\n\t\tif(view._activeSheet == name)\n\t\t\tshowPrevious(view, name);\n\n\t\tconst index = arr.findIndex(view._sheets, x => x.name == name);\n\t\tview._sheets.splice(index, 1);\n\t\tview._mData.removePage(name);\n\n\t\tif(view.$$(\"sheets\")){\n\t\t\tview.$$(\"sheets\").remove(name);\n\t\t\tview.$$(\"sheets\").refresh();\n\t\t}\n\n\t\tview.callEvent(\"onSheetRemove\", [name]);\n\t}\n}\n\nexport function rename(view,name,newName){\n\tif (name == newName) return;\n\n\t//correct sheet name\n\tvar i = 1;\n\twhile (!newName || getSheet(view, newName)){\n\t\tnewName = webix.i18n.spreadsheet.labels.sheet + i;\n\t\ti++;\n\t}\n\tnewName = newName.replace(/[*?:[\\]\\\\/]/g,\"\").substring(0, 31);\n\n\tvar sheet = getSheet(view, name);\n\tvar sheets = view.$$(\"sheets\");\n\n\tsheet.name = newName;\n\tif(view._activeSheet == name)\n\t\tview._activeSheet = newName;\n\n\tif(sheets){\n\t\tlet item = sheets.getItem(name);\n\t\titem.value = newName;\n\t\tsheets.data.changeId(name,newName);\n\t\tsheets.refresh(newName);\n\t}\n\n\tview._mData.renamePage(name, newName);\n\tview.callEvent(\"onSheetRename\", [name, newName]);\n}\n\nexport function serialize(view, obj, config){\n\tconst active = getSheet(view, view._activeSheet);\n\tactive.content = obj;\n\tactive.state = active.state || \"visible\";\n\n\tconst sheets = webix.copy(view._sheets);\n\n\tconst math = !config || config.math!==false;\n\tconst compactStyles = config && config.compactStyles;\n\n\tsheets.forEach(sheet => {\n\t\tif(sheet.name != view._activeSheet){\n\t\t\tsheet.content.data = getSheetData(view, math, sheet.name);\n\t\t\tsheet.state = sheet.state || \"visible\";\n\t\t\tif(compactStyles)\n\t\t\t\tsheet.content.styles = removeUnusedStyles(sheet.content);\n\t\t\tsheet.content.ranges = view.ranges.serialize(sheet.name);\n\t\t}\n\t});\n\n\treturn sheets;\n}\n\nfunction parseToStore(view, name, obj, prepareData){\n\tview.ranges.parse(obj.ranges, name);\n\n\twebix.extend(obj, {\n\t\tstyles: [],\n\t\tformats: [],\n\t\teditors: []\n\t});\n\n\tconst page = view._mData.getPage(name);\n\tconst data = obj.data.map(arr => {\n\t\tconst invalidValue = webix.isUndefined(arr[2]) || arr[2] === null;\n\n\t\tif(prepareData){\n\t\t\tif(invalidValue)\n\t\t\t\tarr[2] = \"\";\n\t\t\telse {\n\t\t\t\tconst linkRegex = /^=link\\(/i;\n\t\t\t\tif(typeof arr[2] == \"string\" && linkRegex.test(arr[2])){\n\t\t\t\t\t// LINK is deprecated\n\t\t\t\t\tarr[2] = arr[2].replace(linkRegex, \"=HYPERLINK(\");\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst cell = loadCell(view, obj, arr);\n\t\t\t//cell value and type can be changed via types module\n\t\t\tarr[2] = cell.value;\n\t\t\tarr[3] = arr[3] || \"\";\n\t\t\tarr[4] = cell.type;\n\n\t\t\tprepareCell(arr, obj);\n\t\t}\n\t\telse if(invalidValue)\n\t\t\tthrow `unsupported value in ${escapeSheet(name)}!${encode[arr[0]]}${arr[1]}`;\n\n\t\treturn [ arr[0]-1, arr[1]-1, {\n\t\t\tvalue: arr[2],\n\t\t\ttype: arr[4],\n\t\t\tstyle: arr[3],\n\t\t\t$format: checkFormat({ fmt: getFormatFromData(obj, arr) }, \"string\") ? 1 : 0\n\t\t}];\n\t});\n\n\tpage.parse(data, true);\n}\n\nexport function prepareCell(cell, data, update){\n\tconst isDate = cell[4] == \"date\";\n\tif(isDate || update){\n\t\tconst isString = typeof cell[2] == \"string\";\n\n\t\tconst link = update && isString && /^=hyperlink\\(/i.test(cell[2]);\n\n\t\tconst styleProperties = cell[3] ? arr.find(data.styles, style => style[0] == cell[3]) : null;\n\t\tconst styleObj = styleProperties ? styleFromText(styleProperties[1]) : {};\n\n\t\tif((isDate && !styleProperties || !styleObj.format) || link){\n\t\t\tlet props = {};\n\n\t\t\tif(link){\n\t\t\t\tcell[3] = \"wss_link\" + (styleProperties ? \"_\"+cell[3] : \"\");\n\t\t\t\tprops = { color: \"#0000ff\", underline: \"underline\" };\n\t\t\t}\n\t\t\telse if(isString && /^=time\\(/i.test(cell[2])){\n\t\t\t\tcell[3] = \"wss_load_time\" + (styleProperties ? \"_\"+cell[3] : \"\");\n\t\t\t\tprops.format = cell[3]+\"_fmt\";\n\t\t\t\tdata.formats.push([props.format, webix.i18n.spreadsheet.formats.timeFormat]);\n\t\t\t}\n\t\t\telse{\n\t\t\t\tcell[3] = \"wss_load_date\" + (styleProperties ? \"_\"+cell[3] : \"\");\n\t\t\t\tprops.format = \"date\";\n\t\t\t}\n\n\t\t\tif(!arr.find(data.styles, style => style[0] == cell[3]))\n\t\t\t\tdata.styles.push([\n\t\t\t\t\tcell[3],\n\t\t\t\t\tstyleToText({props: webix.extend(styleObj, props, true)})\n\t\t\t\t]);\n\t\t}\n\t}\n}\n\nexport function load(view, obj, excel){\n\tview._loading_data = true;\n\tobj = webix.isArray(obj)?{sheets:obj}:obj;\n\tconst prepareData = view.config.prepareData || excel;\n\n\tif(!obj.sheets && view._activeSheet){\n\t\t//loading into active sheet\n\t\tconst name = view._activeSheet;\n\t\tgetSheet(view, name).content = obj;\n\t\tparseToStore(view, name, obj, prepareData);\n\t\trefresh(view, obj);\n\t} else {\n\t\t//creating new set of sheets\n\t\tprepare(view, obj, prepareData);\n\t}\n\tview._loading_data = false;\n}\n\nexport function prepare(view, obj, prepareData){\n\tif(!obj) obj = {data:[]}; \n\tif(!obj.sheets){\n\t\tobj = newSheet(obj);\n\t}\n\n\tview._activeSheet = \"\";\n\tview._sheets = obj.sheets;\n\tview._mData = new DataStore({strict: view.config.strict});\n\n\t// first add all pages then parse data in them\n\tobj.sheets.forEach(sheet => {\n\t\tview._mData.addPage(sheet.name);\n\t});\n\n\tobj.sheets.forEach(sheet => {\n\t\tconst content = sheet.content;\n\t\tconst sheetName = sheet.name;\n\n\t\tparseToStore(view, sheetName, content, prepareData);\n\t});\n\n\treset(view, obj);\n\tshow(view, getVisible(view)[0].name);\n}\n\nexport function newSheet(obj){\n\treturn {\n\t\tsheets:[{\n\t\t\tname: webix.i18n.spreadsheet.labels.sheet + 1,\n\t\t\tcontent: obj\n\t\t}]\n\t};\n}\n\nexport function show(view, name){\n\tif (name == view._activeSheet) return;\n\n\tif(view.callEvent(\"onBeforeSheetShow\", [name])){\n\t\tif (view._activeSheet)\n\t\t\tgetSheet(view, view._activeSheet).content = view.serialize();\n\n\t\tview._activeSheet = name;\n\t\tconst obj = getSheet(view, name).content;\n\n\t\tview._mPage = view._mData.getPage(name);\n\n\t\trefresh(view, obj);\n\n\t\tview.callEvent(\"onAfterSheetShow\", [name]);\n\t}\n}\n\nexport function getSheet(view, name){\n\treturn arr.find(view._sheets, x => x.name == name);\n}\n\nexport function isVisible(view, sheet){\n\tsheet = getSheet(view, sheet);\n\treturn sheet.state != \"hidden\" && sheet.state != \"veryHidden\";\n}\n\nexport function eachSheet(view, callback){\n\tfor (var i=0; i ready(view));\n\n\tvar datatable = {\n\t\tview:\"datatable\", id:\"cells\", css:\"webix_ssheet_table webix_data_border wss_\"+view.$index,\n\t\theaderRowHeight: webix.skin.$name == \"contrast\" || webix.skin.$name == \"flat\" ? 24 : 20,\n\t\tspans: true,\n\t\tleftSplit: 1,\n\t\tareaselect:true,\n\t\tminColumnWidth:38,\n\t\teditable:true,\n\t\teditaction:(extra.liveEditor ? \"custom\" : \"dblclick\"),\n\t\tminRowHeight:1,\n\t\tnavigation:true,\n\t\tonClick:{ \n\t\t\t\"webix_ssheet_ref\" : event => {\n\t\t\t\tconst ref = event.target.getAttribute(\"data-ref\").replaceAll(\"'\", \"'\");\n\t\t\t\tif(showCells(view, ref))\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t};\n\n\tif (extra)\n\t\tdatatable = webix.extend(datatable, extra, true);\n\n\treturn datatable;\n}\n\nfunction ready(view){\n\tvar grid = view._table;\n\n\tvar showCommentHandler = webix.event(document.body, \"pointermove\", function(){\n\t\tvar thread;\n\t\treturn function(e) {\n\t\t\tif (e.pointerType !== \"mouse\") return;\n\n\t\t\tclearTimeout(thread);\n\t\t\tthread = webix.delay(function(e){\n\t\t\t\tif(view.comments._activeComment.editStatus)\n\t\t\t\t\treturn;\n\n\t\t\t\tvar cell = grid.locate(e);\n\t\t\t\tvar visible = view.comments.commentsView && view.comments.commentsView.isVisible();\n\n\t\t\t\tif(cell && view.comments.get(cell.row, cell.column)){\n\t\t\t\t\tvar activeCell = view.comments._activeComment.cell;\n\t\t\t\t\tif((activeCell && (activeCell.row != cell.row || activeCell.column != cell.column)) || !visible)\n\t\t\t\t\t\tview.callEvent(\"onCommand\",[{id: \"add-comment\", cell, viewonly: true }]);\n\t\t\t\t}\n\t\t\t\telse if(visible && !view.comments.commentsView.$view.contains(e.target))\n\t\t\t\t\tview.callEvent(\"onCommentHide\", []);\n\t\t\t}, true, [e], 250);\n\t\t};\n\t}());\n\n\t//in grid math\n\tif (view.config.math){\n\t\tgrid.config.editMath = true;\n\t}\n\n\t//saving value after edit\n\tgrid.attachEvent(\"onBeforeEditStop\", (st, ed) => {\n\t\tgrid.$anyKey = false;\n\t\tconst old = view.getCellValue(ed.row, ed.column);\n\t\t//ignore empty cells\n\t\tif (old === \"\" && st.value === \"\") return;\n\n\t\tif (st.value != old){\n\t\t\tview.setCellValue(ed.row, ed.column, st.value);\n\t\t\tgrid.refresh();\n\t\t}\n\t\tst.value = st.old;\n\t});\n\n\tgrid.attachEvent(\"onEnter\", function(ev){\n\t\tif (grid.getEditor()){\n\t\t\twebix.delay(function(){\n\t\t\t\tgrid.moveSelection(\"down\");\n\t\t\t});\n\t\t}\n\t\twebix.html.preventEvent(ev);\n\t});\n\n\t//prevent editing of locked cells\n\tview.attachEvent(\"onBeforeEditStart\", (row, column) => !view.isCellLocked(row, column));\n\tgrid.attachEvent(\"onAfterEditStart\", ({row, column}) => {\n\t\tlet v = view.getCellValue(row, column);\n\n\t\tif(grid.$anyKey){\n\t\t\tgrid.$anyKey = false;\n\t\t\tv = \"\";\n\t\t}\n\n\t\tgrid.getEditor().setValue(v);\n\t});\n\tgrid.attachEvent(\"onBeforeEditStart\", (editor) => \n\t\tview.callEvent(\"onBeforeEditStart\", [editor.row, editor.column]) );\n\n\t//column drag event checking\n\tlet dragStartColumn;\n\tlet dragEndColumn;\n\n\t//column and row selection\n\tgrid.attachEvent(\"onBeforeSelect\", (id) => id.column != \"rowId\" );\n\tgrid.attachEvent(\"onBeforeBlockSelect\", (start, end, finalStep) => {\n\t\tcop.highlightColRow(\n\t\t\tfinalStep ? start : webix.copy(start),\n\t\t\tfinalStep ? end : webix.copy(end),\n\t\t\tview\n\t\t);\n\t});\n\n\tfunction highlightHeaders(){\n\t\tlet ids = grid.getSelectedId(true);\n\t\tif(ids.length){\n\t\t\tlet start = ids[0];\n\t\t\tlet end = ids[ids.length-1]?ids[ids.length-1]:ids[0];\n\t\t\tcop.highlightColRow(start, end, view);\n\t\t}\n\t\telse {\n\t\t\tlet data = {row:0, column:0};\n\t\t\tcop.highlightColRow(data, data, view);\n\t\t}\n\t}\n\n\tgrid.attachEvent(\"onSelectChange\", () => highlightHeaders());\n\tgrid.attachEvent(\"onAfterColumnShow\", () => {\n\t\twebix.delay(() => highlightHeaders());\n\t});\n\tgrid.attachEvent(\"onColumnResize\", () => {\n\t\twebix.delay(() => highlightHeaders());\n\t});\n\n\twebix.event(grid.$view.firstChild, \"mousedown\", e => {\n\t\tconst resizeColumn = grid.config.resizeColumn;\n\t\tconst col = grid.locate(e);\n\n\t\tif(col && col.cind){\n\t\t\tif(resizeColumn){\n\t\t\t\tconst dx = grid.getColumnConfig(col.column).width;\n\t\t\t\tconst pos = webix.html.posRelative(e);\n\t\t\t\tif(pos.x < resizeColumn.size || dx-pos.x < resizeColumn.size+1)\n\t\t\t\t\treturn;\n\t\t\t}\n\t\t\tdragStartColumn = col.cind;\n\t\t}\n\t});\n\n\twebix.event(grid.$view.firstChild, \"mousemove\", e => {\n\t\tif(dragStartColumn){\n\t\t\tconst col = grid.locate(e);\n\n\t\t\tif(col){\n\t\t\t\tdragEndColumn = col.cind;\n\t\t\t\tcop.highlightColRow(\n\t\t\t\t\t{column: grid.columnId(dragStartColumn)},\n\t\t\t\t\t{column: grid.columnId(dragEndColumn||1)},\n\t\t\t\t\tview\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t});\n\n\tconst selectColumnHandler = webix.event(document.body, \"mouseup\", () => {\n\t\tif(dragStartColumn){\n\t\t\tif(dragEndColumn != null){\n\t\t\t\tcop.selectColumn(\n\t\t\t\t\tgrid.columnId(dragStartColumn),\n\t\t\t\t\tview,\n\t\t\t\t\tgrid.columnId(dragEndColumn||1)\n\t\t\t\t);\n\t\t\t\tdragEndColumn = null;\n\t\t\t}\n\t\t\tdragStartColumn = null;\n\t\t}\n\t});\n\n\tgrid.attachEvent(\"onItemDblClick\", (id) => {\n\t\tif (id.column === \"rowId\")\n\t\t\tcop.adjustRow(id.row, view);\n\t});\n\n\tlet lastHeaderClick = 0;\n\tgrid.attachEvent(\"onHeaderClick\", (id, e) => {\n\t\tif(id.column == \"rowId\"){\n\t\t\tcop.selectAll(view);\n\t\t\treturn;\n\t\t}\n\t\tlet headerClick = new Date();\n\t\tlet dblClick = (headerClick - lastHeaderClick <= 300);\n\n\t\tif (dblClick) {\n\t\t\tcop.adjustColumn(id.column, view);\n\t\t} else {\n\t\t\tlastHeaderClick = headerClick;\n\t\t\tif (e.shiftKey) {\n\t\t\t\tcop.selectColumns(id.column, view);\n\t\t\t} else {\n\t\t\t\tcop.selectColumn(id.column, view);\n\t\t\t}\n\t\t}\n\t});\n\n\t//select rows by shift click\n\tvar lastClickedRow = null;\n\tgrid.attachEvent(\"onItemClick\", (cell, e) => {\n\t\tif (cell.column === \"rowId\") {\n\t\t\tif (!e.shiftKey)\n\t\t\t\tcop.selectRow(cell.row, view);\n\t\t\telse {\n\t\t\t\tif (!lastClickedRow)\n\t\t\t\t\tcop.selectRow(cell.row, view);\n\t\t\t\telse\n\t\t\t\t\tcop.selectRow(lastClickedRow, view, cell.row);\n\t\t\t}\n\t\t\tlastClickedRow = cell.row;\n\t\t}\n\t});\n\n\t//reset API\n\tview.attachEvent(\"onReset\", () => reset(view));\n\n\tview.attachEvent(\"onBeforeSheetShow\", () => grid.editStop());\n\n\tgrid.attachEvent(\"onBlur\", function(){\n\t\t//after focus moved out, check and if it is somewhere\n\t\t//on the spreadsheet controls them move focus back to datatable\n\t\twebix.delay(function(){\n\t\t\tvar target = document.activeElement;\n\n\t\t\tif (target && target.tagName == \"INPUT\") return;\n\n\t\t\tvar focus = webix.UIManager.getFocus();\n\t\t\tvar need_focus = focus &&\n\t\t\t\tfocus != grid &&\n\t\t\t\tfocus.getTopParentView &&\n\t\t\t\tfocus.getTopParentView() === view;\n\n\t\t\tif (need_focus)\n\t\t\t\twebix.UIManager.setFocus(grid);\n\n\t\t}, this, [], 100);\n\t});\n\n\tsetDefaultCss(view);\n\n\tview.attachEvent(\"onDestruct\", () => {\n\t\twebix.eventRemove(showCommentHandler);\n\t\twebix.eventRemove(selectColumnHandler);\n\t});\n}\n\nexport function cell_template(view, obj, common, _v, column, valueOnly){\n\tconst formulasMode = view.$$(\"cells\").config.showFormulas && !valueOnly;\n\n\tconst col = column.id;\n\tconst row = obj.id;\n\n\tif (!view._mPage) return \"\";\n\tconst cell = view._mPage.getCell(row-1, col-1);\n\n\tlet value = cell ? cell.value : \"\";\n\tconst format = cell ? cell.format : \"\";\n\n\tconst math = view.getCellValue(row, col);\n\n\tif(formulasMode)\n\t\tvalue = math;\n\n\tif(math != value){\n\t\tconst locale = webix.i18n.spreadsheet.table;\n\t\tif(value == \"#REF!\")\n\t\t\tvalue = locale[\"math-ref-error\"];\n\t\telse if(value == \"#ERROR\")\n\t\t\tvalue = locale[\"math-error\"];\n\t}\n\n\tlet css = \"\";\n\tconst text = (typeof value == \"string\" && value.trim()[0] == \"+\") || (!value && value !== 0) || isNaN(value);\n\tconst invalidDate = !formulasMode && fmt.checkFormat(format, \"date\") && fmt.isDateInvalid(value);\n\n\tlet extra = \"\";\n\tif (!valueOnly){\n\t\textra += view.comments.get(row, col) ? \"
\" : \"\";\n\t\textra += view.getCellFilter(row, col) ? \"
\" : \"\";\n\t}\n\n\t//text can be formatted only in case of string number format\n\tif(!invalidDate && (typeof value == \"boolean\" || !text || fmt.checkFormat(format, \"string\"))){\n\t\tif (format){\n\t\t\tconst cell = { css:\"\" };\n\t\t\tconst helper = fmt.getFormat(format);\n\t\t\tif (helper){\n\t\t\t\tlet newValue = helper(value, cell);\n\n\t\t\t\tif(newValue != webix.i18n.spreadsheet.table[\"format-error\"]){\n\t\t\t\t\tif (cell.css)\n\t\t\t\t\t\tcss = `class=\"${cell.css}\"`;\n\t\t\t\t\tvalue = newValue;\n\t\t\t\t}\n\t\t\t\telse if(!text)\n\t\t\t\t\tvalue *= 1;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t\tvalue *= 1;\n\t}\n\n\t//print only cell values (td with position:relative ignores borders while printing)\n\tif(view._print && !(value || value === 0))\n\t\treturn \"\";\n\n\tif(webix.isUndefined(value) || value === null)\n\t\tvalue = \"\";\n\n\treturn `
${value}
${view._print ? \"\" : extra}`;\n}\n\nexport function reset(view){\n\tconst grid = view.$$(\"cells\");\n\tgrid.clearAll();\n\n\tconst columns = view.config.columnCount;\n\tconst rows = view.config.rowCount;\n\n\tconst cols = [{\n\t\tid:\"rowId\", header:\"\", width:40,\n\t\tcss:\"sheet_column_0\",\n\t\ttemplate:(el) => {\n\t\t\treturn el.id;\n\t\t}\n\t}];\n\n\tfor (let i=1; i<=columns; i++){\n\t\tcols.push({\n\t\t\tid:i,\n\t\t\teditor:\"text\",\n\t\t\theader:{\n\t\t\t\ttext: nms.encode[i]\n\t\t\t},\n\t\t\ttemplate:function(obj, common, value, column){\n\t\t\t\treturn cell_template(view, obj, common, value, column);\n\t\t\t},\n\t\t\tcssFormat:function(value, obj, row, column){\n\t\t\t\tconst rendered = getRenderedValue(view, row, column);\n\t\t\t\tconst cell = view._mPage.getCell(row-1, column-1);\n\n\t\t\t\tlet css = cell ? (cell.style || \"\") : \"\";\n\n\t\t\t\tconst conditional = getConditionCss(view, row, column, rendered);\n\t\t\t\tif(conditional)\n\t\t\t\t\tcss += (css ? \" \" : \"\") + conditional;\n\n\t\t\t\tconst borders = view._printBorders.$render;\n\t\t\t\tif(borders){\n\t\t\t\t\tif(borders.cols[column])\n\t\t\t\t\t\tcss += (css ? \" \" : \"\") + \"webix_ss_print_border_right\";\n\t\t\t\t\tif(borders.rows[row])\n\t\t\t\t\t\tcss += (css ? \" \" : \"\") + \"webix_ss_print_border_bottom\";\n\t\t\t\t}\n\n\t\t\t\treturn css;\n\t\t\t}\n\t\t});\n\t\tview.callEvent(\"onColumnInit\",[cols[i]]);\n\t}\n\tgrid.refreshColumns(cols);\n\n\tconst data = [];\n\tfor (let i=1; i<=rows; i++)\n\t\tdata.push({ id:i });\n\n\tgrid.parse(data);\n}\n\nexport function getRenderedValue(view, row, col){\n\tconst htmlFilter = /<[^>]*>/gi;\n\treturn cell_template(view, {id: row}, null, null, {id: col}, true).replace(htmlFilter, \"\");\n}\n\n// nowrap by default\nfunction setDefaultCss(view){\n\twebix.html.addStyle(\"#\"+view._table.$view.id+\".webix_dtable .webix_cell { white-space:nowrap;}\");\n}\n","import group from \"./operations/undo_group\";\nimport {selectAll} from \"./operations/column_operations\";\nimport {styleFormats} from \"./toolbar/buttons\";\n\nexport function init(view){\n\tconst grid = view.$$(\"cells\");\n\tconst key = webix.env.isMac ? \"command\" : \"ctrl\";\n\n\twebix.UIManager.addHotKey(key+\"-a\", () => { if(!grid.getEditor()) selectAll(view); }, grid);\n\twebix.UIManager.addHotKey(key+\"-p\", (v, e) => dialog(\"print\", view, e), grid);\n\n\tif(!view.config.readonly){\n\t\twebix.UIManager.addHotKey(\"any\", (view, ev) => {\n\t\t\tconst code = ev.which || ev.keyCode;\n\t\t\tconst f2 = code == 113;\n\n\t\t\t//ignore shift key, f1, f3 - f12 (f2 - edit)\n\t\t\tif (code == 16 || (code >= 112 && code <= 123 && !f2)) return;\n\n\t\t\tconst sel = view.getSelectedId(true);\n\t\t\tif (sel.length){\n\t\t\t\tif(!(view.config.liveEditor && f2))\n\t\t\t\t\tgrid.$anyKey = true;\n\t\t\t\tgrid.edit(sel[0]);\n\t\t\t}\n\t\t}, grid);\n\n\t\twebix.UIManager.addHotKey(\"enter\", (view) => {\n\t\t\tconst sel = view.getSelectedId(true);\n\t\t\tif (sel.length){\n\t\t\t\tif(!(view.config.liveEditor && !grid.callEvent(\"onBeforeLiveEditor\", [sel[0]])))\n\t\t\t\t\tgrid.edit(sel[0]);\n\t\t\t}\n\t\t}, grid);\n\n\t\twebix.UIManager.addHotKey(\"backspace\", () => del(view), grid);\n\t\twebix.UIManager.addHotKey(\"delete\", () => del(view), grid);\n\n\t\tconst redo = webix.env.isMac ? \"command-shift-z\" : \"ctrl-y\";\n\t\twebix.UIManager.addHotKey(redo, () => view.redo(), grid);\n\t\twebix.UIManager.addHotKey(key+\"-z\", () => view.undo(), grid);\n\n\t\twebix.UIManager.addHotKey(key+\"-b\", () => styleHotKey(view, \"font-weight\"), grid);\n\t\twebix.UIManager.addHotKey(key+\"-i\", () => styleHotKey(view, \"font-style\"), grid);\n\t\twebix.UIManager.addHotKey(key+\"-u\", (v, e) => ctrlU(view, e), grid);\n\n\t\tconst strike = webix.env.isMac ? \"command-shift-x\" : \"ctrl-alt-s\";\n\t\twebix.UIManager.addHotKey(strike, () => styleHotKey(view, \"strike\"), grid);\n\n\t\twebix.UIManager.addHotKey(key+\"-`\", () => view.showFormulas(\"toggle\"), grid);\n\t}\n}\n\nfunction del(view) {\n\tif(!view.$$(\"cells\").getEditor())\n\t\tgroup.set(function(){\n\t\t\tview.eachSelectedCell((cell) => view.setCellValue(cell.row,cell.column, \"\"));\n\t\t\tview.refresh();\n\t\t});\n}\n\nfunction ctrlU(view, e) {\n\tstyleHotKey(view, \"underline\");\n\treturn webix.html.preventEvent(e);\n}\n\nfunction dialog(id, view, e) {\n\tview.callEvent(\"onCommand\",[{id}]);\n\treturn webix.html.preventEvent(e);\n}\n\nfunction styleHotKey(view, attr) { \n\tvar cell = view.getSelectedId();\n\tif(cell){\n\t\tvar style = view.getStyle(cell.row, cell.column);\n\n\t\tvar elementOn = styleFormats[attr]||attr;\n\t\tvar elementOff = \"normal\";\n\n\t\tvar state = (style && style.props[attr] === elementOn)? elementOff : elementOn;\n\t\tview.callEvent(\"onStyleSet\", [attr, state]);\n\t}\n}","import {methods} from \"@xbs/muon\";\n\nlet methodsName = [];\nfor(let name in methods)\n\tmethodsName.push(name);\n\nexport function init(view){\n\tview.attachEvent(\"onComponentInit\", () => ready(view));\n\n\treturn {\n\t\tview:\"toolbar\",\n\t\tcss:\"webix_ssheet_toolbar\",\n\t\telements:[\n\t\t\t{\n\t\t\t\tview:\"text\",\n\t\t\t\ticon: \"wxi-menu-down\",\n\t\t\t\ton: {\n\t\t\t\t\tonItemClick: function(){\n\t\t\t\t\t\tconst suggest = webix.$$(this.config.suggest);\n\t\t\t\t\t\tif(!suggest.isVisible())\n\t\t\t\t\t\t\tsuggest.show(this.getInputNode());\n\t\t\t\t\t},\n\t\t\t\t\tonChange: (val, oldVal, config) => {\n\t\t\t\t\t\tif(config == \"user\" && val !== \"\")\n\t\t\t\t\t\t\tview.showCell(val);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tsuggest: {\n\t\t\t\t\tview:\"ssheet-suggest-labels\",\n\t\t\t\t\tcss: \"webix_ssheet_nav_suggest\",\n\t\t\t\t\tbody: {\n\t\t\t\t\t\ttemplate: \"#name##value#\",\n\t\t\t\t\t\twidth: 250\n\t\t\t\t\t},\n\t\t\t\t\ton:{\n\t\t\t\t\t\tonBeforeShow: function(){\n\t\t\t\t\t\t\tconst data = view.ranges.serialize(view.getActiveSheet()).map(r => ({name: r[0], value: r[1]}));\n\n\t\t\t\t\t\t\tif(!data.length)\n\t\t\t\t\t\t\t\treturn false;\n\n\t\t\t\t\t\t\tconst list = this.getList();\n\t\t\t\t\t\t\tlist.clearAll();\n\t\t\t\t\t\t\tlist.parse(data);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tdata: []\n\t\t\t\t},\n\t\t\t\twidth: 150,\n\t\t\t\tid: \"navigation\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tview: \"ssheet-separator\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tview:\"label\",\n\t\t\t\tlabel:webix.i18n.spreadsheet.liveEditor[\"edit\"],\n\t\t\t\twidth:65\n\t\t\t},\n\t\t\t{\n\t\t\t\tview:\"live-editor\",\n\t\t\t\tdisabled:true,\n\t\t\t\tid:\"liveEditor\",\n\t\t\t\tsuggestData: methodsName\n\t\t\t}\n\t\t]\n\t};\n}\n\nfunction ready(view){\n\tconst editor = view.$$(\"liveEditor\");\n\tconst nav = view.$$(\"navigation\");\n\tconst grid = view._table;\n\n\t//block native editor, and move focus to the custom input\n\t//edit by key press\n\tgrid.attachEvent(\"onBeforeEditStart\", function(cell){\n\t\tconst mode = grid.$anyKey;\n\t\tgrid.$anyKey = false;\n\n\t\treturn startEdit(this, cell, mode);\n\t});\n\t//edit by enter key\n\tgrid.attachEvent(\"onBeforeLiveEditor\", function(cell){\n\t\treturn startEdit(this, cell, false);\n\t});\n\t//edit by dbl-click\n\tgrid.attachEvent(\"onItemDblClick\", function(cell){\n\t\tif(view.getCellEditor(cell.row, cell.column))\n\t\t\tthis.edit(cell);\n\t\telse\n\t\t\tstartEdit(this, cell, false);\n\t});\n\n\tgrid.attachEvent(\"onAfterScroll\", function(){\n\t\tif(editor.$view.contains(document.activeElement))\n\t\t\teditor.paintValue();\n\t});\n\n\tview.attachEvent(\"onCellChange\", (r,c,v,p) => {\n\t\tif(p == view.getActiveSheet()){\n\t\t\tconst cell = editor.config.activeCell;\n\t\t\tif (cell && cell.row == r && cell.column == c)\n\t\t\t\teditor.setValue(v);\n\t\t}\n\t});\n\n\tview.attachEvent(\"onAfterSelect\", data => {\n\t\tif (!view.$handleSelection)\n\t\t\tfillEditor(data[0]);\n\t});\n\n\tview.attachEvent(\"onChange\", mode => {\n\t\tif (mode == \"update\" && editor.isEnabled()){\n\t\t\tconst cell = editor.config.activeCell;\n\t\t\tif(cell && editor.getValue() != view.getCellValue(cell.row, cell.column)){\n\t\t\t\tdelete editor._update_range;\n\t\t\t\teditor.showActiveSheet();\n\t\t\t\teditor.updateCellValue();\n\t\t\t}\n\t\t}\n\t});\n\n\tview.attachEvent(\"onBeforeSheetShow\", name => {\n\t\tif(view._rangeDialog)\n\t\t\treturn;\n\t\tconst cell = editor.config.activeCell;\n\t\tif(cell){\n\t\t\tconst cursor = editor.getInputNode().selectionStart;\n\t\t\tconst val = editor.getValue();\n\t\t\tif(view.getCellValue(cell.row, cell.column) != val){\n\t\t\t\tif(!editor._activeMath)\n\t\t\t\t\teditor._activeMath = view.getActiveSheet();\n\t\t\t\twebix.delay(()=>{\n\t\t\t\t\tif(name == editor._activeMath){\n\t\t\t\t\t\tview.$handleSelection = null;\n\t\t\t\t\t\tconst cell = editor.config.activeCell;\n\t\t\t\t\t\tgrid.select(cell.row, cell.column);\n\t\t\t\t\t}\n\n\t\t\t\t\teditor.setValue(val);\n\t\t\t\t\t//update highlight\n\t\t\t\t\teditor.refresh();\n\n\t\t\t\t\teditor.getInputNode().setSelectionRange(cursor, cursor);\n\t\t\t\t\teditor.paintValue();\n\n\t\t\t\t\tview.$handleSelection = function(a,b,st,en){ return pasteRange(st, en, a); };\n\t\t\t\t});\n\t\t\t}\n\t\t\telse{\n\t\t\t\tnav.setValue(\"\");\n\t\t\t\tclearEditor();\n\t\t\t}\n\t\t}\n\t});\n\n\tview.attachEvent(\"onReset\", () => {\n\t\tif(!view._rangeDialog)\n\t\t\tview.$handleSelection = null;\n\t});\n\tview.$$(\"cells\").attachEvent(\"onFocus\", ()=>{\n\t\t//ignore table clipboard logic\n\t\tif(editor._activeMath){\n\t\t\twebix.delay(()=>editor.focus());\n\t\t}\n\t});\n\n\tview.attachEvent(\"onAfterLoad\", () => clearEditor());\n\n\tview.attachEvent(\"onAction\", function(name, options){\n\t\tconst cell = editor.config.activeCell;\n\t\tconst isActiveCell = cell && cell.row == options.row && cell.column == options.column;\n\t\tif(isActiveCell && (name == \"lock\" || name == \"dropdown\"))\n\t\t\tdisableEditor(options.row, options.column);\n\t});\n\n\tview.attachEvent(\"onFormatChange\", (r, c) => updateEditor(r, c));\n\tview.attachEvent(\"onCellChange\", (r, c, v , p) => {\n\t\tif(p == view.getActiveSheet())\n\t\t\tupdateEditor(r, c);\n\t});\n\n\tfunction updateEditor(row, column){\n\t\tconst activeCell = editor.config.activeCell;\n\t\tif(activeCell && activeCell.row == row && activeCell.column == column)\n\t\t\tfillEditor({row, column});\n\t}\n\n\tfunction startEdit(table, cell, clear){\n\t\t//do not interfere with custom editors\n\t\tif (!view.getCellEditor(cell.row, cell.column) && fillEditor(cell, clear)){\n\t\t\teditor.focus();\n\n\t\t\tif(!clear){\n\t\t\t\teditor.paintValue();\n\n\t\t\t\tconst input = editor.getInputNode();\n\t\t\t\tconst symbols = input.value.length;\n\t\t\t\tinput.setSelectionRange(symbols, symbols);\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction disableEditor(row,column){\n\t\tconst disabled = view.getCellEditor(row, column) || view.isCellLocked(row, column);\n\t\tif(disabled)\n\t\t\teditor.disable();\n\t\telse\n\t\t\teditor.enable();\n\t\treturn disabled;\n\t}\n\n\tfunction fillEditor(cell, clear){\n\t\tconst disabled = disableEditor(cell.row, cell.column);\n\t\teditor.config.activeCell = cell;\n\t\teditor.setValue( clear ? \"\" : editor.getCellValue(cell.row, cell.column) );\n\n\t\tif(!view._rangeDialog)\n\t\t\tview.$handleSelection = disabled ? null : function(a,b,st,en){ return pasteRange(st, en, a); };\n\n\t\treturn !disabled;\n\t}\n\n\tfunction pasteRange(st, en, cell){\n\t\tconst updateRange = editor._update_range;\n\t\tlet cursor = editor.getInputNode().selectionStart;\n\n\t\tlet sheet = \"\";\n\t\tif(editor._activeMath){\n\t\t\tconst activeSheet = view.getActiveSheet();\n\t\t\tif(editor._activeMath != activeSheet)\n\t\t\t\tsheet = editor.prepareSheet(activeSheet);\n\t\t}\n\n\t\tlet range;\n\t\tif(st == en){\n\t\t\tconst colon = editor.getValue()[ (updateRange ? updateRange.pos : cursor)-1 ] == \":\";\n\t\t\trange = colon ? st : sheet+st;\n\t\t}\n\t\telse\n\t\t\trange = `${sheet+st}:${en}`;\n\n\t\tif(updateRange && updateRange.pos == cursor - updateRange.len){\n\t\t\teditor.setRange(range, true);\n\t\t\tcursor = editor._update_range.pos + range.length;\n\t\t}\n\t\telse if(editor.expectOperator()){\n\t\t\teditor.setRange(range);\n\t\t\tcursor += range.length;\n\t\t}\n\t\telse\n\t\t\treturn endEdit(cell);\n\n\t\teditor.focus();\n\t\teditor.getInputNode().setSelectionRange(cursor, cursor);\n\t\teditor.paintValue();\n\n\t\treturn false;\n\t}\n\n\tfunction endEdit(st){\n\t\tif (editor.isEnabled()){\n\t\t\tconst cell = editor.config.activeCell;\n\t\t\teditor.showActiveSheet();\n\t\t\teditor.updateCellValue(cell);\n\t\t\teditor.setValue(st ? view.getCellValue(st.row, st.column) : \"\");\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction clearEditor(){\n\t\teditor.define({activeCell:null});\n\t\teditor.setValue(\"\");\n\t\teditor.disable();\n\t}\n}\n","import \"../views/formlate\";\n\nexport class Dialog{\n\tconstructor(view){\n\t\tthis.view = view;\n\t}\n\t$init(){}\n\t$show(){}\n\t$hide(){}\n\topen(){\n\t\tif(!this.$dialog){\n\t\t\tthis.$dialog = webix.ui(this.$init());\n\t\t\tthis.view._destroy_with_me.push(this.$dialog);\n\t\t\tthis.$dialog.attachEvent(\"onHide\", ()=> {\n\t\t\t\tthis.$hide();\n\t\t\t\twebix.UIManager.setFocus(this.view);\n\t\t\t});\n\t\t\tthis.$dialog.attachEvent(\"onShow\", ()=> {\n\t\t\t\twebix.UIManager.setFocus(this.$dialog);\n\t\t\t});\n\t\t}\n\t\telse if(this.$dialog.isVisible())\n\t\t\treturn;\n\n\t\tconst form = this.$dialog.getBody();\n\t\tthis.$dialog.show();\n\t\tif (this.$show(this.$dialog, form) === false)\n\t\t\tthis.close();\n\t}\n\tclose(){\n\t\tthis.$dialog.hide();\n\t}\n}","export function image(url){\n\treturn `=IMAGE(\"${url}\")`;\n}\n\nexport function chart(config){\n\tconfig = webix.copy(config);\n\n\tconst bar = config.type == \"bar\";\n\tif(bar && config.horizontal)\n\t\tconfig.type = \"barH\";\n\n\tlet result = `=SPARKLINE(${config.range},\"${config.type}\"`;\n\tif (bar)\n\t\tresult += `,\"${config.color}\",\"${config.negativeColor}\"`;\n\telse if(config.color)\n\t\tresult += `,\"${config.color}\"`;\n\treturn result+\")\";\n}\n\nexport function parseImage(value){\n\tif (value && value.indexOf(\"=IMAGE(\") === 0)\n\t\treturn {\n\t\t\turl: unescape(value.substr(7, value.length-8))\n\t\t};\n}\n\nexport function parseChart(value){\n\tif (value && value.indexOf(\"=SPARKLINE(\") === 0){\n\t\tlet text = value.substr(11, value.length-12).split(\",\");\n\t\tconst result = {\n\t\t\trange: text[0],\n\t\t\ttype: unescape(text[1]),\n\t\t\tcolor: unescape(text[2]),\n\t\t\tnegativeColor: unescape(text[3])\n\t\t};\n\n\t\tif(result.type == \"barH\"){\n\t\t\tresult.type = \"bar\";\n\t\t\tresult.horizontal = 1;\n\t\t}\n\n\t\treturn result;\n\t}\n}\n\nfunction unescape(text){\n\tif (!text) return \"\";\n\n\ttext = text.trim();\n\tif (text[0] === \"\\\"\") \n\t\ttext = text.substr(1);\n\tif (text[text.length-1] === \"\\\"\")\n\t\ttext = text.substr(0, text.length-1);\n\treturn text;\n}","import {Dialog} from \"./common\";\nimport {parseImage} from \"../mathematics/writer\";\n\nexport const action = \"add-image-cell\";\n\nexport class DialogBox extends Dialog{\n\t$show(box, form){\n\t\tthis.cell = this.view.getSelectedId();\n\t\tif(!this.cell)\n\t\t\treturn false;\n\n\t\tform.elements.preview.setHTML(\"\");\n\t\tform.elements.url.setValue(\"\");\n\n\t\t//sync state of dialog to data with the selected cell\n\t\tlet value = this.view.getCellValue(this.cell.row, this.cell.column);\n\t\tlet data = parseImage(value);\n\t\tif (data && data.url)\n\t\t\tform.elements.url.setValue(data.url);\n\n\t\tform.elements.url.focus();\n\t}\n\t$init(){\n\t\tconst save = this.view.config.save;\n\t\tconst server = (save && save.images) || null;\n\n\t\treturn {\n\t\t\tview: \"ssheet-dialog\",\n\t\t\thead: webix.i18n.spreadsheet.labels[\"image-title\"],\n\t\t\tmove: true,\n\t\t\tposition: \"center\",\n\t\t\tbody:{\n\t\t\t\tview:\"form\",\n\t\t\t\telements:[\n\t\t\t\t\t{ view:\"text\", name:\"url\", placeholder:webix.i18n.spreadsheet.labels[\"image-url\"], on:{\n\t\t\t\t\t\t\"onChange\":(image) => this.showPreview(image)\n\t\t\t\t\t}},\n\t\t\t\t\t{ view:\"label\", label:webix.i18n.spreadsheet.labels[\"image-or\"], align: \"center\"},\n\t\t\t\t\t{ view:\"uploader\", label:webix.i18n.spreadsheet.labels[\"image-upload\"], upload:server, on:{\n\t\t\t\t\t\tonBeforeFileAdd: function(file){\n\t\t\t\t\t\t\tif (!this.config.upload){\n\t\t\t\t\t\t\t\tconst reader = new FileReader();\n\t\t\t\t\t\t\t\treader.onload = (e) => this.getFormView().elements.url.setValue(e.target.result);\n\t\t\t\t\t\t\t\treader.readAsDataURL(file.file);\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tthis.getFormView().elements.preview.setHTML(\"\");\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonFileUpload: function(item, response){\n\t\t\t\t\t\t\tthis.getFormView().elements.url.setValue(response.imageURL);\n\t\t\t\t\t\t}\n\t\t\t\t\t}},\n\t\t\t\t\t{ view:\"formlate\", name:\"preview\", borderless: true, css: \"webix_ssheet_preview\", template:\"\", height:50 }\n\n\t\t\t\t]\n\t\t\t},\n\t\t\ton:{\n\t\t\t\tonSaveClick: () => this.okClick(),\n\t\t\t\tonCancelClick: () => this.close()\n\t\t\t}\n\t\t};\n\t}\n\tokClick(){\n\t\tconst cell = this.cell;\n\t\tconst image = this.fillUrl(this.$dialog.getBody().elements.url.getValue());\n\t\tthis.view.addImage(cell.row, cell.column, image);\n\t\tthis.close();\n\t}\n\tfillUrl(url){\n\t\tif (!/^[/]|((https?:\\/|data:image)\\/)/i.test(url))\n\t\t\turl = \"http://\" + url;\n\t\treturn url;\n\t}\n\tshowPreview(image){\n\t\tif (image){\n\t\t\timage = webix.template.escape(this.fillUrl(image));\n\t\t\tthis.$dialog.queryView(\"form\").elements.preview.setHTML(\"\");\n\t\t}\n\t}\n}","import * as box from \"./imagecell\";\n\nexport const action = \"add-image-top\";\n\nexport class DialogBox extends box.DialogBox{\n\topen(action){\n\t\tthis.config = action.config;\n\t\tthis.viewid = action.viewid;\n\n\t\tthis.view.callEvent(\"onUIEditStart\", [this.viewid, \"image\"]);\n\n\t\tbox.DialogBox.prototype.open.apply(this, arguments);\n\t}\n\t$hide(){\n\t\tthis.view.callEvent(\"onUIEditStop\", [this.viewid, \"image\"]);\n\t\tthis.config = this.viewid = null;\n\t}\n\t$init(){\n\t\tthis.view.attachEvent(\"onUIEditStart\", (id, type)=>{\n\t\t\tif(this.$dialog && this.$dialog.isVisible() && type != \"image\")\n\t\t\t\tthis.close();\n\t\t});\n\n\t\tthis.view.attachEvent(\"onCommand\", obj =>{\n\t\t\tif(obj.id == \"close-ui-editor\" && this.$dialog && this.$dialog.isVisible())\n\t\t\t\tthis.close();\n\t\t});\n\n\t\treturn box.DialogBox.prototype.$init.apply(this, arguments);\n\t}\n\t$show(box, form){\n\n\t\tform.elements.preview.setHTML(\"\");\n\t\tform.elements.url.setValue(\"\");\n\n\t\tif(this.config && this.config.data)\n\t\t\tform.elements.url.setValue(this.config.data);\n\n\t\tform.elements.url.focus();\n\t}\n\tokClick(){\n\t\tconst image = this.fillUrl(this.$dialog.getBody().elements.url.getValue());\n\t\tif(this.viewid)\n\t\t\tthis.view.views.update(this.viewid, image);\n\t\telse{\n\t\t\tconst id = this.view.views.add(null, null, \"image\", image);\n\t\t\tthis.view.views.highlight(id);\n\t\t}\n\t\tthis.close();\n\t}\n}","import {isCellLocked} from \"./lock_cell\";\nimport group from \"./undo_group\";\n\n\nvar ignoreUndoReset = false;\n\nexport function init(view){\n\treset(view);\n\tundoHandlers(view);\n\tview.attachEvent(\"onHardReset\", () => reset(view));\n\tview.attachEvent(\"onAfterSheetShow\", () => reset(view));\n\t// styles\n\tview.attachEvent(\"onBeforeStyleChange\", (row, column, nstyle, ostyle) =>{\n\t\tif (isCellLocked(view, row, column)) return false;\n\t\taddToHistory(view, {action: \"style\", row:row, column: column, value: ostyle, newValue: nstyle, group: group.value});\n\t});\n\t// editing\n\tview.attachEvent(\"onBeforeValueChange\", (row, column, nvalue, ovalue) => {\n\t\tif (isCellLocked(view, row, column)) return false;\n\t\taddToHistory(view, {action: \"value\", row:row, column: column, value: ovalue, newValue: nvalue, group: group.value});\n\t});\n\t// merge cells\n\tview.attachEvent(\"onBeforeSpan\", (row, column, value) => {\n\t\tif (isCellLocked(view, row, column)) return false;\n\t\taddToHistory(view, {action: \"span\", row:row, column: column, value: value, newValue:value, group: group.value});\n\t});\n\t// split cells\n\tview.attachEvent(\"onBeforeSplit\", (row, column, value) => {\n\t\tif (isCellLocked(view, row, column)) return false;\n\t\taddToHistory(view, {action: \"split\", row:row, column: column, value: value, newValue:value, group: group.value});\n\t});\n\t// Any abstract undo actions\n\tview.attachEvent(\"onAction\", (action, obj) =>\n\t\taddToHistory(\n\t\t\tview,\n\t\t\t{\n\t\t\t\taction: action,\n\t\t\t\trow: obj.row || null,\n\t\t\t\tcolumn: obj.column || null,\n\t\t\t\tvalue: webix.isUndefined(obj.value) ? null : obj.value,\n\t\t\t\tnewValue: webix.isUndefined(obj.newValue) ? null : obj.newValue,\n\t\t\t\textra: obj.extra || null,\n\t\t\t\tgroup: group.value\n\t\t\t}\n\t\t)\n\t);\n\n\t// column resize\n\tview.$$(\"cells\").attachEvent(\"onColumnResize\", (column, nvalue, ovalue) =>\n\t\taddToHistory(view, {action: \"c-resize\", row:0, column:column, value: ovalue, newValue: nvalue, group: group.value})\n\t);\n\t// column hide\n\tview.attachEvent(\"onColumnOperation\", (action, start, end) => {\n\t\tif (action !== \"add\" && action !== \"del\")\n\t\t\taddToHistory(view, { action:{id: action, group:\"column\"}, group: group.value, column: {\n\t\t\t\tstart: { column:start }, end: { column:end }\n\t\t\t}});\n\t});\n\t// row hide\n\tview.attachEvent(\"onRowOperation\", (action, start, end) => {\n\t\tif (action !== \"add\" && action !== \"del\")\n\t\t\taddToHistory(view, { action: {id: action, group:\"row\"}, group: group.value, row: {\n\t\t\t\tstart: {row: start}, end: {row: end}\n\t\t\t}});\n\t});\n\t// row resize\n\tview.$$(\"cells\").attachEvent(\"onRowResize\", (row, nvalue, ovalue) =>\n\t\taddToHistory(view, {action: \"r-resize\", row: row, column:0, value: ovalue, newValue: nvalue, group: group.value})\n\t);\n\n\t// condition formats\n\tview.attachEvent(\"onBeforeConditionSet\", (row, column, value, nvalue) => {\n\t\tif (isCellLocked(view, row, column)) return false;\n\n\t\tvalue = value ? webix.copy(value) : null;\n\t\taddToHistory(view, {action: \"condition\", row: row, column: column, value: value, newValue: nvalue, group: group.value});\n\t});\n\tview.$skipHistory = 0;\n}\n\nexport function undo(view){\n\trestoreHistory(view,-1);\n}\n\nexport function redo(view){\n\trestoreHistory(view,1);\n}\n\nexport function reset(view){\n\tif(!ignoreUndoReset){\n\t\tview._ssUndoHistory = [];\n\t\tview._ssUndoCursor = -1;\n\t}\n}\n\nfunction addToHistory(view, data){\n\tif(!view.$skipHistory && !view._loading_data){\n\t\t// remove futher history\n\t\tview._ssUndoHistory.splice(view._ssUndoCursor+1);\n\t\t// add to an array and increase cursor\n\t\tview._ssUndoHistory.push(data);\n\t\tview._ssUndoCursor++;\n\t}\n}\n\nexport function ignoreUndo(func, view){\n\tview.$skipHistory++;\n\ttry{\n\t\tfunc.call(view);\n\t}\n\tfinally {\n\t\tview.$skipHistory--;\n\t}\n}\n\nexport function ignoreReset(func){\n\tignoreUndoReset = true;\n\tfunc();\n\tignoreUndoReset = false;\n}\n\nfunction restoreHistory(view, step){\n\tvar data = view._ssUndoHistory[step>0?(view._ssUndoCursor+step):view._ssUndoCursor];\n\tif(data){\n\t\tvar value = step > 0 ? data.newValue : data.value;\n\t\tvar direction = step>0;\n\t\tvar params = [data.action, data.row, data.column, value, direction, data.extra];\n\n\t\tview._ssUndoCursor += step;\n\n\t\t// group support\n\t\tvar group = data.group;\n\t\tvar prevData = view._ssUndoHistory[step>0?(view._ssUndoCursor+step):view._ssUndoCursor];\n\n\t\tignoreUndo(function(){\n\t\t\tview.callEvent(\"onUndo\", params);\n\t\t\tif (!group || !(prevData && group == prevData.group)){\n\t\t\t\tview.refresh();\n\t\t\t\tview.callEvent(\"onAfterUndo\", []);\n\t\t\t}\n\t\t},view);\n\n\t\tif(prevData && group && group == prevData.group){\n\t\t\trestoreHistory(view, step);\n\t\t}\n\t}\n}\n\nfunction undoHandlers(view){\n\tview.attachEvent(\"onUndo\", function(type, row, column, value) {\n\t\tswitch (type) {\n\t\t\tcase \"freeze-row\":\n\t\t\t\tview.freezeRows(value);\n\t\t\t\tbreak;\n\t\t\tcase \"freeze-column\":\n\t\t\t\tview.freezeColumns(value);\n\t\t\t\tbreak;\n\t\t}\n\t});\n}","import {range, toRange, changeRange, encode, isRange} from \"../helpers/column_names\";\nimport {ignoreUndo} from \"./undo\";\nimport * as arr from \"../helpers/array\";\n\nexport function init(view){\n\tconst grid = view._table.$view.querySelector(\".webix_ss_center\");\n\n\tview.views = {\n\t\tregister:function(type, render, track){\n\t\t\tif(!this._types[type])\n\t\t\t\tthis._types[type] = { render:render, track:track };\n\t\t},\n\t\tmove: function(id, x, y){\n\t\t\tconst win = webix.$$(id);\n\t\t\tconst old = webix.copy(this._pull[id]);\n\t\t\tthis._pull[id].x = _correctPos(view, win, x, \"x\");\n\t\t\tthis._pull[id].y = _correctPos(view, win, y, \"y\");\n\t\t\tview.callEvent(\"onAction\", [\"move-view\", { row:id, newValue:webix.copy(this._pull[id]), value:old} ]);\n\t\t\t_showOne(view, win, this._pull[id]);\n\t\t},\n\t\tadd: function(x, y, type, data, config, id){\n\t\t\tconfig = config || {};\n\t\t\tif(type == \"chart\"){\n\t\t\t\tconfig = webix.extend(config, {\n\t\t\t\t\ttype: \"line\",\n\t\t\t\t\tdataSeries:\"columns\"\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst height = config.height || 300;\n\t\t\tconst width = config.width || 500;\n\n\t\t\tconst win = webix.ui({ \n\t\t\t\tid:id || \"$ssheet-ui\"+webix.uid(), // fixed id is for undo only\n\t\t\t\tview: \"ssheet-ui\",\n\t\t\t\tcontainer:grid, master:view._table.config.id,\n\t\t\t\twidth:width, height:height\n\t\t\t});\n\n\t\t\twin.attachEvent(\"onViewMoveEnd\", (x, y) => {\n\t\t\t\tconst state = view._table.getScrollState();\n\t\t\t\tthis.move(id, x, y+state.y);\n\t\t\t});\n\t\t\twin.attachEvent(\"onViewResize\", () => {\n\t\t\t\tconst conf = this._pull[id];\n\t\t\t\tconst old = webix.copy(conf);\n\n\t\t\t\tconf.config.height = win.$height;\n\t\t\t\tconf.config.width = win.$width;\n\t\t\t\tview.callEvent(\"onAction\", [\"resize-view\", { row:id, newValue:webix.copy(conf), value:old } ]);\n\t\t\t});\n\t\t\twin.attachEvent(\"onViewEdit\", () => {\n\t\t\t\tconst config = this._pull[id];\n\t\t\t\tconst command = this._commands[config.type] || config.type;\n\t\t\t\tview.callEvent(\"onCommand\", [{ id:command, viewid:id, config }]);\n\t\t\t});\n\t\t\twin.attachEvent(\"onViewRemove\", () => this.remove(id));\n\n\t\t\tid = win.config.id;\n\n\t\t\tx = _correctPos(view, win, x, \"x\");\n\t\t\ty = _correctPos(view, win, y, \"y\");\n\n\t\t\tthis._pull[id] = { x, y, type, data, config };\n\t\t\tthis.update(id, data, config, true);\n\t\t\t_showOne(view, win, this._pull[id]);\n\n\t\t\treturn id; \n\t\t},\n\t\tremove: function(id){\n\t\t\tconst old = this._pull[id];\n\t\t\twebix.$$(id).close();\n\t\t\tdelete this._pull[id];\n\n\t\t\tview.callEvent(\"onAction\", [\"add-view\", { row:id, newValue:null, value:old } ]);\n\t\t},\n\t\tget:function(id){\n\t\t\treturn webix.$$(id).getBody();\n\t\t},\n\t\tgetConfig:function(id){\n\t\t\treturn this._pull[id];\n\t\t},\n\t\tupdate:function(id, data, config, inner){\n\t\t\tconst old = inner ? null : webix.copy(this._pull[id]);\n\t\t\tconst conf = this._pull[id];\n\t\t\tconst actions = this._types[conf.type];\n\n\t\t\tdata = data || config.data || \"\";\n\t\t\tconfig = config || {};\n\n\t\t\tdelete config.data;\n\n\t\t\tif(conf.type == \"chart\"){\n\t\t\t\tconst type = config.type;\n\t\t\t\tif(type && !config.series){\n\t\t\t\t\tconst xAxis = config.xAxis && config.xAxis.range;\n\t\t\t\t\tconst legend = config.legend && config.legend.range;\n\n\t\t\t\t\tlet oldLeftColumn;\n\t\t\t\t\tif(old && old.config){\n\t\t\t\t\t\tif(_isPie(type)){\n\t\t\t\t\t\t\tif(old.config.legend && old.config.legend.fromData)\n\t\t\t\t\t\t\t\toldLeftColumn = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if(old.config.xAxis && old.config.xAxis.fromData)\n\t\t\t\t\t\t\toldLeftColumn = 1;\n\t\t\t\t\t}\n\n\t\t\t\t\tconfig.series = _getSeries(view, data, config.dataSeries, {xAxis, legend}, oldLeftColumn);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst win = webix.$$(id);\n\n\t\t\tconst height = config.height || 300;\n\t\t\tconst width = config.width || 500;\n\n\t\t\tif(win.$width != width && win.$height != height){\n\t\t\t\twin.define({width, height});\n\t\t\t\twin.resize();\n\t\t\t}\n\n\t\t\tconf.data = data;\n\t\t\tconf.config = config;\n\n\t\t\tlet node = this.get(id);\n\n\t\t\tdata = _fromRange(view, conf);\n\n\t\t\tif(actions.render){\n\t\t\t\tconst renderConfig = webix.copy(conf);\n\n\t\t\t\t//clear width and height for inner view resizing\n\t\t\t\trenderConfig.config.width = renderConfig.config.height = 0;\n\n\t\t\t\tnode = actions.render(node, renderConfig, data);\n\t\t\t\t_processTables(node);\n\t\t\t}\n\n\t\t\tif(actions.track)\n\t\t\t\t_trackOne(view, node, actions.track, conf);\n\n\t\t\tview.callEvent(\"onAction\", [\"add-view\", { row:id, newValue:webix.copy(this._pull[id]), value:old} ]);\n\t\t},\n\t\thighlight:function(id){\n\t\t\tconst win = webix.$$(id);\n\t\t\tconst css = \"webix_ssheet_ui_focused\";\n\n\t\t\tconst oldWin = webix.$$(this._activeWin);\n\t\t\tif(oldWin && !oldWin.$destructed)\n\t\t\t\twebix.html.removeCss(oldWin.$view, css);\n\n\t\t\tif(win){\n\t\t\t\tthis._activeWin = id;\n\t\t\t\twebix.html.addCss(win.$view, css);\n\t\t\t}\n\t\t\telse\n\t\t\t\tdelete this._activeWin;\n\t\t},\n\t\t_commands:{\n\t\t\t\"image\":\"add-image-top\",\n\t\t\t\"chart\":\"add-chart\"\n\t\t},\n\t\t_types:{},\n\t\t_pull:{}\n\t};\n\n\t// handle events\n\tview._table.attachEvent(\"onResize\", () => _showAll(view) );\n\tview._table.attachEvent(\"onScrollY\", () => _showAll(view) );\n\tview._table.attachEvent(\"onScrollX\", () => _showAll(view) );\n\n\tview.attachEvent(\"onReset\", () => _reset(view));\n\tview.attachEvent(\"onUndo\", (type, row, column, value) => {\n\t\tconst move = type === \"move-view\";\n\t\tif (move || type == \"resize-view\" || type === \"add-view\")\n\t\t\t_undoUI(view, move, row, value);\n\t});\n\tview.attachEvent(\"onAction\", (action, p) => {\n\t\tif(action == \"header-hide\")\n\t\t\t_showAll(view);\n\t\telse if(action == \"before-grid-change\")\n\t\t\t_updateData(view, p.name, p.inc, p.data, p.start);\n\t});\n\tview.attachEvent(\"onColumnOperation\", () => _showAll(view, true));\n\tview.attachEvent(\"onRowOperation\", () => _showAll(view, true));\n\tview.attachEvent(\"onDataParse\", (data) => _parse(view, data));\n\tview.attachEvent(\"onDataSerialize\", (data, config) => _serialize(view, data, config));\n\tview.attachEvent(\"onCellChange\", (r,c,v,p) => {\n\t\tif(p == view.getActiveSheet())\n\t\t\t_trackAll(view);\n\t});\n\tview.attachEvent(\"onMathRefresh\", () => _trackAll(view));\n\n\tview.attachEvent(\"onDestruct\", () => {\n\t\tfor(let i in view.views._pull) webix.$$(i).destructor();\n\t});\n\n\tlet editUIType;\n\twebix.attachEvent(\"onClick\", function(ev){\n\t\tlet focus = webix.$$(ev);\n\t\tif(focus && focus.config.externalUI)\n\t\t\tfocus = webix.$$(focus.config.externalUI);\n\n\t\tconst ui = focus && (focus.queryView(\"ssheet-ui\",\"self\") || focus.queryView(\"ssheet-ui\",\"parent\"));\n\n\t\tif(ui){\n\t\t\tview.views.highlight(ui);\n\t\t\tconst id = ui.config.id;\n\n\t\t\tif(editUIType){\n\t\t\t\tif(view.views.getConfig(id).type == editUIType)\n\t\t\t\t\tui.callEvent(\"onViewEdit\", []); //start editing if any editor is open\n\t\t\t\telse\n\t\t\t\t\tview.callEvent(\"onCommand\", [{ id:\"close-ui-editor\" }]);\n\t\t\t}\n\t\t}\n\t\telse if(!editUIType)\n\t\t\tview.views.highlight();\n\t});\n\n\tview.attachEvent(\"onUIEditStart\", function(id, type){\n\t\tview.views.highlight(id);\n\t\teditUIType = type;\n\t});\n\n\tview.attachEvent(\"onUIEditStop\", function(id, type){\n\t\tif(editUIType == type)\n\t\t\twebix.delay(()=>{ // after onClick handler (to save focus)\n\t\t\t\teditUIType = null;\n\t\t\t});\n\t});\n\n\t// set default views\n\tview.views.register(\"chart\", (node, conf, data) => {\n\t\tconst dataRange = _getNames(view, conf);\n\t\tconst config = _genChartConfig(conf, data, dataRange);\n\t\treturn webix.ui(config, node);\n\t}, (view, data) => {\n\t\tview.clearAll();\n\t\tview.parse(data);\n\t});\n\n\tview.views.register(\"image\", (node, conf, data) => {\n\t\tconst config = webix.extend({ css:\"webix_ssheet_bgimage\", template:`` }, conf.config||{}, true );\n\t\treturn webix.ui(config, node);\n\t});\n}\n\nfunction _parse(view, data){\n\tconst views = data.views;\n\tif(views){\n\t\tignoreUndo(function(){\n\t\t\tviews.forEach(obj => view.views.add.apply(view.views, obj));\n\t\t}, view);\n\t}\n}\n\nfunction _serialize(view, data, config){\n\tdata.views = [];\n\tfor(let i in view.views._pull){\n\t\tconst conf = view.views._pull[i];\n\t\tconst one = [conf.x, conf.y, conf.type, conf.data, conf.config];\n\t\tif(config && config.viewIds)\n\t\t\tone.push(i);\n\t\tdata.views.push(one);\n\t}\n}\n\nlet thread;\nfunction _trackAll(view){\n\tclearTimeout(thread);\n\tthread = webix.delay(() => {\n\t\tconst ui = view.views;\n\t\tfor(let id in ui._pull){\n\t\t\tconst conf = ui._pull[id];\n\n\t\t\tconst viewMethods = ui._types[conf.type];\n\t\t\tconst render = viewMethods.render;\n\t\t\tconst track = viewMethods.track;\n\n\t\t\tif(track)\n\t\t\t\t_trackOne(view, ui.get(id), track, conf, render);\n\t\t}\n\t});\n}\n\nfunction _trackOne(view, node, track, conf, render){\n\tconst data = _fromRange(view, conf);\n\n\tif(conf.type == \"chart\"){\n\t\tif(render)\n\t\t\tnode = render(node, conf, data, true);\n\n\t\tconst config = conf.config;\n\t\tif(config && !_isPie(config.type))\n\t\t\t_removeLegend(data, conf, view);\n\t}\n\n\ttrack(node, data);\n}\n\nfunction _updateData(view, name, inc, data, start){\n\tconst views = data.views;\n\tfor(let i = 0; i < views.length; i++){\n\t\tif(_isRange(views[i][3])){\n\t\t\tconst series = views[i][4].series;\n\t\t\tif(series){\n\t\t\t\tseries.forEach(obj => {\n\t\t\t\t\tobj.range = changeRange(obj.range, name, inc, start);\n\t\t\t\t\tobj.active = changeRange(obj.active, name, inc, start);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst legend = views[i][4].legend && views[i][4].legend.range;\n\t\t\tif(legend)\n\t\t\t\tviews[i][4].legend.range = _getDataParts(legend).map(range => changeRange(range, name, inc, start)).join(\",\");\n\n\t\t\tconst xAxis = views[i][4].xAxis && views[i][4].xAxis.range;\n\t\t\tif(xAxis)\n\t\t\t\tviews[i][4].xAxis.range = changeRange(xAxis, name, inc, start);\n\n\t\t\tviews[i][3] = _getDataParts(views[i][3]).map(range => changeRange(range, name, inc, start)).join(\",\");\n\t\t}\n\t}\n}\n\nfunction _showAll(view, pos){\n\t//close possibly open menus of embedded ui\n\twebix.callEvent(\"onClick\", []);\n\n\tfor(let id in view.views._pull){\n\t\tconst win = webix.$$(id);\n\t\tconst conf = view.views._pull[id];\n\t\tif(pos){\n\t\t\tconf.x = _correctPos(view, win, conf.x, \"x\");\n\t\t\tconf.y = _correctPos(view, win, conf.y, \"y\");\n\t\t}\n\t\t_showOne(view, win, conf);\n\t}\n}\n\nfunction _showOne(view, win, conf){\n\tconst state = view._table.getScrollState();\n\n\twin.show({\n\t\tx:conf.x,\n\t\ty:conf.y-state.y\n\t});\n}\n\nfunction _correctPos(view, win, v, type){\n\tif(!v && v !==0 )\n\t\tv = view._table.getScrollState()[type]+50;\n\telse{\n\t\tconst size = type == \"x\" ? _getWidth(view)-win.$width : _getHeight(view)-win.$height;\n\t\tv = Math.min(Math.max(v, 0), size);\n\t}\t\n\treturn v;\n}\n\nfunction _reset(view){\n\tignoreUndo(function(){\n\t\tfor(let id in view.views._pull)\n\t\t\tview.views.remove(id);\n\t}, view);\n}\n\nfunction _undoUI(view, move, id, value){\n\tif(value){\n\t\tconst {x, y, type, data, config} = value;\n\t\tif(view.views._pull[id]){\n\t\t\tif(move)\n\t\t\t\tview.views.move(id, x, y);\n\t\t\telse\n\t\t\t\tview.views.update(id, data, config);\n\t\t}\n\t\telse\n\t\t\tview.views.add(x, y, type, data, config, id);\n\n\t\tconst editor = view.$$(\"chartEditor\");\n\t\tif(editor && editor.viewId == id)\n\t\t\teditor.queryView(\"form\").setValues(config);\n\t}\n\telse\n\t\tview.views.remove(id);\n}\n\nfunction _getWidth(view){\n\tlet width = 0;\n\tview._table.eachColumn(function(id){\n\t\tif(id !== \"rowId\")\n\t\t\twidth += this.getColumnConfig(id).width;\n\t});\n\treturn width;\n}\n\nfunction _getHeight(view){\n\tlet height = 0;\n\tview._table.data.each(function(obj){\n\t\theight += obj.$height || webix.skin.$active.rowHeight;\n\t});\n\treturn height;\n}\n\n//disable datatables not to interfere with ss table events\nfunction _processTables(node){\n\tconst query = function(view){\n\t\treturn view.name == \"datatable\" || view.name == \"treetable\";\n\t};\n\tlet tables = node.queryView(query, \"self\");\n\tif(tables) tables = [tables];\n\telse tables = node.queryView(query, \"all\");\n\ttables.forEach((dt) => dt.disable());\n}\n\n/* chart-specific helpers */\n\nfunction _prepareType(config){\n\tconst type = config.type;\n\tif(config.stacked && type.indexOf(\"stacked\") == -1)\n\t\tconfig.type = \"stacked\"+config.type.charAt(0).toUpperCase()+config.type.substr(1);\n\tif(config[\"3D\"] && type.indexOf(\"3D\") == -1)\n\t\tconfig.type += \"3D\";\n\tif(config.horizontal && type.indexOf(\"H\") == -1)\n\t\tconfig.type += \"H\";\n\n\treturn config.type;\n}\n\nfunction _genChartConfig(conf, data, dataRange){\n\tconst htmlFilter = /<[^>]*>/gi;\n\tlet config = webix.copy(conf.config);\n\n\tconfig = _normalizeConfig(config);\n\n\tconst scale = config.scale.lines;\n\tconst scaleColor = config.scale.color || undefined;\n\tconst type = (config.type = _prepareType(config));\n\tconst pie = _isPie(type);\n\n\tconst lines = config.series;\n\tconfig.series = [];\n\tconst xAxis = config.xAxis;\n\n\tconst legendConfig = config.legend;\n\tlet pieLegend;\n\tlet legendRange;\n\n\tconst legend = {\n\t\theight:24,\n\t\talign: legendConfig.align || \"center\",\n\t\tvalign: legendConfig.valign || \"bottom\",\n\t};\n\tlegend.layout = legend.valign == \"middle\" ? \"y\" : \"x\";\n\n\tif(pie){\n\t\tif(legendConfig.fromData)\n\t\t\tpieLegend = \"data0\";\n\t\telse if(legendConfig.range)\n\t\t\tpieLegend = dataRange[legendConfig.range];\n\n\t\tlegend.template = `#${pieLegend}#`;\n\t}\n\telse{\n\t\tlegend.values = [];\n\n\t\tlegendRange = !legendConfig.fromData && legendConfig.range;\n\t\tif(legendRange){\n\t\t\tconst switchDirection = config.dataSeries == \"rows\";\n\t\t\tlegendRange = _getParts(legendConfig.range, switchDirection, dataRange);\n\t\t}\n\n\t\tconfig.yAxis = config.yAxis||{};\n\t\tfor(let property in config.yAxis)\n\t\t\tif(config.yAxis[property] === \"\")\n\t\t\t\tdelete config.yAxis[property];\n\n\t\tconfig.yAxis = webix.extend(config.yAxis, {\n\t\t\tlineColor: scaleColor,\n\t\t\tcolor: scaleColor,\n\t\t\tlines: scale,\n\t\t\tlineShape: config.scale.circle ? \"arc\" : \"default\"\n\t\t});\n\n\t\tif(xAxis.fromData)\n\t\t\txAxis.range = legendRange ? Object.keys(data[0]).filter(line => legendRange.indexOf(line) == -1)[0] : \"data0\";\n\t\telse if(xAxis.range)\n\t\t\txAxis.range = dataRange[xAxis.range];\n\t}\t\n\n\tfor(let i = 0; i < lines.length; i++){\n\t\tconst color = lines[i].color;\n\t\tconst item = dataRange[lines[i].range];\n\n\t\tif(item != xAxis.range && !(pie && item == pieLegend /*(item == pieLegend || legendConfig.range == lines[i].active)*/)){\n\t\t\tconst s = {\n\t\t\t\tvalue:`#${item}#`,\n\t\t\t\ttooltip:{\n\t\t\t\t\ttemplate: lines[i].tooltip ? `#${item}#` : \"\"\n\t\t\t\t}\n\t\t\t};\n\n\t\t\ts[pie ? \"pieInnerText\" : \"label\"] = lines[i].label ? `#${item}#` : \"\";\n\n\t\t\tif(type == \"radar\" || type == \"line\" || type == \"spline\"){\n\t\t\t\ts.line = { color };\n\t\t\t\ts.item = { borderColor:color, type:lines[i].marker };\n\t\t\t}\n\t\t\telse if(!pie)\n\t\t\t\ts.color = color;\n\n\t\t\tif(type == \"area\" || type == \"splineArea\")\n\t\t\t\ts.alpha = 0.7;\n\n\t\t\tif(data[0] && !pie && (legendRange || legendConfig.fromData)){\n\t\t\t\tconst val = legendRange ? data[0][legendRange[i]] : data[0][item];\n\t\t\t\tconst text = (val || val === 0) ? (val+\"\").replace(htmlFilter, \"\") : \"\";\n\t\t\t\tlegend.values.push({text, color});\n\t\t\t}\n\n\t\t\tconfig.series.push(s);\n\t\t}\n\t}\n\n\tif(!pie){\n\t\tconfig.xAxis = {\n\t\t\ttitle: config.xAxis.title,\n\t\t\tlineColor: scaleColor,\n\t\t\tcolor: scaleColor,\n\t\t\tlines: scale\n\t\t};\n\n\t\tconfig[type == \"barH\" || type == \"stackedBarH\" ? \"yAxis\" : \"xAxis\"].template = obj => {\n\t\t\tconst val = obj[xAxis.range];\n\t\t\treturn (val || val === 0) ? (val+\"\").replace(htmlFilter, \"\") : \"\";\n\t\t};\n\t}\n\n\tif(pieLegend || (legend.values && legend.values.length))\n\t\tconfig.legend = legend;\n\telse\n\t\tdelete config.legend;\n\n\treturn webix.extend({\n\t\tview:\"chart\",\n\t\tpadding:{\n\t\t\tleft:80\n\t\t}\n\t}, config, true);\n}\n\nfunction _isRange(data){\n\treturn typeof data == \"string\" && data.indexOf(\"data:image\") === -1;\n}\n\nfunction _fromRange(view, conf){\n\tlet data = conf.data;\n\n\tif(/^(http|data:image|\\/)/i.test(data))\n\t\treturn data;\n\n\tconst arr = [];\n\tif(data){\n\t\tconst config = conf.config;\n\t\tconst switchDirection = config.dataSeries == \"rows\";\n\t\tlet lastIndex = 0;\n\n\t\tdata = _getDataParts(data);\n\t\tfor(let i = 0; i < data.length; i++){\n\t\t\tconst cells = _isRange(data[i]) ? range(data[i], view) : null;\n\t\t\tif(cells){\n\t\t\t\tconst page = cells[4] ? view._mData.getPage(cells[4]) : view._mPage;\n\t\t\t\tcells[5] = lastIndex;\n\n\t\t\t\tif(page){\n\t\t\t\t\tconst subdata = switchDirection ? getRangeRows.apply(page, cells) : getRangeCols.apply(page, cells);\n\t\t\t\t\tlastIndex += subdata[2];\n\t\t\t\t\tfor(let i = 0; i < subdata[0].length; i++){\n\t\t\t\t\t\tif(!arr[i])\n\t\t\t\t\t\t\tarr[i] = {};\n\t\t\t\t\t\twebix.extend(arr[i], subdata[0][i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn arr;\n}\n\nfunction _removeLegend(arr, conf, view){\n\tconst config = conf.config;\n\tif(typeof(config.legend) != \"object\")\n\t\tconfig.legend = {fromData: !!config.legend};\n\n\tconst legend = config.legend;\n\n\tif(legend.fromData)\n\t\tarr.shift();\n\telse if(legend.range){\n\t\tconst names = _getNames(view, conf);\n\t\tconst switchDirection = config.dataSeries == \"rows\";\n\t\tconst legendRange = _getParts(legend.range, switchDirection, names);\n\t\tfor (let i = 0; i < legendRange.length; i++){\n\t\t\tconst item = legendRange[i];\n\t\t\tdelete arr[0][item];\n\t\t}\n\t}\n}\n\nfunction _getNames(view, conf){\n\tlet data = conf.data;\n\n\tif(/^(http|data:image|\\/)/i.test(data))\n\t\treturn;\n\n\tlet names = {};\n\tif(data){\n\t\tconst config = conf.config;\n\t\tconst switchDirection = config.dataSeries == \"rows\";\n\t\tlet lastIndex = 0;\n\n\t\tdata = _getDataParts(data);\n\t\tfor(let i = 0; i < data.length; i++){\n\t\t\tconst cells = _isRange(data[i]) ? range(data[i], view) : null;\n\t\t\tif(cells){\n\t\t\t\tconst page = cells[4] ? view._mData.getPage(cells[4]) : view._mPage;\n\t\t\t\tcells[5] = lastIndex;\n\n\t\t\t\tif(page){\n\t\t\t\t\tconst subdata = switchDirection ? getRangeRows.apply(page, cells) : getRangeCols.apply(page, cells);\n\t\t\t\t\tlastIndex += subdata[2];\n\t\t\t\t\twebix.extend(names, subdata[1]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn names;\n}\n\nexport function _getDataParts(data){\n\treturn data.replace(/\\s/g, \"\").split(\",\");\n}\n\nexport function _isPie(type){\n\treturn /pie|donut/.test(type);\n}\n\nexport function _getSeries(view, data, dataSeries, active, oldLeftColumn){\n\tconst dir = dataSeries == \"rows\";\n\tlet vals = [];\n\n\tif(data){\n\t\tlet xAxis = [];\n\t\tlet legend = [];\n\t\tlet activeVals = [];\n\n\t\tif(active){\n\t\t\tif(active.legend)\n\t\t\t\tlegend = _getParts(active.legend, dir);\n\t\t\tif(active.xAxis)\n\t\t\t\txAxis = _getParts(active.xAxis, dir);\n\t\t\tif(active.series)\n\t\t\t\tactiveVals = active.series.filter(val => legend.indexOf(val.range) == -1 && xAxis.indexOf(val.range) == -1);\n\t\t}\n\n\t\tdata = _getDataParts(data);\n\t\tlet colorIndex = 0;\n\t\tlet firstRange = 1;\n\t\tdata.forEach(subdata => {\n\t\t\tconst series = isRange(subdata) ? range(subdata, view) : null;\n\t\t\tif(series){\n\t\t\t\tconst start = dir ? series[0] : series[1];\n\t\t\t\tconst end = dir ? series[2] : series[3];\n\n\t\t\t\tlet inActiveSeries;\n\t\t\t\tfor(let i = start; i <= end; i++){\n\t\t\t\t\tconst range = dir ? toRange(i, series[1], i, series[3], series[4]) : toRange(series[0], i, series[2], i, series[4]);\n\t\t\t\t\tconst seria = arr.find(activeVals, val => val.range == range && (!val.active || val.active == subdata));\n\n\t\t\t\t\tif(seria){\n\t\t\t\t\t\tif(!seria.active)\n\t\t\t\t\t\t\tseria.active = subdata;\n\t\t\t\t\t\tinActiveSeries = 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor(let i = start; i <= end; i++){\n\t\t\t\t\tconst range = dir ? toRange(i, series[1], i, series[3], series[4]) : toRange(series[0], i, series[2], i, series[4]);\n\t\t\t\t\tif(legend.indexOf(range) != -1 || xAxis.indexOf(range) != -1)\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\tconst activeVal = activeVals.filter(val => val.range == range && val.active == subdata)[0];\n\n\t\t\t\t\tif(inActiveSeries && !activeVal && !(oldLeftColumn && firstRange && i == start))\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\tvals.push(activeVal || {\n\t\t\t\t\t\tactive: subdata,\n\t\t\t\t\t\trange,\n\t\t\t\t\t\tmarker: \"square\",\n\t\t\t\t\t\ttooltip: 1,\n\t\t\t\t\t\tcolor: _getColor(colorIndex)\n\t\t\t\t\t});\n\n\t\t\t\t\tcolorIndex++;\n\t\t\t\t}\n\t\t\t\tfirstRange = 0;\n\t\t\t}\n\t\t});\n\t}\n\treturn vals;\n}\n\nexport function _getParts(ranges, dir, dataRange){\n\tconst parts = [];\n\n\tranges = _getDataParts(ranges);\n\tranges.forEach(subRange => {\n\t\tsubRange = isRange(subRange) ? range(subRange) : null;\n\t\tif(subRange){\n\t\t\tconst start = dir ? subRange[0] : subRange[1];\n\t\t\tconst end = dir ? subRange[2] : subRange[3];\n\n\t\t\tfor(let i = start; i <= end; i++){\n\t\t\t\tconst range = dir ?\n\t\t\t\t\ttoRange(i, subRange[1], i, subRange[3], subRange[4]):\n\t\t\t\t\ttoRange(subRange[0], i, subRange[2], i, subRange[4]);\n\n\t\t\t\tparts.push(dataRange ? dataRange[range] : range);\n\t\t\t}\n\t\t}\n\t});\n\n\treturn parts;\n}\n\nexport function _normalizeConfig(config){\n\tif(typeof(config.xAxis) != \"object\")\n\t\tconfig.xAxis = {fromData: !!config.xAxis};\n\n\tif(typeof(config.legend) != \"object\")\n\t\tconfig.legend = {fromData: !!config.legend};\n\n\tconfig.legend = webix.extend(config.legend, {\n\t\tlayout:\"x\",\n\t\talign:\"center\",\n\t\tvalign:\"bottom\"\n\t});\n\n\tif(!config.scale)\n\t\tconfig.scale = {\n\t\t\tlines:1\n\t\t};\n\n\treturn config;\n}\n\nfunction _getColor(index){\n\tconst colors = [\n\t\t\"#e06666\", \"#6aa84f\", \"#3c78d8\", \"#e69138\", \"#783f04\", \"#134f5c\", \"#674ea7\", \"#c27ba0\"\n\t];\n\treturn colors[index%colors.length];\n}\n\nfunction getRangeCols(r1,c1,r2,c2,sheetName,lastIndex){\n\tconst data = [];\n\tconst rangeToData = {};\n\tfor (let i = r1, rind = 0; i <= r2; i++, rind++){\n\t\tdata[rind] = {};\n\t\tfor (let j = c1, cind = lastIndex; j <= c2; j++, cind++){\n\t\t\tif(i == r2){\n\t\t\t\trangeToData[`${sheetName ? sheetName+\"!\" : \"\"}${encode[j]}${r1}:${encode[j]}${r2}`] = `data${cind}`;\n\t\t\t\tlastIndex++;\n\t\t\t}\n\t\t\tdata[rind][`data${cind}`] = this.getValue(i-1,j-1);\n\t\t}\n\t}\n\treturn [data, rangeToData, lastIndex];\n}\n\nfunction getRangeRows(r1,c1,r2,c2,sheetName,lastIndex){\n\tconst data = [];\n\tconst rangeToData = {};\n\tfor (let i = c1, cind = 0; i <= c2; i++, cind++){\n\t\tdata[cind] = {};\n\t\tfor (let j = r1, rind = lastIndex; j <= r2; j++, rind++){\n\t\t\tif(i == c2){\n\t\t\t\trangeToData[`${sheetName ? sheetName+\"!\" : \"\"}${encode[c1]}${j}:${encode[c2]}${j}`] = `data${rind}`;\n\t\t\t\tlastIndex++;\n\t\t\t}\n\t\t\tdata[cind][`data${rind}`] = this.getValue(j-1,i-1);\n\t\t}\n\t}\n\treturn [data, rangeToData, lastIndex];\n}","import {range, toRange} from \"./helpers/column_names\";\nimport {_getSeries, _isPie, _normalizeConfig, _getDataParts} from \"./operations/views\";\n\nconst labels = webix.i18n.spreadsheet.labels;\n\nexport function init(view){\n\tview.attachEvent(\"onComponentInit\", () => ready(view));\n\tconst activeSkin = webix.skin.$active;\n\tconst padding = activeSkin.dataPadding-2;\n\tconst margin = activeSkin.layoutMargin.form;\n\n\treturn {\n\t\twidth:440,\n\t\thidden: true,\n\t\tid:\"chartEditor\",\n\t\tcss:\"ssheet_chart\",\n\t\trows:[\n\t\t\t{\n\t\t\t\theight: activeSkin.barHeight,\n\t\t\t\tcss: \"ssheet_chart_wizard_head\",\n\t\t\t\tpadding: { left:4 },\n\t\t\t\tcols: [\n\t\t\t\t\t{ view:\"icon\", inputHeight:activeSkin.inputHeight, hotkey:\"esc\", icon:\"webix_ssheet_icon ssi-arrow-left\", click: () => closeEditor(view) },\n\t\t\t\t\t{ type:\"header\", borderless:true, template: labels[\"chart-edit\"] }\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\tview:\"form\",\n\t\t\t\tcomplexData:true,\n\t\t\t\tborderless: true,\n\t\t\t\tpadding:{\n\t\t\t\t\ttop: 0\n\t\t\t\t},\n\t\t\t\telementsConfig:{\n\t\t\t\t\tlabelWidth:184\n\t\t\t\t},\n\t\t\t\telements:[{\n\t\t\t\t\tview:\"tabview\",\n\t\t\t\t\tid:\"chartTabs\",\n\t\t\t\t\tcells:[\n\t\t\t\t\t\t{ id:\"common\", borderless:true, type:\"form\", paddingX:0, header:labels[\"chart-common\"], rows:[\n\t\t\t\t\t\t\t{view:\"scrollview\", body:{\n\t\t\t\t\t\t\t\tmargin,\n\t\t\t\t\t\t\t\trows:[\n\t\t\t\t\t\t\t\t\taddRichselect(\"type\", \"chart-type\", getTypes()),\n\t\t\t\t\t\t\t\t\t{ view:\"checkbox\", label:labels[\"stacked-chart\"], name:\"stacked\", hidden:true},\n\t\t\t\t\t\t\t\t\t{ view:\"checkbox\", label:labels[\"horizontal-chart\"], name:\"horizontal\", hidden:true},\n\t\t\t\t\t\t\t\t\t{ view:\"checkbox\", label:labels[\"chart-pie-3d\"], name:\"3D\", batch:\"pie\"},\n\t\t\t\t\t\t\t\t\t{ view:\"text\", label:labels[\"chart-range\"], name:\"range\"},\n\t\t\t\t\t\t\t\t\t{ view:\"checkbox\", label:labels[\"chart-col-xAxis\"], name:\"xAxis.fromData\", batch:\"axis\"},\n\t\t\t\t\t\t\t\t\t{ view:\"checkbox\", label:labels[\"chart-row-legend\"], name:\"legend.fromData\"},\n\t\t\t\t\t\t\t\t\t{ view:\"radio\", label:labels[\"chart-data-from\"], name:\"dataSeries\", vertical:true, options:[\n\t\t\t\t\t\t\t\t\t\t{id:\"columns\", value:labels[\"chart-columns\"]},\n\t\t\t\t\t\t\t\t\t\t{id:\"rows\", value:labels[\"chart-rows\"]}\n\t\t\t\t\t\t\t\t\t]},\n\t\t\t\t\t\t\t\t\t{}\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t]},\n\t\t\t\t\t\t{ id:\"advanced\", borderless:true, type:\"form\", paddingX:0, padding:{bottom:0}, header:labels[\"chart-series\"], rows:[\n\t\t\t\t\t\t\t{ view: \"ssheet-series\", name:\"series\" },\n\t\t\t\t\t\t]},\n\t\t\t\t\t\t{ id:\"extras\", borderless:true, type:\"form\", paddingX:0, header:labels[\"chart-extras\"], rows:[\n\t\t\t\t\t\t\t{view:\"scrollview\", body:{\n\t\t\t\t\t\t\t\tview: \"accordion\",\n\t\t\t\t\t\t\t\tmargin: webix.skin.$active.layoutMargin.form,\n\t\t\t\t\t\t\t\tcss: \"webix_ssheet_accordion\",\n\t\t\t\t\t\t\t\tmulti: true,\n\t\t\t\t\t\t\t\ttype: \"clean\",\n\t\t\t\t\t\t\t\trows:[\n\t\t\t\t\t\t\t\t\t{ header:labels[\"chart-legend\"], body:{\n\t\t\t\t\t\t\t\t\t\tmargin,\n\t\t\t\t\t\t\t\t\t\tpadding,\n\t\t\t\t\t\t\t\t\t\trows:[\n\t\t\t\t\t\t\t\t\t\t\t{ view: \"text\", label:labels[\"chart-legend-range\"], name:\"legend.range\"},\n\t\t\t\t\t\t\t\t\t\t\taddRichselect(\"legend.align\", \"chart-legend-align\", getLegendAlign()),\n\t\t\t\t\t\t\t\t\t\t\taddRichselect(\"legend.valign\", \"chart-legend-valign\", getLegendValign())\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t}},\n\t\t\t\t\t\t\t\t\t{ header:labels[\"chart-scale\"], batch:\"axis\", id:\"scale\", body:{\n\t\t\t\t\t\t\t\t\t\tmargin,\n\t\t\t\t\t\t\t\t\t\tpadding,\n\t\t\t\t\t\t\t\t\t\trows:[\n\t\t\t\t\t\t\t\t\t\t\t{ view:\"checkbox\", label:labels[\"chart-lines\"], name:\"scale.lines\", batch:\"axis\"},\n\t\t\t\t\t\t\t\t\t\t\t{ view:\"checkbox\", label:labels[\"chart-radar-circle\"], name:\"scale.circle\", hidden:true},\n\t\t\t\t\t\t\t\t\t\t\t{ view:\"ssheet-colorpicker\", label:labels[\"chart-scale-color\"], name:\"scale.color\", batch:\"axis\"}\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t}},\n\t\t\t\t\t\t\t\t\t{ header:labels[\"chart-x-axis\"], batch:\"axis\", body:{\n\t\t\t\t\t\t\t\t\t\tmargin,\n\t\t\t\t\t\t\t\t\t\tpadding,\n\t\t\t\t\t\t\t\t\t\trows:[\n\t\t\t\t\t\t\t\t\t\t\t{ view:\"text\", label:labels[\"chart-xAxis-range\"], name:\"xAxis.range\", range:true, batch:\"axis\" },\n\t\t\t\t\t\t\t\t\t\t\t{ view:\"text\", label:labels[\"chart-xAxis-title\"], name:\"xAxis.title\", batch:\"axisTitle\" },\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t}},\n\t\t\t\t\t\t\t\t\t{ header:labels[\"chart-y-axis\"], batch:\"axis\", body:{\n\t\t\t\t\t\t\t\t\t\tmargin,\n\t\t\t\t\t\t\t\t\t\tpadding,\n\t\t\t\t\t\t\t\t\t\trows:[\n\t\t\t\t\t\t\t\t\t\t\t{ view:\"text\", label:labels[\"chart-yAxis-title\"], name:\"yAxis.title\", batch:\"axisTitle\" },\n\t\t\t\t\t\t\t\t\t\t\t{ view:\"text\", label:labels[\"chart-yAxis-origin\"], name:\"origin\", batch:\"axis\", attributes:{ type:\"number\" } },\n\t\t\t\t\t\t\t\t\t\t\t{ view:\"label\", label:labels[\"chart-yAxis-note\"], css:\"ssheet_note\", height:20},\n\t\t\t\t\t\t\t\t\t\t\t{ view:\"text\", label:labels[\"chart-yAxis-start\"], name:\"yAxis.start\", batch:\"axis\", attributes:{ type:\"number\" } },\n\t\t\t\t\t\t\t\t\t\t\t{ view:\"text\", label:labels[\"chart-yAxis-end\"], name:\"yAxis.end\", batch:\"axis\", attributes:{ type:\"number\" } },\n\t\t\t\t\t\t\t\t\t\t\t{ view:\"text\", label:labels[\"chart-yAxis-step\"], name:\"yAxis.step\", batch:\"axis\", attributes:{ type:\"number\" } }\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t}},\n\t\t\t\t\t\t\t\t\t{}\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t]}\n\t\t\t\t\t]\n\t\t\t\t}]\n\t\t\t}\n\t\t]\n\t};\n}\n\nfunction ready(view){\n\tconst chartEditor = view.$$(\"chartEditor\");\n\tconst form = chartEditor.queryView(\"form\");\n\tconst elements = form.elements;\n\n\tview.attachEvent(\"onCommand\", action => {\n\t\tif(action.id == \"add-chart\"){\n\t\t\tconst config = action.config;\n\t\t\tlet values = config && config.config || {};\n\n\t\t\tchartEditor.show();\n\n\t\t\tview.$handleSelection = function(st, end, a, b){\n\t\t\t\tconst focus = webix.UIManager.getFocus();\n\n\t\t\t\tif(chartEditor.queryView(view => view == focus)){\n\t\t\t\t\tif(focus == elements.range || focus == elements[\"legend.range\"]){\n\t\t\t\t\t\tlet val = focus.getValue();\n\t\t\t\t\t\tconst last = val.lastIndexOf(\",\");\n\n\t\t\t\t\t\tval = last == -1 ? \"\" : val.substring(0, last + 1);\n\t\t\t\t\t\tfocus.setValue(val + a+\":\"+b);\n\t\t\t\t\t}\n\t\t\t\t\telse if(focus.config.range)\n\t\t\t\t\t\tfocus.setValue(a+\":\"+b);\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t};\n\n\t\t\tform.clear();\n\t\t\tview.$$(\"chartTabs\").setValue(\"common\");\n\n\t\t\tvalues = _normalizeConfig(values);\n\n\t\t\tvalues.range = config ? config.data : view.getSelectedRange();\n\t\t\tchartEditor.viewId = action.viewid ? action.viewid : view.views.add(null, null, \"chart\", values.range, values);\n\n\t\t\tview.callEvent(\"onUIEditStart\", [chartEditor.viewId, \"chart\"]);\n\n\t\t\tupdateValign(values.legend.align);\n\t\t\tupdateAlign(values.legend.valign);\n\n\t\t\tconst formValues = inValues(values);\n\t\t\tform.setValues(formValues);\n\t\t\tupdateType(formValues.type);\n\n\t\t\tif(!_isPie(formValues.type) && values.legend.fromData)\n\t\t\t\tupdateLegendRange(values.legend.fromData);\n\t\t\tif(values.xAxis.fromData)\n\t\t\t\tupdateXaxisRange(values.xAxis.fromData);\n\n\t\t\tupdateSeries();\n\n\t\t\tform.queryView(\"accordionitem\", \"all\").forEach(view => view.expand());\n\n\t\t\telements.range.focus();\n\t\t}\n\t});\n\n\tview.attachEvent(\"onUIEditStart\", (id, type)=>{\n\t\tif(chartEditor.isVisible() && type != \"chart\")\n\t\t\tcloseEditor(view);\n\t});\n\n\tview.attachEvent(\"onCommand\", obj =>{\n\t\tif(obj.id == \"close-ui-editor\" && chartEditor.isVisible())\n\t\t\tcloseEditor(view);\n\t});\n\n\tview.attachEvent(\"onAction\", (id, values) => {\n\t\tif(id == \"add-view\" && !values.newValue){\n\t\t\tif(chartEditor.isVisible() && chartEditor.viewId == values.row)\n\t\t\t\tcloseEditor(view);\n\t\t}\n\t});\n\n\tform.attachEvent(\"onChange\", function(val, oldVal){\n\t\tconst source = this.$eventSource;\n\n\t\t//upper case ranges\n\t\tif(source === elements.range || source === elements[\"xAxis.range\"] || source === elements[\"legend.range\"]){\n\t\t\tconst parts = val.split(\"!\");\n\t\t\tconst upper = parts.length == 2 ? parts[0]+\"!\"+parts[1].toUpperCase() : val.toUpperCase();\n\n\t\t\tif(val != upper){\n\t\t\t\tval = upper;\n\t\t\t\tsetSilentValue(source, upper);\n\t\t\t}\n\t\t}\n\n\t\tswitch (source){\n\t\t\tcase elements.type:\n\t\t\t\tupdateType(val);\n\t\t\t\tbreak;\n\t\t\tcase elements.horizontal:\n\t\t\t\tswitchRowsCols();\n\t\t\t\tbreak;\n\t\t\tcase elements.range:\n\t\t\tcase elements.dataSeries:\n\t\t\t\tif(this.$eventSource == elements.dataSeries)\n\t\t\t\t\tswitchRowsCols();\n\t\t\t\tif(elements[\"legend.fromData\"].getValue())\n\t\t\t\t\thandlePieLegend();\n\t\t\t\tif(elements[\"xAxis.fromData\"].getValue())\n\t\t\t\t\tsetSilentValue(elements[\"xAxis.range\"], getLeftColumn());\n\t\t\t\tupdateSeries();\n\t\t\t\tbreak;\n\t\t\tcase elements[\"xAxis.fromData\"]:\n\t\t\t\tupdateXaxisRange(val);\n\n\t\t\t\tupdateSeries(oldVal);\n\t\t\t\tbreak;\n\t\t\tcase elements[\"legend.fromData\"]:\n\t\t\t\tupdateLegendRange(val);\n\n\t\t\t\tupdateSeries(_isPie(elements.type.getValue()) ? oldVal : 0);\n\t\t\t\tbreak;\n\t\t\tcase elements[\"legend.align\"]:\n\t\t\t\tupdateValign(val);\n\t\t\t\tbreak;\n\t\t\tcase elements[\"legend.valign\"]:\n\t\t\t\tupdateAlign(val);\n\t\t\t\tbreak;\n\t\t\tcase elements[\"xAxis.range\"]:\n\t\t\t\tif(elements[\"xAxis.fromData\"].getValue())\n\t\t\t\t\tsetSilentValue(elements[\"xAxis.fromData\"]);\n\t\t\t\tupdateRange(val, oldVal);\n\t\t\t\tbreak;\n\t\t\tcase elements[\"legend.range\"]:\n\t\t\t\tif(elements[\"legend.fromData\"].getValue())\n\t\t\t\t\tsetSilentValue(elements[\"legend.fromData\"]);\n\t\t\t\tupdateRange(val, oldVal);\n\t\t\t\tbreak;\n\t\t}\n\n\t\tconst config = form.getValues();\n\t\tview.views.update(chartEditor.viewId, config.range, config);\n\t});\n\n\telements.series.attachEvent(\"onRangeChange\", updateRange);\n\n\tfunction handlePieLegend(){\n\t\tif(elements[\"legend.fromData\"].getValue()){\n\t\t\tconst handler = _isPie(elements.type.getValue()) ? getLeftColumn : getTopRow;\n\t\t\tsetSilentValue(elements[\"legend.range\"], handler());\n\t\t}\n\t}\n\n\tfunction updateLegendRange(val){\n\t\tif(val){\n\t\t\tconst legendRange = elements[\"legend.range\"].getValue();\n\t\t\tupdateRange(\"\", legendRange);\n\t\t}\n\n\t\tconst handler = _isPie(elements.type.getValue()) ? getLeftColumn : getTopRow;\n\t\tval = val ? handler() : \"\";\n\n\t\tsetSilentValue(elements[\"legend.range\"], val);\n\t}\n\n\tfunction updateXaxisRange(val){\n\t\tif(val){\n\t\t\tconst xAxisRange = elements[\"xAxis.range\"].getValue();\n\t\t\tupdateRange(\"\", xAxisRange);\n\t\t}\n\n\t\tval = val ? getLeftColumn() : \"\";\n\n\t\tsetSilentValue(elements[\"xAxis.range\"], val);\n\t}\n\n\tfunction setSilentValue(element, val){\n\t\telement.blockEvent();\n\t\telement.setValue(val);\n\t\telement.unblockEvent();\n\t}\n\n\tfunction getLeftColumn(){\n\t\tconst data = elements.range.getValue();\n\t\tconst dataSeries = elements.dataSeries.getValue();\n\t\tconst legendRange = elements[\"legend.range\"].getValue();\n\t\tlet leftColumn = \"\";\n\n\t\tconst series = _getSeries(view, data, dataSeries, {legend: legendRange || \"\"});\n\n\t\tif(series.length)\n\t\t\tleftColumn = series[0].range;\n\n\t\treturn leftColumn;\n\t}\n\n\tfunction getTopRow(){\n\t\tconst data = _getDataParts(elements.range.getValue());\n\t\tconst dir = elements.dataSeries.getValue() == \"rows\";\n\t\tconst xAxisRange = _getDataParts(elements[\"xAxis.range\"].getValue());\n\t\tlet topRow = [];\n\n\t\tdata.forEach(subdata => {\n\t\t\tif(xAxisRange.indexOf(subdata) == -1){\n\t\t\t\tconst part = range(subdata, view);\n\t\t\t\tif(part){\n\t\t\t\t\tconst range = dir ?\n\t\t\t\t\t\ttoRange(part[0], part[1], part[2], part[1], part[4]) :\n\t\t\t\t\t\ttoRange(part[0], part[1], part[0], part[3], part[4]);\n\n\t\t\t\t\tif(data.indexOf(range) == -1)\n\t\t\t\t\t\ttopRow.push(range);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn topRow.join(\",\");\n\t}\n\n\tfunction updateRange(val, oldVal){\n\t\tlet data = elements.range.getValue();\n\n\t\tconst legend = elements[\"legend.range\"].getValue();\n\t\tconst xAxis = elements[\"xAxis.range\"].getValue();\n\t\tconst dataSeries = elements.dataSeries.getValue();\n\n\t\tconst series = _getSeries(view, data, dataSeries, {legend, xAxis});\n\n\t\toldVal = _getDataParts(oldVal);\n\n\t\tdata = _getDataParts(data).filter(val => oldVal.indexOf(val) == -1);\n\n\t\tif(val){\n\t\t\tval = _getDataParts(val);\n\t\t\tval.forEach(range => {\n\t\t\t\tconst exist = series.filter(obj => obj.range == range);\n\t\t\t\tif(!exist.length)\n\t\t\t\t\tdata.push(range);\n\t\t\t});\n\t\t}\n\n\t\tsetSilentValue(elements.range, data.join(\",\"));\n\t}\n\n\tfunction updateAlign(val){\n\t\tconst align = elements[\"legend.align\"];\n\t\tconst list = align.getList();\n\n\t\tif(val == \"middle\"){\n\t\t\tif(list.exists(\"center\"))\n\t\t\t\tlist.remove(\"center\");\n\t\t}\n\t\telse if(!list.exists(\"center\"))\n\t\t\tlist.add({id:\"center\", value:labels[\"chart-legend-center\"]}, 1);\n\t}\n\n\tfunction updateValign(val){\n\t\tconst align = elements[\"legend.valign\"];\n\t\tconst list = align.getList();\n\n\t\tif(val == \"center\"){\n\t\t\tif(list.exists(\"middle\"))\n\t\t\t\tlist.remove(\"middle\");\n\t\t}\n\t\telse if(!list.exists(\"middle\"))\n\t\t\tlist.add({id:\"middle\", value:labels[\"chart-legend-middle\"]}, 1);\n\t}\n\n\tfunction updateType(val){\n\t\thandlePieLegend();\n\n\t\tconst isPie = _isPie(val);\n\t\tconst isBar = val == \"bar\";\n\t\tconst series = elements.series;\n\t\tconst markersVisible = val == \"radar\" || val == \"line\" || val == \"spline\";\n\n\t\tseries.hideSubviews(\"marker\", markersVisible);\n\t\tseries.hideSubviews(\"label\", markersVisible || isBar || isPie);\n\t\tseries.hideSubviews(\"color\", !isPie);\n\n\t\tif(val == \"area\" || isBar) elements.stacked.show();\n\t\telse hideField(elements.stacked);\n\n\t\tif(isBar) elements.horizontal.show();\n\t\telse hideField(elements.horizontal);\n\n\t\tif(val == \"radar\")\n\t\t\telements[\"scale.circle\"].show();\n\t\telse\n\t\t\thideField(elements[\"scale.circle\"]);\n\n\t\tif(isPie){\n\t\t\thideBatch(\"axis\");\n\t\t\thideBatch(\"pie\", true);\n\t\t}\n\t\telse{\n\t\t\thideBatch(\"axis\", true);\n\t\t\thideBatch(\"pie\");\n\t\t}\n\n\t\tif(isPie || val == \"radar\")\n\t\t\thideBatch(\"axisTitle\");\n\t\telse\n\t\t\thideBatch(\"axisTitle\", true);\n\n\t\tswitchRowsCols();\n\t}\n\n\tfunction updateSeries(oldXaxis){\n\t\tlet data = elements.range.getValue();\n\n\t\tlet series = elements.series.getValue();\n\t\tconst legend = elements[\"legend.range\"].getValue();\n\t\tconst xAxis = elements[\"xAxis.range\"].getValue();\n\t\tconst dataSeries = elements.dataSeries.getValue();\n\n\t\tseries = _getSeries(view, data, dataSeries, {series, legend, xAxis}, oldXaxis);\n\n\t\telements.series.setValue(series);\n\t}\n\n\tfunction switchRowsCols(){\n\t\tconst dir = elements.dataSeries.getValue() == \"rows\";\n\t\tconst horizontal = elements.horizontal.getValue();\n\t\tconst pie = _isPie(elements.type.getValue());\n\n\t\tif((!pie && dir) || (!dir && pie)){\n\t\t\telements[\"legend.fromData\"].define(\"label\", labels[\"chart-col-legend\"]);\n\t\t\telements[\"xAxis.fromData\"].define(\"label\", labels[\"chart-row-\" + (horizontal ? \"yAxis\" : \"xAxis\")]);\n\t\t}\n\t\telse{\n\t\t\telements[\"legend.fromData\"].define(\"label\", labels[\"chart-row-legend\"]);\n\t\t\telements[\"xAxis.fromData\"].define(\"label\", labels[\"chart-col-\" + (horizontal ? \"yAxis\" : \"xAxis\")]);\n\t\t}\n\t\telements[\"legend.fromData\"].refresh();\n\t\telements[\"xAxis.fromData\"].refresh();\n\t}\n\n\tfunction hideField(field){\n\t\tif(field.setValue)\n\t\t\tsetSilentValue(field);\n\t\tfield.hide();\n\t}\n\n\tfunction hideBatch(batch, visible){\n\t\tform.queryView({batch:batch}, \"all\").forEach(field => {\n\t\t\tif(visible)\n\t\t\t\tfield.show();\n\t\t\telse\n\t\t\t\thideField(field);\n\t\t});\n\t}\n\n\tfunction inValues(values){\n\t\t[\n\t\t\t{value:\"H\", name:\"horizontal\"},\n\t\t\t{value:\"stacked\"},\n\t\t\t{value:\"3D\"}\n\t\t].forEach(property => {\n\t\t\tif(values.type.indexOf(property.value) != -1){\n\t\t\t\tvalues[property.name || property.value] = 1;\n\t\t\t\tvalues.type = values.type.replace(property.value, \"\").toLowerCase();\n\t\t\t}\n\t\t});\n\n\t\treturn values;\n\t}\n}\n\nfunction closeEditor(view){\n\tconst chartEditor = view.$$(\"chartEditor\");\n\tview.callEvent(\"onUIEditStop\", [chartEditor.viewId, \"chart\"]);\n\tchartEditor.viewId = null;\n\tview.$handleSelection = null;\n\tchartEditor.hide();\n}\n\nfunction addRichselect(name, label, data){\n\treturn { view: \"richselect\", name:name, label:labels[label], suggest:{\n\t\tview: \"ssheet-form-suggest\",\n\t\tdata: data\n\t}};\n}\n\nexport function getTypes(){\n\treturn [\n\t\t{id:\"line\", value:labels[\"line-chart\"]},\n\t\t{id:\"spline\", value:labels[\"spline-chart\"]},\n\t\t{id:\"splineArea\", value:labels[\"splinearea-chart\"]},\n\t\t{id:\"area\", value:labels[\"area-chart\"]},\n\t\t{id:\"bar\", value:labels[\"bar-chart\"]},\n\t\t{id:\"radar\", value:labels[\"radar-chart\"]},\n\t\t{id:\"pie\", value:labels[\"pie-chart\"]},\n\t\t{id:\"donut\", value:labels[\"donut-chart\"]}\n\t];\n}\n\nfunction getLegendAlign(){\n\treturn [\n\t\t{id:\"left\", value:labels[\"chart-legend-left\"]},\n\t\t{id:\"center\", value:labels[\"chart-legend-center\"]},\n\t\t{id:\"right\", value:labels[\"chart-legend-right\"]}\n\t];\n}\n\nfunction getLegendValign(){\n\treturn [\n\t\t{id:\"top\", value:labels[\"chart-legend-top\"]},\n\t\t{id:\"middle\", value:labels[\"chart-legend-middle\"]},\n\t\t{id:\"bottom\", value:labels[\"chart-legend-bottom\"]}\n\t];\n}","import {Dialog} from \"./common\";\nimport {range} from \"../helpers/column_names\";\nimport {parseChart} from \"../mathematics/writer\";\nimport {getTypes} from \"../chart\";\n\nexport const action = \"add-sparkline\";\n\nconst labels = webix.i18n.spreadsheet.labels;\n\nexport class DialogBox extends Dialog{\n\t$show(box, form){\n\t\tthis.cell = this.view.getSelectedId();\n\t\tif(!this.cell)\n\t\t\treturn false;\n\n\t\tconst els = form.elements;\n\t\tthis.view.$handleSelection = function(st, end, a, b){\n\t\t\tels.range.setValue(a+\":\"+b);\n\t\t\treturn false;\n\t\t};\n\n\t\tels.range.setValue(\"\");\n\n\t\t//sync state of dialog to data with the selected cell\n\t\tlet value = this.view.getCellValue(this.cell.row, this.cell.column);\n\t\tlet data = parseChart(value);\n\t\tif (data){\n\t\t\tform.blockEvent();\n\t\t\tels.type.setValue(data.type);\n\t\t\tels.range.setValue(data.range);\n\t\t\tif (data.color){\n\t\t\t\tels.color_def.setValue(data.color);\n\t\t\t\tels.color_pos.setValue(data.color);\t\t\n\t\t\t}\n\t\t\tif (data.negativeColor)\n\t\t\t\tels.color_neg.setValue(data.negativeColor);\n\t\t\tif (data.horizontal)\n\t\t\t\tels.horizontal.setValue(1);\n\n\t\t\tform.unblockEvent();\n\t\t\tthis.renderPreview();\n\t\t}\t\n\n\t\tels.range.focus();\n\t}\n\t$hide(){\n\t\tthis.view.$handleSelection = null;\n\t}\n\t$init(){\n\t\treturn {\n\t\t\tview: \"ssheet-dialog\",\n\t\t\thead:labels[\"sparkline-title\"],\n\t\t\tmove: true,\n\t\t\tposition: \"center\",\n\t\t\tbody:{\n\t\t\t\tview:\"form\", visibleBatch:1, on:{ onChange : ()=> this.renderPreview() }, elements:[\n\t\t\t\t\t{view: \"richselect\", name:\"type\", label:labels[\"sparkline-type\"], value:\"line\", labelPosition:\"left\", suggest:{\n\t\t\t\t\t\tview: \"ssheet-form-suggest\",\n\t\t\t\t\t\tdata:getTypes()\n\t\t\t\t\t}, on:{\n\t\t\t\t\t\tonChange: function(type){\n\t\t\t\t\t\t\tconst form = this.getFormView();\n\t\t\t\t\t\t\tswitch(type){\n\t\t\t\t\t\t\t\tcase \"pie\":\n\t\t\t\t\t\t\t\tcase \"donut\":\n\t\t\t\t\t\t\t\t\tform.showBatch(3);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase \"bar\":\n\t\t\t\t\t\t\t\t\tform.showBatch(2);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\tform.showBatch(1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}},\n\t\t\t\t\t{ view:\"text\", label:labels[\"sparkline-range\"], name:\"range\"},\n\t\t\t\t\t{ view:\"ssheet-colorpicker\", label:labels[\"sparkline-color\"], name:\"color_def\", id:\"add_sparkline_color\", value:\"#6666FF\", batch:\"1\"},\n\t\t\t\t\t{ view:\"ssheet-colorpicker\", label:labels[\"sparkline-positive\"], name:\"color_pos\", value:\"#6666FF\", batch:\"2\"},\n\t\t\t\t\t{ view:\"ssheet-colorpicker\", label:labels[\"sparkline-negative\"], name:\"color_neg\", value:\"#FF6666\", batch:\"2\"},\n\t\t\t\t\t{ view:\"checkbox\", label:labels[\"horizontal-chart\"], name:\"horizontal\", batch:\"2\"},\n\t\t\t\t\t{ view:\"formlate\", name:\"preview\", borderless:true, css:\"webix_ssheet_preview\", height:50 }\n\t\t\t\t]\n\t\t\t},\n\t\t\ton:{\n\t\t\t\tonSaveClick: () => this.okClick(),\n\t\t\t\tonCancelClick: () => this.close()\n\t\t\t}\n\t\t};\n\t}\n\tcheckRange(text){\n\t\tif(text && range(text, this.view))\n\t\t\treturn true;\n\t\tthis.view.alert({text:labels[\"error-range\"]});\n\t}\n\tokClick(){\n\t\tconst form = this.$dialog.getBody();\n\t\tconst data = form.getValues();\n\t\tdata.range = data.range.toUpperCase();\n\n\t\tif (data.range && this.checkRange(data.range)){\n\t\t\tconst config = this.sparkConfig(data);\n\n\t\t\tthis.view.addSparkline(this.cell.row, this.cell.column, config);\n\t\t\tthis.close();\n\t\t}\n\t}\n\n\trenderPreview(){\n\t\tconst form = this.$dialog.getBody();\n\t\tconst data = form.getValues();\n\t\tdata.range = data.range.toUpperCase();\n\n\t\tif (data.range && this.checkRange(data.range)){\n\t\t\tconst pos = range(data.range, this.view);\n\t\t\tconst values = this.view._mPage.getRange(pos[0]-1, pos[1]-1, pos[2]-1, pos[3]-1);\n\t\t\tconst config = this.sparkConfig(data, true);\n\n\t\t\tfor(let i = 0; i < values.length; i++)\n\t\t\t\tvalues[i] = values[i]||0;\n\t\t\tform.elements.preview.setValue(webix.Sparklines.getTemplate(config)(values, { width:200, height: 40 }));\n\t\t}\n\t\telse\n\t\t\tform.elements.preview.setValue(\"\");\n\t}\n\n\tsparkConfig(config, preview){\n\t\tconfig = webix.copy(config);\n\t\tconst form = this.$dialog.getBody();\n\n\t\tif (config.type === \"bar\"){\n\t\t\tconfig.color = config.color_pos;\n\t\t\tconfig.negativeColor = config.color_neg;\n\t\t}\n\t\telse if(form.elements.color_def.isVisible())\n\t\t\tconfig.color = config.color_def;\n\t\telse if(config.type == \"donut\" && preview)\n\t\t\twebix.extend(config, {type:\"pie\", donut:1}, true);\n\n\t\treturn config;\n\t}\n}","import {Dialog} from \"./common\";\nimport {isRange, toSheetRange, escapeSheet} from \"../helpers/column_names\";\nimport {getLastCharIndex} from \"../mathematics/parser\";\n\nexport const action = \"add-range\";\n\nexport class DialogBox extends Dialog{\n\t$show(box){\n\t\tconst form = box.$$(\"form\");\n\n\t\tform.clear();\n\t\tform.clearValidation();\n\n\t\tconst elements = form.elements;\n\n\t\telements.name.focus();\n\n\t\tlet selectedCell = this.view.getSelectedRange();\n\t\tif(selectedCell)\n\t\t\tselectedCell = escapeSheet(this.view.getActiveSheet())+\"!\"+selectedCell;\n\n\t\tform.setValues({\n\t\t\trange: selectedCell,\n\t\t\tscope: \"$global\"\n\t\t});\n\n\t\tthis._updateData();\n\n\t\tthis.view._rangeDialog = true;\n\t\tthis.view.$handleSelection = (st, end, a, b)=>{\n\t\t\tform.elements.range.setValue(toSheetRange(a,b,this.view.getActiveSheet()));\n\t\t\treturn false;\n\t\t};\n\t}\n\t$hide(){\n\t\tthis.view.$handleSelection = null;\n\t\tthis.view._rangeDialog = null;\n\t}\n\tsaveClick(){\n\t\tconst view = this.view;\n\t\tconst form = this.$dialog.$$(\"form\");\n\t\tconst data = form.getValues();\n\n\t\tif(data.range){\n\t\t\tconst rangeParts = data.range.split(\"!\");\n\n\t\t\tif(rangeParts.length == 1)\n\t\t\t\trangeParts.unshift( escapeSheet(view.getActiveSheet()) );\n\n\t\t\tdata.range = rangeParts[0]+\"!\"+rangeParts[1].toUpperCase();\n\t\t}\n\n\t\tdata.name = data.name.toUpperCase();\n\n\t\tform.setValues(data);\n\n\t\tif (form.validate()){\n\t\t\tconst table = this.$dialog.$$(\"table\");\n\n\t\t\tif(data.id){\n\t\t\t\tconst oldData = table.getItem(data.id);\n\n\t\t\t\tview.ranges.remove(oldData.name, this._getScope(oldData));\n\t\t\t\ttable.updateItem(data.id, data);\n\t\t\t}\n\t\t\telse\n\t\t\t\ttable.add(data);\n\n\t\t\tview.ranges.add(\n\t\t\t\tdata.name,\n\t\t\t\tdata.range,\n\t\t\t\tthis._getScope(data)\n\t\t\t);\n\n\t\t\tview.refresh();\n\n\t\t\ttable.unselect();\n\t\t\tform.setValues({scope: \"$global\"});\n\t\t}\n\t}\n\t_getScope(data){\n\t\treturn data.scope == \"$global\" ? true : data.scope;\n\t}\n\tremoveRange(id){\n\t\tconst view = this.view;\n\t\tview.confirm({\n\t\t\ttext: webix.i18n.spreadsheet.labels[\"range-remove-confirm\"]\n\t\t}).then(()=>{\n\t\t\tconst table = this.$dialog.$$(\"table\");\n\t\t\tconst item = table.getItem(id);\n\n\t\t\tview.ranges.remove(item.name, this._getScope(item));\n\n\t\t\tview.refresh();\n\t\t\ttable.remove(id);\n\t\t});\n\t}\n\teditRange(id){\n\t\tconst form = this.$dialog.$$(\"form\");\n\t\tconst table = this.$dialog.$$(\"table\");\n\n\t\tform.clearValidation();\n\t\tconst item = webix.copy(table.getItem(id));\n\n\t\tform.setValues(item);\n\t}\n\t$init(){\n\t\tthis.view.attachEvent(\"onSheetRename\", (name, newName)=> this._updateData(name, newName));\n\t\tthis.view.attachEvent(\"onSheetRemove\", (name)=> this._updateData(name));\n\t\tthis.view.attachEvent(\"onSheetAdd\", ()=> this._updateData());\n\n\t\tconst locale = webix.i18n.spreadsheet.labels;\n\t\tconst theform = {\n\t\t\tpadding:0,\n\t\t\ttype: \"clean\",\n\t\t\tcols:[\n\t\t\t\t{ view: \"ssheet-dialog-table\", id: \"table\", borderless:true, columns:[\n\t\t\t\t\t{ id:\"name\", header:locale[\"range-name\"], width: 120 },\n\t\t\t\t\t{ id:\"range\", header:locale[\"range-cells\"], width: 150 },\n\t\t\t\t\t{ id:\"scope\", header:locale[\"range-scope\"], width: 95, template: obj => {\n\t\t\t\t\t\treturn obj.scope == \"$global\" ? locale[\"range-global\"] : obj.scope;\n\t\t\t\t\t}},\n\t\t\t\t\t{ template:\"\", width:44 },\n\t\t\t\t\t{ template:\"\", width:44 }\n\t\t\t\t],\n\t\t\t\tautowidth:true, height: 200, select:\"row\",\n\t\t\t\ton:{\n\t\t\t\t\tonBeforeSelect: id =>{\n\t\t\t\t\t\treturn id == this.$dialog.$$(\"form\").getValues().id;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tonClick:{\n\t\t\t\t\t\"wxi-trash\":(ev, id) => this.removeRange(id),\n\t\t\t\t\t\"wxi-pencil\":(ev, id) => this.editRange(id)\n\t\t\t\t}},\n\t\t\t\t{ width: 270, view: \"form\", id:\"form\",\n\t\t\t\t\trules:{\n\t\t\t\t\t\tname: (_, obj)=> {\n\t\t\t\t\t\t\tconst notUnique = this.$dialog.$$(\"table\").find(item => {\n\t\t\t\t\t\t\t\treturn item.name == obj.name && item.scope == obj.scope && item.id != obj.id;\n\t\t\t\t\t\t\t}, true);\n\n\t\t\t\t\t\t\treturn !notUnique && !getLastCharIndex(obj.name);\n\t\t\t\t\t\t},\n\t\t\t\t\t\trange: isRange,\n\t\t\t\t\t\tscope: webix.rules.isNotEmpty\n\t\t\t\t\t},\n\t\t\t\t\telementsConfig:{\n\t\t\t\t\t\tlabelWidth: 95\n\t\t\t\t\t},\n\t\t\t\t\telements:[\n\t\t\t\t\t\t{ view: \"text\", name:\"name\", label: locale[\"range-name\"]},\n\t\t\t\t\t\t{ view: \"text\", name:\"range\", id:\"range\", label: locale[\"range-cells\"], on:{\n\t\t\t\t\t\t\tonFocus:() => this.view.showCell(this.$dialog.$$(\"range\").getValue(), true)\n\t\t\t\t\t\t}},\n\t\t\t\t\t\t{ view: \"richselect\", name:\"scope\", id:\"sheets\", label: locale[\"range-scope\"], suggest:{\n\t\t\t\t\t\t\tview: \"ssheet-form-suggest\",\n\t\t\t\t\t\t\tbody:{\n\t\t\t\t\t\t\t\tdata: []\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\n\t\treturn {\n\t\t\tview: \"ssheet-dialog\",\n\t\t\tmove:true,\n\t\t\thead: webix.i18n.spreadsheet.labels[\"range-title\"],\n\t\t\tautoheight: true,\n\t\t\twidth: 800,\n\t\t\tposition: \"center\",\n\t\t\tbody: theform,\n\t\t\ton:{\n\t\t\t\tonSaveClick: () => this.saveClick(),\n\t\t\t\tonCancelClick: () => this.close()\n\t\t\t}\n\t\t};\n\t}\n\t_updateData(name, newName){\n\t\tif(!this.$dialog.isVisible())\n\t\t\treturn;\n\n\t\tconst ranges = this.view._mData.getRanges();\n\t\tconst locale = webix.i18n.spreadsheet.labels;\n\t\tconst table = this.$dialog.$$(\"table\");\n\t\tconst form = this.$dialog.$$(\"form\");\n\n\t\tlet editRange = table.getItem( form.getValues().id );\n\t\tif(editRange){\n\t\t\tlet rangeName = editRange.name;\n\n\t\t\tif(name == editRange.scope)\n\t\t\t\trangeName = newName ? newName+\"!\"+rangeName : null;\n\t\t\telse\n\t\t\t\trangeName = editRange.scope+\"!\"+rangeName;\n\n\t\t\teditRange = rangeName ? ranges.get(rangeName) : null;\n\t\t}\n\n\t\ttable.clearAll();\n\n\t\tconst allRanges = ranges.serialize();\n\t\tconst data = [];\n\n\t\tlet selectedId;\n\t\tfor(let i = 0; i < allRanges.length; i++){\n\t\t\tconst id = i+1;\n\t\t\tlet [name, range] = allRanges[i];\n \n\t\t\tif(editRange && ranges.get(name) == editRange)\n\t\t\t\tselectedId = id;\n\n\t\t\tconst nameParts = name.split(\"!\");\n\n\t\t\tdata.push({\n\t\t\t\tscope: nameParts.length == 1 ? \"$global\" : nameParts[0],\n\t\t\t\tname: nameParts[1] || nameParts[0],\n\t\t\t\trange,\n\t\t\t\tid\n\t\t\t});\n\t\t}\n\n\t\ttable.parse(data);\n\n\t\tform.setValues({id:selectedId}, true);\n\t\tif(selectedId)\n\t\t\ttable.select(selectedId);\n\n\t\tconst select = this.$dialog.$$(\"sheets\");\n\t\tconst selectList = select.getList();\n\n\t\tselectList.clearAll();\n\n\t\tconst sheets = [{\n\t\t\tid: \"$global\", value: locale[\"range-global\"]\n\t\t}];\n\t\tthis.view._sheets.forEach(sheet => {\n\t\t\tsheets.push({id:sheet.name, value: sheet.name});\n\t\t});\n\t\tselectList.parse(sheets);\n\n\t\tif(name){\n\t\t\tconst range = this.$dialog.$$(\"range\");\n\t\t\tconst rangeVal = range.getValue();\n\n\t\t\t//remove sheet\n\t\t\tnewName = newName || this.view.getActiveSheet();\n\n\t\t\tif(rangeVal.indexOf(escapeSheet(name)+\"!\") == 0)\n\t\t\t\trange.setValue(escapeSheet(newName)+\"!\"+rangeVal.split(\"!\")[1]);\n\n\t\t\tif(select.getValue() == name)\n\t\t\t\tselect.setValue(newName);\n\t\t}\n\t}\n}","import {Dialog} from \"./common\";\nimport {range} from \"../helpers/column_names\";\nimport group from \"../operations/undo_group\";\n\nexport const action = \"add-dropdown\";\n\nexport class DialogBox extends Dialog{\n\t$show(){\n\t\tlet form = this.$dialog.$$(\"form\");\n\t\tthis.cell = this.view.getSelectedId(true);\n\t\tif (!this.cell.length)\n\t\t\treturn false;\n\n\t\tform.clear();\n\n\t\t//restore previosly selected range\n\t\tlet value = this.view.getCellEditor(this.cell[0].row, this.cell[0].column);\n\t\tif (value && value.options)\n\t\t\tform.elements.range.setValue(value.options);\n\n\t\tthis.view.$handleSelection = function(st, end, a, b){\n\t\t\tform.elements.range.setValue(a+\":\"+b);\n\t\t\treturn false;\n\t\t};\n\n\t\tform.elements.range.focus();\n\t}\n\t$hide(){\n\t\tthis.view.$handleSelection = null;\n\t}\n\t$init(){\n\t\treturn {\n\t\t\tview: \"ssheet-dialog\",\n\t\t\tposition:\"center\",\n\t\t\thead:webix.i18n.spreadsheet.labels[\"dropdown-title\"],\n\t\t\tmove: true,\n\t\t\tbody:{\n\t\t\t\tpadding:0, view:\"form\", id:\"form\", rows:[\n\t\t\t\t\t{ view:\"text\", label:webix.i18n.spreadsheet.labels[\"dropdown-range\"], name:\"range\" }\n\t\t\t\t]\n\t\t\t},\n\t\t\ton:{\n\t\t\t\tonSaveClick: () => this.okClick(),\n\t\t\t\tonCancelClick: () => this.close()\n\t\t\t}\n\t\t};\n\t}\n\tokClick(){\n\t\tconst values = this.$dialog.$$(\"form\").elements.range.getValue();\n\n\t\tif (values){\n\t\t\tif(!range(values, this.view))\n\t\t\t\tthis.view.alert({text:webix.i18n.spreadsheet.labels[\"error-range\"]});\n\t\t\telse{\n\t\t\t\tgroup.set(function(){\n\t\t\t\t\tfor (let i = 0; i < this.cell.length; i++)\n\t\t\t\t\t\tthis.view.setCellEditor(this.cell[i].row, this.cell[i].column, { editor:\"ss_richselect\", options:values});\n\t\t\t\t}, this);\n\t\t\t\tthis.close();\n\t\t\t}\n\t\t}\n\t\telse\n\t\t\tthis.close();\n\t}\n}","import {range as getRangePos} from \"../helpers/column_names\";\nimport {cell_template} from \"../table\";\nimport * as arr from \"../helpers/array\";\nimport {serialize as getSpans} from \"../operations/spans\";\n\nclass Ranges{\n\tconstructor(view){\n\t\tthis._master = view;\n\t}\n\tclear(scope){\n\t\tconst sheet = typeof scope == \"string\" ? scope : this._master.getActiveSheet();\n\t\tconst ranges = this.serialize(sheet);\n\t\tranges.forEach(range => {\n\t\t\tif(scope === true){\n\t\t\t\tif(range[2])\n\t\t\t\t\tthis.remove(range[0], scope);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telse\n\t\t\t\tthis.remove(range[0], scope);\n\t\t});\n\t}\n\t_normalizeName(name, scope){\n\t\tif(scope !== true)\n\t\t\tname = (scope || this._master.getActiveSheet())+\"!\"+name;\n\t\treturn name;\n\t}\n\t_normalizeRange(range, scope){\n\t\tconst rangeParts = range.split(\"!\");\n\t\tif(rangeParts.length == 1)\n\t\t\trange = (typeof scope == \"string\" ? scope : this._master.getActiveSheet()) + \"!\" + range;\n\t\treturn range;\n\t}\n\tadd(name, range, scope){\n\t\tconst view = this._master;\n\n\t\tview.callEvent(\"onAfterRangeSet\", [name, range, scope]);\n\n\t\tname = this._normalizeName(name, scope);\n\n\t\tview._mData.getRanges().add(name, this._normalizeRange(range, scope));\n\t\tview.callEvent(\"onMathRefresh\", []);\n\t}\n\tgetCode(name, scope){\n\t\tname = this._normalizeName(name, scope);\n\n\t\tconst range = this._master._mData.getRanges().get(name);\n\t\tif(range)\n\t\t\treturn range.source;\n\t}\n\tremove(name, scope){\n\t\tname = this._normalizeName(name, scope);\n\n\t\tthis._master._mData.getRanges().remove(name);\n\t\tthis._master.callEvent(\"onMathRefresh\", []);\n\t}\n\tparse(data, sheet){\n\t\tif(!data)\n\t\t\treturn;\n\t\tfor(let i = 0; i < data.length; i++){\n\t\t\tconst ranges = this._master._mData.getRanges();\n\t\t\tlet [name, range, globalRange] = data[i];\n\t\t\tname = this._normalizeName(name, globalRange||sheet);\n\n\t\t\tif(!ranges.get(name))\n\t\t\t\tranges.add(name, this._normalizeRange(range, sheet));\n\t\t}\n\t}\n\tserialize(sheet){\n\t\tsheet = sheet || this._master.getActiveSheet();\n\t\tconst allRanges = this._master._mData.getRanges().serialize();\n\t\tconst out = [];\n\n\t\tfor(let i = 0; i < allRanges.length; i++){\n\t\t\tconst arr = allRanges[i];\n\t\t\tconst nameParts = arr[0].split(\"!\");\n\t\t\tconst globalRange = nameParts.length == 1;\n\n\t\t\tif(globalRange || nameParts[0] == sheet)\n\t\t\t\tout.push([\n\t\t\t\t\tnameParts[ globalRange ? 0 : 1 ],\n\t\t\t\t\tarr[1],\n\t\t\t\t\tglobalRange\n\t\t\t\t]);\n\t\t}\n\n\t\treturn out;\n\t}\n\tgetRanges(sheet){\n\t\tconst data = this.serialize(sheet);\n\t\treturn data.map(arr => {\n\t\t\treturn {\n\t\t\t\tname: arr[0],\n\t\t\t\trange: arr[1],\n\t\t\t\tglobal: arr[2]\n\t\t\t};\n\t\t});\n\t}\n}\n\nexport function init(view) {\n\tview.ranges = new Ranges(view);\n\n\tview.attachEvent(\"onDataSerialize\", data => {\n\t\tdata.ranges = view.ranges.serialize();\n\t});\n}\n\nfunction nullFilter(){ \n\tconst locale = webix.i18n.spreadsheet.labels;\n\treturn { id:\"$empty\", value:\"\", $value:\"\"+locale[\"dropdown-empty\"]+\"\" };\n}\n\nfunction getRange(view, r1, c1, r2, c2, spans){\n\tconst out = [];\n\tconst activeSheet = view._mPage === this;\n\n\tfor (let i = r1-1; i <= r2-1; i++) {\n\t\tfor (let j = c1-1; j <= c2-1; j++){\n\t\t\tlet inSpan;\n\t\t\tfor(let s = 0; s < spans.length; s++){\n\t\t\t\tconst span = spans[s];\n\t\t\t\tconst row = i + 1;\n\t\t\t\tconst col = j + 1;\n\t\t\t\tif(!(row == span[0] && col == span[1]) && row >= span[0] && row < span[0] + span[3] && col >= span[1] && col < span[1] + span[2]){\n\t\t\t\t\tinSpan = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(inSpan)\n\t\t\t\tcontinue;\n\t\t\tlet obj = this.getCell(i, j);\n\t\t\tlet cell;\n\n\t\t\tif(!obj)\n\t\t\t\tcell = {\n\t\t\t\t\tvalue: \"\"\n\t\t\t\t};\n\t\t\telse\n\t\t\t\tcell = webix.copy(obj);\n\n\t\t\tif(activeSheet)\n\t\t\t\tcell.$value = cell_template(view, {id: i+1}, null, null, {id:j+1}, true);\n\t\t\telse\n\t\t\t\tdelete cell.format;\n\n\t\t\tcell.id = cell.value;\n\t\t\tout.push(cell);\n\t\t}\n\t}\n\n\treturn out;\n}\n\nexport function rangeOptions(view, text, extra){\n\tlet values = [];\n\tif (typeof text == \"string\"){\n\t\tconst pos = getRangePos(text, view);\n\t\tif (pos){\n\t\t\tlet page = view._mPage;\n\t\t\tif(pos[4])\n\t\t\t\tpage = view._mData.getPage(pos[4]);\n\t\n\t\t\tif(page){\n\t\t\t\tconst spans = (\n\t\t\t\t\tpage == view._mPage ?\n\t\t\t\t\t\tgetSpans(view, {}) :\n\t\t\t\t\t\tarr.find(view._sheets, sheet => sheet.name == pos[4]).content\n\t\t\t\t).spans;\n\t\t\t\tvalues = getRange.apply(page, [view, pos[0], pos[1], pos[2], pos[3], spans]);\n\t\t\t}\n\t\t}\n\t}\n\telse if (webix.isArray(text))\n\t\tfor (let i=0; i=0; i--){\n\t\tconst boolean = typeof values[i].value === \"boolean\";\n\t\tif(boolean)\n\t\t\tvalues[i].value *= 1;\n\t\tif(boolean || values[i].id === 0)\n\t\t\tvalues[i].id = String(values[i].value);\n\n\t\tif(extra && extra.unique){\n\t\t\tif (test[values[i].id])\n\t\t\t\tvalues.splice(i, 1);\n\t\t\telse\n\t\t\t\ttest[values[i].id] = true;\n\t\t}\n\t}\n\n\tif (extra){\n\t\tlet empty = false;\n\t\tfor (let i=values.length-1; i>=0; i--){\n\t\t\tlet value = values[i].value;\n\t\t\tif (!value && value !== 0){\n\t\t\t\tvalues.splice(i, 1);\n\t\t\t\tempty = true;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tvalues[i].value = String(value);\n\t\t}\n\n\t\tif (extra.order)\n\t\t\tvalues.sort(function(objA, objB){\n\t\t\t\tconst sorters = view.$$(\"cells\").data.sorting.as;\n\t\t\t\tconst a = objA.value;\n\t\t\t\tconst b = objB.value;\n\n\t\t\t\treturn webix.rules.isNumber(a) && webix.rules.isNumber(b) ? sorters.int(a, b) : sorters.string(a, b);\n\t\t\t});\n\n\t\tif (empty && extra.filter)\n\t\t\tvalues.unshift( nullFilter() );\n\n\t\tif (extra.empty)\n\t\t\tvalues.unshift({ id:\"$empty\", $empty:true, value:\"\" });\n\t}\n\treturn values;\n}","import group from \"./undo_group\";\nimport {getType} from \"./types\";\nimport {setSpanCss} from \"./spans\";\nimport {rangeOptions} from \"../mathematics/ranges\";\nimport {changeRange, eachRange, toRange} from \"../helpers/column_names\";\nimport {conditions} from \"../helpers/conditional\";\n\nexport function init(view){\n\tconst table = view._table;\n\n\tview.attachEvent(\"onReset\", () => reset(view));\n\treset(view);\n\n\ttable.on_click.ssheet_filter_sign = (e, id) => {\n\t\tconst filter = table._ssFilters[id.row][id.column];\n\t\tconst mode = filter.mode || getFilterMode(view, id.row, id.column);\n\n\t\tlet options = [];\n\t\tif (filter.options){\n\t\t\tif (typeof filter.options == \"string\")\n\t\t\t\toptions = rangeOptions(view, filter.options, { unique:true, order:true, filter:true });\n\t\t\telse if (webix.isArray(filter.options))\n\t\t\t\toptions = rangeOptions(view, filter.options, { filter:true });\n\t\t}\n\t\tview.callEvent(\"onCommand\", [{id:\"start-filter\", cell:id, mode, options, filter}]);\n\t};\n\ttable.on_dblclick.ssheet_filter_sign = () => false;\n\n\tview.attachEvent(\"onCommand\", (cm) => {\n\t\tif (cm.id === \"create-filter\")\n\t\t\ttoggleFilters(view);\n\t});\n\n\tlet refilter = false;\n\tview.attachEvent(\"onUndo\", (type, row, column, value) => {\n\t\tif (type == \"filter\"){\n\t\t\tvalue = (typeof value == \"object\") ? value : null;\n\t\t\tview.setCellFilter(row, column, value);\n\t\t\trefilter = true;\n\t\t}\n\t\telse if (type == \"apply-filter\"){\n\t\t\tconst filter = view.getCellFilter(row, column);\n\n\t\t\tfilter.value = value;\n\t\t\tdelete filter.handler;\n\t\t\tif (value && value.condition){\n\t\t\t\tconst mode = filter.mode || getFilterMode(view, row, column);\n\t\t\t\tfilter.handler = getFilterFunction(mode, filter.value);\n\t\t\t}\n\t\t\trefilter = true;\n\n\t\t\t// update css\n\t\t\tconst add = value && isValueActive(value);\n\t\t\ttable[add?\"addCellCss\":\"removeCellCss\"](row, column, \"ss_filter_active\");\n\t\t\tsetSpanCss(view, row, column, \"ss_filter_active\", add);\n\t\t}\n\t});\n\n\tview.attachEvent(\"onAfterUndo\", () => {\n\t\tif (refilter){\n\t\t\tview.filterSpreadSheet();\n\t\t\trefilter = false;\n\t\t}\n\t});\n\n\tview.attachEvent(\"onAction\", (action, p) => {\n\t\tif (action == \"filter\"){\n\t\t\tsetSpanCss(view, p.row, p.column, \"ss_filter\", p.newValue);\n\t\t\tsetSpanCss(view, p.row, p.column, \"ss_filter_active\", (p.newValue && p.newValue.value && isValueActive(p.newValue.value)));\n\t\t\tmarkBarFilter(view);\n\t\t}\n\t\telse if (action == \"before-grid-change\")\n\t\t\tupdatePosition(view, p.name, p.inc, p.data, p.start);\n\t});\n}\n\nfunction reset(view){\n\tview._table._ssFilters = {};\n\tmarkBarFilter(view);\n}\n\nexport function getFilters(table){\n\tconst filters = table._ssFilters;\n\tconst all = [];\n\tfor (let row in filters)\n\t\tfor (let column in filters[row])\n\t\t\tall.push(filters[row][column]);\n\treturn all;\n}\n\nexport function serialize(view,data){\n\tconst filters = getFilters(view._table);\n\tconst result = data.filters = [];\n\n\tfor (let i = 0; i view.removeFilters());\n\t\tif (range)\n\t\t\tview._table.addSelectArea(range.start, range.end);\n\t}\n\telse if (range)\n\t\tgroup.set(()=>{\n\t\t\tlet row = range.start.row;\n\t\t\tfor (let i = range.start.column; i <= range.end.column; i++)\n\t\t\t\tview.setCellFilter(row, i, { options:range, lastRow: calibrateRange(view, row, i, range, true) });\n\t\t});\n\tmarkBarFilter(view);\n}\n\nfunction updatePosition(view, name, inc, data, start){\n\tconst filters = data.filters;\n\tif (inc){\n\t\tfor(let i=filters.length-1; i>=0; i--){\n\t\t\tlet [row,column,filter] = filters[i];\n\t\t\tif (name == \"row\" && row >= start.row || name == \"column\" && column >= start.column){\n\t\t\t\tif (name == \"row\"){\n\t\t\t\t\tif (row < start.row - inc){\t//delete filter mark if row was deleted\n\t\t\t\t\t\tfilters.splice(i,1);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else\t\t\t\t\t\t//update mark position if upper row was deleted\n\t\t\t\t\t\tfilters[i][0] = row*1 + inc;\n\t\t\t\t\tif(filter.lastRow)\n\t\t\t\t\t\tfilter.lastRow += inc;\n\t\t\t\t}\n\t\t\t\telse if (name == \"column\"){\n\t\t\t\t\tif (column < start.column - inc){\n\t\t\t\t\t\tfilters.splice(i, 1);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else \n\t\t\t\t\t\tfilters[i][1] = column*1 + inc;\n\t\t\t\t}\n\t\t\t\tfilter.options = changeRange(filter.options, name, inc, start);\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function pasteFilter(view, extra, row, col, cutted, translate){\n\tconst filter = extra.filter;\n\n\tfilter.options = changeRange(filter.options, \"row\", translate.row, {column:extra.col, row:extra.row});\n\tfilter.options = changeRange(filter.options, \"column\", translate.column, {column:extra.col, row:extra.row});\n\n\tdelete filter.value; delete filter.handler;\n\tview.setCellFilter(row, col, filter);\n}\n\nexport function getSingleOption(mode, type){\n\tconst c = conditions[mode];\n\tfor (let i=0; i this.$hide());\n\n\t\t\tconst table = this.view.$$(\"cells\");\n\t\t\ttable.attachEvent(\"onScrollY\", () => this.syncScroll());\n\t\t\ttable.attachEvent(\"onScrollX\", () => this.syncScroll());\n\t\t}\n\n\t\tif (this.$show(this.$filter.value, action.options) === false)\n\t\t\treturn this.close();\n\t\tthis.$dialog.show( this._getTargetNode() );\n\t}\n\t_getTargetNode(){\n\t\tconst table = this.view.$$(\"cells\");\n\t\tconst span = table.getSpan(this.cell.row, this.cell.column);\n\t\treturn span ? table.getSpanNode(this.cell) : table.getItemNode(this.cell);\n\t}\n\t$show(value, options){\n\t\tconst list = this.getList();\n\t\tconst filter = this.getFilter();\n\n\t\tif (filter.config.mode !== this.$mode){\n\t\t\tfilter.define(\"conditions\", this.getConditions(this.$mode));\n\t\t\tfilter.define(\"mode\", this.$mode);\n\t\t}\n\n\t\t// if the filter mode for the current column has been changed - reset the value\n\t\tconst type = value && value.conditions && value.conditions.type;\n\t\tif (type && !flt.getSingleOption(this.$mode, type))\n\t\t\tvalue = \"\";\n\n\t\tlist.clearAll();\n\t\tlist.data.importData(options);\n\n\t\t// filter data has been changed - reset value\n\t\tfilter.config.value = \"\";\n\t\tfilter.setValue( webix.copy(value||{}) );\n\t}\n\t$init(){\n\t\tconst locale = webix.i18n.spreadsheet.labels;\n\t\treturn {\n\t\t\tview:\"popup\",\n\t\t\tcss:\"ssheet_filter\",\n\t\t\tpadding:7,\n\t\t\trelative:\"right\",\n\t\t\tbody:{\n\t\t\t\tmargin:4,\n\t\t\t\trows:[\n\t\t\t\t\t{\n\t\t\t\t\t\tview:\"filter\",\n\t\t\t\t\t\tfield:\"value\",\n\t\t\t\t\t\tmode:\"text\",\n\t\t\t\t\t\tconditions:this.getConditions(\"text\"),\n\t\t\t\t\t\tinputs:[\n\t\t\t\t\t\t\t\"text\",\n\t\t\t\t\t\t\t{ view:\"ssheet-datepicker\", timepicker:true, batch:\"datepicker\", on:{\n\t\t\t\t\t\t\t\tonChange:() => this.getFilter().applyFilter()\n\t\t\t\t\t\t\t}},\n\t\t\t\t\t\t\t{ view:\"ssheet-daterangepicker\", timepicker:true, batch:\"daterangepicker\", on:{\n\t\t\t\t\t\t\t\tonChange:() => this.getFilter().applyFilter()\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t],\n\t\t\t\t\t\ttemplate:function(obj){\n\t\t\t\t\t\t\treturn obj.$value || obj.value;\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t{ cols:[\n\t\t\t\t\t\t{ },\n\t\t\t\t\t\t{ view:\"button\", label:locale[\"cancel\"], autowidth:true, css:\"webix_transparent\", on:{\n\t\t\t\t\t\t\t\"onItemClick\": () => this.close()\n\t\t\t\t\t\t}},\n\t\t\t\t\t\t{ view:\"button\", label:locale[\"apply\"], autowidth:true, css:\"webix_secondary\", on:{\n\t\t\t\t\t\t\t\"onItemClick\": () => this.applyFilter()\n\t\t\t\t\t\t}},\n\t\t\t\t\t]}\n\t\t\t\t]\n\t\t\t}\n\t\t};\n\t}\n\tapplyFilter(){\n\t\tconst filter = this.getFilter();\n\t\tconst oldValue = this.$filter.value;\n\t\tconst value = this.$filter.value = filter.getValue();\n\t\tthis.$filter.handler = flt.getFilterFunction(this.$mode, value);\n\n\t\tthis.view.filterSpreadSheet();\n\t\tthis.view.callEvent(\"onAction\", [\"apply-filter\", { row:this.cell.row, column:this.cell.column, value:oldValue, newValue:value }]);\n\t\tthis.setCellStyle(this.cell.row, this.cell.column, \"ss_filter_active\", flt.isValueActive(value));\n\n\t\tthis.close();\n\t}\n\tsetCellStyle(row, column, css, add){\n\t\tconst table = this.view.$$(\"cells\");\n\t\tconst span = this.getSpan(table, row, column);\n\n\t\tif (span){\n\t\t\tif (add){\n\t\t\t\tif (span[3].indexOf(css) == -1)\n\t\t\t\t\tspan[3] += \" \" + css;\n\t\t\t} else {\n\t\t\t\tspan[3] = span[3].replace(\" \" + css, \"\");\n\t\t\t}\n\t\t}\n\t\ttable[add?\"addCellCss\":\"removeCellCss\"](row, column, css);\n\t}\n\tgetSpan(table, row, column){\n\t\tlet item = table.getSpan()[row];\n\t\tif (item)\n\t\t\treturn item[column];\n\t}\n\tgetList(){\n\t\treturn this.getFilter().getChildViews()[2];\n\t}\n\tgetFilter(){\n\t\treturn this.$dialog.getBody().getChildViews()[0];\n\t}\n\tsyncScroll(){\n\t\tif (this.$dialog.isVisible()){\n\t\t\tconst node = this._getTargetNode();\n\t\t\tconst table = this.view.$$(\"cells\");\n\n\t\t\tlet isHidden = false;\n\t\t\tif (node){\n\t\t\t\tconst nodeOffset = webix.html.offset( node );\n\t\t\t\tconst tableOffset = webix.html.offset( table.$view.getElementsByClassName(\"webix_ss_body\")[0] );\n\t\t\t\tconst ydiff = nodeOffset.y - tableOffset.y;\n\t\t\t\tconst xdiff = nodeOffset.x - tableOffset.x + nodeOffset.width;\n\n\t\t\t\tisHidden = (ydiff < 0 || ydiff+nodeOffset.height > tableOffset.height || \n\t\t\t\t\txdiff < 0 || xdiff-nodeOffset.width > tableOffset.width - webix.env.scrollSize);\n\t\t\t}\n\t\t\tif (!node || isHidden)\n\t\t\t\tthis.$dialog.show({x:-9999, y:-9999});\n\t\t\telse \n\t\t\t\tthis.$dialog.show(node);\n\t\t}\n\t}\n\tgetConditions(name){\n\t\tconst locale = webix.i18n.filter;\n\t\tconst conditions = flt.getConditions(name);\n\n\t\tfor (let i=0; i {\n\t\t\t\t\tif(this.list){\n\t\t\t\t\t\tlet format = this.getFormat(obj.id);\n\t\t\t\t\t\tformat = fmt.format2code(format.fmt, format.delimiters);\n\t\t\t\t\t\tconst style = {css:\"\"};\n\t\t\t\t\t\tconst value = format(-1234.56789, style);\n\n\t\t\t\t\t\treturn \"\"+value+\"\";\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdata:[{id:1}, {id:2}, {id:3}, {id:4}]\n\t\t\t}\n\t\t];\n\n\t\tconst customConfig = [\n\t\t\t{\n\t\t\t\tview:\"text\",\n\t\t\t\tlabel: labelsLocale[\"format-pattern\"],\n\t\t\t\tname:\"format\",\n\t\t\t\tlabelPosition:\"top\",\n\t\t\t\tbatch:\"custom\",\n\t\t\t\tplaceholder:\"[>100]0\"+delimiters.groupSign+\"000\"+delimiters.decimalSign+\"00;[>0]None\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"docs\",\n\t\t\t\ttemplate: \"\"+labelsLocale[\"format-docs\"]+\"\",\n\t\t\t\tborderless:true,\n\t\t\t\tbatch:\"custom\"\n\t\t\t}\n\t\t];\n\n\t\tconst dateConfig = [\n\t\t\t{\n\t\t\t\tname:\"date\",\n\t\t\t\tbatch:\"date\",\n\t\t\t\tview:\"formlist\",\n\t\t\t\tlabelWidth: 90,\n\t\t\t\theight: 160,\n\t\t\t\tlabel:labelsLocale[\"date-format\"],\n\t\t\t\tcss:\"webix_ssheet_format_date\",\n\t\t\t\ttemplate: obj => fmt.format2code(obj.value, delimiters)(45000),\n\t\t\t\tdata:[\n\t\t\t\t\tformatsLocale.dateFormat,\n\t\t\t\t\tformatsLocale.timeFormat,\n\t\t\t\t\tformatsLocale.fullDateFormat,\n\t\t\t\t\tformatsLocale.longDateFormat\n\t\t\t\t]\n\t\t\t}\n\t\t];\n\n\t\treturn {\n\t\t\tview: \"ssheet-dialog\",\n\t\t\tposition:\"center\",\n\t\t\twidth:460,\n\t\t\thead: labelsLocale[\"format-title\"],\n\t\t\tmove: true,\n\t\t\tbody:{\n\t\t\t\tpadding:0,\n\t\t\t\tcols:[\n\t\t\t\t\t{\n\t\t\t\t\t\tview:\"list\",\n\t\t\t\t\t\tid:\"list\",\n\t\t\t\t\t\tcss:\"webix_ssheet_format_type\",\n\t\t\t\t\t\twidth:120,\n\t\t\t\t\t\tscroll:false,\n\t\t\t\t\t\tdata:this.getFormats(),\n\t\t\t\t\t\tselect:true,\n\t\t\t\t\t\ton:{\n\t\t\t\t\t\t\tonSelectChange: (id)=>{\n\t\t\t\t\t\t\t\tthis.updateForm();\n\t\t\t\t\t\t\t\tswitch(id[0]){\n\t\t\t\t\t\t\t\t\tcase \"custom\":\n\t\t\t\t\t\t\t\t\tcase \"date\":\n\t\t\t\t\t\t\t\t\t\tthis.form.showBatch(id[0]);\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tdefault:{\n\t\t\t\t\t\t\t\t\t\tconst elements = this.form.elements;\n\t\t\t\t\t\t\t\t\t\tthis.form.showBatch(\"common\");\n\n\t\t\t\t\t\t\t\t\t\telements.separator[ id[0] == \"percent\" ? \"hide\" : \"show\" ]();\n\t\t\t\t\t\t\t\t\t\telements.symbol[ id[0] == \"price\" ? \"show\" : \"hide\" ]();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tview:\"form\",\n\t\t\t\t\t\tid:\"form\",\n\t\t\t\t\t\theight:340,\n\t\t\t\t\t\tpaddingY:0,\n\t\t\t\t\t\tpaddingX:20,\n\t\t\t\t\t\telements:[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tid: \"preview\",\n\t\t\t\t\t\t\t\ttemplate: function(obj){\n\t\t\t\t\t\t\t\t\tif(obj.value == i18n.table[\"format-error\"])\n\t\t\t\t\t\t\t\t\t\treturn obj.value;\n\t\t\t\t\t\t\t\t\treturn \"\"+obj.value+\"\";\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tcss: \"webix_ssheet_format_preview\",\n\t\t\t\t\t\t\t\tautoheight: true,\n\t\t\t\t\t\t\t\tborderless:true\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t].concat(commonConfig, customConfig, dateConfig),\n\t\t\t\t\t\telementsConfig: {\n\t\t\t\t\t\t\tlabelWidth: 140\n\t\t\t\t\t\t},\n\t\t\t\t\t\ton: {\n\t\t\t\t\t\t\tonChange: () => this.updateForm()\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\ton:{\n\t\t\t\tonSaveClick: () => this.okClick(),\n\t\t\t\tonCancelClick: () => this.closeWin()\n\t\t\t}\n\t\t};\n\t}\n\tokClick(){\n\t\tlet type = this.list.getSelectedId();\n\t\tlet values = (type == \"custom\")?{format:this.form.getValues().format}:this.form.getValues();\n\t\tvalues.type = type;\n\n\t\tgroup.set(()=>{\n\t\t\tfor (let i = 0; i < this.cell.length; i++)\n\t\t\t\tfmt.addFormat(this.view, this.cell[i].row, this.cell[i].column, values.format, values);\n\t\t});\n\n\t\tthis.view.$$(\"cells\").refresh();\n\t\tthis.closeWin();\n\t}\n\tcloseWin(){\n\t\tconst format = getFormat(this.view, this.cell[0].row, this.cell[0].column);\n\t\tconst name = format || \"common\";\n\n\t\t//default format\n\t\tif(!fmt.isCustom(name))\n\t\t\tthis.view.callEvent(\"onCommand\", [{id:\"toolbar-update\", name:\"format\", value:name}]);\n\t\tthis.close();\n\t}\n\tgetFormat(negative){\n\t\tconst type = this.list.getSelectedId();\n\t\tlet values = this.form.getValues();\n\n\t\tvalues.negative = negative || values.negative;\n\t\tif(type != \"custom\"){\n\t\t\tif(type != \"date\")\n\t\t\t\tvalues.date = \"\";\n\n\t\t\tvalues = fmt.formToValues(type, values);\n\t\t\treturn {\n\t\t\t\tfmt: fmt.serializeFormat(values),\n\t\t\t\tdelimiters:fmt.getDelimiters(type)\n\t\t\t};\n\t\t}\n\t\telse\n\t\t\treturn {\n\t\t\t\tfmt: values.format,\n\t\t\t\tdelimiters: fmt.getDelimiters(type)\n\t\t\t};\n\t}\n\tfillForm(view){\n\t\tconst locale = webix.i18n.spreadsheet;\n\t\tconst format = getFormat(view, this.cell[0].row, this.cell[0].column);\n\t\tlet values = { zeros:0, separator: 0, negative: 1, date: locale.formats.dateFormat, symbol:fmt.currencies[0].value, format: \"\"};\n\t\tlet type;\n\n\t\tlet name = format || \"\";\n\n\t\tvalues.format = fmt.getFormatSource(name || \"price\");\n\n\t\tif(!name)\n\t\t\ttype = name = \"price\";\n\t\telse if(name == \"string\")\n\t\t\ttype = name = \"custom\";\n\t\telse\n\t\t\ttype = fmt.formatHelpers[name].values.type;\n\n\t\tif(type != \"custom\")\n\t\t\twebix.extend(values, fmt.formatHelpers[name].values, true);\n\n\t\tconst item = this.view.$$(\"cells\").getItem(this.cell[0].row);\n\t\tconst col = this.cell[0].column;\n\n\t\tthis.value = webix.isUndefined(item[col]) ? \"\" : item[col];\n\n\t\tthis.form.setValues(values);\n\t\tthis.list.select(type);\n\t\tthis.updateForm();\n\t}\n\tupdateForm(){\n\t\tconst form = this.form.elements;\n\t\tconst format = this.getFormat();\n\t\tlet value = this.value;\n\n\t\tconst isText = value === \"\" || isNaN(value);\n\n\t\tif(fmt.checkFormat(format, \"date\") && (isText || fmt.isDateInvalid(value)))\n\t\t\tvalue = 45000;\n\t\telse if(isText && !fmt.checkFormat(format, \"string\"))\n\t\t\tvalue = 1234.56789;\n\n\t\tlet style = {css:\"\"};\n\t\tvalue = fmt.format2code(format.fmt, format.delimiters)(value, style);\n\n\t\t//preview values\n\t\tthis.preview.parse({value:value, css:style.css});\n\t\tform.negative.refresh();\n\t\tform.date.refresh();\n\n\t\t//set new format string\n\t\tform.format.setValue(format.fmt);\n\t}\n\tgetFormats(){\n\t\tconst locale = webix.i18n.spreadsheet.labels;\n\t\treturn [\n\t\t\t{id: \"price\", value: locale.currency},\n\t\t\t{id: \"int\", value: locale.number},\n\t\t\t{id: \"percent\", value: locale.percent},\n\t\t\t{id: \"date\", value: locale.date},\n\t\t\t{id: \"custom\", value: locale[\"custom-format\"]}\n\t\t];\n\t}\n}","import {Dialog} from \"./common\";\nimport {getJsDateFromExcel, getExcelDateFromJs} from \"../mathematics/methods\";\nimport {isDateInvalid} from \"../operations/formats\";\nimport {getDateEditFormat} from \"../operations/formats\";\nimport {getType} from \"../operations/types\";\nimport {find} from \"../helpers/array\";\n\nexport const action = \"conditional-format\";\n\nfunction getConditionStyle(data){\n\treturn data.map(item => {\n\t\titem.id = item.css;\n\t\treturn item;\n\t});\n}\n\nexport class DialogBox extends Dialog{\n\t_rulesToArr(){\n\t\tconst conditions = this.view.conditions.handlers;\n\t\treturn [\n\t\t\t{\n\t\t\t\tvalue: webix.i18n.spreadsheet.labels[\"conditional-common\"],\n\t\t\t\tdisabled:true,\n\t\t\t\t$css:\"webix_ssheet_cformats_type\"\n\t\t\t},\n\t\t\t...conditions.date, //number rules equal to date\n\t\t\t{\n\t\t\t\tvalue: webix.i18n.spreadsheet.labels[\"conditional-text\"],\n\t\t\t\tdisabled:true,\n\t\t\t\t$css:\"webix_ssheet_cformats_type\"\n\t\t\t},\n\t\t\t...conditions.text\n\t\t].map(rule => {\n\t\t\tif(!rule.value)\n\t\t\t\trule.value = webix.i18n.filter[ rule.id ];\n\t\t\treturn rule;\n\t\t});\n\t}\n\n\t_getCondition() {\n\t\tconst view = this.view;\n\t\tconst values = this._getDatalayout().getValue();\n\n\t\tconst data = [];\n\t\tvalues.forEach(v => {\n\t\t\tconst item = [v.condition];\n\t\t\tif (v.condition != \"between\" && v.condition != \"notBetween\")\n\t\t\t\titem.push(this._normalizeValue(v.value, v.condition));\n\t\t\telse\n\t\t\t\titem.push([\n\t\t\t\t\tthis._normalizeValue(v.value, v.condition),\n\t\t\t\t\tthis._normalizeValue(v.value2, v.condition)\n\t\t\t\t]);\n\n\t\t\titem.push(v.style);\n\t\t\tfor (let i=0; i {\n\t\t\t\tconst values = {};\n\t\t\t\tvalues.condition = item[0];\n\t\t\t\tif (webix.isArray(item[1])) {\n\t\t\t\t\tvalues.value = this._formatValue(item[1][0], values.condition);\n\t\t\t\t\tvalues.value2 = this._formatValue(item[1][1], values.condition);\n\t\t\t\t} else\n\t\t\t\t\tvalues.value = this._formatValue(item[1], values.condition);\n\n\t\t\t\tvalues.style = item[2];\n\t\t\t\tdata.push(values);\n\t\t\t});\n\t\t}\n\n\t\twhile (data.length < 3)\n\t\t\tdata.push({ });\n\n\t\tthis._getDatalayout().setValue(data);\n\t}\n\n\t_getDatalayout(){\n\t\treturn this.$dialog.getBody().getChildViews()[0].getChildViews()[1].getBody();\n\t}\n\n\t_formatValue(value, condition){\n\t\tif(!(condition && this._isNotDateRule(condition))){\n\t\t\tif(this.editFormat && value !== \"\" && value[0] != \"=\"){\n\t\t\t\tvalue = getJsDateFromExcel(value);\n\t\t\t\treturn this.editFormat(value);\n\t\t\t}\n\t\t}\n\t\treturn value.toString();\n\t}\n\n\t_normalizeValue(value, condition){\n\t\tif(!this._isNotDateRule(condition)){\n\t\t\tif(this.editFormat){\n\t\t\t\tif(isNaN(value)){\n\t\t\t\t\tif(value[0] != \"=\"){\n\t\t\t\t\t\tconst parser = webix.Date.strToDate( webix.i18n.spreadsheet.formats.parseDateTime );\n\t\t\t\t\t\tvalue = parser(value);\n\t\t\t\t\t\tvalue = isNaN(value) ? \"\" : getExcelDateFromJs(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tvalue = isDateInvalid(value) ? \"\" : value;\n\t\t\t}\n\t\t\telse\n\t\t\t\tvalue = this._safeInt(value, 10);\n\t\t}\n\t\treturn value;\n\t}\n\n\t_isNotDateRule(condition){\n\t\tif(condition == \"equal\" || condition == \"notEqual\")\n\t\t\treturn false;\n\t\treturn find(this.view.conditions.handlers.text, obj => obj.id == condition);\n\t}\n\n\tokClick(){\n\t\tthis._getCondition();\n\t\tthis.close();\n\t}\n\n\t$show(){\n\t\tthis.cell = this.view.getSelectedId();\n\t\tif(!this.cell)\n\t\t\treturn false;\n\n\t\tconst type = getType(this.view, this.cell.row, this.cell.column);\n\n\t\tif(type == \"date\")\n\t\t\tthis.editFormat = getDateEditFormat(this.view, this.cell.row, this.cell.column);\n\n\t\tthis.$dialog.queryView(\"text\", \"all\").forEach(view => {\n\t\t\tview.define({placeholder: type == \"date\" ? this._formatValue(45000) : \"\"});\n\t\t\tview.refresh();\n\t\t});\n\n\t\tthis.view.$handleSelection = (st, end, a, b)=>{\n\t\t\tif (this.activeValue && a == b){\n\t\t\t\tthis.activeValue.setValue(\"=\"+a);\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t\tthis._setCondition();\n\t}\n\n\t$hide(){\n\t\tthis.view.$handleSelection = null;\n\t\tdelete this.editFormat;\n\t\tthis._getDatalayout().clearAll();\n\t}\n\n\tgetRows(data){\n\t\tconst dialog = this;\n\t\treturn {\n\t\t\tview: \"form\",\n\t\t\tpadding: 0,\n\t\t\tborderless: true,\n\t\t\tcss:\"webix_ssheet_cformats\",\n\t\t\telements: [{\n\t\t\t\tmargin: 10,\n\t\t\t\tpadding: { right: 4 },\n\t\t\t\tcols: [\n\t\t\t\t\t{\n\t\t\t\t\t\tview:\"richselect\",\n\t\t\t\t\t\tname: \"style\",\n\t\t\t\t\t\twidth:120,\n\t\t\t\t\t\tplaceholder: webix.i18n.spreadsheet.labels[\"conditional-style\"],\n\t\t\t\t\t\tcss: \"webix_ssheet_cformat_select\",\n\t\t\t\t\t\tsuggest: {\n\t\t\t\t\t\t\tpadding:0,\n\t\t\t\t\t\t\tborderless: true,\n\t\t\t\t\t\t\tcss: \"webix_ssheet_cformat_list\",\n\t\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\t\ttemplate(obj) {\n\t\t\t\t\t\t\t\t\tconst css = \"webix_ssheet_cformat \"+obj.css;\n\t\t\t\t\t\t\t\t\treturn `
${obj.name}
`;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdata: data\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tview:\"richselect\",\n\t\t\t\t\t\twidth: 150,\n\t\t\t\t\t\tname: \"condition\",\n\t\t\t\t\t\tplaceholder: webix.i18n.spreadsheet.labels[\"conditional-operator\"],\n\t\t\t\t\t\ton: {\n\t\t\t\t\t\t\tonChange: function(newv) {\n\t\t\t\t\t\t\t\tconst elements = this.getFormView().elements;\n\n\t\t\t\t\t\t\t\tif (dialog.editFormat){\n\t\t\t\t\t\t\t\t\tif (dialog._isNotDateRule(newv))\n\t\t\t\t\t\t\t\t\t\telements.value.define({placeholder: \"\"});\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tconst value = dialog._normalizeValue(elements.value.getValue(), newv);\n\t\t\t\t\t\t\t\t\t\telements.value.setValue(dialog._formatValue(value, newv));\n\t\t\t\t\t\t\t\t\t\telements.value.define({placeholder: dialog._formatValue(45000)});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telements.value.refresh();\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (newv == \"between\" || newv == \"notBetween\")\n\t\t\t\t\t\t\t\t\telements.value2.show();\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\telements.value2.hide();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsuggest:{\n\t\t\t\t\t\t\tview: \"ssheet-form-suggest\",\n\t\t\t\t\t\t\tbody:{\n\t\t\t\t\t\t\t\tdata: this._rulesToArr()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tcols: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tview: \"text\",\n\t\t\t\t\t\t\t\ton: {\n\t\t\t\t\t\t\t\t\tonFocus: (current_view)=>{\n\t\t\t\t\t\t\t\t\t\tthis.activeValue = current_view;\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tonBlur: (current_view)=>{\n\t\t\t\t\t\t\t\t\t\tlet value = current_view.getValue();\n\t\t\t\t\t\t\t\t\t\tif(value !== \"\"){\n\t\t\t\t\t\t\t\t\t\t\tconst elements = current_view.getFormView().elements;\n\t\t\t\t\t\t\t\t\t\t\tconst condition = elements.condition.getValue();\n\t\t\t\t\t\t\t\t\t\t\tvalue = this._normalizeValue(value, condition);\n\t\t\t\t\t\t\t\t\t\t\tcurrent_view.setValue(this._formatValue(value, condition));\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tname: \"value\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tview: \"text\",\n\t\t\t\t\t\t\t\tname: \"value2\",\n\t\t\t\t\t\t\t\ton: {\n\t\t\t\t\t\t\t\t\tonFocus: (current_view)=>{\n\t\t\t\t\t\t\t\t\t\tthis.activeValue = current_view;\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tonBlur: (current_view)=>{\n\t\t\t\t\t\t\t\t\t\tlet value = current_view.getValue();\n\t\t\t\t\t\t\t\t\t\tif(value !== \"\"){\n\t\t\t\t\t\t\t\t\t\t\tconst elements = current_view.getFormView().elements;\n\t\t\t\t\t\t\t\t\t\t\tconst condition = elements.condition.getValue();\n\t\t\t\t\t\t\t\t\t\t\tvalue = this._normalizeValue(value, condition);\n\t\t\t\t\t\t\t\t\t\t\tcurrent_view.setValue(this._formatValue(value, condition));\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\thidden: true\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t{ view:\"icon\", css:\"webix_ssheet_cformat_icon\", icon:\"wxi-trash\", click: vid => {\n\t\t\t\t\t\tconst form = webix.$$(vid).getFormView();\n\t\t\t\t\t\tconst dlayout = this._getDatalayout();\n\t\t\t\t\t\tdlayout.getValue();\t\t\t// save local changes before rendering\n\n\t\t\t\t\t\tconst index = dlayout.getChildViews().indexOf(form);\n\t\t\t\t\t\tdlayout.remove(dlayout.getIdByIndex(index));\n\n\t\t\t\t\t\tif (dlayout.count() < 3) dlayout.add({ });\n\t\t\t\t\t}}\n\t\t\t\t]}\n\t\t\t]};\n\t}\n\n\t$init(){\n\t\tconst margin = webix.skin.$active.layoutMargin.form;\n\t\treturn {\n\t\t\tview: \"ssheet-dialog\",\n\t\t\thead: webix.i18n.spreadsheet.labels[\"conditional-format\"],\n\t\t\tposition: \"center\",\n\t\t\twidth: 770,\n\t\t\tmove: true,\n\t\t\tmargin,\n\t\t\tbody: { margin:0, rows:[\n\t\t\t\t{\n\t\t\t\t\theight: 36,\n\t\t\t\t\tpadding: { left: 12 },\n\t\t\t\t\tcols: [\n\t\t\t\t\t\t{ view:\"label\", width: 131, label: webix.i18n.spreadsheet.labels.display },\n\t\t\t\t\t\t{ view:\"label\", width: 161, label: webix.i18n.spreadsheet.labels.condition },\n\t\t\t\t\t\t{ view:\"label\", label: webix.i18n.spreadsheet.labels.value },\n\t\t\t\t\t\t{ view:\"icon\", css:\"webix_ssheet_cformat_icon\", icon:\"wxi-plus-circle\",\n\t\t\t\t\t\t\tclick: () => {\n\t\t\t\t\t\t\t\tconst dlayout = this._getDatalayout();\n\t\t\t\t\t\t\t\tdlayout.getValue();\t\t\t// save local changes before rendering\n\t\t\t\t\t\t\t\tdlayout.add({ });\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{ width: 4 + webix.env.scrollSize }\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tview: \"scrollview\",\n\t\t\t\t\tmaxHeight: webix.skin.$active.inputHeight * 3 + 4,\n\t\t\t\t\tborderless: true,\n\t\t\t\t\tscroll: \"y\",\n\t\t\t\t\tbody: {\n\t\t\t\t\t\tview: \"datalayout\",\n\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\tborderless: true,\n\t\t\t\t\t\trows: [ this.getRows(getConditionStyle(this.view.config.conditionStyle)) ]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]},\n\t\t\ton: {\n\t\t\t\tonSaveClick: () => this.okClick(),\n\t\t\t\tonCancelClick: () => this.close()\n\t\t\t}\n\t\t};\n\t}\n}","import {Dialog} from \"./common\";\n\nexport const action = \"excel-export\";\n\nexport class DialogBox extends Dialog{\n\t$show(box, form){\n\t\tthis.view.$handleSelection = function(){\n\t\t\treturn false;\n\t\t};\n\n\t\tform.elements.sheets.setValue(this.getSheets());\n\t\tform.elements.filename.setValue(\"Data\");\n\t\tform.elements.filename.getInputNode().select();\n\t}\n\t$hide(){\n\t\tthis.view.$handleSelection = null;\n\t}\n\t$init(){\n\t\treturn {\n\t\t\tview: \"ssheet-dialog\",\n\t\t\thead: webix.i18n.spreadsheet.labels[\"export-title\"],\n\t\t\tmove: true,\n\t\t\tposition: \"center\",\n\t\t\tbody:{\n\t\t\t\tview:\"form\",\n\t\t\t\telements:[\n\t\t\t\t\t{ view:\"text\", name:\"filename\", placeholder:webix.i18n.spreadsheet.labels[\"export-name\"] },\n\t\t\t\t\t{ view:\"multicheckbox\", name:\"sheets\", css:\"webix_ssheet_multicheckbox\" }\n\t\t\t\t]\n\t\t\t},\n\t\t\ton:{\n\t\t\t\tonSaveClick: () => this.okClick(),\n\t\t\t\tonCancelClick: () => this.close()\n\t\t\t}\n\t\t};\n\t}\n\tgetSheets(){\n\t\tconst view = this.view;\n\t\tconst sheets = view._sheets;\n\t\tlet value = [];\n\n\t\tfor(let i = 0; i < sheets.length; i++){\n\t\t\tconst state = sheets[i].state;\n\t\t\tif(state == \"veryHidden\")\n\t\t\t\tcontinue;\n\n\t\t\tvalue.push({\n\t\t\t\tname: sheets[i].name,\n\t\t\t\thidden: state == \"hidden\",\n\t\t\t\tactive: view._activeSheet === sheets[i].name ? 1 : 0\n\t\t\t});\n\t\t}\n\n\t\treturn value;\n\t}\n\tokClick(){\n\t\tconst values = this.$dialog.getBody().getValues();\n\t\twebix.toExcel(this.view, values);\n\t\tthis.close();\n\t}\n}","import {Dialog} from \"./common\";\n\nexport const action = \"add-link\";\n\nexport class DialogBox extends Dialog{\n\t$show(box, form){\n\t\tconst cell = this.view.getSelectedId();\n\t\tif(!cell)\n\t\t\treturn false;\n\t\tif (!this.restoreValue(form))\n\t\t\tform.clear();\n\t\tform.elements.name.focus();\n\n\t\tthis.view.$handleSelection = (st, end, a)=>{\n\t\t\tform.elements.url.setValue(\"#\"+a);\n\t\t\treturn false;\n\t\t};\n\t}\n\t$hide(){\n\t\tthis.view.$handleSelection = null;\n\t}\n\trestoreValue(form){\n\t\tconst cell = this.view.getSelectedId();\n\t\tif (cell){\n\t\t\tconst value = this.view.getCellValue(cell.row, cell.column);\n\t\t\tif (value && typeof value == \"string\" && value.indexOf(\"=HYPERLINK\") === 0){\n\t\t\t\tconst parts = value.split(\"\\\"\");\n\t\t\t\tform.setValues({\n\t\t\t\t\tname: (parts[3] || \"\"),\n\t\t\t\t\turl: (parts[1] || \"\")\n\t\t\t\t});\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\t$init(){\n\t\treturn {\n\t\t\tview: \"ssheet-dialog\",\n\t\t\thead: webix.i18n.spreadsheet.labels[\"link-title\"],\n\t\t\tmove: true,\n\t\t\tposition: \"center\",\n\t\t\tbody:{\n\t\t\t\tview:\"form\",\n\t\t\t\telements:[\n\t\t\t\t\t{ view:\"text\", name:\"name\", placeholder:webix.i18n.spreadsheet.labels[\"link-name\"]},\n\t\t\t\t\t{ view:\"text\", name:\"url\", placeholder:webix.i18n.spreadsheet.labels[\"link-url\"]}\n\t\t\t\t]\n\t\t\t},\n\t\t\ton:{\n\t\t\t\tonSaveClick: () => this.okClick(),\n\t\t\t\tonCancelClick: () => this.close()\n\t\t\t}\n\t\t};\n\t}\n\tokClick(){\n\t\tconst cell = this.view.getSelectedId();\n\t\tconst data = this.$dialog.getBody().getValues();\n\n\t\tlet text = \"\";\n\t\tif (data.url){\n\t\t\tdata.name = data.name || data.url;\n\t\t\tif (!/^(#|(https?:\\/\\/))/i.test(data.url))\n\t\t\t\tdata.url = \"http://\" + data.url;\n\t\t\ttext = `=HYPERLINK(\"${data.url}\",\"${data.name}\")`;\n\t\t}\n\n\t\tthis.view.setCellValue(cell.row, cell.column, text);\n\t\tthis.view.refresh();\n\t\tthis.close();\n\t}\n}","import {isVisible} from \"../sheets\";\n\nexport function print(view, options, htmlOnly){\n\tconst views = [];\n\tconst order = {};\n\tconst active = view._activeSheet;\n\n\tconst html = _buildHtml(view, options, active, views, order);\n\tview.showSheet(active);\n\n\tconst promise = webix.promise.defer();\n\twebix.promise.all(views).then(res =>{\n\t\tconst keys = Object.keys(order).sort( view.$$(\"cells\").data.sorting.as.int );\n\t\tfor (let i = keys.length - 1; i >= 0; i--) {\n\t\t\tconst index = keys[i];\n\t\t\thtml.insertBefore(res[index], html.childNodes[ order[index] ]);\n\t\t}\n\n\t\tif(htmlOnly)\n\t\t\treturn promise.resolve(html);\n\n\t\twebix.html.insertBefore(html, options.docFooter, document.body);\n\t\twindow.print();\n\t\t_cleanHtml(view, html);\n\n\t\tpromise.resolve();\n\t});\n\treturn promise;\n}\n\nexport function init(view){\n\tview.$customPrint = function(options, htmlOnly){\n\t\treturn print(view, options, htmlOnly);\n\t};\n\n\tview._printBorders = {\n\t\tpaper:\"A4\",\n\t\tfit:\"page\",\n\t\tmode:\"landscape\",\n\t\tmargin:1,\n\t\tsheetnames:1\n\t};\n\n\tview.attachEvent(\"onUndo\", (action, row, column, value) => {\n\t\tif (action == \"print-borders\")\n\t\t\tview.showPrintBorders(value);\n\t});\n\n\tview.attachEvent(\"onAfterSheetShow\", ()=> showBorders(view, true));\n\tview.attachEvent(\"onChange\", ()=> showBorders(view, true));\n}\n\nfunction _cleanHtml(view, html){\n\twebix.html.remove(html);\n\n\tview._sheets.forEach((sheet, i) => {\n\t\twebix.html.removeStyle(\".wss_\"+view.$index+\"_\"+i);\n\t});\n}\nfunction _buildHtml(view, options, active, views, order){\n\tlet doc = webix.html.create(\"div\", { \"class\":\"webix_ssheet_print\"});\n\n\toptions.xCorrection = 1;\n\toptions.header = options.header || false;\n\toptions.trim = webix.isUndefined(options.trim) ? true : options.trim;\n\toptions.sheetnames = webix.isUndefined(options.sheetnames) ? true : options.sheetnames;\n\tconst baseIndex = view.$index;\n\tconst pageSize = getPageSize(options);\n\n\tlet sheets = options.sheets;\n\t\n\t// backward compatibility, options.data can be only \"selection\"\n\t// \"current\" and \"all\" are deprecated\n\tconst data = options.data;\n\n\tif(!sheets || data == \"current\" || data == \"selection\"){\n\t\tsheets = [active];\n\t}\n\telse if(typeof sheets == \"string\")\n\t\tsheets = [sheets];\n\telse if(sheets === true || data == \"all\")\n\t\tsheets = view._sheets.map(sheet => sheet.name);\n\n\tsheets = sheets.filter(sheet => isVisible(view, sheet));\n\n\tsheets.forEach((name, i) => {\n\t\tview.$index = baseIndex+\"_\"+i;\n\t\tconst grid = view.$$(\"cells\");\n\n\t\tview.showSheet(name);\n\t\tlet prefix = \"wss_\"+view.$index;\n\n\t\tview._print = true;\n\t\tlet table = grid.$customPrint(options, true);\n\t\tdelete view._print;\n\n\t\tconst tbl = table.firstChild;\n\t\tconst [header, body] = tbl.children;\n\n\t\tconst topSplit = header.childElementCount;\n\t\tconst sheetName = options.sheetnames ? 20 : 0;\n\t\tlet splitHeight = sheetName;\n\n\t\tfor (let s = 1; s <= topSplit; s++)\n\t\t\tsplitHeight += grid.getItem(s).$height || grid.config.rowHeight;\n\n\t\tif(splitHeight > pageSize.height / 4)\n\t\t\tfor (let i = topSplit - 1; i >= 0; i--){\n\t\t\t\tif(body.firstChild)\n\t\t\t\t\twebix.html.insertBefore(header.children[i], body.firstChild);\n\t\t\t\telse\n\t\t\t\t\tbody.appendChild(header.children[i]);\n\t\t\t}\n\n\t\tif(sheetName){\n\t\t\tconst sheetNode = webix.html.create(\"tr\", {class:\"webix_ssheet_sheetname\"}, `${name}:`);\n\n\t\t\tif(header.firstChild)\n\t\t\t\twebix.html.insertBefore(sheetNode, header.firstChild);\n\t\t\telse\n\t\t\t\theader.appendChild(sheetNode);\n\t\t}\n\n\t\t//for empty sheet we don't have any HTML\n\t\tconst node = table.firstChild;\n\t\tif (node && name != active){\n\t\t\twebix.html.removeCss(node, \"wss_\"+baseIndex);\n\t\t\twebix.html.addCss(node, prefix);\n\t\t}\n\n\t\tdoc.appendChild(table);\n\n\t\tif(options.external)\n\t\t\tfor(let id in view.views._pull){\n\t\t\t\tconst innerView = view.views._pull[id];\n\t\t\t\tif(innerView.type == \"image\"){\n\t\t\t\t\tconst img = webix.html.create(\"IMG\", {\n\t\t\t\t\t\tsrc: innerView.data,\n\t\t\t\t\t\twidth: (innerView.config.width || 500)+\"px\",\n\t\t\t\t\t\theight: (innerView.config.height || 300)+\"px\"\n\t\t\t\t\t});\n\n\t\t\t\t\tconst promise = webix.promise.defer();\n\t\t\t\t\tviews.push(promise);\n\t\t\t\t\timg.onload = ()=> promise.resolve();\n\n\t\t\t\t\tdoc.appendChild(img);\n\t\t\t\t}\n\t\t\t\telse{\n\t\t\t\t\tconst externalUI = webix.$$(id).getBody();\n\t\t\t\t\tif(externalUI.$customPrint){\n\t\t\t\t\t\tconst customPrint = externalUI.$customPrint({size: options.size}, true);\n\t\t\t\t\t\tif(customPrint.then){\n\t\t\t\t\t\t\torder[views.length] = doc.childElementCount;\n\t\t\t\t\t\t\tviews.push(customPrint);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tdoc.appendChild( customPrint );\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tdoc.appendChild( printInnerView(webix.$$(id).getBody()) );\n\t\t\t\t}\n\t\t\t}\n\n\t\tif(i+1 < view._sheets.length){\n\t\t\tconst br = webix.html.create(\"DIV\", {\"class\":\"webix_print_pagebreak\"});\n\t\t\tdoc.appendChild(br);\n\t\t}\n\t});\n\n\tview.$index = baseIndex;\n\treturn doc;\n}\n\nfunction printInnerView(view){\n\tconst body = view.$view.cloneNode(true);\n\n\t//copy data from all canvases\n\tconst canvases = view.$view.getElementsByTagName(\"canvas\");\n\tif(canvases.length)\n\t\tfor(let i = canvases.length-1; i >=0; i--){\n\t\t\tconst destCtx = body.getElementsByTagName(\"canvas\")[i].getContext(\"2d\");\n\t\t\tdestCtx.drawImage(canvases[i], 0, 0);\n\t\t}\n\n\tconst container = webix.html.create(\"div\", {class:\"webix_ssheet_ui\"});\n\tcontainer.appendChild(body);\n\n\treturn container;\n}\n\nfunction getPageSize(options){\n\tconst sizes = {\n\t\t\"A3\": { width: 11.7, height: 16.5 },\n\t\t\"A4\": { width: 8.27, height:11.7 },\n\t\t\"letter\": { width: 8.5, height:11 }\n\t};\n\n\tconst size = sizes[options.paper];\n\tconst landscape = options.mode == \"landscape\";\n\n\tconst margin = options.margin ? 2 * webix.env.printMargin : 0;\n\n\treturn {\n\t\twidth: size[landscape ? \"height\" : \"width\"] * webix.env.printPPI - margin,\n\t\theight: size[landscape ? \"width\" : \"height\"] * webix.env.printPPI - margin\n\t};\n}\n\nexport function showBorders(view, redraw){\n\tif(redraw && !view._printBorders.$render)\n\t\treturn;\n\n\tconst borders = {rows:{}, cols:{}};\n\tconst grid = view.$$(\"cells\");\n\tconst options = view._printBorders;\n\n\tconst pageSize = getPageSize(options);\n\n\tconst sheetName = options.sheetnames ? 20 : 0;\n\tlet topSplit = grid.config.topSplit;\n\tlet splitHeight = sheetName;\n\n\tfor (let s = 1; s <= topSplit; s++)\n\t\tsplitHeight += grid.getItem(s).$height || grid.config.rowHeight;\n\n\tif(splitHeight > pageSize.height / 4){\n\t\ttopSplit = 0;\n\t\tsplitHeight = sheetName;\n\t}\n\n\tlet rowsHeight = splitHeight;\n\tfor (let r = topSplit + 1; r <= view.config.rowCount; r++) {\n\t\tconst height = grid.getItem(r).$height || grid.config.rowHeight;\n\n\t\tif(rowsHeight + height > pageSize.height){\n\t\t\trowsHeight = splitHeight;\n\t\t\tborders.rows[r == 1 ? r : r-1] = 1;\n\t\t}\n\n\t\trowsHeight += height;\n\t}\n\n\tif(options.fit != \"page\"){\n\t\tlet colsWidth = 0;\n\t\tfor (let c = 1; c <= view.config.columnCount; c++) {\n\t\t\tconst width = grid.getColumnConfig(c).width || grid.config.columnWidth;\n\n\t\t\tif(colsWidth + width > pageSize.width){\n\t\t\t\tcolsWidth = 0;\n\t\t\t\tborders.cols[c == 1 ? c : c-1] = 1;\n\t\t\t}\n\n\t\t\tcolsWidth += width;\n\t\t}\n\t}\n\n\tview._printBorders.$render = borders;\n\tview.refresh();\n}","import {Dialog} from \"./common\";\nimport {isVisible} from \"../sheets\";\nimport {showBorders} from \"../operations/print\";\n\nexport const action = \"print\";\n\nexport class DialogBox extends Dialog{\n\t$show(box, form){\n\t\tconst list = form.elements.sheets.getList();\n\t\tlist.clearAll();\n\t\tlist.parse( this.getSheets(this.view) );\n\n\t\tform.setValues({\n\t\t\tdata:\"full\",\n\t\t\tsheets: this.view.getActiveSheet(),\n\t\t}, true);\n\t}\n\t$init(){\n\t\tconst labels = webix.i18n.spreadsheet.labels;\n\t\treturn {\n\t\t\tview: \"ssheet-dialog\",\n\t\t\thead: labels[\"print-title\"],\n\t\t\tmove: true,\n\t\t\tmodal:true,\n\t\t\twidth:580,\n\t\t\tposition: \"center\",\n\t\t\tbuttons:false,\n\t\t\ton:{\n\t\t\t\tonHide: ()=> {\n\t\t\t\t\twebix.extend(this.view._printBorders, this.getValues(), true);\n\t\t\t\t\tshowBorders(this.view, true);\n\t\t\t\t}\n\t\t\t},\n\t\t\tbody:{\n\t\t\t\tview:\"form\",\n\t\t\t\telementsConfig:{\n\t\t\t\t\tlabelWidth: 0\n\t\t\t\t},\n\t\t\t\telements:[\n\t\t\t\t\t{ type:\"section\", template: labels[\"print-settings\"]},\n\t\t\t\t\t{ cols:[\n\t\t\t\t\t\t{ view:\"radio\", name:\"data\", vertical:true, options:[\n\t\t\t\t\t\t\t{ id:\"full\", value: labels[\"sheets\"]},\n\t\t\t\t\t\t\t{ id:\"selection\", value: labels[\"selection\"]}\n\t\t\t\t\t\t], on:{\n\t\t\t\t\t\t\tonChange:function(newv){\n\t\t\t\t\t\t\t\tconst elements = this.getFormView().elements;\n\t\t\t\t\t\t\t\tconst sheets = elements.sheets;\n\n\t\t\t\t\t\t\t\tif(newv == \"full\"){\n\t\t\t\t\t\t\t\t\telements.sheetnames.setValue(1);\n\t\t\t\t\t\t\t\t\tsheets.enable();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tsheets.disable();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpadding:{\n\t\t\t\t\t\t\t\tright:30\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\trows:[\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tname: \"sheets\",\n\t\t\t\t\t\t\t\t\tview: \"multiselect\",\n\t\t\t\t\t\t\t\t\twidth: 160,\n\t\t\t\t\t\t\t\t\tstringResult:false,\n\t\t\t\t\t\t\t\t\tsuggest: {\n\t\t\t\t\t\t\t\t\t\tselectAll: true,\n\t\t\t\t\t\t\t\t\t\tbody:{\n\t\t\t\t\t\t\t\t\t\t\tdata:[]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{ rows:[\n\t\t\t\t\t\t\t{view:\"checkbox\", name:\"sheetnames\", value:1, labelRight:labels[\"sheet-names\"]},\n\t\t\t\t\t\t\t{view:\"checkbox\", name:\"borderless\", labelRight:labels[\"borderless\"]},\n\t\t\t\t\t\t\t{view:\"checkbox\", name:\"skiprows\", labelRight:labels[\"skip-rows\"]},\n\t\t\t\t\t\t\t{view:\"checkbox\", name:\"margin\", labelRight:labels[\"margin\"]},\n\t\t\t\t\t\t\t{view:\"checkbox\", name:\"external\", labelRight:labels[\"external-ui\"]},\n\t\t\t\t\t\t]}\n\t\t\t\t\t]},\n\t\t\t\t\t{ type:\"section\", template: labels[\"print-paper\"]},\n\t\t\t\t\t{ view:\"radio\", name:\"paper\", value:\"A4\", options:[\n\t\t\t\t\t\t{ id:\"letter\", value:labels[\"page-letter\"]},\n\t\t\t\t\t\t{ id:\"A4\", value:labels[\"page-a4\"]},\n\t\t\t\t\t\t{ id:\"A3\", value:labels[\"page-a3\"]}\n\t\t\t\t\t]},\n\t\t\t\t\t{ type:\"section\", template: labels[\"print-layout\"]},\n\t\t\t\t\t{ rows:[\n\t\t\t\t\t\t{view:\"radio\", name:\"fit\", value:\"page\", options:[\n\t\t\t\t\t\t\t{ id:\"page\", value:labels[\"page-width\"]},\n\t\t\t\t\t\t\t{ id:\"data\", value:labels[\"page-actual\"]}\n\t\t\t\t\t\t]},\n\t\t\t\t\t\t{ view:\"radio\", name:\"mode\", value:\"landscape\", options:[\n\t\t\t\t\t\t\t{ id:\"portrait\", value:labels[\"page-portrait\"]},\n\t\t\t\t\t\t\t{ id:\"landscape\", value:labels[\"page-landscape\"]}\n\t\t\t\t\t\t]}\n\t\t\t\t\t]},\n\t\t\t\t\t{\n\t\t\t\t\t\tcols:[\n\t\t\t\t\t\t\t{ },\n\t\t\t\t\t\t\t{ view: \"button\", css:\"ssheet_cancel_button\", hotkey:\"esc\",\n\t\t\t\t\t\t\t\tvalue: labels.cancel, autowidth:true,\n\t\t\t\t\t\t\t\tclick: () => this.close()\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{ view: \"button\", value: labels[\"print-borders\"], autowidth:true,\n\t\t\t\t\t\t\t\tclick: () => this.printPreview()\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{ view: \"button\", value: labels.print, hotkey:\"enter\", autowidth:true,\n\t\t\t\t\t\t\t\tclick: () => this.okClick()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t};\n\t}\n\tgetValues(){\n\t\tconst data = this.$dialog.getBody().getValues({disabled:false});\n\t\tdata.margin = data.margin?0:{};\n\t\treturn data;\n\t}\n\tprintPreview(){\n\t\tthis.close();\n\t\tthis.view.showPrintBorders(true);\n\t}\n\tgetSheets(view){\n\t\treturn view._sheets\n\t\t\t.map(sheet => ({value: sheet.name, id: sheet.name}))\n\t\t\t.filter(sheet => isVisible(view, sheet.id));\n\t}\n\tokClick(){\n\t\tconst data = this.$dialog.getBody().getValues({disabled:false});\n\t\tdata.margin = data.margin?0:{};\n\t\tthis.close();\n\t\twebix.print(this.view, data);\n\t}\n}\n","import {Dialog} from \"./common\";\n\nexport const action = \"add-comment\";\n\nexport class DialogBox extends Dialog{\n\topen(action){\n\t\t//we get cell only on hover commented cell\n\t\tthis.cell = action.cell ? action.cell : this.view.getSelectedId();\n\n\t\t// cell not provided\n\t\tif (!this.cell || \n\t\t\t// cell is locked and in the edit mode\n\t\t\t(this.view.isCellLocked(this.cell.row, this.cell.column) && !action.viewonly) ||\n\t\t\t// action blocked by user's code\n\t\t\t!(this.view.callEvent(\"onBeforeCommentShow\", [this.cell.row, this.cell.column, !action.viewonly]))){\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.view.comments._activeComment = {editStatus: !action.viewonly, cell: this.cell};\n\n\t\tif(!this.$dialog){\n\t\t\tthis.$dialog = webix.ui(this.$init());\n\t\t\tthis.view._destroy_with_me.push(this.$dialog);\n\t\t\tthis.view.comments.commentsView = this.$dialog;\n\t\t\tthis.$dialog.attachEvent(\"onHide\", ()=>this.$hide());\n\t\t\tthis.view.attachEvent(\"onCommentHide\", ()=>this.$dialog.hide());\n\t\t}\n\n\t\tconst form = this.$dialog.getBody();\n\n\t\tconst span = this.view.$$(\"cells\").getSpan(this.cell.row, this.cell.column);\n\t\tconst item = span ? {row: this.cell.row, column:(span[1]*1+span[2]-1)} : this.cell;\n\n\t\twebix.delay(()=>{\n\t\t\tthis.$dialog.show(this.view.$$(\"cells\").getItemNode(item));\n\t\t\tthis._setComment();\n\t\t});\n\t\tif (this.$show(this.$dialog, form) === false)\n\t\t\tthis.close();\n\t}\n\t$show(){\n\t\tthis.textarea = this.$dialog.queryView({view:\"textarea\"});\n\t\tthis.template = this.$dialog.queryView({view:\"template\"});\n\t}\n\t$init(){\n\t\treturn {\n\t\t\tview: \"popup\",\n\t\t\tcss:\"ssheet_comments\",\n\t\t\tminWidth:250,\n\t\t\tminHeight:150,\n\t\t\trelative:\"right\",\n\t\t\tresize:true,\n\t\t\ton:{\n\t\t\t\tonViewResize:()=>{\n\t\t\t\t\tthis.$dialog.hide();\n\t\t\t\t\tthis.$dialog.show();\n\t\t\t\t\tif(this.textarea.isVisible())\n\t\t\t\t\t\tthis.textarea.focus();\n\t\t\t\t}\n\t\t\t},\n\t\t\tbody:{\n\t\t\t\tanimate:false,\n\t\t\t\tcells:[\n\t\t\t\t\t{\n\t\t\t\t\t\tview: \"template\",\n\t\t\t\t\t\tcss:\"ssheet_comment_view\",\n\t\t\t\t\t\tborderless: true,\n\t\t\t\t\t\tscroll:\"auto\",\n\t\t\t\t\t\tonClick:{\n\t\t\t\t\t\t\t\"ssheet_comment_view\":() => {\n\t\t\t\t\t\t\t\tif(!(this.view.config.readonly || this.view.isCellLocked(this.cell.row, this.cell.column)))\n\t\t\t\t\t\t\t\t\tthis.showInput(this.view.comments.get(this.cell.row, this.cell.column));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tview: \"textarea\",\n\t\t\t\t\t\ton:{\n\t\t\t\t\t\t\tonChange:()=>{\n\t\t\t\t\t\t\t\tthis.addComment();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tonFocus:()=>{\n\t\t\t\t\t\t\t\tthis.view.comments._activeComment = {editStatus: true, cell: this.cell};\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tonBlur:()=>{\n\t\t\t\t\t\t\t\tthis.view.comments._activeComment = {};\n\t\t\t\t\t\t\t\tthis.$dialog.hide();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t};\n\t}\n\t_setComment(){\n\t\tconst comment = this.view.comments.get(this.cell.row, this.cell.column);\n\t\tif(this.view.comments._activeComment.editStatus)\n\t\t\tthis.showInput(comment);\n\t\telse\n\t\t\tthis.showTemplate(comment);\n\t}\n\tshowTemplate(text){\n\t\tthis.template.show();\n\t\tthis.template.setHTML(text);\n\t}\n\tshowInput(text){\n\t\tthis.view.$$(\"cells\").select(this.cell.row, this.cell.column);\n\t\twebix.delay(()=>{\n\t\t\tthis.changeTextarea(text);\n\t\t\tthis.textarea.show();\n\t\t\tthis.textarea.focus();\n\t\t});\n\t}\n\taddComment(){\n\t\tthis.view.comments.add(this.cell.row, this.cell.column, this.textarea.getValue());\n\t}\n\tchangeTextarea(text){\n\t\tthis.textarea.blockEvent();\n\t\tthis.textarea.setValue(text||\"\");\n\t\tthis.textarea.unblockEvent();\n\t}\n}","import {Dialog} from \"./common\";\nexport const action = \"resize\";\n\nexport class DialogBox extends Dialog{\n\topen(action){\n\t\tthis.group = action.group;\n\t\tthis.header = action.value;\n\t\tDialog.prototype.open.apply(this, arguments);\n\t}\n\t$show(){\n\t\tconst sel = this.view.getSelectedId();\n\t\tif(!sel)\n\t\t\treturn false;\n\t\tthis.view.$handleSelection = ()=>{\n\t\t\treturn false;\n\t\t};\n\n\t\tconst elements = this.$dialog.getBody().elements;\n\t\tthis.type = elements[\"type\"];\n\t\tthis.size = elements[\"size\"];\n\n\t\tthis.$dialog.getHead().getChildViews()[0].setHTML(this.header);\n\t\tconst grid = this.view.$$(\"cells\");\n\n\t\tlet value;\n\t\tif(this.group == \"row\")\n\t\t\tvalue = grid.getItem(sel.row).$height || grid.config.rowHeight;\n\t\telse\n\t\t\tvalue = grid.getColumnConfig(sel.column).width || grid.config.columnWidth;\n\n\t\tthis.type.getOption(1).value = webix.i18n.spreadsheet.labels[this.group == \"row\" ? \"height\" : \"width\"];\n\t\tthis.type.setValue(1);\n\t\tthis.type.refresh();\n\n\t\tthis.size.setValue(value);\n\t\tthis.size.focus();\n\t}\n\t$hide(){\n\t\tthis.view.$handleSelection = null;\n\t}\n\tokClick(){\n\t\tconst type = this.type.getValue();\n\n\t\tlet size = \"auto\";\n\t\tif(type == 1)\n\t\t\tsize = this.size.getValue()*1;\n\t\telse if(type == 3)\n\t\t\tsize = this.view.$$(\"cells\").config[this.group == \"row\" ? \"rowHeight\" : \"columnWidth\"];\n\n\t\tif(this.group == \"row\")\n\t\t\tthis.view.setRowHeight(null, size);\n\t\telse\n\t\t\tthis.view.setColumnWidth(null, size);\n\n\t\tthis.close();\n\t}\n\t$init(){\n\t\tconst locale = webix.i18n.spreadsheet.labels;\n\t\treturn {\n\t\t\tview: \"ssheet-dialog\",\n\t\t\tposition:\"center\",\n\t\t\twidth: 300,\n\t\t\tmove: true,\n\t\t\tbody:{\n\t\t\t\tpadding:0,\n\t\t\t\tcols:[\n\t\t\t\t\t{\n\t\t\t\t\t\tview:\"radio\", name:\"type\", vertical:true, optionHeight:40,\n\t\t\t\t\t\ton:{\n\t\t\t\t\t\t\tonChange: id => {\n\t\t\t\t\t\t\t\tif(id == 1)\n\t\t\t\t\t\t\t\t\tthis.size.enable();\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tthis.size.disable();\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\toptions:[\n\t\t\t\t\t\t\t{id:1, value: \"\"},\n\t\t\t\t\t\t\t{id:2, value: locale[\"fit-content\"]},\n\t\t\t\t\t\t\t{id:3, value: locale[\"default-size\"]},\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t{rows: [\n\t\t\t\t\t\t{view:\"text\", name: \"size\", width:120},\n\t\t\t\t\t]}\n\t\t\t\t]\n\t\t\t},\n\t\t\ton:{\n\t\t\t\tonSaveClick: () => this.okClick(),\n\t\t\t\tonCancelClick: () => this.close()\n\t\t\t}\n\t\t};\n\t}\n}","import * as imc from \"./imagecell\";\nimport * as imt from \"./imagetop\";\nimport * as asw from \"./sparkline\";\nimport * as rgs from \"./ranges\";\nimport * as dpd from \"./dropdown\";\nimport * as flt from \"./filter\";\nimport * as fmt from \"./format\";\nimport * as cnd from \"./conditional\";\nimport * as exp from \"./export\";\nimport * as lnk from \"./link\";\nimport * as pnt from \"./print\";\nimport * as cmt from \"./comments\";\nimport * as siz from \"./sizing\";\n\nconst bases = [ imt, imc, asw, rgs, dpd, flt, fmt, cnd, exp, lnk, pnt, cmt, siz ];\n\nexport function init(view){\n\tconst dialogs = {};\n\tconst viewBases = view.config.readonly ? [cmt, exp, pnt] : bases;\n\n\tfor (let i = 0; i < viewBases.length; i++)\n\t\tdialogs[viewBases[i].action] = new viewBases[i].DialogBox(view);\n\n\tview.attachEvent(\"onCommand\", function(action){\n\t\tconst box = dialogs[action.id];\n\t\tif (box) box.open(action);\n\t});\n\n\tview.attachEvent(\"onAction\", function(id, values){\n\t\t//hide win when the external ui is removed\n\t\tif(id == \"add-view\" && !values.newValue){\n\t\t\tconst box = dialogs[\"add-image-top\"];\n\t\t\tif(box && box.viewid == values.row){\n\t\t\t\tbox.close();\n\t\t\t}\n\t\t}\n\t});\n}","import {ignoreReset, ignoreUndo} from \"../operations/undo\";\nimport group from \"../operations/undo_group\";\nimport {adjustSpan} from \"../operations/spans\";\nimport {updateMaxColumn} from \"../helpers/column_names\";\nimport {find} from \"../helpers/array\";\n\nexport function init(view){\n\tview.attachEvent(\"onCommand\", (action, start, end) => {\n\t\tif (action.id == \"add\" || action.id == \"del\"){\n\t\t\tvar area = view._table.getSelectArea();\n\t\t\tif(area && !(start && end)){\n\t\t\t\tstart = area.start;\n\t\t\t\tend = area.end;\n\t\t\t}\n\n\t\t\tif (start && end){\n\t\t\t\tif(action.group == \"column\" && action.id == \"add\")\n\t\t\t\t\tupdateMaxColumn(view.config.columnCount + (end.column - start.column) + 1);\n\n\t\t\t\tgroup.set(function(){\n\t\t\t\t\tprocess(action, start, end, view);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t});\n\n\tview.attachEvent(\"onUndo\", (action, row, column, value, dir, extra) => {\n\t\tif (action == \"grid-change\"){\n\t\t\tconst state = view._table.getScrollState();\n\n\t\t\t//if we added rows/cols - regine can update cell references on other pages on undo\n\t\t\tif(extra){\n\t\t\t\tif(!dir)\n\t\t\t\t\tview._mPage[row ? \"removeRow\" : \"removeColumn\"]((row || column)-1, extra.count);\n\t\t\t\telse\n\t\t\t\t\tview._mPage[row ? \"addRow\" : \"addColumn\"]((row || column)-1, extra.count);\n\t\t\t}\n\t\t\t//if removed - can't, so parse full data and show sheet\n\t\t\telse\n\t\t\t\tstate.sheet = view.getActiveSheet();\n\n\t\t\tloadChangedData(view, value, state);\n\t\t}\n\t});\n}\n\nfunction process(action, start, end, view) {\n\tlet select = view._table.getSelectArea();\n\tconst state = view._table.getScrollState();\n\n\tconst del = action.id == \"del\";\n\tconst oldData = view.serialize({sheets: del, viewIds:true});\n\tconst newData = webix.copy(oldData);\n\tconst data = {value:oldData, newValue:newData};\n\n\tif(!del)\n\t\twebix.extend(data, {\n\t\t\t[action.group]: start[action.group],\n\t\t\textra: {\n\t\t\t\tcount: end.row - start.row + 1\n\t\t\t}\n\t\t});\n\n\tconst obj = del ? find(newData, sheet => sheet.name == view.getActiveSheet()).content : newData;\n\n\tconst spanData = [];\n\tconst spans = obj.spans;\n\tfor (let i in spans){\n\t\tconst span = adjustSpan(spans[i], action, start, end, view, obj.data, spanData);\n\t\tif (span[2] <= 0 || span[3] <= 0)\n\t\t\tspans.splice(i, 1);\n\t}\n\n\tconst values = getUpdateValues(action, start, end);\n\tignoreUndo(function(){\n\t\tview.callEvent(\"onAction\", [\"before-grid-change\", {\n\t\t\tname: values.name,\n\t\t\tinc: values.inc,\n\t\t\tdata: obj,\n\t\t\tstart: start\n\t\t}]);\n\t},view);\n\n\tif (action.group == \"column\"){\n\t\tif (del)\n\t\t\t_delColumn(action, start, end, view);\n\t\telse\n\t\t\t_addColumn(action, start, end, view);\n\t}\n\telse if (action.group == \"row\") {\n\t\tif (del)\n\t\t\t_delRow(action, start, end, view);\n\t\telse\n\t\t\t_addRow(action, start, end, view);\n\t}\n\n\t// muon updates data and ranges\n\tconst updatedData = view.serialize();\n\tobj.data = updatedData.data;\n\tobj.ranges = updatedData.ranges;\n\n\tspanData.forEach(item => {\n\t\tobj.data.push(item);\n\t});\n\n\tview.callEvent(\"onAction\", [\"grid-change\", data]);\n\n\tignoreUndo(function() {\n\t\tloadChangedData(view, obj, state);\n\t},view);\n\n\tif (select){\n\t\tselect = fixSelectArea(select, view);\n\t\tif (select)\n\t\t\tview.$$(\"cells\").addSelectArea(select.start, select.end);\n\t}\n}\n\nfunction fixSelectArea(select, view){\n\tconst config = view.config;\n\n\tconst rows = config.rowCount;\n\tconst cols = config.columnCount;\n\n\tif (select.start.row*1 > rows) select.start.row = rows;\n\tif (select.end.row*1 > rows) select.end.row = rows;\n\tif (select.start.column*1 > cols) select.start.column = cols;\n\tif (select.end.column*1 > cols) select.end.column = cols;\n\n\tif (\n\t\tview.isRowVisible(select.start.row) &&\n\t\tview.isRowVisible(select.end.row) &&\n\t\tview.isColumnVisible(select.start.column) &&\n\t\tview.isColumnVisible(select.end.column)\n\t)\n\t\treturn select;\n}\n\nfunction loadChangedData(view, data, state){\n\t// data loading resets undo history, and\n\t// we need to preserve it\n\tignoreReset(function(){\n\t\tview.$handleSelection = null;\n\t\tview.parse(data);\n\n\t\tif(state){\n\t\t\tif(state.sheet)\n\t\t\t\tview.showSheet(state.sheet);\n\t\t\tview._table.scrollTo(state.x, state.y);\n\t\t}\n\t});\n}\n\nfunction getUpdateValues( action, start, end){\n\tvar name = action.group,\n\t\tinc = action.id==\"add\"?1:(action.id==\"del\"?-1:0);\n\n\tif(inc) {\n\t\t// span support\n\t\tif (name == \"row\")\n\t\t\tinc += inc * (end.row - start.row);\n\t\tif (name == \"column\")\n\t\t\tinc += inc * (end.column - start.column);\n\t}\n\treturn {name: name, inc: inc};\n}\n\nfunction _addColumn(action, start, end, view) {\n\tlet count = end.column - start.column + 1;\n\n\tview._mPage.addColumn(start.column-1, count);\n\tview.config.columnCount += count;\n\n\tview.callEvent(\"onColumnOperation\", [action.id, start.column, end.column]);\n}\n\nfunction _delColumn(action, start, end, view) {\n\tlet count = end.column - start.column + 1;\n\n\tif (view.config.columnCount === count){\n\t\tif (start.column == end.column)\n\t\t\treturn; //deleting last column, ignoring\n\t\t//prevent deleting all columns\n\t\tend.column--;\n\t\tcount--;\n\t}\n\n\tview._mPage.removeColumn(start.column-1, count);\n\tview.config.columnCount -= count;\n\n\tview.callEvent(\"onColumnOperation\", [action.id, start.column, end.column]);\n}\n\nfunction _addRow(action, start, end, view) {\n\tconst count = end.row - start.row + 1;\n\n\tview._mPage.addRow(start.row-1, count);\n\tview.config.rowCount += count;\n\n\tview.callEvent(\"onRowOperation\", [action.id, start.row, end.row]);\n}\n\nfunction _delRow(action, start, end, view) {\n\tlet count = end.row - start.row + 1;\n\n\tif (view.config.rowCount === count){\n\t\tif (start.row == end.row)\n\t\t\treturn; //deleting last column, ignoring\n\t\t//prevent deleting all columns\n\t\tend.row--;\n\t\tcount--;\n\t}\n\n\tview._mPage.removeRow(start.row-1, count);\n\tview.config.rowCount -= count;\n\n\tview.callEvent(\"onRowOperation\", [action.id, start.row, end.row]);\n}","import group from \"./undo_group\";\nimport {setSpanCss} from \"./spans\";\nimport {rangeOptions} from \"../mathematics/ranges\";\nimport * as fmt from \"../operations/formats\";\nimport {changeRange, eachRange} from \"../helpers/column_names\";\n\nexport function init(view){\n\tconst table = view._table;\n\n\tview.attachEvent(\"onReset\", () => reset(view));\n\treset(view);\n\n\ttable.attachEvent(\"onBeforeEditStart\", function(id){\n\t\tlet col = this.getColumnConfig(id.column);\n\t\tif (this._ssEditors[id.row]){\n\t\t\tlet ed = this._ssEditors[id.row][id.column];\n\t\t\tif (ed){\n\t\t\t\twebix.extend(col, ed, true);\n\t\t\t\twebix.extend(col, {row: view.getRow(id.row)}, true);\n\t\t\t\tif (ed.options){\n\t\t\t\t\tif (typeof ed.options == \"string\")\n\t\t\t\t\t\tcol.options = rangeOptions(view, ed.options, { unique:true, order:true, empty:true });\n\t\t\t\t\telse if (webix.isArray(ed.options))\n\t\t\t\t\t\tcol.options = rangeOptions(view, ed.options, { empty:true });\n\n\t\t\t\t\tif(col.collection){\n\t\t\t\t\t\tcol.collection.clearAll();\n\t\t\t\t\t\tcol.collection.parse(col.options);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// update format if editor supports this feature\n\ttable.attachEvent(\"onBeforeEditStop\", function(state, editor, ignore){\n\t\tif (!ignore && editor.getFormat){\n\t\t\tconst value = editor.getValue();\n\t\t\tlet format = editor.getFormat(value);\n\n\t\t\tgroup.set(function(){\n\t\t\t\tview.setCellValue(editor.row, editor.column, value);\n\t\t\t\tif (format){\n\t\t\t\t\tfmt.addFormat(view, editor.row, editor.column, fmt.getFormatSource(format));\n\t\t\t\t} else\n\t\t\t\t\tfmt.removeFormat(view, editor.row, editor.column);\n\t\t\t});\n\n\t\t\tconst cell = view.getSelectedId();\n\t\t\tif (cell && cell.row == editor.row && cell.column == editor.column){\n\t\t\t\tformat = format || \"common\";\n\t\t\t\tformat = fmt.isCustom(format) ? \"custom\" : format;\n\t\t\t\tview.callEvent(\"onCommand\", [{id:\"toolbar-update\", name:\"format\", value:format}]);\n\t\t\t}\n\t\t}\n\t});\n\n\ttable.attachEvent(\"onAfterEditStop\", function(state, editor){\n\t\tconst col = this.getColumnConfig(editor.column);\n\n\t\tcol.editor = \"text\";\n\t\tdelete col.popup; delete col.$popup; delete col.row;\n\t});\n\n\tview.attachEvent(\"onUndo\", (type, row, column, value) => {\n\t\tif (type == \"dropdown\")\n\t\t\tview.setCellEditor(row, column, value);\n\t});\n\n\tview.attachEvent(\"onAction\", (action, p) => {\n\t\tif (action == \"dropdown\"){\n\t\t\tsetSpanCss(view, p.row, p.column, \"ss_editor\", p.newValue);\n\t\t}\n\t\telse if (action == \"before-grid-change\")\n\t\t\tupdatePosition(view, p.name, p.inc, p.data, p.start);\n\t});\n}\n\nfunction reset(view){\n\tview._table._ssEditors = {};\n}\n\nexport function serialize(view,data){\n\tvar row, column,\n\t\ttblEditors = view._table._ssEditors,\n\t\teditors = [];\n\n\tfor (row in tblEditors){\n\t\tfor (column in tblEditors[row])\n\t\t\teditors.push([row, column, tblEditors[row][column]]);\n\t}\n\tdata.editors = editors;\n}\n\nexport function load(view,data){\n\tconst editors = data.editors;\n\n\tif (editors)\n\t\tfor (let i=0; i=0; i--){\n\t\t\tlet [row,column,editor] = editors[i];\n\t\t\tif (name == \"row\" && row >= start.row || name == \"column\" && column >= start.column){\n\n\t\t\t\tif (name == \"row\"){\n\t\t\t\t\tif (row < start.row - inc){\t//delete editor mark if row was deleted\n\t\t\t\t\t\teditors.splice(i,1);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else\t\t\t\t\t\t//update mark position if upper row was deleted\n\t\t\t\t\t\teditors[i][0] = row*1 + inc;\n\t\t\t\t}\n\t\t\t\telse if (name == \"column\"){\n\t\t\t\t\tif (column < start.column - inc){\n\t\t\t\t\t\teditors.splice(i, 1);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else \n\t\t\t\t\t\teditors[i][1] = column*1 + inc;\n\t\t\t\t}\n\t\t\t\teditor.options = changeRange(editor.options, name, inc, start);\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function pasteDropdown(view, extra, row, col, cutted){\n\tconst editor = extra.dropdown;\n\n\tview.setCellEditor(row, col, editor);\n\tif (cutted === 1)\n\t\tview.setCellEditor(extra.row, extra.col, {});\n}","import group from \"./undo_group\";\nimport {pasteCondition} from \"../operations/conditional_formats\";\nimport {pasteDropdown} from \"../operations/dropdown\";\nimport {pasteFilter} from \"../operations/filter\";\nimport {pasteSpan} from \"../operations/spans\";\n\nlet styledata, clipdata, origin, cutted, updateFilters, specialPaste;\n\nexport function init(view){\n\tconst clipboard = view.config.clipboard;\n\tconst browserClipboard = navigator.clipboard;\n\n\tif(clipboard === false)\n\t\treturn;\n\n\twebix.clipbuffer.init();\n\tconst buffer = document.querySelector(\".webix_clipbuffer\");\n\n\tconst keyC = 67; //keyboard 'c' code\n\tconst keyX = 88; //keyboard 'x' code\n\tconst grid = view.$$(\"cells\");\n\n\tgrid.attachEvent(\"onAfterAreaAdd\", () => _sel_to_clip(view, buffer));\n\n\tgrid.attachEvent(\"onKeyPress\", (code, e) => {\n\t\tif((code === keyC || code === keyX) && (e.ctrlKey || e.metaKey) && grid.getSelectedId()){\n\t\t\tcutted = (code === keyX)*1;\n\t\t\tsetClipboard(view, buffer);\n\t\t}\n\t});\n\n\tview.attachEvent(\"onCommand\", action => {\n\t\tif(action.id.indexOf(\"paste\") != -1){\n\t\t\tspecialPaste = action.id.split(\"-\")[1];\n\n\t\t\tif(browserClipboard && browserClipboard.readText){\n\t\t\t\tbrowserClipboard.readText()\n\t\t\t\t\t.then(text => {\n\t\t\t\t\t\twebix.clipbuffer.set(text);\n\t\t\t\t\t\t_clip_to_sel(view, grid, buffer.value);\n\t\t\t\t\t})\n\t\t\t\t\t.catch(()=> {\n\t\t\t\t\t\t_clip_to_sel(view, grid, clipdata);\n\t\t\t\t\t})\n\t\t\t\t\t.finally(()=> {\n\t\t\t\t\t\tspecialPaste = null;\n\t\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_clip_to_sel(view, grid, clipdata);\n\t\t\t\tspecialPaste = null;\n\t\t\t}\n\t\t}\n\t\telse if(action.id == \"copy\" || action.id == \"cut\"){\n\t\t\tcutted = (action.id == \"cut\")*1;\n\t\t\tsetClipboard(view, buffer, browserClipboard, true);\n\t\t}\n\t});\n\n\tif (!view.config.readonly) {\n\t\tgrid.attachEvent(\"onPaste\", text => {\n\t\t\t_clip_to_sel(view, grid, text);\n\t\t});\n\t}\n}\n\nfunction setClipboard(view, buffer, browserClipboard, menu){\n\tconst grid = view.$$(\"cells\");\n\tstyledata = _get_sel_style(view, grid);\n\n\tif(menu && browserClipboard && browserClipboard.writeText)\n\t\tbrowserClipboard.writeText(buffer.value);\n\n\tclipdata = buffer.value;\n\torigin = grid.getSelectArea();\n\n\tif(cutted && Object.keys(grid._ssFilters).length !== 0)\n\t\tupdateFilters = allFiltersInZone(grid._ssFilters, origin, view.config.columnCount);\n}\n\nfunction _sel_to_clip(view, buffer){\n\tconst grid = view.$$(\"cells\");\n\tif(grid.getSelectedId())\n\t\twebix.delay(()=>{\n\t\t\tconst data = [];\n\t\t\tgrid.mapSelection(function(value, row, col, row_ind) {\n\t\t\t\tvalue = _updateDelimiter(view._mPage.getValue(row-1, col-1), view.config);\n\t\t\t\tif (!data[row_ind]) data[row_ind] = [];\n\t\t\t\tdata[row_ind].push(value);\n\t\t\t});\n\t\t\tconst clipdata = webix.csv.stringify(data, grid.config.delimiter);\n\n\t\t\tif (grid.getEditor()){\n\t\t\t\tbuffer.value = clipdata;\n\t\t\t} else {\n\t\t\t\tbuffer.focus();\n\t\t\t\twebix.clipbuffer.set(clipdata);\n\t\t\t}\n\t\t\twebix.UIManager.setFocus(grid);\n\t\t});\n}\n\nfunction _updateDelimiter(value, config) {\n\tconst format = getClipboardNumberFormat(config);\n\n\tif(webix.rules.isNumber(value) && format)\n\t\tvalue = webix.Number.numToStr(format)(value);\n\n\treturn value;\n}\n\nfunction _clip_to_sel(view, grid, text){\n\tif(!text)\n\t\ttext = \"\";\n\n\tvar leftTop = grid.getSelectArea();\n\tif (!leftTop) return;\n\tvar start = leftTop.start;\n\tvar fromSheet = text === clipdata;\n\n\tvar data = fromSheet ? styledata : webix.csv.parse(text, grid.config.delimiter);\n\tif(!fromSheet)\n\t\tdata = _changeDelimiter(data, view.config);\n\n\tvar translate = { id:\"move\", column:0, row: 0, cut:cutted };\n\tif (fromSheet){\n\t\ttranslate.column = start.column - origin.start.column;\n\t\ttranslate.row = start.row - origin.start.row;\n\t}\n\n\tif(specialPaste || !fromSheet){\n\t\tcutted = 0;\n\t\tupdateFilters = 0;\n\t}\n\n\tgroup.set(function(){\n\t\tif (updateFilters)\n\t\t\tview.removeFilters();\n\n\t\t_add_row_col(view, start, data);\n\n\t\tif (cutted === 1) {\n\t\t\tfor (let row = origin.start.row; row <= origin.end.row; row++) {\n\t\t\t\tfor (let column = origin.start.column; column <= origin.end.column; column++) {\n\t\t\t\t\tview.setCellValue(row, column, null);\n\t\t\t\t\tview.setStyle(row, column, null);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst colCount = leftTop.end.column - start.column + 1;\n\t\tconst rowCount = leftTop.end.row - start.row + 1;\n\n\t\tconst dataRowCount = data.length;\n\t\tconst dataColCount = data[0].length;\n\n\t\tif (!updateFilters && (rowCount > dataRowCount || colCount > dataColCount)) {\n\t\t\tfor(let r = 0, ri = 0; r < Math.max(rowCount, dataRowCount); r++, ri++){\n\t\t\t\tif(ri == data.length) ri = 0;\n\t\t\t\tfor (let c = 0, ci = 0; c < Math.max(colCount, dataColCount); c++, ci++){\n\t\t\t\t\tif(ci == data[0].length) ci = 0;\n\n\t\t\t\t\tconst subtrans = {\n\t\t\t\t\t\tid: \"move\",\n\t\t\t\t\t\tcolumn: translate.column + Math.floor(c/dataColCount) * dataColCount,\n\t\t\t\t\t\trow: translate.row + Math.floor(r/dataRowCount) * dataRowCount,\n\t\t\t\t\t\tcut: cutted\n\t\t\t\t\t};\n\n\t\t\t\t\t_clipboardToTable(view, start.row + r, start.column + c, data[ri][ci], fromSheet, subtrans);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tgrid.mapCells(\n\t\t\t\tstart.row,\n\t\t\t\tstart.column,\n\t\t\t\tdataRowCount,\n\t\t\t\tnull,\n\t\t\t\tfunction(value, row, col, row_ind, col_ind) {\n\t\t\t\t\tif (data[row_ind] && data[row_ind].length > col_ind) {\n\t\t\t\t\t\tvar cdata = data[row_ind][col_ind];\n\t\t\t\t\t\t_clipboardToTable(view, row, col, cdata, fromSheet, translate);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\ttrue\n\t\t\t);\n\t\t}\n\n\t\tif (cutted === 1){\n\t\t\t//cut and cleared\n\t\t\tcutted = 2;\n\t\t\tupdateFilters = false;\n\t\t}\n\t});\n\t\n\tview.refresh();\n}\n\nfunction _clipboardToTable(view, row, col, cdata, fromSheet, translate){\n\tlet newValue = cdata;\n\tconst setValue = !specialPaste || specialPaste == \"values\" || specialPaste == \"formulas\";\n\n\tif (typeof cdata === \"object\"){\n\t\tif(setValue){\n\t\t\tif (cdata.math && specialPaste != \"values\"){\n\t\t\t\tif(translate.cut)\n\t\t\t\t\tnewValue = cdata.math;\n\t\t\t\telse\n\t\t\t\t\tnewValue = view._mData.getStore().transposeMath(cdata.math, translate.row, translate.column);\n\t\t\t}\n\t\t\telse\n\t\t\t\tnewValue = cdata.text;\n\t\t}\n\n\t\tif(cdata.style && cdata.style.props && (!specialPaste || specialPaste == \"styles\")){\n\t\t\tconst style = view.addStyle(cdata.style.props);\n\t\t\tview.setStyle(row, col, style);\n\t\t}\n\n\t\tconst extra = cdata.extra;\n\t\tif(extra){\n\t\t\tif(extra.condition && (!specialPaste || specialPaste == \"conditions\"))\n\t\t\t\tpasteCondition(view, extra, row, col, cutted);\n\t\t\tif(extra.dropdown && !specialPaste)\n\t\t\t\tpasteDropdown(view, extra, row, col, cutted, translate);\n\t\t\tif(extra.filter && updateFilters)\n\t\t\t\tpasteFilter(view, extra, row, col, cutted, translate);\n\t\t}\n\n\t\tif(!specialPaste)\n\t\t\tpasteSpan(view, extra, row, col, cutted, translate);\n\t}\n\n\tif(setValue)\n\t\tview.setCellValue(row, col, newValue);\n}\n\nfunction _get_sel_style(view, grid){\n\tvar data = [];\n\tvar row, last;\n\n\tgrid.mapSelection(function(value, id, col) {\n\t\tif (id != last){\n\t\t\trow = []; data.push(row);\n\t\t\tlast = id;\n\t\t}\n\n\t\tvar math = view._mPage.getValue(id-1, col-1, true);\n\t\tmath = math && math[0] == \"=\" ? math : null;\n\t\tvalue = view._mPage.getValue(id-1, col-1);\n\t\tvar obj = { text:value, math, style:view.getStyle(id, col) };\n\n\t\tvar condition = view.conditions.get(id,col);\n\t\tvar editor = view.getCellEditor(id, col);\n\t\tvar filter = view.getCellFilter(id, col);\n\t\tvar span = view._table.getSpan(id, col);\n\n\t\tif (editor || filter || condition || span){\n\t\t\tvar extra = { row:id, col:col };\n\t\t\tif (condition) extra.condition = condition;\n\t\t\tif (editor) extra.dropdown = editor;\n\t\t\tif (filter) extra.filter = filter;\n\t\t\tif (span) extra.span = span;\n\t\t\tobj.extra = extra;\n\t\t}\n\n\t\trow.push(obj);\n\t\treturn value;\n\t});\n\n\treturn data;\n}\n\nfunction allFiltersInZone(extra, origin, columnCount){\n\tvar filters = Object.keys(extra);\n\tvar startRow = Math.min.apply(null, filters);\n\tvar endRow = Math.max.apply(null, filters);\n\tvar startCol = columnCount;\n\tvar endCol = 1;\n\n\tfor (var i = startRow; i <= endRow; i++){\n\t\tif(extra[i]){\n\t\t\tvar columns = Object.keys(extra[i]);\n\t\t\tstartCol = Math.min(startCol, Math.min.apply(null, columns));\n\t\t\tendCol = Math.max(endCol, Math.max.apply(null, columns));\n\t\t}\n\t}\n\n\tif(origin.start.row <= startRow && origin.end.row >= endRow && origin.start.column <= startCol && origin.end.column >= endCol)\n\t\treturn true;\n\telse\n\t\treturn false;\n}\n//dynamically increase rows and columns according to pasted data size\nfunction _add_row_col(view, start, data){\n\tvar maxRow = start.row + data.length - 1;\n\tvar maxCol = start.column + data[0].length - 1;\n\n\tif(maxRow > view.config.rowCount || maxCol > view.config.columnCount){\n\t\tvar action = { id:\"add\" };\n\t\tif (maxRow > view.config.rowCount) {\n\t\t\taction.group = \"row\";\n\t\t\tview.callEvent(\"onCommand\", [\n\t\t\t\taction, \n\t\t\t\t{ row: view.config.rowCount + 1 }, \n\t\t\t\t{ row: maxRow }\n\t\t\t]);\n\t\t}\n\t\tif (maxCol > view.config.columnCount) {\n\t\t\taction.group = \"column\";\n\t\t\tview.callEvent(\"onCommand\", [\n\t\t\t\taction, \n\t\t\t\t{ column: view.config.columnCount + 1 },\n\t\t\t\t{ column: maxCol }\n\t\t\t]);\n\t\t}\n\t}\n}\n\nfunction _changeDelimiter(data, config){\n\tconst format = getClipboardNumberFormat(config);\n\n\tif(format)\n\t\tfor(let i = 0; i < data.length; i++)\n\t\t\tfor(let k = 0; k < data[i].length; k++){\n\t\t\t\tconst record = webix.Number.parse(data[i][k], format);\n\t\t\t\tif(webix.rules.isNumber(record))\n\t\t\t\t\tdata[i][k] = record;\n\t\t\t}\n\n\treturn data;\n}\n\nfunction getClipboardNumberFormat(config){\n\tlet format = config.clipboardNumberFormat;\n\n\tif(!format && config.clipboardDecimalDelimiter) // backward compatibility\n\t\tformat = {\n\t\t\tdecimalDelimiter: config.clipboardDecimalDelimiter,\n\t\t\tdecimalOptional: true\n\t\t};\n\n\treturn format;\n}","import group from \"./undo_group\";\n\nexport function init(view) {\n\tview.attachEvent(\"onCommand\", (action) => {\n\t\tif (action.id == \"show\" || action.id == \"hide\"){\n\t\t\tconst sel = view._table.getSelectArea();\n\t\t\tif (sel)\n\t\t\t\tprocess(action, webix.copy(sel.start), webix.copy(sel.end), view);\n\t\t}\n\t});\n\treset(view);\n\n\tview.attachEvent(\"onUndo\", (action, row, column, value, direction) => {\n\t\tif ((action.id == \"hide\" || action.id == \"show\") && (action.group == \"column\" || action.group == \"row\")){\n\t\t\tlet type = action.id;\n\t\t\tif (!direction)\n\t\t\t\ttype = type == \"hide\" ? \"show\" : \"hide\";\n\t\t\tconst obj = (row || column);\n\t\t\tprocess({ id: type, group: action.group, neighbors: action.neighbors }, obj.start, obj.end, view, true);\n\t\t}\n\t});\n\n\tview.attachEvent(\"onHardReset\", () => reset(view));\n\n\tview.attachEvent(\"onAction\", (action, p)=> {\n\t\tif(action == \"before-grid-change\")\n\t\t\t_updatePosition(view, p.name, p.inc, p.data, p.start);\n\t});\n}\n\nexport function reset(view, mode) {\n\tif(mode) view[\"_hidden_\"+mode+\"_hash\"] = {};\n\telse{\n\t\tview._hidden_cols_hash = {};\n\t\tview._hidden_rows_hash = {};\n\t\tview.filterSpreadSheet();\n\t}\n}\n\nfunction getIds(id){\n\treturn webix.isArray(id) ? id : [id, id];\n}\n\nexport function isColumnVisible(view, column){\n\treturn !view._hidden_cols_hash[column];\n}\n\nexport function setState(view, indexes, state, type){\n\t// hide\n\tif(!indexes){\n\t\tconst sel = view.getSelectedId(true);\n\t\tconst action = {\n\t\t\tid: state === false ? \"show\" : \"hide\",\n\t\t\tgroup: type\n\t\t};\n\n\t\tif(sel.length)\n\t\t\tview.callEvent(\"onCommand\", [action, sel[0], sel[sel.length-1]]);\n\t}\n\telse {\n\t\tconst ids = getIds(indexes);\n\t\tconst hidden = type == \"row\" ? view._hidden_rows_hash : view._hidden_cols_hash;\n\n\t\tif (!hidden[ids[0]] && (webix.isUndefined(state) || state)){\n\t\t\t(type == \"row\" ? _hideRow : _hideColumn)({id: \"hide\", group: type}, {[type]: ids[0]}, {[type]: ids[1]}, view);\n\t\t}\n\t\t// show\n\t\telse if (hidden[ids[0]] && (webix.isUndefined(state) || !state)) {\n\t\t\t(type == \"row\" ? _showRow : _showColumn)({id: \"hide\", group: type}, {[type]: ids[0]}, {[type]: ids[1]}, view);\n\t\t}\n\t}\n}\n\nexport function isRowVisible(view, row){\n\treturn !view._hidden_rows_hash[row];\n}\n\nexport function serialize(view, data){\n\tlet hrows = []; let hcols = [];\n\tfor(let r in view._hidden_rows_hash) hrows.push(r);\n\tfor(let c in view._hidden_cols_hash) hcols.push(c);\n\n\tif(hrows.length || hcols.length)\t\n\t\tdata.table.hidden = {};\n\tif(hrows.length)\n\t\tdata.table.hidden.row = hrows;\n\tif(hcols.length)\n\t\tdata.table.hidden.column = hcols;\n}\n\nexport function load(view, data){\n\treset(view);\n\t\n\tif(!webix.isUndefined(data.table) && !webix.isUndefined(data.table.hidden)){\n\t\tconst hidden = data.table.hidden;\n\n\t\tif(hidden.row && hidden.row.length){\n\t\t\tfor(let r = 0; r < hidden.row.length; r++)\n\t\t\t\t_hideRow({id:\"hide\", group:\"row\"}, {row:hidden.row[r]}, {row:hidden.row[r]}, view, true);\n\t\t}\n\n\t\tif(hidden.column && hidden.column.length){\n\t\t\tfor(let c = 0; c < hidden.column.length; c++)\n\t\t\t\t_hideColumn({id:\"hide\", group:\"column\"}, {column:hidden.column[c]}, {column:hidden.column[c]}, view, true);\n\t\t}\n\t}\n}\n\nfunction process(action) {\n\tif (action.group == \"column\"){\n\t\tif (action.id == \"show\")\n\t\t\t_showColumn.apply(this, arguments);\n\t\telse if (action.id == \"hide\")\n\t\t\t_hideColumn.apply(this, arguments);\n\t} else if (action.group == \"row\") {\n\t\tif (action.id == \"show\")\n\t\t\t_showRow.apply(this, arguments);\n\t\telse if (action.id == \"hide\")\n\t\t\t_hideRow.apply(this, arguments);\n\t}\n}\n\nfunction _showColumn(action, start, end, view, silent) {\n\tconst grid = view.$$(\"cells\");\n\tconst sel = grid.getSelectArea();\n\n\tconst hash = view._hidden_cols_hash;\n\n\tif(action.neighbors){\n\t\tif(hash[ start.column-1 ])\n\t\t\twhile(hash[ start.column-1 ])\n\t\t\t\tstart.column--;\n\t\telse\n\t\t\twhile(hash[ end.column+1 ])\n\t\t\t\tend.column++;\n\t}\n\n\tgroup.set(()=>{\n\t\tfor (let i = start.column; i <= end.column; i++) {\n\t\t\tif(hash[i]){\n\t\t\t\tdelete hash[i];\n\t\t\t\tconst cell = grid.getColumnConfig(i - 1 || \"rowId\").header[0];\n\t\t\t\tcell.css = cell.css.replace(\"webix_ssheet_hide_column\", \"\");\n\t\t\t\tgrid.showColumn(i);\n\t\t\t\tif (!silent)\n\t\t\t\t\tview.callEvent(\"onColumnOperation\", [action.id, i, i]);\n\t\t\t}\n\t\t}\n\n\t\tconst split = view._frozenColumns;\n\t\tif(split && split >= start.column){\n\t\t\tview.freezeColumns(0); // remove freeze (split is equal with current frozen col)\n\t\t\tview.freezeColumns(split); // if col was freezed on hidden column - move it\n\t\t}\n\n\t\tif (sel)\n\t\t\tgrid.addSelectArea(sel.start, sel.end);\n\t}, view);\n}\n\nfunction _showRow(action, start, end, view, silent) {\n\tconst grid = view.$$(\"cells\");\n\tconst sel = grid.getSelectArea();\n\n\tconst hash = view._hidden_rows_hash;\n\n\tif(action.neighbors){\n\t\tif(hash[ start.row-1 ])\n\t\t\twhile(hash[ start.row-1 ])\n\t\t\t\tstart.row--;\n\t\telse\n\t\t\twhile(hash[ end.row+1 ])\n\t\t\t\tend.row++;\n\t}\n\n\tgroup.set(()=>{\n\t\tconst split = view._frozenRows;\n\t\tif(split){\n\t\t\t//Frozen rows ignore filtering applied to the datatable\n\t\t\tview.freezeRows(0);\n\t\t}\t\t\n\n\t\tfor (let i = start.row; i <= end.row; i++) {\n\t\t\tif(hash[i]){\n\t\t\t\tdelete hash[i];\n\n\t\t\t\tif (i - 1 === 0) {\n\t\t\t\t\tconst cell = grid.getColumnConfig(\"rowId\").header[0];\n\t\t\t\t\tcell.css = cell.css.replace(\"webix_ssheet_hide_row\", \"\");\n\t\t\t\t\tgrid.refreshColumns();\n\t\t\t\t} else\n\t\t\t\t\tgrid.removeCellCss(i - 1, \"rowId\", \"webix_ssheet_hide_row\");\n\n\t\t\t\tif (!silent)\n\t\t\t\t\tview.callEvent(\"onRowOperation\", [action.id, i, i]);\n\t\t\t}\n\t\t}\n\n\t\tview.filterSpreadSheet();\n\n\t\tif(split)\n\t\t\tview.freezeRows(split);\n\n\t\tif (sel)\n\t\t\tgrid.addSelectArea(sel.start, sel.end);\n\t}, view);\n}\n\nfunction _hideColumn(action, start, end, view, silent) {\n\tconst grid = view.$$(\"cells\");\n\tlet i = end.column;\n\tview.$handleSelection = null;\n\tgrid.unselect();\n\n\tif (end.column<1 || start.column<1){\n\t\tdelete view._hidden_cols_hash[start.column];\n\t\treturn;\n\t}\n\twhile (i >= start.column) {\n\t\tif(grid.getColumnIndex(i) != -1){\n\t\t\tview._hidden_cols_hash[i] = i;\n\n\t\t\tlet cell = grid.getColumnConfig(i - 1 || \"rowId\").header[0];\n\t\t\tcell.css = (cell.css || \"\") + \" webix_ssheet_hide_column\";\n\n\t\t\tgrid.hideColumn(i);\n\t\t}\n\t\ti--;\n\t}\n\n\tif (!silent)\n\t\tview.callEvent(\"onColumnOperation\", [action.id, start.column, end.column]);\n}\n\nfunction _hideRow(action, start, end, view, silent) {\n\tif (end.row<1 || start.row<1){\n\t\tdelete view._hidden_rows_hash[start.row];\n\t\treturn;\n\t}\n\n\tconst split = view._frozenRows;\n\tif(split){\n\t\t//Frozen rows ignore filtering applied to the datatable\n\t\tview.freezeRows(0);\n\t}\n\n\tconst grid = view.$$(\"cells\");\n\tlet i = end.row;\n\n\twhile (i >= start.row) {\n\t\tview._hidden_rows_hash[i] = i;\n\n\t\tif (i - 1 === 0) {\n\t\t\tlet cell = grid.getColumnConfig(\"rowId\").header[0];\n\t\t\tcell.css = (cell.css || \"\") + \" webix_ssheet_hide_row\";\n\t\t\tgrid.refreshColumns();\n\t\t}\n\t\telse\n\t\t\tgrid.addCellCss(i - 1, \"rowId\", \"webix_ssheet_hide_row\");\n\n\t\ti--;\n\t}\n\n\tview.filterSpreadSheet();\n\n\tif(split)\n\t\tview.freezeRows(split);\n\n\tif (!silent)\n\t\tview.callEvent(\"onRowOperation\", [action.id, start.row, end.row]);\n}\n\nfunction _updatePosition(view, name, inc, data, start){\n\tif(data.table && data.table.hidden && data.table.hidden[name] && data.table.hidden[name].length){\n\t\treset(view, name == \"column\" ? \"cols\" : \"rows\");\n\n\t\tconst s = start[name];\n\t\tconst hidden = data.table.hidden[name];\n\n\t\tfor (let i = hidden.length - 1; i >= 0; i--) {\n\t\t\tconst hiddenIndex = hidden[i]*1;\n\t\t\tif(inc > 0 && hiddenIndex >= s)\n\t\t\t\thidden[i] = inc + hiddenIndex;\n\t\t\telse if(inc < 0 && hiddenIndex >= s) {\n\t\t\t\tif(hiddenIndex < s - inc)\n\t\t\t\t\thidden.splice(i, 1);\n\t\t\t\telse\n\t\t\t\t\thidden[i] = inc + hiddenIndex;\n\t\t\t}\n\t\t}\n\t}\n}","import {getStyle, getTextSize} from \"./styles\";\nimport {save} from \"./save\";\nimport * as arr from \"../helpers/array\";\n\nexport function init(view){\n\n\tif (view.config.resizeCell){\n\t\tvar grid = view.$$(\"cells\");\n\t\tgrid.define(\"resizeRow\", { headerOnly: true, size: 10 });\n\t\tgrid.define(\"resizeColumn\", { headerOnly: true, size: 10 });\n\t\tgrid.define(\"fixedRowHeight\", false);\n\n\t\tgrid.attachEvent(\"onRowResize\", (id) => {\n\t\t\tview.$$(\"cells\").refreshSelectArea();\n\t\t\tsave(view, \"sizes\", { row: id, column: 0, size: view.$$(\"cells\").getItem(id).$height });\n\t\t});\n\t\tgrid.attachEvent(\"onColumnResize\", (id) => {\n\t\t\tview.$$(\"cells\").refreshSelectArea();\n\t\t\tsave(view, \"sizes\", { row: 0, column: id, size: view.getColumn(id).width });\n\t\t});\n\n\t\t// undo\n\t\tview.attachEvent(\"onUndo\", (type, row, column, value) => {\n\t\t\tif(type == \"c-resize\" || type == \"r-resize\")\n\t\t\t\t_undoResize(view, row, column, value);\n\t\t});\n\t}\n\n\tview.attachEvent(\"onDataParse\", (data) => {\n\t\tload(view,data);\n\t});\n\n\t\n\tview.attachEvent(\"onDataSerialize\", (data) => {\n\t\tserialize(view,data);\n\t});\n\n\tview.attachEvent(\"onAction\", (action, p)=> {\n\t\tif(action == \"before-grid-change\")\n\t\t\tupdatePosition(view, p.name, p.inc, p.data, p.start);\n\t});\n\n\tview.attachEvent(\"onBeforeStyleChange\", function(row, column, n, o){\n\t\tif (o && o.props.wrap === \"wrap\" && (!n || n.props.wrap != o.props.wrap)){\n\t\t\tdelete view._table.getItem(row).$height;\n\t\t}\n\t});\n\tview.attachEvent(\"onStyleChange\", (r,c) => _adjustRowHeight(view,r,c));\n\tview.attachEvent(\"onCellChange\", (r,c,v,p)=> {\n\t\tif(p == view.getActiveSheet())\n\t\t\t_adjustRowHeight(view,r,c);\n\t});\n}\n\nfunction serialize(view,data){\n\tvar sizes = [];\n\tvar grid = view.$$(\"cells\");\n\tvar columns = grid.getState().order;\n\tvar order = grid.data.order;\n\n\tvar defWidth = grid.config.columnWidth;\n\tvar defHeight = grid.config.rowHeight;\n\n\tfor (let i = 1; i < columns.length; i++){\n\t\tvar width = grid.getColumnConfig(columns[i]).width;\n\t\tif (width && width != defWidth)\n\t\t\tsizes.push([0, i, width]);\n\t}\n\n\tfor (let i = 0; i < order.length; i++){\n\t\tvar height = grid.getItem(order[i]).$height;\n\t\tif (height && height != defHeight)\n\t\t\tsizes.push([order[i]*1, 0, height]);\n\t}\n\t\n\tdata.sizes = sizes;\n}\n\nfunction load(view,data){\n\tif (data.sizes){\n\t\tfor (let i=0; i= 0; i--){\n\t\t\tlet [row, column, size] = sizes[i];\n\n\t\t\tif(row && name == \"row\" && row >= start.row){\n\t\t\t\tif(inc < 0 && row < start.row - inc)\n\t\t\t\t\tcontinue;\n\t\t\t\tnsizes.push([row*1 + inc, column, size]);\n\t\t\t}\n\t\t\telse if(column && name == \"column\" && column >= start.column){\n\t\t\t\tif(inc < 0 && column < start.column - inc)\n\t\t\t\t\tcontinue;\n\t\t\t\tnsizes.push([row, column*1 + inc, size]);\n\t\t\t}\n\t\t\telse\n\t\t\t\tnsizes.push(sizes[i]);\n\t\t}\n\n\t\tif(inc > 0){\n\t\t\t//col/row add: set sizes according to the selected area\n\t\t\tif(name == \"column\"){\n\t\t\t\tfor(let i = 0; i < inc; i++){\n\t\t\t\t\tconst size = arr.find(sizes, arr => arr[1] == start.column + i);\n\t\t\t\t\tif(size)\n\t\t\t\t\t\tnsizes.push([0, start.column + i, size[2]]);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse{\n\t\t\t\tfor(let i = 0; i < inc; i++){\n\t\t\t\t\tconst size = arr.find(sizes, arr => arr[0] == start.row + i);\n\t\t\t\t\tif(size)\n\t\t\t\t\t\tnsizes.push([start.row + i, 0, size[2]]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tdata.sizes = nsizes;\n\t}\n}\n\nfunction _adjustRowHeight(view, row, column){\n\tif(view._loading_data)\n\t\treturn;\n\n\tconst style = getStyle(view, {row:row, column:column});\n\n\t//changing styles or content of wrapped cell -> resize the related row\n\tif (style && style.props.wrap){\n\t\tconst grid = view._table;\n\t\tconst item = grid.getItem(row);\n\t\tlet height = item.$height || grid.config.rowHeight;\n\n\t\tgrid.eachColumn(function(col, config){\n\t\t\tconst style = getStyle(view, {row:row, column:col});\n\t\t\t//include only cells with active wrap into calculation \n\t\t\tif(style && style.props && style.props.wrap === \"wrap\"){\n\t\t\t\tlet text = this.getText(row, col);\n\t\t\t\tlet baseWidth = config.width;\n\n\t\t\t\tconst span = grid.getSpan(row, col);\n\t\t\t\tlet spanHeight;\n\n\t\t\t\tif(span){\n\t\t\t\t\tconst node = grid.getSpanNode({row:span[0], column:span[1]});\n\t\t\t\t\tbaseWidth = node.offsetWidth;\n\t\t\t\t\tspanHeight = node.offsetHeight;\n\t\t\t\t}\n\n\t\t\t\tif(view.getCellEditor(row, col) || view.getCellFilter(row, col))\n\t\t\t\t\tbaseWidth += 20;\n\n\t\t\t\tlet textHeight = getTextSize(view, text, style.id, baseWidth).height;\n\n\t\t\t\tif(spanHeight)\n\t\t\t\t\ttextHeight = spanHeight >= textHeight ? 0 : textHeight - spanHeight + height;\n\n\t\t\t\theight = Math.max(height, textHeight);\n\t\t\t}\n\t\t});\n\n\t\titem.$height = height;\n\t}\n}\n","import {encode} from \"../helpers/column_names\";\n\nexport function init(view){\n\tvar table = view._table;\n\n\tvar bs = 0;\n\ttable.attachEvent(\"onAreaDrag\", () => bs = new Date());\n\ttable.attachEvent(\"onBeforeAreaRemove\", function(){\n\t\t//[FIXME] currently we don't have enough info to know\n\t\t//is user selects new area, and removing need to be blocked\n\t\t//or is it some API which attempts to remove the area\n\t\tif (view.$handleSelection && (new Date() - bs)<500) return false;\n\t});\n\n\ttable.attachEvent(\"onBeforeAreaAdd\", (area) => {\n\t\t//[FIXME] \n\t\t//block selection of row-id column\n\t\t//temporary fix, we need to fire onBeforeBlockSelect when selection moves\n\t\t//so the common onBeforeBlockSelect handler will block rowId selection\n\t\tif (area.start.column == \"rowId\") return false;\n\n\t\t//if we have an active editor, we need to close it on block selection\n\t\t//ignore, when selecting the editor's cell\n\t\tvar editor = table.getEditor();\n\t\tif (editor && (\n\t\t\teditor.row != area.start.row || editor.column != area.start.column ||\n\t\t\teditor.row != area.start.row || editor.column != area.start.column ))\n\t\t\ttable.editStop();\n\n\t\tif (!view.$handleSelection) return true;\n\t\t\n\n\t\tlet blockStart = encode[area.start.column] + area.start.row;\n\t\tlet blockEnd = encode[area.end.column] + area.end.row;\n\n\t\tvar res = view.$handleSelection(area.start, area.end, blockStart, blockEnd);\n\n\t\tif (res !== false){\n\t\t\tview.$handleSelection = null;\n\t\t\ttable.removeSelectArea();\n\t\t}\n\n\t\treturn res;\n\t});\n\n\twebix.event(table.$view, \"mousedown\", function(e){\n\t\tif (view.$handleSelection)\n\t\t\treturn webix.html.preventEvent(e);\n\t});\n}\n","export function expandSelection(r, view){\n\tlet maxY = view.config.rowCount;\n\tlet maxX = view.config.columnCount;\n\tlet table = view._table;\n\n\tlet nr1 = r.start.row, nr2 = r.end.row, nc1 = r.start.column, nc2 = r.end.column;\n\n\tfor (let i=nr1-1; i>0; i--){\n\t\tif (getValue(i, r.start.column, table))\n\t\t\tnr1 = i;\n\t\telse\n\t\t\tbreak;\n\t}\n\n\tfor (let i=nr2+1; i0; i--){\n\t\tif (getValue(r.start.row, i, table))\n\t\t\tnc1 = i;\n\t\telse\n\t\t\tbreak;\n\t}\n\n\tfor (let i=nc2+1; i {\n\t\tif (cm.id === \"sort-asc\" || cm.id === \"sort-desc\")\n\t\t\tsortRange(view, null, cm.id.replace(\"sort-\",\"\"));\n\t});\n}\n\nconst sorters = {\n\t\"int\":function(dir, key){\n\t\treturn (a,b) => {\n\t\t\tif (!b[key]) return -1;\n\t\t\tif (!a[key]) return 1;\n\n\t\t\tlet c = parseFloat(a[key]) || dir*Infinity;\n\t\t\tlet d = parseFloat(b[key]) || dir*Infinity;\n\t\t\treturn (c > d ? 1 : (c == d ? 0 : -1))*dir;\n\t\t};\n\t},\n\t\"str\":function(dir, key){\n\t\treturn (a,b) => {\n\t\t\tif (!b[key]) return -1;\n\t\t\tif (!a[key]) return 1;\n\n\t\t\tlet c = a[key].toString().toLowerCase();\n\t\t\tlet d = b[key].toString().toLowerCase();\n\t\t\treturn (c > d ? 1 : (c == d ? 0 : -1))*dir; \n\t\t};\n\t}\n};\n\nexport function sortRange(view, range, dir){\n\trange = range || view._table.getSelectArea();\n\n\tif (range){\n\t\trange = rangeObj(range, view);\n\t\tlet fullrange = range;\n\t\tif (range.start.row === range.end.row)\n\t\t\tfullrange = expandSelection(range, view);\n\n\t\tconst key = view.getCellValue(range.start.row, range.start.column, false);\n\t\tconst type = isNaN(parseFloat(key)) ? \"str\" : \"int\";\n\n\t\tdir = (!dir || dir === \"asc\") ? 1 : -1;\n\t\tgroup.set(()=>\n\t\t\tsort(fullrange, range.start.column, type, dir, view)\n\t\t);\n\t}\n}\n\nfunction sort(range, by, type, dir, view){\n\tfor (let column = range.start.column; column <= range.end.column; column++){\n\t\t//get all selected column values\n\t\tconst values = [];\n\t\tfor (let row = range.start.row; row <= range.end.row; row++) {\n\t\t\tif(view.isRowVisible(row)){\n\t\t\t\tconst value = view.getCellValue(row, column, false);\n\t\t\t\tconst style = view.getStyle(row, column);\n\n\t\t\t\tlet math = view.getCellValue(row, column);\n\t\t\t\tmath = math && math[0] == \"=\" ? math : null;\n\n\t\t\t\tconst conditions = view.conditions.get(row,column);\n\t\t\t\tif(conditions)\n\t\t\t\t\t_changeCondition(\"remove\", row, column, conditions, null, view);\n\n\t\t\t\tvalues.push({\n\t\t\t\t\tvalue,\n\t\t\t\t\tstyle,\n\t\t\t\t\tmath,\n\t\t\t\t\trow,\n\t\t\t\t\tconditions\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t//sort them\n\t\tvalues.sort(sorters[type](dir, \"value\"));\n\n\t\t//set new values to original column\n\t\tfor (let row = range.start.row; row <= range.end.row; row++) {\n\t\t\tif(view.isRowVisible(row)){\n\t\t\t\tconst element = values.shift();\n\n\t\t\t\tview.setStyle(row, column, (element.style || null));\n\t\t\t\tif(element.conditions)\n\t\t\t\t\t_changeCondition(\"update\", row, column, null, element.conditions, view);\n\n\t\t\t\tif (!element.math) view.setCellValue(row, column, element.value);\n\t\t\t\telse {\n\t\t\t\t\tconst newMath = view._mData.getStore().transposeMath(element.math, row - element.row, 0);\n\t\t\t\t\tview.setCellValue(row, column, newMath);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tview.refresh();\n}","import {split} from \"./parser\";\n\nfunction updateSheetNames(view, formula, oldName, newName){\n\tif(formula.indexOf(\"!\") == -1)\n\t\treturn formula;\n\n\tconst stack = split(formula, view, true);\n\tfor(let i = 0; i < stack.length; i++){\n\t\tif(webix.isArray(stack[i])){\n\t\t\tconst thisSheet = stack[i][0] === oldName;\n\t\t\tlet sheet = thisSheet ? newName : stack[i][0];\n\t\t\tif(sheet.indexOf(\" \") != -1)\n\t\t\t\tsheet = `'${sheet}'`;\n\t\t\tstack[i] = `${sheet}!${stack[i][1]}`;\n\t\t}\n\t}\n\treturn stack.join(\"\");\n}\n\nfunction isFormula(val){\n\treturn typeof val == \"string\" && val[0] == \"=\";\n}\n\nexport function init(view){\n\tview.attachEvent(\"onSheetRename\", (name, newName) => {\n\t\tview._sheets.forEach(sheet => {\n\t\t\tconst activeSheet = sheet.name == view.getActiveSheet();\n\t\t\tif(activeSheet)\n\t\t\t\tsheet.content = view.serialize(); //actual data\n\n\t\t\tif(sheet.content.editors){\n\t\t\t\tsheet.content.editors.forEach(value => {\n\t\t\t\t\tconst options = value[2].options;\n\t\t\t\t\tif(options){\n\t\t\t\t\t\tif(typeof options == \"string\")\n\t\t\t\t\t\t\tvalue[2].options = updateSheetNames(view, options, name, newName);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tfor (let i = 0; i < options.length; i++){\n\t\t\t\t\t\t\t\tconst option = options[i];\n\t\t\t\t\t\t\t\tif(typeof option == \"string\"){\n\t\t\t\t\t\t\t\t\tif(isFormula(option))\n\t\t\t\t\t\t\t\t\t\toptions[i] = updateSheetNames(view, option, name, newName);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if(isFormula(option.id))\n\t\t\t\t\t\t\t\t\toption.id = updateSheetNames(view, option.id, name, newName);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif(sheet.content.conditions){\n\t\t\t\tsheet.content.conditions.forEach(value => {\n\t\t\t\t\tif(isFormula(value[3]))\n\t\t\t\t\t\tvalue[3] = updateSheetNames(view, value[3], name, newName);\n\t\t\t\t});\n\t\t\t\tif(activeSheet){\n\t\t\t\t\tview.conditions.clear();\n\t\t\t\t\tview.conditions.parse( sheet.content.conditions );\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}","export function init(view) {\n\tview.attachEvent(\"onUndo\", (action, row, column, value) => {\n\t\tif (action == \"gridlines-hide\"){\n\t\t\thideGridlines(view, value);\n\t\t}\n\t});\n}\n\nexport function hideGridlines(view, state = true){\n\tvar grid = view.$$(\"cells\");\n\tvar borderless = grid.$view.className.indexOf(\"webix_borderless\") !=-1;\n\tif (state === \"toggle\")\n\t\tstate = !borderless;\n\n\tif(!borderless && state){\n\t\twebix.html.addCss( grid.$view, \"webix_borderless\", true);\n\t\tview.callEvent(\"onCommand\", [{id:\"toolbar-update\", name:\"hide-gridlines\", value:true}]);\n\t\tview.callEvent(\"onAction\", [\"gridlines-hide\", {newValue:true, value: false}]);\n\t}\n\telse if(borderless && !state){\n\t\twebix.html.removeCss( grid.$view, \"webix_borderless\");\n\t\tview.callEvent(\"onCommand\", [{id:\"toolbar-update\", name:\"hide-gridlines\", value:false}]);\n\t\tview.callEvent(\"onAction\", [\"gridlines-hide\", {newValue:false, value: true}]);\n\t}\n}\n\nexport function serialize(view, data){\n\tdata.table.gridlines = view.$$(\"cells\").$view.className.indexOf(\"webix_borderless\") !=-1?0:1;\n}\n\nexport function load(view, data){\n\tvar mode = false;\n\tif(!webix.isUndefined(data.table) && !webix.isUndefined(data.table.gridlines))\n\t\tmode = !data.table.gridlines;\n\thideGridlines(view, mode);\n}","export function init(view) {\n\tview.attachEvent(\"onUndo\", (action, row, column, value) => {\n\t\tif (action == \"header-hide\"){\n\t\t\thideHeaders(view, value);\n\t\t}\n\t});\n}\n\nexport function hideHeaders(view, state){\n\tconst grid = view.$$(\"cells\");\n\tconst old = !grid.config.header;\n\n\tif (state == \"toggle\")\n\t\tstate = grid.config.header;\n\n\tif(state != old){\n\t\tgrid.config.header = !state;\n\t\tview.callEvent(\"onCommand\", [{id:\"toolbar-update\", name:\"hide-headers\", value:state}]);\n\t\tview.callEvent(\"onAction\", [\"header-hide\", {newValue:state, value:old}]);\n\t}\n\n\tconst firstVisible = grid.isColumnVisible(\"rowId\");\n\tif((firstVisible && state) || (!firstVisible && !state))\n\t\tgrid.hideColumn(\"rowId\", {}, true, state);\n\n\tgrid.refreshColumns();\n}\n\nexport function serialize(view, data){\n\tdata.table.headers = view.$$(\"cells\").config.header ? 1 : 0;\n}\n\nexport function load(view, data){\n\tlet mode;\n\tif(data.table && !webix.isUndefined(data.table.headers))\n\t\tmode = !data.table.headers;\n\thideHeaders(view, mode);\n}","import group from \"./undo_group\";\nimport {eachRange} from \"../helpers/column_names\";\n\nexport function init(view){\n\tview.comments = {\n\t\tget: function(row, column){\n\t\t\treturn getComment(view, row, column);\n\t\t},\n\t\tadd: function(row, column, comment){\n\t\t\tcommentCell(view, row, column, comment);\n\t\t},\n\t\tremove: function(row, column){\n\t\t\tremoveComment(view, row, column);\n\t\t},\n\t\t_activeComment: {},\n\t\t_pull:{}\n\t};\n\n\tview.attachEvent(\"onReset\", () => reset(view));\n\tview.attachEvent(\"onUndo\", (type, row, column, value) => {\n\t\tif (type === \"comment\")\n\t\t\t_undoComment(view, row, column, value);\n\t});\n\n\tview.attachEvent(\"onAction\", (action, p)=> {\n\t\tif(action == \"before-grid-change\")\n\t\t\tupdatePosition(view, p.name,p.inc,p.data, p.start);\n\t});\n}\n\nfunction _undoComment(view, row, column, value){\n\tif(getComment(view, row, column))\n\t\tremoveComment(view, row, column, true);\n\tif(value)\n\t\tcommentCell(view, row, column, value, true);\n}\n\nfunction reset(view){\n\tview.comments._pull = {};\n}\n\nfunction removeComment(view, row, column, silent){\n\tif(getComment(view, row, column)){\n\t\tif (!silent)\n\t\t\tview.callEvent(\"onAction\", [\"comment\", {row, column, newValue: null, value: view.comments._pull[row][column]}]);\n\t\tdelete view.comments._pull[row][column];\n\t}\n\tview.$$(\"cells\").updateItem(row,column);\n}\n\nexport function removeCommentsRange(view, range){\n\tgroup.set(function(){\n\t\teachRange(range, view, function(view, cell){\n\t\t\tif(getComment(view, cell.row, cell.column))\n\t\t\t\tremoveComment(view, cell.row, cell.column);\n\t\t});\n\t\tview.$$(\"cells\").refresh();\n\t});\n}\n\nfunction commentCell(view, row, column, comment, silent){\n\tvar oldValue = getComment(view, row, column) ? view.comments._pull[row][column] : null;\n\tvar table = view.$$(\"cells\");\n\n\tif(typeof comment == \"string\")\n\t\tcomment = comment.trim() ? comment : \"\";\n\tview.comments._pull[row] = view.comments._pull[row] ? view.comments._pull[row] : {};\n\tview.comments._pull[row][column] = comment;\n\n\ttable.addCellCss(row, column, \"ssheet_commented_cell\");\n\n\tif (!silent)\n\t\tview.callEvent(\"onAction\", [\"comment\", {row, column, newValue:comment, value:oldValue}]);\n}\n\nexport function serialize(view,data){\n\tvar row, column,\n\t\tcomments = [];\n\tfor(row in view.comments._pull){\n\t\tfor(column in view.comments._pull[row])\n\t\t\tif(view.comments._pull[row][column])\n\t\t\t\tcomments.push([row, column, view.comments._pull[row][column]]);\n\t}\n\tdata.comments = comments;\n}\n\nexport function load(view,data){\n\tvar i,\n\t\tcomments = data.comments;\n\n\tif(comments)\n\t\tfor(i = 0; i < comments.length; i++)\n\t\t\tcommentCell(view, comments[i][0], comments[i][1], comments[i][2], true);\n}\n\nfunction updatePosition(view, name, inc, data, start){\n\tlet comments = data.comments,\n\t\ti = comments.length;\n\n\tif(inc){\n\t\twhile(i--){\n\t\t\tlet [row,column] = comments[i];\n\t\t\tif(row && name == \"row\" && row>= start.row || column && name == \"column\" && column >= start.column){\n\t\t\t\tif (name == \"row\"){\n\t\t\t\t\tif (row < start.row - inc)\t//delete comment if row was deleted\n\t\t\t\t\t\tcomments.splice(i,1);\n\t\t\t\t\telse\t\t\t\t\t\t//update mark position if upper row was deleted\n\t\t\t\t\t\tcomments[i][0] = row*1 + inc;\n\t\t\t\t} else if (name == \"column\"){\n\t\t\t\t\tif (column < start.column - inc){\n\t\t\t\t\t\tcomments.splice(i, 1);\n\t\t\t\t\t} else \n\t\t\t\t\t\tcomments[i][1] = column*1 + inc;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction getComment(view, row, column){\n\treturn view.comments._pull[row] && view.comments._pull[row][column] ? view.comments._pull[row][column] : \"\";\n}","export function init(view) {\n\tview.attachEvent(\"onUndo\", (action, row, column, value) => {\n\t\tif (action == \"show-formulas\"){\n\t\t\tshowFormulas(view, value);\n\t\t}\n\t});\n}\n\nexport function showFormulas(view, value){\n\tconst grid = view.$$(\"cells\");\n\tconst old = grid.config.showFormulas;\n\n\tif(value == \"toggle\")\n\t\tvalue = !old;\n\n\tif(value != old){\n\t\tgrid.config.showFormulas = value;\n\n\t\tview.callEvent(\"onCommand\", [{id:\"toolbar-update\", name:\"show-formulas\", value}]);\n\t\tview.callEvent(\"onAction\", [\"show-formulas\", {newValue: value, value: old}]);\n\n\t\tgrid.refresh();\n\t}\n}\n\nexport function serialize(view, data){\n\tdata.table.showFormulas = view.$$(\"cells\").config.showFormulas ? 1 : 0;\n}\n\nexport function load(view, data){\n\tlet mode = false;\n\tif(data.table && data.table.showFormulas)\n\t\tmode = data.table.showFormulas;\n\tshowFormulas(view, mode);\n}","import * as m1 from \"./hide_gridlines\";\nimport * as m2 from \"./hide_headers\";\nimport * as m3 from \"./lock_cell\";\nimport * as m4 from \"./dropdown\";\nimport * as m5 from \"./filter\";\nimport * as m6 from \"./hide_row_col\";\nimport * as m7 from \"./comments\";\nimport * as m8 from \"./show_formulas\";\n\nexport function init(view){\n\tvar modules = [m1,m2,m3,m4,m5,m6,m7,m8];\n\tview.attachEvent(\"onDataSerialize\", function(data){\n\t\tfor (var i = 0; i < modules.length; i++){\n\t\t\tif(modules[i].serialize)\n\t\t\t\tmodules[i].serialize(view,data);\n\t\t}\n\n\t});\n\tview.attachEvent(\"onDataParse\", function(data){\n\t\tfor (var i = 0; i < modules.length; i++){\n\t\t\tif(modules[i].load)\n\t\t\t\tmodules[i].load(view,data);\n\t\t}\n\t});\n}","const types = [\".xls\",\".xlt\",\".xla\",\".xlsx\",\".xlsm\",\".xltx\",\".xltm\",\".xlam\",\".xlsb\"];\n\nexport function init(view){\n\tlet uploader;\n\tif (window.XMLHttpRequest && (new XMLHttpRequest()).upload){\n\t\tuploader = webix.ui({\n\t\t\tview:\"uploader\",\n\t\t\tapiOnly:true,\n\t\t\taccept: types.join()\n\t\t});\n\n\t\tuploader.attachEvent(\"onBeforeFileAdd\",webix.bind(function(upload){\n\t\t\tif(types.indexOf(\".\"+upload.type.toLowerCase())>-1){\n\t\t\t\tview.reset();\n\n\t\t\t\tif(!upload.file.options)\n\t\t\t\t\tupload.file.options = {};\n\t\t\t\twebix.extend(upload.file.options, {cellDates: false});\n\n\t\t\t\tview.parse(upload.file, \"excel\");\n\t\t\t}\n\t\t\treturn false;\n\t\t},this));\n\n\t\tview._destroy_with_me.push(uploader);\n\t}\n\n\tview.attachEvent(\"onCommand\", (obj) => {\n\t\tif (obj.id === \"excel-import\")\n\t\t\tstartImport(view, uploader);\n\t});\n}\n\nfunction startImport(view, uploader){\n\tif (!uploader)\n\t\tview.alert(webix.i18n.spreadsheet.labels[\"import-not-support\"]);\n\telse\n\t\twebix.delay(() => uploader.fileDialog());\n}","import { style_names } from \"../operations/styles\";\nimport { getType } from \"../operations/types\";\nimport { defaultStyles} from \"../toolbar/defaults\";\nimport { getFormatSource } from \"../operations/formats\";\nimport { getDimension } from \"../helpers/array\";\nimport { getConditionCss } from \"../operations/conditional_formats\";\nimport { getRenderedValue } from \"../table\";\nimport {getSheet, isVisible} from \"../sheets\";\n\nexport function init(view){\n\tconst table = view._table;\n\tview.$exportView = function(options){\n\t\tconst pdf = options.export_mode == \"pdf\";\n\t\tconst excel = options.export_mode == \"excel\";\n\t\tconst defaultOptions = {\n\t\t\tstubCells: true,\n\t\t\theader: false,\n\t\t\tfooter:false,\n\t\t\theights:true,\n\t\t\trawValues: !pdf,\n\t\t\tfilterHTML:true,\n\t\t\tspans: true,\n\t\t\tstyles:true,\n\t\t\tmath: !pdf,\n\t\t\thidden: excel,\n\t\t\txCorrection: table.config.header || options.hidden ? 1 : 0,\n\t\t\tignore:{rowId:true},\n\t\t\tconditions:true\n\t\t};\n\n\t\twebix.extend(options, defaultOptions);\n\n\t\tif(excel || pdf)\n\t\t\treturn _exportView(view, options);\n\t\telse\n\t\t\treturn table;\n\t};\n\n\ttable.$getExportValue = function(row, column, options){\n\t\tlet value = view.getCellValue(row, column, options.math);\n\t\tconst mode = options.export_mode;\n\t\tconst math = options.math && value[0] == \"=\" && value.length > 1;\n\n\t\tif((mode == \"pdf\" || mode == \"csv\") && !math && !options.rawValues)\n\t\t\tvalue = getRenderedValue(view, row, column);\n\t\telse if(mode == \"excel\" && math){\n\t\t\tif(/^=(image|sparkline)\\(/i.test(value))\n\t\t\t\tvalue = \"\";\n\t\t\telse\n\t\t\t\tvalue = {\n\t\t\t\t\tvalue: /^=hyperlink\\(/i.test(value) ? value.split(\"\\\"\")[3] : view.getCellValue(row, column, false),\n\t\t\t\t\tformula: value\n\t\t\t\t};\n\t\t}\n\n\t\treturn value;\n\t};\n}\n\nfunction _exportView(view, options){\n\tconst excel = options.export_mode == \"excel\";\n\n\tif(options.sheets === true) \n\t\toptions.sheets = view._sheets.map(function(s){ return s.name;});\n\telse if(!options.sheets || !options.sheets.length)\n\t\toptions.sheets = [view._activeSheet];\n\telse if(typeof options.sheets == \"string\")\n\t\toptions.sheets = [options.sheets];\n\n\tif(!excel)\n\t\toptions.sheets = options.sheets.filter(sheet => isVisible(view, sheet));\n\telse if(view._sheets.length != options.sheets.length){\n\t\tfor(let i = 0; i < view._sheets.length; i++){\n\t\t\t//add veryHidden sheets in any case\n\t\t\tconst sheet = view._sheets[i];\n\t\t\tif(sheet.state == \"veryHidden\" && options.sheets.indexOf(sheet.name) == -1)\n\t\t\t\toptions.sheets.push(sheet.name);\n\t\t}\n\t}\n\n\toptions.dataOnly = true;\n\n\tlet data = [];\n\tlet active = view._activeSheet;\n\n\tfor(let i = 0; itrue);\n\t\t\t\tsheetOptions.filter = obj =>{\n\t\t\t\t\treturn obj.id <= rows && filter.apply(this, arguments);\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tconst sheetData = webix[excel ? \"toExcel\" : \"toPDF\"](view._table, sheetOptions);\n\n\t\tif(excel)\n\t\t\tsheetData[0].state = getSheet(view, id).state || \"visible\";\n\n\t\tif(pdfTable && sheetData[0].scheme.length == 0)\n\t\t\tcontinue;\n\n\t\tif((excel || pdfTable) && sheetOptions.styles){\n\t\t\tconst styles = sheetData[0].styles = _getStyles(view, sheetOptions, excel, rows, cols);\n\n\t\t\tif(pdfTable)\n\t\t\t\t_updatePdfData(styles, sheetData, sheetOptions, view, serialized);\n\t\t}\n\n\t\tdata = data.concat(sheetData);\n\n\t\tif(excel){\n\t\t\tdata[i].ranges = [];\n\n\t\t\tview.ranges.serialize(id).forEach(range => {\n\t\t\t\tconst ref = range[1].split(\"!\");\n\t\t\t\tdata[i].ranges.push({\n\t\t\t\t\tSheet: range[2] ? null : i,\n\t\t\t\t\tName: range[0],\n\t\t\t\t\tRef: ref[0]+\"!\"+ref[1].replace(/[0-9]+|[A-Z]+/gi, (match)=>`$${match}`)\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t\telse{\n\t\t\tif(options.autowidth)\n\t\t\t\tgetAutowidth(sheetOptions, options);\n\t\t}\n\t}\n\n\tview.showSheet(active);\n\tdelete options.dataOnly;\n\treturn data;\n}\n\nfunction _updatePdfData(styles, sheetData, sheetOptions, view, serialized){\n\tconst header = sheetOptions.header ? 1 : 0;\n\n\tif (sheetOptions.spans) {\n\t\tconst spans = serialized.spans.sort((a,b) => a[1]b[1]?-1:0));\n\t\tfor (let i = 0; i < spans.length; i++) {\n\t\t\tif (spans[i][2] > 1) {\n\t\t\t\tlet row = spans[i][0] - 1 + header, // zero-based row position\n\t\t\t\t\tcol = spans[i][1] - 1, // zero-based col position\n\t\t\t\t\tcols = spans[i][2];\n\t\t\t\tif (styles[row] && styles[row][col]) {\n\t\t\t\t\tstyles[row][col].colspan = cols;\n\t\t\t\t\t// if colspan, then remove merged cells (else PDFJS will shift columns)\n\t\t\t\t\tconst rowData = sheetData[0].exportData[row - header];\n\t\t\t\t\tif (rowData){\n\t\t\t\t\t\t// remove merged cell values\n\t\t\t\t\t\trowData.splice(col + 1, cols - 1);\n\t\t\t\t\t}\n\t\t\t\t\tlet style = Object.values(styles[row]);\n\t\t\t\t\tstyle.splice(col + 1, cols - 1); // remove merged cell styles\n\t\t\t\t\tstyles[row] = style;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tconst data = sheetData[0].exportData;\n\tfor(let r = 0; r < data.length; r++){\n\t\tfor (let c = 0; c < data[r].length; c++) {\n\t\t\tlet height = view.$$(\"cells\").config.rowHeight;\n\n\t\t\tif(sheetOptions.heights && serialized.sizes.length){\n\t\t\t\tfor(let s = 0; s < serialized.sizes.length; s++){\n\t\t\t\t\tconst rowSize = serialized.sizes[s][0];\n\t\t\t\t\tif(rowSize && rowSize == r+1){\n\t\t\t\t\t\theight = serialized.sizes[s][2];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst cellStyle = styles[r + header][c];\n\t\t\tconst align = cellStyle.vertAlign;\n\t\t\tconst pad = height*0.75 - cellStyle.fontSize; // available px for padding in top & bottom\n\t\t\tcellStyle.paddingTop = (align == \"top\" ? 0 : (align == \"bottom\" ? pad : pad / 2));\n\t\t\tcellStyle.paddingBottom = (align == \"bottom\" ? 0 : (align == \"top\" ? pad : pad / 2));\n\t\t}\n\t}\n}\n\nfunction getAutowidth(view, options){\n\tconst prop = options.orientation && options.orientation == \"landscape\" ? \"height\" : \"width\";\n\tlet width;\n\n\tif(view.$width)\n\t\twidth = view.$width;\n\telse //'view' can be local settings and we need to compare them with common ones\n\t\twidth = view[prop];\n\n\toptions[prop] = Math.max(options[prop] || 0, width || 0);\n}\n\nfunction _safeColor(str){\n\tstr = str.substring(1);\n\tif(str.length === 3) str = str+str;\n\treturn str;\n}\n\nfunction _getDefaults(options){\n\tlet d = defaultStyles;\n\tif(options.export_mode == \"excel\")\n\t\treturn {\n\t\t\tfont:{\n\t\t\t\tsz:d[\"font-size\"]*0.75,\n\t\t\t\tname:d[\"font-family\"].replace(/'|,.*$/g, \"\"),\n\t\t\t\t//we do not export default color, but it is the right place to do it\n\t\t\t},\n\t\t\talignment:{\n\t\t\t\thorizontal:d[\"text-align\"],\n\t\t\t\tvertical:d[\"vertical-align\"]==\"middle\"?\"center\":d[\"vertical-align\"],\n\t\t\t\twrapText:d[\"white-space\"]!=\"nowrap\"\n\t\t\t}\n\t\t};\n\telse\n\t\treturn {\n\t\t\tfontSize: d[\"font-size\"]*0.75,\n\t\t\t//we do not export default color, but it is the right place to do it\n\t\t\ttextAlign: d[\"text-align\"],\n\t\t\twhiteSpace: (d[\"white-space\"]!=\"nowrap\")\n\t\t};\n}\n\nfunction _getStyles(view, options, excel, rows, cols){\n\tview.compactStyles();\n\n\tlet result = [];\n\tconst cached = {};\n\tconst cachedConditions = {};\n\tconst defaults = _getDefaults(options);\n\n\tif(excel && options.docHeader) result = result.concat([{0:_getDocStyle(options.docHeader.css, defaults)}, {}]);\n\tif(options.header) result.push({});\n\n\tconst delta = result.length;\n\n\tconst grid = view.$$(\"cells\");\n\n\tlet rIndex = delta;\n\tgrid.eachRow(row =>{\n\t\tif(row > rows)\n\t\t\treturn;\n\n\t\tlet cIndex = 0;\n\t\tgrid.eachColumn(col => {\n\t\t\tif(cIndex > cols)\n\t\t\t\treturn;\n\n\t\t\tif(cIndex >= options.xCorrection){\n\t\t\t\tconst css = view.getStyle(row, col);\n\t\t\t\tconst index = cIndex - options.xCorrection;\n\n\t\t\t\tresult[rIndex] = result[rIndex] || {};\n\n\t\t\t\tlet styles;\n\t\t\t\tif(css){\n\t\t\t\t\tif(cached[css.id])\n\t\t\t\t\t\tstyles = webix.copy(cached[css.id]);\n\t\t\t\t\telse{\n\t\t\t\t\t\tstyles = _getCellStyle(css.text, excel, options);\n\n\t\t\t\t\t\tfor(let name in defaults){\n\t\t\t\t\t\t\tif(excel)\n\t\t\t\t\t\t\t\twebix.extend(styles[name], defaults[name]);\n\t\t\t\t\t\t\telse if (!styles[name])\n\t\t\t\t\t\t\t\tstyles[name] = defaults[name];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcached[css.id] = webix.copy(styles);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tstyles = webix.copy(defaults);\n\n\t\t\t\tif(options.conditions){\n\t\t\t\t\t//not real excel condition, save only bg and color (sheetJS doesn't support)\n\t\t\t\t\tconst condition = _getCellConditions(view, row, col, cachedConditions);\n\t\t\t\t\tif(condition)\n\t\t\t\t\t\t_updateStyleCondition(styles, condition, excel);\n\t\t\t\t}\n\n\t\t\t\tresult[rIndex][index] = styles;\n\n\t\t\t\tlet type;\n\t\t\t\tif(options.math){\n\t\t\t\t\tconst math = view.getCellValue(row, col);\n\t\t\t\t\tif(typeof math == \"string\" && math[0] == \"=\" && math.length > 1){\n\t\t\t\t\t\tconst value = view.getCellValue(row, col, false);\n\t\t\t\t\t\tif(isNaN(value))\n\t\t\t\t\t\t\ttype = \"string\";\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tresult[rIndex][index].type = type || getType(view, row, col);\n\t\t\t}\n\t\t\tcIndex++;\n\t\t}, options.hidden);\n\t\trIndex++;\n\t}, options.hidden);\n\n\tif(excel && options.docFooter) result = result.concat([{},{0:_getDocStyle(options.docFooter.css, defaults)}]);\n\n\treturn result;\n}\n\nfunction _getCellStyle(styles, excel, options){\n\tlet str = styles.split(\";\");\n\tlet stl = {};\n\tif(excel)\n\t\tstl = { font:{}, alignment:{}, border:{}};\n\n\tfor(let s = 0; s webix.color.rgbToHex(val));\n\tif(excel){\n\t\tstl.fill = {fgColor:{rgb:bg}};\n\t\tstl.font.color = {rgb:color};\n\t}\n\telse{\n\t\tstl.backgroundColor = bg;\n\t\tstl.color = color;\n\t}\n}\n\nfunction _getExcelCellStyle(stl, str, s){\n\tswitch (style_names[s]){\n\t\tcase \"color\":\n\t\t\tstl.font.color = {rgb:_safeColor(str[s])};\n\t\t\tbreak;\n\t\tcase \"background\":{\n\t\t\tconst fill = _safeColor(str[s]);\n\t\t\tif(fill && fill.toLowerCase() !== \"ffffff\")\n\t\t\t\tstl.fill = { fgColor:{ rgb:fill}};\n\t\t\tbreak;\n\t\t}\t\n\t\tcase \"text-align\":\n\t\t\tstl.alignment.horizontal = str[s];\n\t\t\tbreak;\n\t\tcase \"font-family\":\n\t\t\tstl.font.name = str[s].replace(/'|,.*$/g, \"\"); // cut off fallback font\n\t\t\tbreak;\n\t\tcase \"font-size\":\n\t\t\tstl.font.sz = str[s].replace(\"px\", \"\")*0.75; //px to pt conversion\n\t\t\tbreak;\n\t\tcase \"font-style\":\n\t\t\tstl.font.italic = str[s] == \"italic\";\n\t\t\tbreak;\n\t\tcase \"underline\":\n\t\t\tstl.font.underline = str[s] == \"underline\";\n\t\t\tbreak;\n\t\tcase \"strike\":\n\t\t\tstl.font.strike = str[s] == \"strike\";\n\t\t\tbreak;\n\t\tcase \"font-weight\":\n\t\t\tstl.font.bold = str[s] == \"bold\";\n\t\t\tbreak;\n\t\tcase \"vertical-align\":\n\t\t\tstl.alignment.vertical = str[s] == \"middle\"?\"center\":str[s];\n\t\t\tbreak;\n\t\tcase \"wrap\":\n\t\t\tstl.alignment.wrapText = str[s] == \"wrap\";\n\t\t\tbreak;\n\t\tcase \"borders\":\n\t\t\tbreak;\n\t\tcase \"format\":\n\t\t\tstl.format = getFormatSource(str[s], true) || \"\";\n\t\t\tbreak;\n\t\tcase \"border-right\":\n\t\tcase \"border-bottom\":\n\t\tcase \"border-left\":\n\t\tcase \"border-top\":\n\t\t\tstl.border[ style_names[s].split(\"-\")[1] ] = getBorderStyles(str[s], true);\n\t\t\tbreak;\n\t\tcase \"indent\":\n\t\t\tstl.alignment.indent = str[s];\n\t\t\tbreak;\n\t}\n}\n\nfunction _getPdfCellStyle(stl, str, s, table){\n\tswitch (style_names[s]) {\n\t\tcase \"color\":\n\t\t\tstl.color = _safeColor(str[s]);\n\t\t\tbreak;\n\t\tcase \"background\":\n\t\t\tstl.backgroundColor = _safeColor(str[s]);\n\t\t\tbreak;\n\t\tcase \"text-align\":\n\t\t\tstl.textAlign = str[s];\n\t\t\tbreak;\n\t\tcase \"font-family\":\n\t\t\tbreak;\n\t\tcase \"font-size\":\n\t\t\tstl.fontSize = str[s].replace(\"px\", \"\")*0.75;\n\t\t\tbreak;\n\t\tcase \"font-style\":\n\t\t\tstl.italic = str[s] == \"italic\";\n\t\t\tbreak;\n\t\tcase \"underline\":\n\t\t\tstl.underline = str[s] == \"underline\";\n\t\t\tbreak;\n\t\tcase \"strike\":\n\t\t\tstl.strikethrough = str[s] == \"strike\";\n\t\t\tbreak;\n\t\tcase \"font-weight\":\n\t\t\tstl.bold = str[s] == \"bold\";\n\t\t\tbreak;\n\t\tcase \"vertical-align\":\n\t\t\tstl.vertAlign = str[s]; // not supported in PDFJS, so simulate with lineHeight and paddingTop\n\t\t\tbreak;\n\t\tcase \"wrap\":\n\t\t\tstl.whiteSpace = (str[s] != \"nowrap\");\n\t\t\tbreak;\n\t\tcase \"borders\":\n\t\t\tbreak;\n\t\tcase \"format\":\n\t\t\tbreak;\n\t\tcase \"border-right\":\n\t\tcase \"border-bottom\":\n\t\tcase \"border-left\":\n\t\tcase \"border-top\":{\n\t\t\tconst pos = style_names[s].split(\"-\")[1];\n\t\t\tstl[`border${pos[0].toUpperCase() + pos.substring(1)}Color`] = getBorderStyles(str[s]);\n\t\t\tbreak;\n\t\t}\n\t\tcase \"indent\":\n\t\t\tif(str[s]){\n\t\t\t\tconst name = `padding${ str[2] == \"right\" ? \"Right\" : \"Left\" }`;\n\t\t\t\tconst padding = table && table[name] ? table[name] : 10; // 10 - default padding value\n\t\t\t\tstl[name] = padding + str[s] * 6;\n\t\t\t}\n\t\t\tbreak;\n\t}\n}\n\nfunction getBorderStyles(val, excel){\n\tconst [color, type] = val.split(\",\");\n\n\tif(excel)\n\t\treturn { color:{ rgb:_safeColor(color)}, style:type};\n\telse\n\t\treturn _safeColor(color);\n}\n\nfunction _getDocStyle(css){\n\tif(!css) return {};\n\tconst str = [];\n\tfor(let i =0; i {\n\t\tfor(let i = 0; i < obj.data.length; i++){\n\t\t\tif(obj.data[i][0] === type[0]+1 && obj.data[i][1] === type[1]+1){\n\t\t\t\tobj.data[i][4] = type[2];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction _getHidden(obj){\n\tconst hidden = {\n\t\trow:[],\n\t\tcolumn:[]\n\t};\n\n\tfor(let i = 0; i < obj.hidden.length; i++){\n\t\tconst item = obj.hidden[i];\n\t\tif(item[0] == \"column\")\n\t\t\thidden.column.push(item[1]+1);\n\t\telse\n\t\t\thidden.row.push(item[1]+1);\n\t}\n\n\tobj.table = {hidden};\n}\n\nfunction _getBorderStyles(pos, stl){\n\tpos = pos.replace(\"border-\", \"\");\n\tif(stl.border && stl.border[pos]){\n\t\tconst border = stl.border[pos];\n\t\tif(border.color){\n\t\t\tconst color = _safeColor(border.color.rgb) || \"\";\n\t\t\tconst type = border.style || \"\";\n\t\t\treturn `${color},${type}`;\n\t\t}\n\t}\n\treturn \"\";\n}\n\nfunction _getStyles(obj, fmt){\n\tlet stylescount = 1;\n\tconst styleshash = {}, styles = [], formats = [];\n\n\tfor(let i = 0; i arr[0] == name))\n\t\t\t\t\t\t\tformats.push([name, format]);\n\t\t\t\t\t}\n\t\t\t\t\tstr[s] = name;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"border-right\":\n\t\t\t\tcase \"border-bottom\":\n\t\t\t\tcase \"border-left\":\n\t\t\t\tcase \"border-top\":\n\t\t\t\t\tstr[s] = _getBorderStyles(style_names[s], stl);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"indent\":\n\t\t\t\t\tstr[s] = stl.alignment && stl.alignment.indent ? stl.alignment.indent : \"\";\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tstr = str.join(\";\");\n\t\tcss = styleshash[str] || \"wss\"+stylescount;\n\n\t\tfor(let d = 0; d {\n\t\tswitch (action.id) {\n\t\t\tcase \"clear-value\":\n\t\t\t\tview.clearRange(null,{values: true});\n\t\t\t\tbreak;\n\t\t\tcase \"clear-style\":\n\t\t\t\tview.clearRange(null,{styles: true});\n\t\t\t\tbreak;\n\t\t\tcase \"clear-conditional-formats\":\n\t\t\t\tview.clearRange(null,{conditions: true});\n\t\t\t\tbreak;\n\t\t\tcase \"clear-dropdown-editors\":\n\t\t\t\tview.clearRange(null,{editors: true});\n\t\t\t\tbreak;\n\t\t\tcase \"clear-all\":\n\t\t\t\tgroup.set(function(){\n\t\t\t\t\tview.clearRange(null,null);\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase \"clear-comments\":\n\t\t\t\tview.clearRange(null,{comments: true});\n\t\t\t\tbreak;\n\t\t}\n\t});\n}","import group from \"../operations/undo_group\";\nimport {adjustRow, adjustColumn} from \"../operations/column_operations\";\n\n/* row operations */\n\nexport function insertRow(row){\n\tcallCommand(this, \"add\", \"row\", row);\n}\n\nexport function deleteRow(row){\n\tcallCommand(this, \"del\", \"row\", row);\n}\n\nexport function setRowHeight(row, height){\n\tsetSize(this, \"row\", row, height);\n}\n\n/* col operations */\n\nexport function insertColumn(column){\n\tcallCommand(this, \"add\", \"column\", column);\n}\n\nexport function deleteColumn(column){\n\tcallCommand(this, \"del\", \"column\", column);\n}\n\nexport function setColumnWidth(column, width){\n\tsetSize(this, \"column\", column, width);\n}\n\n/* helpers */\n\nfunction getCells(view, id, group){\n\tif(!id){\n\t\tlet area = view.$$(\"cells\").getSelectArea();\n\t\tif(area)\n\t\t\tid = [area.start[group],area.end[group]];\n\t}\n\telse if(!webix.isArray(id)){\n\t\tid = [id,id];\n\t}\n\treturn id;\n}\n\nfunction callCommand(view, name, group, id){\n\tlet start = {}, end = {};\n\tid = getCells(view, id, group);\n\tif(!id)\n\t\treturn;\n\tstart[group] = id[0];\n\tend[group] = id[1];\n\tview.callEvent(\"onCommand\", [{id:name, group:group}, start, end]);\n}\n\nfunction setSize(view, type, id, size){\n\tid = getCells(view, id, type);\n\tif(!id)\n\t\treturn;\n\tgroup.set(()=>{\n\t\tfor (let i = id[0]; i <= id[1]; i++){\n\t\t\tif(size != \"auto\")\n\t\t\t\tview.$$(\"cells\")[type == \"row\" ? \"setRowHeight\" : \"setColumnWidth\"](i, size);\n\t\t\telse\n\t\t\t\t(type == \"row\" ? adjustRow : adjustColumn)(i, view);\n\t\t}\n\t});\n}","import * as lock from \"../operations/lock_cell\";\n\nexport function lockCell(row, column, state){\n\tlock.lockCell(this, row, column, state);\n}\n\nexport function isCellLocked(row, column){\n\treturn lock.isCellLocked(this, row, column);\n}","import group from \"../operations/undo_group\";\n\nexport function freezeColumns(column){\n\tconst grid = this.$$(\"cells\");\n\n\tif( webix.isUndefined(column) ){\n\t\tconst sel = grid.getSelectArea();\n\t\tcolumn = sel ? sel.end.column : 0;\n\t}\n\n\tconst base = grid.config.columns[0].id == \"rowId\" ? 1 : 0;\n\tlet index = base;\n\tlet removeFreeze = false;\n\tif (column && column != this._frozenColumns){\n\t\tfor (let i = column; i > 0; i--) {\n\t\t\tindex = grid.getColumnIndex(i)+1;\n\t\t\tif(index)\n\t\t\t\tbreak;\n\t\t}\n\t\tif (!index) index = base;\n\t}\n\telse removeFreeze = true;\n\n\tgroup.set(function(){\n\t\tcheckSpans(this, \"column\", column);\n\t\tgrid.unselect();\n\t\tgrid.define(\"leftSplit\", index);\n\t\tgrid.refreshColumns();\n\n\t\tthis.callEvent(\"onAction\", [ \"freeze-column\", { value: (this._frozenColumns || 0), newValue: column}]);\n\t\tthis._frozenColumns = (removeFreeze || !column) ? 0 : column;\n\t},this);\n}\n\nexport function freezeRows(row){\n\tconst grid = this.$$(\"cells\");\n\n\tif( webix.isUndefined(row) ){\n\t\tconst sel = grid.getSelectArea();\n\t\trow = sel ? sel.end.row : 0;\n\t}\n\n\tlet index = 0;\n\tlet removeFreeze = false;\n\tif (row && row != this._frozenRows){\n\t\tfor (let i = row; i > 0; i--) {\n\t\t\tindex = grid.getIndexById(i)+1;\n\t\t\tif(index)\n\t\t\t\tbreak;\n\t\t}\n\t}\n\telse removeFreeze = true;\n\n\tgroup.set(function(){\n\t\tcheckSpans(this, \"row\", row);\n\t\tgrid.unselect();\n\t\tgrid.define(\"topSplit\", index);\n\t\tgrid.refreshColumns();\n\n\t\tthis.callEvent(\"onAction\", [ \"freeze-row\", { value: this._frozenRows, newValue: row}]);\n\t\tthis._frozenRows = (removeFreeze || !row) ? 0 : row;\n\t},this);\n}\n\nfunction checkSpans(view, type, num){\n\tconst grid = view.$$(\"cells\");\n\tconst spans = grid.getSpan();\n\tlet changed;\n\n\tfor(let row in spans){\n\t\tif(type == \"row\" && row > num)\n\t\t\tcontinue;\n\n\t\tfor (let col in spans[row]){\n\t\t\tif(type == \"column\" && col > num)\n\t\t\t\tcontinue;\n\n\t\t\tconst span = spans[row][col];\n\t\t\tconst spanSize = type == \"row\" ? (row*1) + span[1] - 1 : (col*1) + span[0] - 1;\n\n\t\t\tif(spanSize > num){\n\t\t\t\tchanged = true;\n\t\t\t\tchangeSpan(\n\t\t\t\t\tview,\n\t\t\t\t\t[row, col],\n\t\t\t\t\ttype == \"row\" ? span[0] : span[0] - (spanSize - num),\n\t\t\t\t\ttype == \"row\" ? span[1] - (spanSize - num) : span[1]\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif(changed)\n\t\tview.refresh();\n}\n\nfunction changeSpan(view, span, x, y){\n\tview.splitCell(span[0], span[1], true);\n\tview.combineCells(\n\t\t{\n\t\t\tcell:{\n\t\t\t\trow:span[0],\n\t\t\t\tcolumn:span[1]\n\t\t\t},\n\t\t\tx,\n\t\t\ty,\n\t\t},\n\t\ttrue\n\t);\n}","import * as gridlines from \"../operations/hide_gridlines\";\n\nexport function hideGridlines(state){\n\tgridlines.hideGridlines(this,state);\n}","import * as headers from \"../operations/hide_headers\";\n\nexport function hideHeaders(state){\n\theaders.hideHeaders(this,state);\n}","import * as hrows from \"../operations/hide_row_col\";\n\nexport function hideColumn(column,state){\n\throws.setState(this, column, state, \"column\");\n}\nexport function isColumnVisible(column){\n\treturn hrows.isColumnVisible(this, column);\n}\nexport function hideRow(row,state){\n\throws.setState(this, row, state, \"row\");\n}\nexport function isRowVisible(row){\n\treturn hrows.isRowVisible(this, row);\n}","import {image, chart} from \"../mathematics/writer\";\nimport {addMath} from \"../mathematics/methods\";\n\nexport function addImage(row, column, url){\n\tthis.setCellValue(row, column, image(url));\n\tthis.refresh();\n}\n\nexport function addSparkline(row, column, config){\n\tlet value = chart(config);\n\tthis.setCellValue(row, column, value);\n\tthis.refresh();\n}\n\n// getSheetData is deprecated, use ss.getCellValue(row, col, math, page), ss.getRangeValue(range, page) instead\nexport function getSheetData(name){\n\tif(this._mData.getPage(name))\n\t\treturn {\n\t\t\tgetValue: (r, c, math)=> this.getCellValue(r, c, math, name),\n\t\t\tgetRangeValue: (range)=> this.getRangeValue(range, name)\n\t\t};\n}\n\nexport function registerMathMethod(name, handler){\n\taddMath(this, name, handler, true);\n}\n\nexport function recalculate(){\n\tthis._mData.getStore().recalculate();\n\tthis.callEvent(\"onMathRefresh\",[]);\n\tthis.refresh();\n}\n\nexport function setPlaceholder(name, value){\n\tif(typeof name == \"object\"){\n\t\tvalue = name;\n\t\tname = \"*\";\n\t}\n\n\tthis._mData.getStore().setPlaceholder(name, value);\n\n\tthis.refresh();\n\tthis.callEvent(\"onMathRefresh\",[]);\n}","import * as sheets from \"../sheets\";\nimport * as spn from \"../operations/spans\";\nimport * as und from \"../operations/undo\";\nimport group from \"../operations/undo_group\";\nimport * as stl from \"../operations/styles\";\nimport * as srt from \"../operations/sorting\";\nimport {removeCommentsRange} from \"../operations/comments\";\nimport {clearConditionalFormats} from \"../operations/conditional_formats\";\nimport {clearEditors} from \"../operations/dropdown\";\nimport {clearFilters} from \"../operations/filter\";\nimport {showCells} from \"../operations/show_cells\";\n\n//spans\nexport function combineCells(range, silent){\n\tif(!range){\n\t\tvar sel = this.getSelectedId(true);\n\t\tif (sel.length>1){\n\t\t\trange = spn.getRange(sel);\n\t\t}\n\t}\n\tgroup.set(()=> {\n\t\tif (range)\n\t\t\tspn.addSpan(this, range.cell, range.x, range.y);\n\t});\n\n\tif(!silent)\n\t\tthis.refresh();\n}\n\nexport function splitCell(row, column, silent){\n\tif (row && column) {\n\t\tspn.removeSpan(this, {row: row, column: column});\n\t}\n\telse{\n\t\tgroup.set(function(){\n\t\t\tthis.eachSelectedCell(function(cell){\n\t\t\t\tspn.removeSpan(this, cell);\n\t\t\t});\n\t\t},this);\n\n\t}\n\n\tif(!silent)\n\t\tthis.refresh();\n}\n\n//styles\nexport function addStyle(prop, origin){\n\treturn stl.addStyle(this, prop, origin);\n}\n\nexport function getStyle(row, column){\n\treturn stl.getStyle(this, {row:row, column:column});\n}\n\nexport function setStyle(row, column, style){\n\treturn stl.setStyle(this, {row: row, column: column}, style);\n}\n\nexport function setRangeStyle(rangeStr, style){\n\tgroup.set(function() {\n\t\tstl.setRangeStyle(this, rangeStr, style);\n\t},this);\n}\n\nexport function clearRange(rangeStr, type) {\n\tif (!rangeStr){\n\t\trangeStr = this._table.getSelectArea();\n\t\tif (!rangeStr) return;\n\t}\n\n\tif (!type) type = {styles: true, values: true, editors:true, conditions:true, comments:true };\n\t\n\tif (type.styles)\n\t\tstl.clearRangeStyle(this,rangeStr);\n\n\tif (type.conditions)\n\t\tclearConditionalFormats(this,rangeStr);\n\t\n\tif (type.values)\n\t\tthis.setRangeValue(rangeStr, null);\n\n\tif (type.editors){\n\t\tclearEditors(this, rangeStr);\n\t\tclearFilters(this, rangeStr);\n\t}\n\n\tif (type.comments)\n\t\tremoveCommentsRange(this, rangeStr);\n\n\tthis.refresh();\n}\n\nexport function compactStyles(){\n\treturn stl.compactStyles(this);\n}\n\n//serialize\nexport function serialize(config){\n\tconst obj = {};\n\tthis.callEvent(\"onDataSerialize\",[obj, config]);\n\n\tif(config){\n\t\tif(config.compactStyles)\n\t\t\tobj.styles = stl.removeUnusedStyles(obj);\n\t\tif(config.sheets)\n\t\t\treturn sheets.serialize(this, obj, config);\n\t}\n\n\treturn obj;\n}\n\n//sheets\nexport function showSheet(name){\n\tsheets.show(this,name);\n}\nexport function setSheetState(name,state){\n\tsheets.setState(this,name,state);\n}\nexport function getSheetState(name){\n\treturn sheets.getSheet(this,name).state || \"visible\";\n}\nexport function getActiveSheet(){\n\treturn this._activeSheet;\n}\nexport function addSheet(content){\n\tsheets.add(this, content);\n}\nexport function clearSheet(){\n\tthis.reset();\n}\nexport function renameSheet(name,newName){\n\tsheets.rename(this,name,newName);\n}\nexport function editSheet(name){\n\tsheets.edit(this,name);\n}\nexport function removeSheet(name){\n\tsheets.remove(this,name);\n}\n\n//undo\nexport function undo(){\n\tund.undo(this);\n}\nexport function redo(){\n\tund.redo(this);\n}\n\n//sort\nexport function sortRange(range, dir){\n\tsrt.sortRange(this, range, dir);\n}\n\n//cells\nexport function showCell(ref, silent){\n\tshowCells(this, ref, silent);\n}","import {toRange,rangeObj,range as getRange} from \"../helpers/column_names\";\nimport * as tbl from \"../table\";\nimport group from \"../operations/undo_group\";\nimport {newSheet, prepareCell} from \"../sheets\";\nimport {getType, loadCell} from \"../operations/types\";\nimport {getExcelDateFromJs} from \"../mathematics/methods\";\nimport {checkFormat, getFormatFromData} from \"../operations/formats\";\nimport * as arr from \"../helpers/array\";\n\nexport function refresh(all){\n\tif (all)\n\t\tthis._table.refreshColumns();\n\telse\n\t\tthis._table.refresh();\n}\nexport function eachSelectedCell(cb){\n\tvar cells = this.getSelectedId(true);\n\tfor (var i=0; i{\n\t\t\tif (this.callEvent(\"onBeforeValueChange\",[row, column, value, old, page])){\n\t\t\t\tif(page != this.getActiveSheet()){\n\t\t\t\t\tconst sheet = arr.find(this._sheets, sheet => sheet.name == page).content;\n\t\t\t\t\tlet cell = arr.find(sheet.data, cell => cell[0] == row && cell[1] == column);\n\n\t\t\t\t\tif(!cell){\n\t\t\t\t\t\tcell = [row, column];\n\t\t\t\t\t\tsheet.data.push(cell);\n\t\t\t\t\t}\n\t\t\t\t\tcell[2] = value;\n\n\t\t\t\t\tthis._page_value_set = true;\n\t\t\t\t\tconst item = loadCell(this, sheet, cell);\n\t\t\t\t\tdelete this._page_value_set;\n\n\t\t\t\t\tconst muonItem = muonPage.getCell(row-1, column-1, true);\n\t\t\t\t\tmuonItem.$format = checkFormat({ fmt: getFormatFromData(sheet, cell) }, \"string\") ? 1 : 0;\n\t\t\t\t\tmuonPage.setValue(row-1, column-1, item.value);\n\n\t\t\t\t\tcell[2] = item.value;\n\t\t\t\t\tcell[4] = muonItem.type = item.type;\n\n\t\t\t\t\t//prepareCell can change style (1/1/2001 --loadCell--> 36892 + date type --prepareCell--> date format)\n\t\t\t\t\tprepareCell(cell, sheet, true);\n\t\t\t\t\tmuonItem.style = cell[3];\n\n\t\t\t\t\tthis.callEvent(\"onCellChange\", [row, column, item.value, page]);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis._mPage.setValue(row-1, column-1, value);\n\n\t\t\t\t\t//onCellChange can change item (via types module)\n\t\t\t\t\tthis.callEvent(\"onCellChange\", [row, column, value, page]);\n\t\t\t\t\tconst updatedType = getType(this, row, column);\n\n\t\t\t\t\t//recalculate if we refer to a cell, where type is string and value is something like 005 or 5e5\n\t\t\t\t\tif(oldType != updatedType && updatedType == \"string\" && value[0] == \"=\" && value.length > 1)\n\t\t\t\t\t\tthis._mPage.setValue(row-1, column-1, value);\n\n\t\t\t\t\tif(/^=hyperlink\\(/i.test(value)){\n\t\t\t\t\t\tconst baseStyle = this.getStyle(row, column);\n\t\t\t\t\t\tconst urlStyle = this.addStyle({ color: \"#0000ff\", underline: \"underline\" }, baseStyle);\n\t\t\t\t\t\tthis.setStyle(row, column, urlStyle);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.saveCell(row, column, page);\n\t\t\t}\n\t\t});\n\t}\n}\n\nfunction correctVal(val){\n\tif(typeof val === \"boolean\")\n\t\tval *= 1;\n\treturn val || val === 0 ? val : \"\";\n}\n\nexport function setRangeValue(range, value, page){\n\tgroup.set(function(){\n\t\tconst pos = rangeObj(range, this);\n\t\tlet i = 0;\n\t\tfor (let row = pos.start.row; row <= pos.end.row; row++) {\n\t\t\tfor (let column = pos.start.column; column <= pos.end.column; column++, i++) {\n\t\t\t\tthis.setCellValue(row, column, webix.isArray(value) ? value[i] : value, page);\n\t\t\t}\n\t\t}\n\t},this);\n}\n\nexport function getRangeValue(range, page){\n\tif(!page)\n\t\tpage = this.getActiveSheet();\n\n\tconst pos = getRange(range, this, page);\n\tconst muonPage = this._mData.getPage(pos[4]);\n\n\tif (!pos || !muonPage) return [];\n\n\treturn muonPage.getRange(pos[0]-1, pos[1]-1, pos[2]-1, pos[3]-1).map(correctVal);\n}\n\nexport function getRow(id){\n\tconst row = webix.copy(this._table.getItem(id));\n\n\tfor(let i = 1; i <= this.config.columnCount; i++){\n\t\tconst cell = this._mPage.getCell(id-1, i-1);\n\n\t\tif(cell){\n\t\t\trow[i] = cell.value;\n\n\t\t\t[[\"style\", \"$cellCss\"], [\"type\", \"$cellType\"], [\"format\", \"$cellFormat\"]].forEach(param => {\n\t\t\t\tconst val = cell[param[0]];\n\t\t\t\tif(val){\n\t\t\t\t\tif(!row[param[1]])\n\t\t\t\t\t\trow[param[1]] = {};\n\t\t\t\t\trow[param[1]][i] = val;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tconst math = this.getCellValue(id, i, true);\n\t\t\tif(math && math[0] == \"=\")\n\t\t\t\trow[\"$\"+i] = math;\n\t\t}\n\t}\n\n\treturn row;\n}\nexport function getColumn(id){\n\treturn this._table.getColumnConfig(id);\n}\nexport function reset(mode){\n\tvar obj = { data:[] };\n\tif (mode && mode.sheets){\n\t\tobj = newSheet(obj);\n\t}\n\t\n\tthis.parse(obj);\n}\n\nexport function _resetTable(){\n\ttbl.reset(this);\n}\n","import {save} from \"../operations/save\";\n\nexport function saveCell(row, column, page){\n\tvar style = this.getStyle(row, column);\n\n\tsave(this, \"data\", {\n\t\trow,\n\t\tcolumn,\n\t\tvalue: this.getCellValue(row, column, null, page),\n\t\tpage: page || this.getActiveSheet(),\n\t\tstyle: (style ? style.id : \"\")\n\t});\n}","export function setCellEditor(row, column, editor) {\n\tconst line = this._table._ssEditors[row] = this._table._ssEditors[row] || {};\n\tconst value = line[column] || null;\n\tline[column] = editor;\n\n\tif (editor && editor.editor){\n\t\tthis._table.addCellCss(row,column, \"ss_editor\");\n\t} else {\n\t\tdelete this._table._ssEditors[row][column];\n\t\tthis._table.removeCellCss(row,column, \"ss_editor\");\n\t}\n\tthis.callEvent(\"onAction\", [\"dropdown\", { row, column, value, newValue:editor }]);\n}\n\nexport function getCellEditor(row, column){\n\tlet line = this._table._ssEditors[row] || {};\n\treturn line[column] || null;\n}","import * as flt from \"../operations/filter\";\n\nexport function setCellFilter(row, column, filter){\n\tconst line = this._table._ssFilters[row] = this._table._ssFilters[row] || {};\n\tconst value = line[column] || null;\n\n\tif (filter && (webix.isArray(filter) || typeof filter == \"string\"))\n\t\tfilter = { options:filter };\n\tline[column] = filter;\n\n\tif (filter && typeof filter == \"object\"){\n\t\tthis._table.addCellCss(row,column, \"ss_filter\");\n\t\tif (filter.value && flt.isValueActive(filter.value))\n\t\t\tthis._table.addCellCss(row,column, \"ss_filter_active\");\n\n\t\twebix.extend(filter, {row, column}, true);\n\t\tfilter.options = flt.calibrateRange(this, row, column, filter.options);\n\n\t\tif (!filter.handler && filter.value && filter.value.condition){\n\t\t\tconst mode = filter.mode || flt.getFilterMode(this, row, column);\n\t\t\tfilter.handler = flt.getFilterFunction(mode, filter.value);\n\t\t}\n\t} else {\n\t\tdelete this._table._ssFilters[row][column];\n\t\tthis._table.removeCellCss(row,column, \"ss_filter\");\n\t\tthis._table.removeCellCss(row,column, \"ss_filter_active\");\n\t}\n\tthis.callEvent(\"onAction\", [\"filter\", { row, column, value, newValue:filter }]);\n}\n\nexport function getCellFilter(row, column){\n\tlet line = this._table._ssFilters[row] || {};\n\treturn line[column] || null;\n}\n\nexport function removeFilters(){\n\tconst filters = flt.getFilters(this._table);\n\n\tfor\t(let i=0; i {\n\t\treturn this.isRowVisible(obj.id);\n\t});\n}\n\n\nexport function filterSpreadSheet(){\n\tconst grid = this._table;\n\tgrid.data.silent(()=>{\n\t\t// hidden rows\n\t\tgrid.data.filter(obj => this.isRowVisible(obj.id));\n\n\t\tconst filters = flt.getFilters(grid);\n\t\tfor (let i = 0; i < filters.length; i++){\n\t\t\tconst {row, column, handler, lastRow} = filters[i];\n\n\t\t\tlet finished = false;\n\t\t\tgrid.data.filter(obj => {\n\t\t\t\tlet r = obj.id;\n\t\t\t\tif(r <= row || typeof handler != \"function\")\n\t\t\t\t\treturn true;\n\n\t\t\t\tconst span = grid.getSpan(r, column);\n\t\t\t\tif(span){\n\t\t\t\t\tif(span[0] == row && span[1] == column)\n\t\t\t\t\t\treturn true;\n\t\t\t\t\telse\n\t\t\t\t\t\tr = span[0];\n\t\t\t\t}\n\n\t\t\t\tconst value = String(this.getCellValue(r, column, false));\n\n\t\t\t\tif(lastRow){\n\t\t\t\t\tif(r > lastRow)\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\telse if(finished || !value)\n\t\t\t\t\treturn finished = true;\n\n\t\t\t\treturn handler(value);\n\t\t\t}, 1, true);\n\t\t}\n\t});\n\n\tgrid.callEvent(\"onAfterFilter\", []);\n\tgrid.refresh();\n}\n","export function confirm(config){\n\treturn webix.confirm({\n\t\tcontainer: this.$view,\n\t\tcss:\"webix_ssheet_confirm\",\n\t\ttext:config.text,\n\t\tok: webix.i18n.spreadsheet.labels.ok,\n\t\tcancel: webix.i18n.spreadsheet.labels.cancel\n\t});\n}\n\nexport function alert(config){\n\treturn webix.alert({\n\t\tcontainer: this.$view,\n\t\tcss: \"webix_ssheet_alert\",\n\t\ttext:config.text,\n\t\ttype:config.type,\n\t\tok: webix.i18n.spreadsheet.labels.ok\n\t});\n}","import * as undo from \"../operations/undo\";\nimport group from \"../operations/undo_group\";\n\nexport function resetUndo(){\n\tundo.reset(this);\n}\n\nexport function groupUndo(func){\n\tgroup.set(func, this);\n}\n\nexport function ignoreUndo(func){\n\tundo.ignoreUndo(func, this);\n}","import * as fmt from \"../operations/formats\";\n\nexport function setFormat(row, column, format){\n\tfmt.addFormat(this, row, column, format);\n}\n\nexport function changeDecimals(row, column, inc){\n\t//row and column may be obj\n\tfmt.changeAreaDecimals(this, inc, row, column);\n}","import * as formulas from \"../operations/show_formulas\";\n\nexport function showFormulas(state){\n\tformulas.showFormulas(this, state);\n}","import {showBorders} from \"../operations/print\";\n\nexport function showPrintBorders(value){\n\tconst old = !!this._printBorders.$render;\n\n\tif(value == \"toggle\")\n\t\tvalue = !old;\n\n\tif(value != old){\n\t\tif(value)\n\t\t\tshowBorders(this);\n\t\telse{\n\t\t\tdelete this._printBorders.$render;\n\t\t\tthis.refresh();\n\t\t}\n\n\t\tthis.callEvent(\"onCommand\", [{id:\"toolbar-update\", name:\"print-borders\", value}]);\n\t\tthis.callEvent(\"onAction\", [\"print-borders\", {newValue: value, value: old}]);\n\t}\n}","const defaultMenu = [\n\t{ id:\"file\", submenu:[\n\t\t{id: \"sheet\", submenu: [\n\t\t\t{id: \"new-sheet\"},\n\t\t\t{id: \"copy-sheet\"},\n\t\t\t{id: \"remove-sheet\"},\n\t\t\t{id: \"hide-sheet\"}\n\t\t]},\n\t\t{id: \"excel-import\"},\n\t\t{id: \"excel-export\"},\n\t\t{id: \"print\"},\n\t\t{id: \"print-borders\"}\n\t]},\n\t{ id:\"edit\", submenu:[\n\t\t{id: \"add-range\"},\n\t\t{id: \"add-dropdown\"},\n\t\t{id: \"add-link\"},\n\t\t{id: \"lock-cell\"},\n\t\t{id: \"conditional-format\"},\n\t\t{id: \"clear\", submenu:[\n\t\t\t{id: \"clear-value\"},\n\t\t\t{id: \"clear-style\"},\n\t\t\t{id: \"clear-conditional-formats\"},\n\t\t\t{id: \"clear-dropdown-editors\"},\n\t\t\t{id: \"clear-comments\"},\n\t\t\t{ $template:\"Separator\" },\n\t\t\t{id: \"clear-all\"}\n\t\t]}\n\t]},\n\t{ id:\"insert\", submenu:[\n\t\t{id: \"image\", submenu:[\n\t\t\t{ id: \"add-image-cell\"},\n\t\t\t{ id: \"add-image-top\"}\n\t\t]},\n\t\t{id: \"graph\", submenu:[\n\t\t\t{ id: \"add-sparkline\"},\n\t\t\t{ id: \"add-chart\"}\n\t\t]},\n\t\t{id: \"add-comment\"}\n\t]},\n\t{ id:\"data\", submenu:[\n\t\t{id: \"sort\", submenu: [\n\t\t\t{id: \"sort-asc\"},\n\t\t\t{id: \"sort-desc\"}\n\t\t]},\n\t\t{id: \"create-filter\"}\n\t]},\n\t{ id: \"view\", submenu:[\n\t\t{id: \"columns\", submenu: [\n\t\t\t{id: \"insert-column\"},\n\t\t\t{id: \"delete-column\"},\n\t\t\t{id: \"show-column\"},\n\t\t\t{id: \"hide-column\"},\n\t\t\t{id: \"resize-column\"}\n\t\t]},\n\t\t{id: \"rows\", submenu: [\n\t\t\t{id: \"insert-row\"},\n\t\t\t{id: \"delete-row\"},\n\t\t\t{id: \"show-row\"},\n\t\t\t{id: \"hide-row\"},\n\t\t\t{id: \"resize-row\"}\n\t\t]},\n\t\t{ $template:\"Separator\" },\n\t\t{id: \"freeze-columns\"},\n\t\t{id: \"freeze-rows\"},\n\t\t{id: \"hide-gridlines\"},\n\t\t{id: \"hide-headers\"},\n\t\t{id: \"show-formulas\"}\n\t]}\n];\n\nconst readonlyMenu = [\n\t{ id:\"file\", submenu:[\n\t\t{id: \"excel-export\"},\n\t\t{id: \"print\"},\n\t\t{id: \"print-borders\"}\n\t]}\n];\n\nconst ui = {\n\tgetMenuData: function(menu, config){\n\t\tvar i;\n\t\tfor(i=0; i < menu.length; i++){\n\t\t\tif(typeof menu[i] == \"string\")\n\t\t\t\tmenu[i] = {id: menu[i]};\n\t\t\tif((menu[i].id == \"resize-column\" || menu[i].id == \"resize-row\") && !config.resizeCell){\n\t\t\t\tmenu.splice(i,1);\n\t\t\t\ti--;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif(!menu[i].value)\n\t\t\t\tmenu[i].value = webix.i18n.spreadsheet.menus[menu[i].id];\n\t\t\tif(menu[i].submenu)\n\t\t\t\tmenu[i].submenu = this.getMenuData(menu[i].submenu, config);\n\t\t}\n\n\t\treturn menu;\n\t}\n};\n\nexport function init(view){\n\tview.attachEvent(\"onComponentInit\", () => ready(view));\n\n\tconst config = view.config;\n\tconst menu = {\n\t\tview: \"menu\",\n\t\tborderless: true,\n\t\tcss: \"webix_ssheet_menu\",\n\t\tid: \"menu\",\n\t\tautowidth: true,\n\t\ttype:{\n\t\t\theight: 40\n\t\t},\n\t\tdata: ui.getMenuData(\n\t\t\twebix.isArray(config.menu) ? config.menu : webix.copy(config.readonly ? readonlyMenu : defaultMenu),\n\t\t\tconfig\n\t\t)\n\t};\n\n\tview.callEvent(\"onViewInit\", [\"menu\", menu]);\n\treturn menu;\n}\n\n\nfunction ready(view){\n\tif(view.$$(\"menu\"))\n\t\tview.$$(\"menu\").attachEvent(\"onMenuItemClick\",(id) => callAction(view,id));\n}\n\nconst actionMap = {\n\t\"undo\": view => view.undo(),\n\t\"redo\": view => view.redo(),\n\t\"insert-column\": view => view.insertColumn(),\n\t\"delete-column\": view => view.deleteColumn(),\n\t\"show-column\": view => view.callEvent(\"onCommand\",[{id: \"show\", group: \"column\", neighbors:true}]),\n\t\"hide-column\": view => view.hideColumn(null,true),\n\t\"resize-column\": view => view.callEvent(\"onCommand\",[{\n\t\tid: \"resize\", group: \"column\", value: webix.i18n.spreadsheet.menus[\"resize-column\"]\n\t}]),\n\t\"insert-row\": view => view.insertRow(),\n\t\"delete-row\": view => view.deleteRow(),\n\t\"show-row\": view => view.callEvent(\"onCommand\",[{id: \"show\", group: \"row\", neighbors:true}]),\n\t\"hide-row\": view => view.hideRow(null,true),\n\t\"resize-row\": view => view.callEvent(\"onCommand\",[{id: \"resize\", group: \"row\", value: webix.i18n.spreadsheet.menus[\"resize-row\"]}]),\n\t\"freeze-columns\": view => view.freezeColumns(),\n\t\"freeze-rows\": view => view.freezeRows(),\n\t\"hide-gridlines\": view => view.hideGridlines(\"toggle\"),\n\t\"hide-headers\": view => view.hideHeaders(\"toggle\"),\n\t\"show-formulas\": view => view.showFormulas(\"toggle\"),\n\t\"print-borders\": view => view.showPrintBorders(\"toggle\")\n};\n\nfunction callAction(view,id){\n\tif(view.callEvent(\"onMenuItemClick\",[id])){\n\t\tif(actionMap[id])\n\t\t\tactionMap[id](view);\n\t\telse\n\t\t\tview.callEvent(\"onCommand\",[{id: id}]);\n\t}\n}","//global definitions\nimport \"./locale\";\nimport \"./views/index\";\n\n//special content for non-production builds\nimport \"./init\";\n\nimport \"./editors/index\";\n\n//modules\nimport * as bar from \"./toolbar\";\nimport * as tbl from \"./table\";\nimport * as key from \"./hotkeys\";\nimport * as editor from \"./editor\";\nimport * as sheets from \"./sheets\";\nimport * as dialogs from \"./dialogs/index\";\nimport * as context from \"./context\";\nimport * as chart from \"./chart\";\n\nimport {setDefaultFormats} from \"./operations/formats\";\nimport {operations} from \"./operations/index\";\nimport {api} from \"./api/index\";\n\n//styling\nimport * as menu from \"./menu\";\nimport {getDefaultStyles} from \"./helpers/conditional\";\nimport {setSkinDefaults} from \"./toolbar/defaults\";\n\nvar component = {\n\tname:\"spreadsheet\",\n\t_base_index:{ count:1 },\n\tdefaults:{\n\t\tspans: true,\n\t\tliveEditor: true,\n\t\trowCount:50,\n\t\tmath:true,\n\t\tcolumnCount:20,\n\t\tresizeCell: true,\n\t\tsheetTabWidth: 90,\n\t\tconditionStyle: getDefaultStyles()\n\t},\n\t$init:function(){\n\t\tthis.$index = (this._base_index.count++);\n\t\tthis.$view.className += \" webix_ssheet\";\n\n\t\tthis.$ready.unshift(this._sub_init);\n\t\tthis.$ready.unshift(setDefaultFormats);\n\t\tthis.$ready.push(this._set_handlers);\n\n\t\tthis._destroy_with_me = [];\n\t\tthis.attachEvent(\"onDestruct\", () => {\n\t\t\tthis._destroy_with_me.forEach(view => view.destructor());\n\t\t});\n\t},\n\t$skin:function(){\n\t\tsetSkinDefaults();\n\t},\n\t_sub_init:function(){\n\t\tconst obj = this.config;\n\t\tconst readonly = obj.readonly;\n\t\tconst rows = [];\n\n\t\t//toolbars\n\t\tif(obj.menu)\n\t\t\trows.push(menu.init(this));\n\t\tif((readonly && (obj.toolbar || obj.buttons)) || (!readonly && obj.toolbar !== false))\n\t\t\trows.push(bar.init(this));\n\t\tif (obj.subbar)\n\t\t\trows.push(obj.subbar);\n\t\tif(!readonly && obj.liveEditor)\n\t\t\trows.push(editor.init(this));\n\n\t\t//data part\n\t\tconst tblObj = {\n\t\t\teditable : !readonly,\n\t\t\tliveEditor: obj.liveEditor\n\t\t};\n\t\tif(obj.rowHeight)\n\t\t\ttblObj.rowHeight = obj.rowHeight;\n\t\tif(obj.columnWidth)\n\t\t\ttblObj.columnWidth = obj.columnWidth;\n\n\t\tif(readonly)\n\t\t\trows.push(tbl.init(this, tblObj));\n\t\telse\n\t\t\trows.push({cols:[tbl.init(this, tblObj), chart.init(this)]});\n\n\t\tconst bottom = obj.bottombar === true ? sheets.defaultBottom(this) : obj.bottombar;\n\t\tif (bottom)\n\t\t\trows.push(bottom);\n\n\t\tsheets.init(this);\n\n\t\tif(!readonly)\n\t\t\tcontext.init(this);\n\n\t\tdialogs.init(this);\n\n\t\tthis.rows_setter(rows);\n\t},\n\t_set_handlers:function(){\n\t\t//prevent double init\n\t\tif (this._table) return;\n\t\tthis._table = this.$$(\"cells\");\n\n\t\t//init all sub modules\n\t\toperations(this);\n\n\t\t//set sizes for the table\n\t\ttbl.reset(this, this.config.columnCount, this.config.rowCount);\n\t\tkey.init(this); //keyboard shortcuts\n\t\t\n\t\tthis._table.attachEvent(\"onAfterAreaAdd\", () =>\n\t\t\tthis.callEvent(\"onAfterSelect\", [ this.getSelectedId(true) ]));\n\n\t\tthis.callEvent(\"onComponentInit\", []);\n\t},\n\t$onLoad:function(obj, driver){\n\t\t//when loading data by data:, we can get $onLoad before _set_handlers call\n\t\tthis._set_handlers();\n\n\t\tconst excel = obj.excel;\n\n\t\tif (excel)\n\t\t\tobj = this._parseExcel(obj, driver);\n\t\telse if(!obj.data && typeof obj == \"string\" && (driver.cell || driver.row))\n\t\t\tobj = this._parseCsv(obj, driver);\n\n\t\tsheets.load(this, obj, excel);\n\t}\n};\napi(component);\nwebix.protoUI(component, webix.AtomDataLoader, webix.IdSpace, webix.ui.layout);\n","import {isCellSelected, isColSelected,isRowSelected,selectRow,selectColumn} from \"./operations/column_operations\";\nimport {getColumnOperation, getRowOperation, getClearOperation} from \"./toolbar/buttons\";\n\nexport function init(view){\n\tview.attachEvent(\"onComponentInit\", () => view.$$(\"context\").attachTo(view._table.$view));\n\n\tconst locale = webix.i18n.spreadsheet.menus;\n\n\tlet clipboard = [];\n\tif(view.config.clipboard !== false)\n\t\tclipboard = [\n\t\t\t{ id:\"cut\", value: locale.cut},\n\t\t\t{ id:\"copy\", value: locale.copy},\n\t\t\t{ id:\"paste\", value: locale.paste},\n\t\t\t{ id:\"special-paste\", value: locale[\"special-paste\"], submenu:[\n\t\t\t\t{id: \"paste-values\", value: locale[\"paste-values\"]},\n\t\t\t\t{id: \"paste-formulas\", value: locale[\"paste-formulas\"]},\n\t\t\t\t{id: \"paste-styles\", value: locale[\"paste-styles\"]},\n\t\t\t\t{id: \"paste-conditions\", value: locale[\"paste-conditions\"]},\n\t\t\t]}\n\t\t];\n\n\tconst lists = {\n\t\tdata: clipboard.concat([\n\t\t\t{ id:\"clear\",\t\tvalue: locale[\"clear\"], submenu: getClearOperation()},\n\t\t\t{ id:\"lock-cell\",\t\tvalue: locale[\"lock-cell\"]},\n\t\t\t{ $template: \"Separator\"},\n\t\t\t{ id:\"sort\",\tvalue: locale.sort, submenu:[\n\t\t\t\t{id: \"sort-asc\", value: locale[\"sort-asc\"]},\n\t\t\t\t{id: \"sort-desc\", value: locale[\"sort-desc\"]}\n\t\t\t]},\n\t\t\t{id:\"create-filter\",\t\tvalue: locale[\"create-filter\"]},\n\t\t\t{ $template: \"Separator\"},\n\t\t\t{ id:\"add-range\",\t\tvalue: locale[\"add-range\"]},\n\t\t\t{ id:\"add-link\",\t\tvalue: locale[\"add-link\"]},\n\t\t\t{ id:\"add-comment\",\t\tvalue: locale[\"add-comment\"]}\n\t\t]),\n\t\tcolumn: getColumnOperation(view),\n\t\trow: getRowOperation(view)\n\t};\n\n\n\tvar context = {\n\t\tview: \"contextmenu\",\n\t\tid: \"context\",\n\t\tpadding:0,\n\t\tsubmenuConfig:{\n\t\t\tpadding:0,\n\t\t\ton:{\n\t\t\t\tonBeforeShow:function(){\n\t\t\t\t\tthis.sizeToContent();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tdata:[],\n\t\ton:{\n\t\t\tonMenuItemClick(id) {\n\t\t\t\tview.callEvent(\"onCommand\", [this.getMenuItem(id)]);\n\t\t\t},\n\t\t\tonBeforeShow(pos) {\n\t\t\t\twebix.callEvent(\"onClick\", []);\n\t\t\t\tvar mode, trg;\n\n\t\t\t\ttrg = view._table.locate(pos);\n\t\t\t\tif (!trg) return false;\n\n\t\t\t\tmode = \"\";\n\t\t\t\tif (trg.header && trg.column !== \"rowId\"){\n\t\t\t\t\tif (!isColSelected(trg.column, view))\n\t\t\t\t\t\tselectColumn(trg.column, view);\n\t\t\t\t\tmode = \"column\";\n\t\t\t\t} else if (trg.row){\n\t\t\t\t\tif (trg.column === \"rowId\"){\n\t\t\t\t\t\tif (!isRowSelected(trg.row, view))\n\t\t\t\t\t\t\tselectRow(trg.row, view);\n\t\t\t\t\t\tmode = \"row\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (!isCellSelected(trg.row, trg.column, view))\n\t\t\t\t\t\t\tview._table.addSelectArea(trg, trg);\n\t\t\t\t\t\tmode = \"data\";\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (mode){\n\t\t\t\t\tvar data = getMenuData(view, mode, lists[mode]);\n\t\t\t\t\tif (data){\n\t\t\t\t\t\tthis.clearAll();\n\t\t\t\t\t\tthis.parse(data);\n\t\t\t\t\t\tthis.sizeToContent();\n\t\t\t\t\t\twebix.html.preventEvent(pos);\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t};\n\n\tview.callEvent(\"onViewInit\", [\"context\", context]);\n\tconst contextMenu = view.ui(context);\n\n\tview._destroy_with_me.push(contextMenu);\n}\n\nexport function getMenuData(view, name, data){\n\tvar ev = { area:name, data:data };\n\tif (view.callEvent(\"onContextMenuConfig\", [ev]))\n\t\treturn ev && ev.data;\n\treturn null;\n}","import * as m1 from \"./add_row_col\";\nimport * as m6 from \"./clipboard\";\nimport * as m12 from \"./column_operations\";\nimport * as m2 from \"./conditional_formats\";\nimport * as m4 from \"./types\";\nimport * as m8 from \"./formats\";\nimport * as m17 from \"./data\";\nimport * as m18 from \"./dropdown\";\nimport * as m7 from \"./formats\";\nimport * as m13 from \"./hide_row_col\";\nimport * as m14 from \"./lock_cell\";\nimport * as m3 from \"./resize\";\nimport * as m9 from \"./selection\";\nimport * as m10 from \"./sorting\";\nimport * as m16 from \"./spans\";\nimport * as m16a from \"../mathematics/methods\";\nimport * as m16b from \"../mathematics/ranges\";\nimport * as m16c from \"../mathematics/sheets\";\nimport * as m19 from \"./states\";\nimport * as m5 from \"./styles\";\nimport * as m11 from \"./undo\";\nimport * as m20 from \"./import\";\nimport * as m21 from \"./filter\";\nimport * as m22 from \"./print\";\nimport * as m23 from \"./export\";\nimport * as m24 from \"./load\";\nimport * as m25 from \"./clear_styles\";\nimport * as m26 from \"./comments\";\nimport * as m27 from \"./save\";\nimport * as m28 from \"./hide_headers\";\nimport * as m29 from \"./hide_gridlines\";\nimport * as m30 from \"./views\";\nimport * as m31 from \"./show_formulas\";\n\nexport function operations(view){\n\t//order in some cases does matter\n\t//resize must be applied after math, to size data by the result of math calculation\n\t//types must be applied after state and data \n\tvar all = [m1,m2,m5,m6,m7,m9,m10,m11,m12,m13,m14,m16,m3,m8,m17,m16a,m16b,m16c,m18,m19,m4,m20,m21,m22,m23,m24,m25,m26,m27,m28,m29,m30,m31];\n\tfor (var i = 0; i < all.length; i++){\n\t\tif (all[i].init)\n\t\t\tall[i].init(view);\n\t}\n}","import * as rco from \"./row_col_operations\";\nimport * as lcl from \"./lock_cell\";\nimport * as fcl from \"./freeze\";\nimport * as hbr from \"./hide_gridlines\";\nimport * as hhd from \"./hide_headers\";\nimport * as hrc from \"./hide_rows\";\nimport * as mat from \"./math\";\nimport * as ops from \"./operations\";\nimport * as cor from \"./core\";\nimport * as sav from \"./save\";\nimport * as dpd from \"./dropdown\";\nimport * as flt from \"./filter\";\nimport * as cfm from \"./confirm\";\nimport * as und from \"./undo\";\nimport * as fmt from \"./number_formats\";\nimport * as fml from \"./show_formulas\";\nimport * as prt from \"./print\";\n\nexport function api(view){\n\tvar all = [rco, lcl, fcl, hbr, hhd, hrc, mat, ops, cor, sav, dpd, flt, cfm, und, fmt, fml, prt];\n\tfor (var i = 0; i < all.length; i++)\n\t\twebix.extend(view, all[i]);\n}"],"names":["webix","i18n","spreadsheet","labels","tooltips","menus","table","liveEditor","formats","protoUI","name","$cssName","$init","config","options","view","body","tooltip","template","xCount","yCount","data","ui","richselect","defaults","width","skin","$name","margin","cols","scroll","select","obj","id","on","onAfterSelect","this","getParentView","updateMasterValue","value","rows","css","title","onChange","suggest","fitMaster","hide","getValue","$$","master","setValue","getList","getColorView","getTypeView","getSelectedId","getBody","getChildViews","getItemText","$ready","push","bind","getPopup","isArray","old","callEvent","join","height","palette","attachEvent","setMasterValue","colorboard","icon","borderless","$view","className","$renderInput","divStart","color","renderColor","call","replace","match","p1","p2","p3","colorpicker","prototype","$setValue","getColorNode","style","backgroundColor","firstChild","childNodes","$renderIcon","text","apply","arguments","Object","defineProperty","exports","t","r","1","2","3","e","assign","n","length","o","hasOwnProperty","i","a","u","f","s","h","c","p","v","code","g","source","l","d","b","M","pageName","substr","indexOf","toUpperCase","String","fromCharCode","charCodeAt","y","m","_","L","P","w","E","z","I","C","T","page","D","N","A","S","O","x","R","F","U","exec","broken","triggers","pop","Function","Date","getFullYear","valueOf","getTimezoneOffset","Math","floor","round","getTime","isNaN","concat","k","toString","padStart","H","ceil","Y","B","j","G","q","$","W","K","Q","pow","J","Z","tt","rt","et","sqrt","nt","ot","it","CM","CD","XC","XL","X","IX","V","IV","at","ut","ft","st","ht","ct","pt","vt","gt","lt","abs","exp","dt","bt","Mt","yt","substring","Number","mt","_t","cos","cosh","sin","sinh","wt","Et","It","Ct","Tt","Dt","sort","Array","Nt","At","St","Ot","filter","reduce","xt","Rt","ABS","ACOS","acos","ACOSH","acosh","ACOT","atan","ACOTH","log","ADD","ARABIC","test","ASIN","asin","ASINH","asinh","ATAN","ATAN2","atan2","ATANH","AVEDEV","AVERAGE","AVERAGEA","BASE","max","BINOMDIST","BINOM.INV","BINOM.DIST.RANGE","BINOM.DIST","BITAND","BITLSHIFT","BITOR","BITRSHIFT","BITXOR","CEILING","COMBIN","COMBINA","COMPLEX","CORREL","COS","COSH","COT","tan","COTH","COUNT","COUNTA","COUNTBLANK","COVAR","COVARIANCE.P","COVARIANCE.S","CSC","CSCH","DEC2BIN","DEC2HEX","DEC2OCT","DECIMAL","parseInt","DEGREES","PI","DELTA","DEVSQ","forEach","DIVIDE","EQ","ERF","ERFC","EVEN","sign","EXP","FACT","FACTDOUBLE","FISHER","FISHERINV","FLOOR","GAMMA","isInteger","GCD","GEOMEAN","some","isFinite","GESTEP","GT","GTE","HARMEAN","HEX2BIN","HEX2DEC","HEX2OCT","IMABS","IMAGINARY","IMCONJUGATE","IMCOS","IMCOSH","IMCOT","IMCSC","IMCSCH","IMDIV","IMEXP","IMLN","IMPOWER","IMPRODUCT","slice","IMREAL","IMSEC","IMSECH","IMSIN","IMSINH","IMSQRT","IMSUB","IMSUM","IMTAN","INT","LARGE","LN","LOG","LOG10","LT","LTE","MAX","MEDIAN","MIN","MINUS","MOD","MROUND","MULTINOMIAL","MULTIPLY","NE","OCT2BIN","OCT2DEC","OCT2HEX","ODD","PERCENTILE","PERCENTILE.INC","PERCENTILE.EXC","PERMUT","POW","POWER","PRODUCT","QUARTILE","QUARTILE.INC","QUARTILE.EXC","QUOTIENT","RADIANS","RAND","random","RANDBETWEEN","ROMAN","split","ROUND","parseFloat","toFixed","ROUNDDOWN","ROUNDUP","SEC","SECH","SIGN","SIN","SINH","SMALL","SQRT","SQRTPI","STDEV","STDEV.S","STDEV.P","STDEVA","STDEVP","STDEVPA","STEYX","SUBTOTAL","SUM","SUMPRODUCT","SUMSQ","SUMX2MY2","find","SUMX2PY2","SUMXMY2","TAN","TANH","tanh","TRUNC","VAR","VAR.S","VAR.P","VARA","VARP","VARPA","WEIBULL","WEIBULL.DIST","Lt","Pt","freeze","__proto__","CONCATENATE","LEFT","MID","RIGHT","LOWER","addMath","handler","addMethod","sid","list","exists","add","getJsDateFromExcel","excelDate","date","getExcelDateFromJs","jsDate","init","math","IMAGE","url","escape","HYPERLINK","attrs","SPARKLINE","arr","type","color1","color2","negativeColor","paddingX","paddingY","extend","donut","horizontal","tableConfig","isCircle","columnWidth","rowHeight","Sparklines","getTemplate","keys","key","getJsDate","getExcelDate","datepicker","$prepareValue","copy","start","end","daterangepicker","buttons","close","getBodyConfig","content","elements","getFormElements","padding","$active","layoutPadding","form","label","cancel","autowidth","click","getTopParentView","save","hotkey","body_setter","_typeof","isUndefined","window","move","head","autofocus","IdSpace","headerRowHeight","datatable","getItem","setHTML","dataview","contextmenu","group","set","method","uid","all","serialize","sheets","proxy","$parse","$proxy","ajax","headers","post","thread","events","newName","_loading_data","params","activeSheet","getActiveSheet","clearTimeout","delay","decode","encode","alpha","indexToHeader","index","chars","quotient","updateMaxColumn","maxColumn","str","adress","size","col","range","nind","sheet","parts","ranges","getCode","rangeParts","d1","d2","escapeSheet","toRange","x2","y2","rangeObj","row","column","eachRange","callback","isRange","cells","isCell","cellTest","changeRange","inc","updated","r1","c1","r2","c2","toolbarSizes","sectorPadding","sectorMargin","defaultStyles","fonts","material","mini","flat","compact","contrast","willow","dark","style_names","_style_map","format","left","center","right","top","middle","bottom","wrap","getBorderCss","underline","strike","indent","count","pos","innerCss","border","sizeEl","border_checks","cell","area","mode","_style_handlers","getSelectArea","lineStyle","modes","_updateStyle","reset","_styles","_styles_cache","_styles_max","prefix","$index","html","removeStyle","getStyle","_mPage","getCell","span","getSpan","spanStyles","spanStyle","getFormat","addStyle","props","origin","styleFromText","map","styleToText","cache","_addStyle","_parse","styles","styleObj","update_style_data","nstyle","setStyle","_setStyle","setRangeStyle","getTextSize","baseWidth","innerHTML","_table","appendChild","offsetWidth","offsetHeight","removeChild","toolbar","oldFormat","formatChanged","saveCell","sel","silent","_buildCssString","outCss","clearRangeStyle","compactStyles","serialized","removeUnusedStyles","used","newStyles","_applyStyles","eachSelectedCell","_applyCellStyles","ostyle","oldVal","refresh","_serialize","_undoStyle","create","func","findIndex","result","getDimension","spans","line","spanEndRow","spanEndCol","formatsCount","formatCache","formatSources","formatHelpers","currencies","defaultFormats","common","setDefaultFormats","formatsLocale","price","getCurrencySymbol","trim","extra","minusSign","priceFormat","values","zeros","priceSettings","decimalSize","symbol","separator","negative","getDelimiters","numberFormat","percent","format2code","dateFormat","string","serializeFormat","formToValues","groupSign","groupDelimiter","decimalSign","decimalDelimiter","getFormatSource","toexcel","parseFormat","createFormatName","formatToForm","dates","timeFormat","fullDateFormat","longDateFormat","red","first","second","priceBrackets","currency","isPrice","delimiters","integer","decimal","addFormat","nev","removeFormat","splitFormat","conditional","errorMessage","separated","separateFmt","genCode","condition","toLowerCase","fmt","err","check","ind","isAbs","genFormatCode","isQuote","comma","numberPlaceholder","textPlaceholder","symbolPos","multiply","lastDateType","val","betweenPlaceholders","placeholder","datePart","excelDateToWebix","undefined","getParts","reverse","lzeros","lfills","rzeros","rfills","rmax","dateTypes","timeTypes","dateOrder","timeOrder","typesOrder","order","types","changeAreaDecimals","getCells","rules","isNumber","changeCellDecimals","getFormatName","isCustom","updateDecimals","parsed","decimals","placeholders","withoutText","withoutPlaceholders","formValues","symbolId","toExcel","leftPlaceholders","fmtParts","sepFmtParts","getFmtPartValues","leftText","rightText","fmtPart","firstPlaceholder","Infinity","checkFormat","checkTime","quot","item","isDateInvalid","getDateEditFormat","formatName","locale","isTime","dateToStr","getFormatFromData","array","styleName","fmtName","load","isChar","char","getLastCharIndex","includeNumbers","lastChar","getWord","formula","quotes","operand","position","word","sum","flags","crosssheet","fromSheet","lines","ph","escaped","next","pushLine","loadCell","setType","dateToExcel","_page_value_set","setCellValue","getFormatType","formatType","getType","_mData","getPage","parseToStore","_setType","mathFormat","isFormula","parseDate","getMathFormat","blockLevel","level","methods","part","expectType","getExpectType","strToDate","parseDateTime","parser","ignoreUndo","checkType","$format","updateCell","isString","cellEditor","getCellEditor","setFormat","setCellEditor","editor","cursor","getInputNode","selectionStart","charAt","search","nextSymbol","node","tagName","_this","sizes","offset","textWidth","popup","show","setValueHere","$enterKey","isVisible","getCellValue","action","newValue","getPopupConfig","onItemClick","button","suggestData","highlight","_highlightedCells","_update_range","_last_value_set","activeCell","showActiveSheet","updateCellValue","blur","preventEvent","$handleSelection","UIManager","setFocus","eventRemove","keydownEv","event","_this2","endEdit","escapeText","changeCellCss","_activeMath","colorIndex","crossheet","cellSheet","prepareSheet","activeMath","cellText","rangeName","repeatedColor","nextCell","nextCellText","setColor","document","activeElement","paintValue","enter","grid","define","showSheet","moveSelection","remove","which","keyCode","shiftKey","getItemNode","newv","$setValueHere","str1","str2","setSelectionRange","expectOperator","setRange","len","lastPos","prepareArea","min","row1","col1","row2","col2","coloredArea","texthighlight","layout","drag","dragscroll","EditAbility","toggle","offValue","onValue","inp","awidth","aheight","$allowsClear","blockEvent","unblockEvent","arrowCss","arrow","iconCss","inputSpacing","elementsConfig","labelWidth","_initOnChange","$eventSource","_getCheckboxes","$hiddenSheet","$all","_count","base","hidden","labelRight","active","baseHeight","inputHeight","checkboxes","output","cfg","scrollview","queryView","onSelectChange","focus","resize","toFront","minWidth","minHeight","escHide","autofit","setAttribute","addHotKey","_removeView","getMenu","_clickEv","_menu","destructor","move_setter","DragControl","addDrag","$dragPos","$dragCreate","object","trg","target","getAttribute","elOffset","elPos","pOffset","parentNode","state","getScrollState","toNode","$dragDestroy","submenu","readonly","submenuConfig","externalUI","onMenuItemClick","_menuActions","onBeforeShow","_toggleExcel","dots","toPDF","display","toPNG","header","pull","showMenuItem","hideMenuItem","layoutMargin","multi","getSectionConfig","onAfterScroll","addSection","trashIcon","dataPadding","upper","marker","onClick","removeView","childs","getLayout","lastIndex","layoutId","addView","setValues","setSubValue","sub","hideSubviews","child","getValues","$getSize","bodySize","env","scrollSize","$setSize","oldScroll","editors","excel_date","createPopup","icons","timepicker","_last_input_target","onEnter","render","showPopup","input","updateCalendar","calendar","afterRender","ss_richselect","popupInit","$value","actions","isMerged","c0","splitCell","confirm","then","combineCells","undo","redo","hideGridlines","hideHeaders","freezeColumns","freezeRows","showFormulas","showPrintBorders","fontFamily","getColumnOperation","colOperations","neighbors","resizeCell","getRowOperation","rowOperations","getClearOperation","getLocaleClear","$template","borders","styleFormats","colorButton","toggleButton","iconButton","btn","segmented","popupWidth","popupTemplate","popupEvents","titleHeight","align","condFormat","buttonsMap","getCellFormats","example","number","getText","getAllElements","calcButtons","groups","$button","insert","ready","selected","updateValue","element","allElements","elm","bottombar","toolbarButtons","structure","checkButtons","getButtons","columns","block","blockColumns","bar","$customScroll","maxSize","limited","viewId","innerId","barStyles","getBarStyles","dropdowns","getCellStyles","cellStyle","property","splice","selectRow","endRow","last","_selectRange","selectAll","firstColumn","selectColumn","endColumn","isColSelected","selectedArea","isCellSelected","isRowSelected","selectColumns","addSelectArea","adjustColumn","getColumnConfig","eachRow","getCellFilter","setColumnWidth","adjustRow","eachColumn","getSpanNode","setRowHeight","highlightColRow","sr","er","sc","ec","removeCellCss","addCellCss","getHeaderNode","removeCss","addCss","lockCss","lockCell","_mapCellsCalls","_locks","isCellLocked","cm","lock","updatePosition","locked","rid","cid","addSpan","extraCss","getExtraCss","setSpanValue","isEmpty","removeSpan","getRange","lx","ly","rx","ry","cx","cy","setSpanCss","borderChecks","adjustSpan","spanData","checkSpan","selection","isFirstCell","pasteSpan","cutted","translate","mapCells","parse","isUndo","undoSpan","checkSpanBorders","isDate","conditions","batch","lastIndexOf","getStore","getContext","getConditionCss","rendered","_empty","collection","get","currentValue","rule","handlers","checkOrder","compare","addEmptyCollection","oldConditions","_pull","clear","rowId","columnId","clearConditionalFormats","_changeCondition","pasteCondition","oldCondition","newCondition","_normalizeValue","createRules","rId","cId","cond","update","newData","_setCondition","type_action","_undoCondition","getSheetData","tconfig","frozenColumns","frozenRows","_frozenColumns","_frozenRows","getState","ids","_undoValue","actionMap","_remove","_activeSheet","edit","setState","prepare","selectSheet","showItem","command","changePagerVisability","changePagerStatus","once","context","dataOrder","num","_sheets","rename","defaultBottom","tabWidth","sheetTabWidth","getSheetsPopup","maxHeight","autoheight","onShow","clearAll","maxWidth","editable","editaction","editValue","webix_ssheet_sheet_arrow","initSheetMenu","$sheetMenu","menuInit","menu","_destroy_with_me","callAction","getMark","oneSheet","disabled","scrollSheets","direction","scrollTo","scrollPos","disable","enable","$width","showBatch","tab","getSheet","visibleSheets","getVisible","showPrevious","_filterTabs","tabs","newIndex","getNewTitle","addPage","prepareData","prevIndex","removePage","changeId","renamePage","invalidValue","linkRegex","prepareCell","link","styleProperties","newSheet","DataStore","strict","sheetName","rowCount","columnCount","_resetTable","error","alert","showCells","ref","cellRef","rangePos","replaceAll","showCell","dragStartColumn","dragEndColumn","showCommentHandler","pointerType","comments","_activeComment","editStatus","locate","visible","commentsView","viewonly","contains","editMath","highlightHeaders","cop","ed","$anyKey","ev","getEditor","finalStep","resizeColumn","cind","dx","posRelative","selectColumnHandler","lastHeaderClick","headerClick","dblClick","lastClickedRow","editStop","getFocus","need_focus","setDefaultCss","leftSplit","areaselect","minColumnWidth","minRowHeight","navigation","cell_template","_v","valueOnly","formulasMode","invalidDate","helper","_print","el","nms","cssFormat","getRenderedValue","_printBorders","$render","refreshColumns","isMac","dialog","f2","del","styleHotKey","ctrlU","attr","elementOn","methodsName","nav","updateEditor","fillEditor","startEdit","symbols","disableEditor","_rangeDialog","en","pasteRange","updateRange","colon","isEnabled","clearEditor","isActiveCell","Dialog","$dialog","$hide","$show","unescape","DialogBox","box","preview","parseImage","server","images","image","showPreview","upload","onBeforeFileAdd","file","reader","FileReader","onload","getFormView","readAsDataURL","onFileUpload","response","imageURL","onSaveClick","okClick","onCancelClick","fillUrl","addImage","viewid","open","views","ignoreUndoReset","restoreHistory","_ssUndoHistory","_ssUndoCursor","addToHistory","$skipHistory","ignoreReset","step","prevData","undoHandlers","nvalue","ovalue","_trackAll","conf","viewMethods","_types","track","_trackOne","_fromRange","_isPie","_removeLegend","legend","fromData","shift","names","_getNames","switchDirection","dataSeries","legendRange","_getParts","_showAll","win","_correctPos","_showOne","_getWidth","_getHeight","each","$height","_isRange","_getDataParts","subdata","getRangeRows","getRangeCols","_getSeries","oldLeftColumn","dir","vals","xAxis","activeVals","series","firstRange","inActiveSeries","seria","activeVal","_getColor","colors","dataRange","subRange","_normalizeConfig","valign","scale","rangeToData","rind","editUIType","querySelector","register","container","_commands","getConfig","inner","renderConfig","_processTables","query","tables","oldWin","_activeWin","$destructed","_reset","_undoUI","_updateData","one","viewIds","_genChartConfig","htmlFilter","scaleColor","_prepareType","stacked","pie","pieLegend","legendConfig","yAxis","lineColor","lineShape","circle","borderColor","chartEditor","handlePieLegend","getLeftColumn","getTopRow","setSilentValue","updateLegendRange","updateXaxisRange","xAxisRange","leftColumn","topRow","exist","updateAlign","updateValign","updateType","isPie","isBar","markersVisible","hideField","hideBatch","switchRowsCols","updateSeries","oldXaxis","field","getSelectedRange","inValues","expand","closeEditor","activeSkin","barHeight","complexData","addRichselect","getTypes","vertical","getLegendAlign","getLegendValign","attributes","els","parseChart","color_def","color_pos","color_neg","renderPreview","visibleBatch","labelPosition","checkRange","sparkConfig","addSparkline","clearValidation","selectedCell","scope","toSheetRange","unshift","validate","oldData","_getScope","updateItem","unselect","_this3","theform","onBeforeSelect","removeRange","editRange","isNotEmpty","onFocus","saveClick","getRanges","selectedId","allRanges","nameParts","selectList","rangeVal","Ranges","_master","_normalizeName","_normalizeRange","globalRange","out","global","rangeOptions","getRangePos","getSpans","inSpan","boolean","unique","empty","objA","objB","sorters","sorting","as","int","nullFilter","$empty","_ssFilters","markBarFilter","getFilters","filters","clearFilters","refilter","filterSpreadSheet","calibrateRange","lastRow","getFilterRange","isValueActive","includes","isFilterExists","getFilterMode","pasteFilter","setCellFilter","getSingleOption","getConditions","getFilterFunction","opt","on_click","ssheet_filter_sign","on_dblclick","toggleFilters","removeFilters","isFilter","$mode","$filter","syncScroll","_getTargetNode","getFilter","flt","importData","relative","inputs","applyFilter","oldValue","setCellStyle","isHidden","nodeOffset","tableOffset","getElementsByClassName","ydiff","xdiff","fillForm","labelsLocale","commonConfig","customConfig","dateConfig","getFormats","updateForm","closeWin","isText","$css","_getDatalayout","value2","_formatValue","_isNotDateRule","editFormat","_safeInt","_getCondition","activeValue","_rulesToArr","current_view","_this4","onBlur","vid","dlayout","getIdByIndex","_this5","getRows","getConditionStyle","conditionStyle","getSheets","filename","restoreValue","print","htmlOnly","_buildHtml","doc","xCorrection","sheetnames","baseIndex","pageSize","getPageSize","$customPrint","children","topSplit","childElementCount","splitHeight","insertBefore","sheetNode","class","external","innerView","img","src","promise","defer","resolve","customPrint","printInnerView","br","res","docFooter","_cleanHtml","cloneNode","canvases","getElementsByTagName","drawImage","paper","landscape","printMargin","printPPI","showBorders","redraw","rowsHeight","fit","colsWidth","modal","onHide","stringResult","printPreview","_setComment","textarea","onViewResize","animate","showInput","addComment","comment","showTemplate","changeTextarea","getHead","getOption","optionHeight","bases","imt","imc","asw","rgs","dpd","cnd","lnk","pnt","cmt","loadChangedData","process","getUpdateValues","_delColumn","removeColumn","_addColumn","addColumn","_delRow","removeRow","_addRow","addRow","updatedData","fixSelectArea","isRowVisible","isColumnVisible","_ssEditors","clearEditors","pasteDropdown","dropdown","styledata","clipdata","updateFilters","specialPaste","getRow","ignore","$popup","tblEditors","isEditor","setClipboard","buffer","browserClipboard","_get_sel_style","mapSelection","writeText","allFiltersInZone","startRow","startCol","endCol","_clip_to_sel","leftTop","csv","delimiter","_changeDelimiter","getClipboardNumberFormat","record","cut","_add_row_col","maxRow","maxCol","colCount","dataRowCount","dataColCount","ri","ci","subtrans","_clipboardToTable","row_ind","col_ind","cdata","transposeMath","clipboardNumberFormat","clipboardDecimalDelimiter","decimalOptional","clipboard","navigator","clipbuffer","_sel_to_clip","_updateDelimiter","numToStr","stringify","ctrlKey","metaKey","readText","catch","finally","_hidden_cols_hash","_hidden_rows_hash","indexes","getIds","_showRow","_showColumn","_hideRow","_hideColumn","hash","showColumn","getColumnIndex","hideColumn","_updatePosition","hiddenIndex","hrows","hcols","_adjustRowHeight","spanHeight","textHeight","headerOnly","refreshSelectArea","getColumn","_undoResize","defWidth","defHeight","nsizes","bs","blockStart","blockEnd","removeSelectArea","sortRange","fullrange","expandSelection","maxY","maxX","nr1","nr2","nc1","nc2","newrange","by","newMath","updateSheetNames","oldName","stack","option","gridlines","firstVisible","removeComment","getComment","removeCommentsRange","commentCell","_undoComment","modules","m1","m2","m3","m4","m5","m6","m7","m8","uploader","XMLHttpRequest","apiOnly","accept","cellDates","startImport","fileDialog","_safeColor","_getCellStyle","excel","stl","font","alignment","_getExcelCellStyle","_getPdfCellStyle","rgb","fill","fgColor","sz","italic","bold","wrapText","getBorderStyles","textAlign","fontSize","strikethrough","vertAlign","whiteSpace","_getDocStyle","$exportView","pdf","export_mode","defaultOptions","stubCells","footer","heights","rawValues","filterHTML","_exportView","dataOnly","sheetOptions","_hidden","pdfTable","textBefore","sheetData","scheme","_getStyles","cached","cachedConditions","_getDefaults","docHeader","delta","rIndex","cIndex","_getCellConditions","computed","getComputedStyle","bg","_updateStyleCondition","rgbToHex","_updatePdfData","colspan","rowData","exportData","rowSize","pad","paddingTop","paddingBottom","Sheet","Name","Ref","getAutowidth","prop","orientation","$getExportValue","_excel_to_data","dataObj","sheetIndex","book","stylescount","styleshash","_safeFont","va","numFmt","_getBorderStyles","_getTypes","_getHidden","safe","_parseExcel","driver","full","states","_parseCsv","getRecords","clearRange","callCommand","setSize","insertRow","deleteRow","insertColumn","deleteColumn","checkSpans","changed","spanSize","changeSpan","removeFreeze","getIndexById","hideRow","chart","getRangeValue","registerMathMethod","recalculate","setPlaceholder","spn","rangeStr","setRangeValue","setSheetState","getSheetState","addSheet","clearSheet","renameSheet","editSheet","removeSheet","und","srt","correctVal","cb","muonPage","sameValue","oldType","dateValue","muonItem","updatedType","baseStyle","urlStyle","param","tbl","finished","ok","resetUndo","groupUndo","changeDecimals","formulas","defaultMenu","readonlyMenu","getMenuData","component","_base_index","getDefaultStyles","_sub_init","_set_handlers","$skin","setSkinDefaults","background","subbar","tblObj","attachTo","paste","lists","sizeToContent","getMenuItem","contextMenu","dialogs","viewBases","rows_setter","operations","m9","m10","m11","m12","m13","m14","m16","m17","m16a","m16b","m16c","m18","m19","m20","m21","m22","m23","m24","m25","m26","m27","m28","m29","m30","m31","$onLoad","api","rco","lcl","fcl","hbr","hhd","hrc","mat","ops","cor","sav","cfm","fml","prt","AtomDataLoader"],"mappings":";;;;;;;;uJACAA,MAAMC,KAAKC,YCDI,CACdC,OAAO,QAEI,kBACE,kBACF,iBACC,eACH,cACE,uBACO,0BACA,2BACL,2BACD,oCACO,yBACJ,4BACA,qCAED,iBACL,YACA,YACA,aACC,eACC,gBACA,iBACC,aACL,WACG,eAEC,cACF,aAEC,6BAEa,0CACA,4BACF,iBACP,gCACQ,+BACG,iCACF,kCACE,kBAEf,sBACM,4BACD,qBACC,sBACA,uBACC,kBAEJ,mBACG,2BACC,qCACH,wCAEM,iCACD,yBACC,0BACA,6BACG,gCACA,0BAEN,8BACE,kCAEA,+BACA,gCACA,WAEZ,oBAEU,8BACM,6DACN,uBACD,wCACK,iCAEN,uBACD,kBACD,YAEH,yBACQ,8BACD,wBAEP,wBACO,0BACJ,0BAEA,gBACF,+BAEc,gFACA,8EACH,6EACN,uCACD,+BAEN,sBACM,sCACG,iCACH,4BACC,gBACN,oBACG,4BACC,+BACC,+BACF,yBACH,6BACK,mBACJ,2BACA,8BACG,2BACC,8BACE,4BACC,0BACH,8BACG,6BAEP,gBAEF,eACC,uBACM,gCACA,+BAEH,qBACE,sBACD,4BAEE,wBACA,wBACA,uBAED,6BACI,iCACA,gCACE,0BAEP,oBACA,mBACD,oBACE,oBACF,oBACE,uBACC,4BACI,4BAEL,uBACC,wBACA,uBACD,4BACM,kCACA,4BACA,0BACF,6CACA,6CACA,yCACA,2CACE,6BACC,6BACD,0BACF,yBACC,0BACA,sEAEJ,4BACI,2CACA,iDACE;qBACA,4BACD,4BACC,8BACC,+BACA,oCACH,4BACG,+BACA,sBAET,uBACG,6BACG,2BACL,6BACO,mBACV,wBACE,uBACG,yBACF,2BAEI,mCACF,uBACH,uBAEG,iCACO,kCACE,mCACD,gCACF,uBAEP,0BAEM,iBAEtBC,SAAU,OACA,wBACK,iCACC,0BACF,yBACC,oCACI,yBACP,uBACG,+BACE,4BACD,6BACE,gCACC,8BACH,8BACE,qCACK,yCACL,4BACH,4BACE,6BACD,0BACF,2BACG,8BACA,oBACR,aACA,iBACA,YACA,cACE,oCACU,8CACA,wCACL,oBACD,mBACD,mBACH,0BACQ,qCACF,oCACC,qCACA,0CACA,yCACE,sCACN,8CACE,qCACF,wBACA,yBACJ,mBACG,eACL,cACG,gBACD,oBACI,wBACI,sBACF,4BACK,oCACD,+BACL,cAEfC,MAAM,gBACW,8BACA,4BACF,kBACN,aACD,kBACM,2BACG,mCACA,wBACP,sBACK,yBACN,YACA,YACA,eACG,0BACM,gCACA,8BACF,4BACA,8BACE,qBACT,oBACM,0BACA,wBACF,sBACA,wBACE,oBACJ,8BACY,4BACZ,cACF,aACC,sBACK,uBACA,qCACc,+CACH,yCACR,uBACL,YACH,yBACQ,8BACD,wBACP,wBACO,0BACJ,uBACJ,kBACI,uBACC,oBACL,kBACI,0BACC,mBACL,wBACU,wCACH,wCACG,qCACF,oCACC,qCACA,uCACD,2BACH,yBACJ,wBACQ,wCACH,cACP,WACC,aACC,wBACQ,+BACD,0BACE,0BACF,4BACI,uBAErBC,MAAM,cACQ,2BACI;eACF,oBAEhBC,WAAW,MACH,SAERC,QAAQ,YACO,wBACA,6BACI,8BACA,uCACD,8BACJ,sBACC,CACb,UACA,SACA,WACA,gBC3VHR,MAAMS,QAAQ,CACbC,KAAM,eACNC,SAAS,aACTC,MAAO,SAASC,GACfA,EAAOC,QAAW,CACjBC,KAAK,cACLC,KAAK,CACJD,KAAM,eACNE,QAAS,CACRC,SAAS,aAEVC,OAAO,EAAGC,OAAO,GAElBC,KAAMR,EAAOQ,QAGdrB,MAAMsB,GAAGC,YChBXvB,MAAMS,QAAQ,CACbC,KAAM,yBACNc,SAAS,CACRC,MAAO,KAERb,MAAO,SAASC,OACTa,EAAO1B,MAAM0B,KAAKC,MACxBd,EAAOG,KAAO,CACbY,OAAQ,EACRC,KAAK,CACJ,CAAEd,KAAM,eAAgBe,QAAQ,EAAOC,QAAQ,EAC9CZ,OAAQ,EACRC,OAAQ,EACRH,QAAS,CACRC,SAAU,SAASc,UACXhC,MAAMC,KAAKC,YAAYE,SAAS,WAAW4B,EAAIC,MAGxDC,GAAG,CACFC,cAAe,WACAC,KAAKC,gBAAgBA,g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"}