{"version":3,"sources":["webpack:///./node_modules/@progress/kendo-ui/js/spreadsheet/numformat.js","webpack:///./node_modules/@progress/kendo-ui/js/spreadsheet/print.js","webpack:///./node_modules/@progress/kendo-ui/js/spreadsheet/navigator.js","webpack:///./node_modules/@progress/kendo-ui/js/spreadsheet/nameeditor.js","webpack:///./node_modules/@progress/kendo-ui/js/spreadsheet/propertybag.js"],"names":["module","exports","modules","installedModules","__webpack_require__","moduleId","id","loaded","call","m","c","p","0","3","Error","1647","1660","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","f","define","apply","undefined","util","kendo","calc","spreadsheet","dom","RX_COLORS","RX_CONDITION","parse","input","InputStream","decimalPart","sections","haveConditional","eof","sec","readSection","push","cond","length","op","value","slice","maybeColor","skip","toLowerCase","maybeCondition","val","parseFloat","isNaN","custom","readFormat","tok","format","prev","readNext","type","test","part","maybeFraction","fraction","ch","sep","decimal","sign","charAt","split","am","pm","next","readEscaped","lookingAt","color","body","print","map","printSection","join","out","printToken","fmt","padLeft","substr","JSON","stringify","adjustDecimals","x","forEach","diff","adjusted","i","tmp","splice","TokenStream","parts","index","ahead","n","restart","compileFormatPart","hasDate","hasTime","hasAmpm","percentCount","currency","scaleCount","code","separeThousands","declen","intFormat","decFormat","condition","preamble","checkComma","a","b","hidden","Math","pow","TEXT","compile","memoize","tree","Function","runtime","makeDateFormat","section","found","j","max","toUpperCase","unpackDate","unpackTime","date","culture","d","calendars","standard","days","namesAbbr","day","names","month","months","year","time","t","ampm","fraclen","ret","hours","minutes","seconds","milliseconds","toFixed","replace","eltime","fill","formatInt","lastPart","str","shouldInsertMinus","iv","result","len","add","skipMinus","numberFormat","k","chf","unshift","formatDec","pos","indexOf","decimals","last","isFinite","String","round","num","digNumber","intpart","decpart","Number","width","padRight","exec","exp","parseInt","text","el","formatting","span","element","__dataType","attr","style","children","visibility","textAndColor","ast","1661","1662","957","972","1641","1656","1663","CONT","CellRef","kdrw","drawing","geo","geometry","GUIDELINE_WIDTH","distributeCoords","heights","pageHeight","maxEmpty","headerRows","headerCoords","curr","bottom","header","h","ceil","doLayout","sheet","range","options","grid","_grid","normalize","wholeRect","rectangle","drawings","_drawings","box","drawingBoundingBox","intersects","offset","left","top","cells","rowHeights","colWidths","mergedCells","_getMergedCells","maxRow","maxCol","row","col","cell","relrow","topLeft","relcol","rh","rowHeight","cw","columnWidth","forScreen","filter","tl","topLeftCell","_rows","_columns","right","secondary","primary","merged","rowspan","height","colspan","sum","bottomRight","nonEmpty","shouldDrawCell","emptyCells","empty","pageWidth","scaleFactor","scale","fitWidth","reduce","hyCoords","yCoords","xCoords","boxWidth","boxHeight","headerCells","orlast","offsetX","offsetY","Object","keys","ref","toRangeRef","y","clone","sort","orderCoords","orderCells","hash","target","assign","copy","key","sameBorder","size","background","borderRight","borderBottom","validation","drawLayout","layout","group","ncols","nrows","addPage","endbottom","endright","isInside","min","page","Group","append","content","clip","Path","fromRect","Rect","matrix","Matrix","multiplyCopy","translate","hCenter","vCenter","transform","guidelines","moveTo","lineTo","close","stroke","guideColor","borders","Borders","drawCell","bordersGroup","vert","rendered","horiz","image","url","_workbook","imageUrl","Image","opacity","g","rect","r2d2","origin","floor","textAlign","drawText","applyIndent","indent","paddingLeft","paddingRight","document","createElement","position","overflow","boxSizing","lineHeight","appendChild","firstChild","removeChild","padding","font","makeFontDef","textDecoration","underline","wrap","whiteSpace","overflowWrap","wordWrap","createTextNode","vtrans","verticalAlign","offsetHeight","text_group","drawDOM","italic","bold","fontSize","fontFamily","draw","callback","SHEETREF","Range","Ref","jQuery","extend","paperSize","landscape","margin","center","paper","pdf","getPaperOptions","set","author","creator","keywords","multiPage","subject","title","autoPrint","_ref","Container","pb","_properties","borderLeft","get","borderTop","addVert","addHoriz","border","drawTabularData","progress","$","Deferred","promise","dataSource","columns","headerBackground","headerColor","oddBackground","evenBackground","useGridFormat","defineFont","getFontFaces","charWidth","charWidthFunction","textWidth","mkCell","data","fetch","reject","field","columnTitles","columnWidths","rows","rowIndex","colIndex","label","Sheet","fromJSON","name","w","resolve","bind","prototype","this","recalc","_context","CACHE_CHAR_WIDTH","func","div","fromCharCode","widths","nextSibling","offsetWidth","charCodeAt","1664","1665","20","1658","RangeRef","EdgeNavigator","Class","init","axis","rangeGetter","union","prevLeft","current","prevVisible","nextRight","nextVisible","nextLeft","prevRight","boundary","SheetNavigator","_sheet","autoFillCalculator","AutoFillCalculator","colEdge","columnRange","rowEdge","rowRange","_viewPortHeight","unionWithMerged","topRow","bottomRow","leftCol","rightCol","selectionIncludesMergedCells","select","contains","_mergedCells","setSelectionValue","selection","setTimeout","selectAll","_sheetRef","mode","addToExisting","refForMode","concat","rowRef","colRef","startSelection","shiftKey","view","startAutoFill","activeCell","first","completeSelection","selectForContextMenu","_activeDrawing","selectDrawingForContextMenu","triggerChange","modifySelection","action","scrollInto","direction","determineDirection","viewPortHeight","originalSelection","currentOriginalSelectionRange","bottomLeft","prevPage","nextPage","firstVisible","lastVisible","nextUntil","makeWordMovement","prevUntil","newSelection","focus","updateCurrentSelectionRange","moveActiveCell","originalActiveCell","column","navigateInSelection","selTopLeft","selBottomRight","isFirstCell","isLastCell","topLeftCol","topLeftRow","setSelection","sel","currentNavigationRange","done","navigatedAway","isSingleCellSelected","singleCellSelection","eq","focusNextElement","nextNavigationRange","_view","find","trigger","previousNavigationRange","shouldSkip","extendSelection","resizeAutoFill","isHiddenRow","isHiddenColumn","isMerged","forEachMergedCell","collapse","hint","_autoFillOrigin","dest","autoFillDest","punch","preview","_previewFillFrom","updateAutoFill","currentSelectionRange","leftMode","rightMode","topMode","bottomMode","originalSelect","replaceAt","selectionRangeIndex","subset","bottomCol","pivot","isCol","firstVal","advanced","1659","1657","CLASS_NAMES","list","NameEditor","ui","Widget","addClass","comboBoxTitle","messages","nameBox","DataSource","transport","read","forEachName","def","success","cache","comboElement","combo","appendTo","kendoComboBox","clearButton","dataTextField","dataValueField","template","autoBind","ignoreCase","change","_on_listChange","noDataTemplate","open","getKendoComboBox","on","_on_keyDown","_on_focus","popup","ev","stopPropagation","preventDefault","item","closest","dataItem","_deleteItem","keyCode","_prevValue","window","1666","Property","start","end","dst","iterator","JsonProperty","ValueProperty","values","formats","Date","dateToNumber","toExcelFormat","calendar","patterns","limitPrecision","cloneFormulaValue","deepClone","cloneFormulaTree","PropertyBag","specs","property","sortable","serializable","depends","rowCount","columnCount","defaultValues","cellCount","properties","lists","spec","SparseRangeList","prop","formula","getState","state","setState","si","sourceStart","sourceEnd","targetStart","iter","at","iterators","hBorders","leftBorders","rightBorders","addBorder","forEachProperty","ALL_PROPERTIES"],"mappings":"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","file":"js/chunk-vendors~8395ccfb.7f11d756.js","sourcesContent":["module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(1660);\n\tmodule.exports = __webpack_require__(1660);\n\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n/***/ }),\n\n/***/ 1647:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./calc\");\n\n/***/ }),\n\n/***/ 1660:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// -*- fill-column: 100 -*-\n\n\t(function(f, define){\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(1647), __webpack_require__(1661), __webpack_require__(1662) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t})(function(){\n\t \"use strict\";\n\n\t // WARNING: removing the following jshint declaration and turning\n\t // == into === to make JSHint happy will break functionality.\n\t /* jshint eqnull:true, newcap:false, laxbreak:true, shadow:true, -W054 */\n\t /* jshint latedef: nofunc */\n\n\t var util = kendo.util;\n\t var calc = kendo.spreadsheet.calc;\n\t var dom = kendo.dom;\n\n\t var RX_COLORS = /^\\[(black|green|white|blue|magenta|yellow|cyan|red)\\]/i;\n\t var RX_CONDITION = /^\\[(<=|>=|<>|<|>|=)(-?[0-9.]+)\\]/;\n\n\t /* The proper amount of suffering for whoever designed the Excel\n\t Custom Number Format would be to have him implement the\n\t formatter himself. */\n\n\t function parse(input) {\n\t input = calc.InputStream(input);\n\t var sections = [], haveConditional = false, decimalPart;\n\n\t while (!input.eof()) {\n\t var sec = readSection();\n\t sections.push(sec);\n\t if (sec.cond) {\n\t haveConditional = true;\n\t }\n\t }\n\n\t // From https://support.office.com/en-us/article/Create-or-delete-a-custom-number-format-78f2a361-936b-4c03-8772-09fab54be7f4:\n\t //\n\t // A number format can have up to four sections of code, separated by semicolons. These\n\t // code sections define the format for positive numbers, negative numbers, zero values,\n\t // and text, in that order.\n\t //\n\t // You do not have to include all code sections in your custom number format. If you\n\t // specify only two code sections for your custom number format, the first section is\n\t // used for positive numbers and zeros, and the second section is used for negative\n\t // numbers. If you specify only one code section, it is used for all numbers. If you want\n\t // to skip a code section and include a code section that follows it, you must include\n\t // the ending semicolon for the section that you skip.\n\t //\n\t // However, if sections have conditionals, it is not clear if:\n\t //\n\t // - still at most four are allowed\n\t // - is the last section still for text\n\t //\n\t // We will assume that if no sections have conditionals, then there must be at most 4, and\n\t // they will be interpreted in the order above. If the first section contains a\n\t // conditional, then there can be any number of them; if the last one is not conditional\n\t // then it will be interpreted as text format.\n\n\t if (!haveConditional) {\n\t if (sections.length == 1) {\n\t sections[0].cond = \"num\";\n\t }\n\t else if (sections.length == 2) {\n\t sections[0].cond = { op: \">=\", value: 0 };\n\t sections[1].cond = { op: \"<\", value: 0 };\n\t }\n\t else if (sections.length >= 3) {\n\t sections[0].cond = { op: \">\", value: 0 };\n\t sections[1].cond = { op: \"<\", value: 0 };\n\t sections[2].cond = { op: \"=\", value: 0 };\n\t if (sections.length > 3) {\n\t sections[3].cond = \"text\";\n\t sections = sections.slice(0, 4);\n\t }\n\t }\n\t }\n\n\t return sections;\n\n\t function maybeColor() {\n\t var m = input.skip(RX_COLORS);\n\t if (m) {\n\t return m[1].toLowerCase();\n\t }\n\t }\n\n\t function maybeCondition() {\n\t var m = input.skip(RX_CONDITION);\n\t if (m) {\n\t var val = parseFloat(m[2]);\n\t if (!isNaN(val)) {\n\t return { op: m[1], value: val, custom: true };\n\t }\n\t }\n\t }\n\n\t function readFormat() {\n\t var format = [], tok, prev = null;\n\t while (!input.eof() && (tok = readNext())) {\n\t // disambiguate: m/mm might mean month or minutes depending on surrounding context.\n\t if (tok.type == \"date\") {\n\t if (prev && /^(el)?time$/.test(prev.type) && prev.part == \"h\"\n\t && tok.part == \"m\" && tok.format < 3) {\n\t // m or mm that follows hours should display minutes\n\t tok.type = \"time\";\n\t }\n\t } else if (/^(el)?time$/.test(tok.type) && tok.part == \"s\") {\n\t if (prev && prev.type == \"date\" && prev.part == \"m\"\n\t && prev.format < 3) {\n\t // m or mm followed by seconds should display minutes\n\t prev.type = \"time\";\n\t }\n\t }\n\t if (!(/^(?:str|space|fill)$/.test(tok.type))) {\n\t prev = tok;\n\t }\n\t format.push(tok);\n\t }\n\t return format;\n\t }\n\n\t function maybeFraction(tok) {\n\t if (tok.type != \"date\" || (tok.part == \"m\" && tok.format < 3)) {\n\t var m = input.skip(/^\\.(0+)/);\n\t if (m) {\n\t tok.fraction = m[1].length;\n\t if (tok.type == \"date\") {\n\t tok.type = \"time\";\n\t }\n\t }\n\t }\n\t return tok;\n\t }\n\n\t function readNext() {\n\t var ch, m;\n\t // numbers\n\t if ((m = input.skip(/^([#0?]+)(?:,([#0?]+))+/))) {\n\t // thousands separator. seems convenient to treat\n\t // this as a single token.\n\t return { type: \"digit\", sep: true, format: m[1] + m[2], decimal: decimalPart };\n\t }\n\t if ((m = input.skip(/^[#0?]+/))) {\n\t return { type: \"digit\", sep: false, format: m[0], decimal: decimalPart };\n\t }\n\t // XXX: handle this one!\n\t if ((m = input.skip(/^(e)([+-])/i))) {\n\t return { type: \"exp\", ch: m[1], sign: m[2] };\n\t }\n\t // dates\n\t if ((m = input.skip(/^(d{1,4}|m{1,5}|yyyy|yy)/i))) {\n\t m = m[1].toLowerCase();\n\t return maybeFraction({ type: \"date\", part: m.charAt(0), format: m.length });\n\t }\n\t // time (interpret as a date)\n\t if ((m = input.skip(/^(hh?|ss?)/i))) { // m and mm are handled above\n\t m = m[1].toLowerCase();\n\t return maybeFraction({ type: \"time\", part: m.charAt(0), format: m.length });\n\t }\n\t // elapsed time (interpret as interval of days)\n\t if ((m = input.skip(/^\\[(hh?|mm?|ss?)\\]/i))) {\n\t m = m[1].toLowerCase();\n\t return maybeFraction({ type: \"eltime\", part: m.charAt(0), format: m.length });\n\t }\n\t if ((m = input.skip(/^(a[.]?m[.]?\\/p[.]?m[.]?|a\\/p)/i))) {\n\t m = m[1].split(\"/\");\n\t return { type: \"ampm\", am: m[0], pm: m[1] };\n\t }\n\t switch ((ch = input.next())) { // JSHint sadness\n\t case \";\":\n\t return null;\n\t case \"\\\\\":\n\t // quotes next character\n\t return { type: \"str\", value: input.next() };\n\t case '\"':\n\t return { type: \"str\", value: input.readEscaped(ch) };\n\t case \"@\":\n\t return { type: \"text\" };\n\t case \"_\":\n\t // whitespace of the width of following character\n\t return { type: \"space\", value: input.next() };\n\t case \"*\":\n\t // fills cell width with the following character\n\t return { type: \"fill\", value: input.next() };\n\t case \".\":\n\t if (input.lookingAt(/^\\s*[#0?]/)) {\n\t decimalPart = true;\n\t return { type: \"dec\" };\n\t }\n\t return { type: \"str\", value: \".\" };\n\t case \"%\":\n\t return { type: \"percent\" };\n\t case \",\":\n\t return { type: \"comma\" };\n\t }\n\n\t // whatever we can't make sense of, output literally.\n\t return { type: \"str\", value: ch };\n\t }\n\n\t function readSection() {\n\t decimalPart = false;\n\t var color = maybeColor(), cond = maybeCondition();\n\t if (!color && cond) {\n\t color = maybeColor();\n\t }\n\t return {\n\t color : color,\n\t cond : cond,\n\t body : readFormat()\n\t };\n\t }\n\t }\n\n\t function print(sections) {\n\t return sections.map(printSection).join(\";\");\n\n\t function printSection(sec) {\n\t var out = \"\";\n\t if (sec.color) {\n\t out += \"[\" + sec.color + \"]\";\n\t }\n\t if (sec.cond) {\n\t if (!(sec.cond == \"text\" || sec.cond == \"num\")) {\n\t out += \"[\" + sec.cond.op + sec.cond.value + \"]\";\n\t }\n\t }\n\t out += sec.body.map(printToken).join(\"\");\n\t return out;\n\t }\n\n\t function maybeFraction(fmt, tok) {\n\t if (tok.fraction) {\n\t fmt += \".\" + padLeft(\"\", tok.fraction, \"0\");\n\t }\n\t return fmt;\n\t }\n\n\t function printToken(tok) {\n\t if (tok.type == \"digit\") {\n\t if (tok.sep) {\n\t return tok.format.charAt(0) + \",\" + tok.format.substr(1);\n\t } else {\n\t return tok.format;\n\t }\n\t }\n\t else if (tok.type == \"exp\") {\n\t return tok.ch + tok.sign;\n\t }\n\t else if (tok.type == \"date\" || tok.type == \"time\") {\n\t return maybeFraction(padLeft(\"\", tok.format, tok.part), tok);\n\t }\n\t else if (tok.type == \"eltime\") {\n\t return maybeFraction(\"[\" + padLeft(\"\", tok.format, tok.part) + \"]\", tok);\n\t }\n\t else if (tok.type == \"ampm\") {\n\t return tok.am + \"/\" + tok.pm;\n\t }\n\t else if (tok.type == \"str\") {\n\t return JSON.stringify(tok.value);\n\t }\n\t else if (tok.type == \"text\") {\n\t return \"@\";\n\t }\n\t else if (tok.type == \"space\") {\n\t return \"_\" + tok.value;\n\t }\n\t else if (tok.type == \"fill\") {\n\t return \"*\" + tok.value;\n\t }\n\t else if (tok.type == \"dec\") {\n\t return \".\";\n\t }\n\t else if (tok.type == \"percent\") {\n\t return \"%\";\n\t }\n\t else if (tok.type == \"comma\") {\n\t return \",\";\n\t }\n\t }\n\t }\n\n\t function adjustDecimals(sections, x) {\n\t sections.forEach(function(sec) {\n\t var diff = x;\n\t if (sec.cond == \"text\") {\n\t return;\n\t }\n\t var body = sec.body, adjusted = false, i = body.length;\n\t while (diff !== 0 && --i >= 0) {\n\t var tok = body[i];\n\t if (tok.type == \"digit\") {\n\t if (tok.decimal) {\n\t adjusted = true;\n\t if (diff > 0) {\n\t tok.format += padLeft(\"\", diff, \"0\");\n\t } else if (diff < 0) {\n\t var tmp = tok.format.length;\n\t tok.format = tok.format.substr(0, tmp + diff);\n\t diff += tmp - tok.format.length;\n\t }\n\t if (tok.format.length === 0) {\n\t body.splice(i, 1);\n\t while (--i >= 0) {\n\t tok = body[i];\n\t if (tok.type == \"digit\" && tok.decimal) {\n\t ++i;\n\t break;\n\t }\n\t if (tok.type == \"dec\") {\n\t body.splice(i, 1);\n\t break;\n\t }\n\t }\n\t }\n\t }\n\t if (diff > 0) {\n\t break;\n\t }\n\t }\n\t }\n\t if (!adjusted && diff > 0) {\n\t // no decimal part was found, insert one after the last digit token.\n\t body.splice(\n\t i + 1, 0, {\n\t type : \"dec\"\n\t }, {\n\t type : \"digit\",\n\t sep : false,\n\t decimal : true,\n\t format : padLeft(\"\", diff, \"0\")\n\t }\n\t );\n\t }\n\t });\n\t }\n\n\t function TokenStream(parts) {\n\t var index = 0;\n\t return {\n\t next: function() {\n\t return parts[index++];\n\t },\n\t eof: function() {\n\t return index >= parts.length;\n\t },\n\t ahead: function(n, f) {\n\t if (index + n <= parts.length) {\n\t var val = f.apply(null, parts.slice(index, index + n));\n\t if (val) {\n\t index += n;\n\t }\n\t return val;\n\t }\n\t },\n\t restart: function() {\n\t index = 0;\n\t }\n\t };\n\t }\n\n\t function compileFormatPart(format) {\n\t var input = TokenStream(format.body);\n\t var hasDate = false;\n\t var hasTime = false;\n\t var hasAmpm = false;\n\t var percentCount = 0;\n\t var currency = /[\\$\\xA2-\\xA5\\u058F\\u060B\\u09F2\\u09F3\\u09FB\\u0AF1\\u0BF9\\u0E3F\\u17DB\\u20A0-\\u20BD\\uA838\\uFDFC\\uFE69\\uFF04\\uFFE0\\uFFE1\\uFFE5\\uFFE6]/;\n\t var scaleCount = 0;\n\t var code = \"var intPart, decPart, isNegative, date, time; \";\n\t var separeThousands = false;\n\t var declen = 0;\n\t var intFormat = [], decFormat = [];\n\t var condition = format.cond;\n\t var preamble = \"\";\n\n\t if (condition == \"text\") {\n\t preamble = \"if (typeof value == 'string' || value instanceof kendo.spreadsheet.CalcError) { \";\n\t }\n\t else if (condition == \"num\") {\n\t preamble = \"if (typeof value == 'number') { \";\n\t }\n\t else if (condition) {\n\t var op = condition.op == \"=\" ? \"==\" : condition.op;\n\t preamble = \"if (typeof value == 'number' && value \"\n\t + op + \" \" + condition.value + \") { \";\n\t if (!condition.custom) {\n\t code += \"value = Math.abs(value); \";\n\t }\n\t }\n\n\t if (format.color) {\n\t code += \"result.color = \" + JSON.stringify(format.color) + \"; \";\n\t }\n\n\t function checkComma(a, b) {\n\t if ((a.type == \"digit\" && b.type == \"comma\") ||\n\t (a.type == \"comma\" && a.hidden && b.type == \"comma\"))\n\t {\n\t b.hidden = true;\n\t scaleCount++;\n\t }\n\t }\n\n\t while (!input.eof()) {\n\t input.ahead(2, checkComma);\n\t var tok = input.next();\n\t if (tok.type == \"percent\") {\n\t percentCount++;\n\t }\n\t else if (tok.type == \"digit\") {\n\t if (tok.decimal) {\n\t declen += tok.format.length;\n\t decFormat.push(tok.format);\n\t } else {\n\t intFormat.push(tok.format);\n\t if (tok.sep) {\n\t separeThousands = true;\n\t }\n\t }\n\t }\n\t else if (tok.type == \"time\") {\n\t hasTime = true;\n\t }\n\t else if (tok.type == \"date\") {\n\t hasDate = true;\n\t }\n\t else if (tok.type == \"ampm\") {\n\t hasAmpm = hasTime = true;\n\t }\n\t }\n\n\t if (percentCount > 0) {\n\t code += \"value *= \" + Math.pow(100, percentCount) + \"; \";\n\t }\n\t if (scaleCount > 0) {\n\t code += \"value /= \" + Math.pow(1000, scaleCount) + \"; \";\n\t }\n\t if (intFormat.length) {\n\t code += \"intPart = runtime.formatInt(culture, value, \" + JSON.stringify(intFormat) + \", \" + declen + \", \" + separeThousands + \"); \";\n\t code += \"isNegative = parseInt(intPart[0]) < 0;\";\n\t }\n\t if (decFormat.length) {\n\t code += \"decPart = runtime.formatDec(value, \" + JSON.stringify(decFormat) + \", \" + declen + \"); \";\n\t }\n\t if (intFormat.length || decFormat.length) {\n\t code += \"type = 'number'; \";\n\t }\n\t if (hasDate) {\n\t code += \"date = runtime.unpackDate(value); \";\n\t }\n\t if (hasTime) {\n\t code += \"time = runtime.unpackTime(value); \";\n\t }\n\t if (hasDate || hasTime) {\n\t code += \"type = 'date'; \";\n\t }\n\n\t if (percentCount > 0 || scaleCount > 0 || intFormat.length || decFormat.length || hasDate || hasTime) {\n\t if (!preamble) {\n\t preamble = \"if (typeof value == 'number') { \";\n\t }\n\t }\n\n\t input.restart();\n\t code += \"var matchedCurrency = false;\";\n\t while (!input.eof()) {\n\t var tok = input.next();\n\t if (tok.type == \"dec\") {\n\t code += \"output += culture.numberFormat['.']; \";\n\t }\n\t else if (tok.type == \"comma\" && !tok.hidden) {\n\t code += \"output += ','; \";\n\t }\n\t else if (tok.type == \"percent\") {\n\t code += \"type = 'percent'; \";\n\t code += \"output += culture.numberFormat.percent.symbol; \";\n\t }\n\t else if (tok.type == \"str\") {\n\t if (currency.test(tok.value)) {\n\t code += \"type = 'currency'; \";\n\t code += \"if (isNegative) { output += '-'; matchedCurrency = true; }\";\n\t }\n\t code += \"output += \" + JSON.stringify(tok.value) + \"; \";\n\t }\n\t else if (tok.type == \"text\") {\n\t code += \"type = 'text'; \";\n\t code += \"output += value; \";\n\t }\n\t else if (tok.type == \"space\") {\n\t code += \"if (output) result.body.push(output); \";\n\t code += \"output = ''; \";\n\t code += \"result.body.push({ type: 'space', value: \" + JSON.stringify(tok.value) + \" }); \";\n\t }\n\t else if (tok.type == \"fill\") {\n\t code += \"output += runtime.fill(\" + JSON.stringify(tok.value) + \"); \";\n\t }\n\t else if (tok.type == \"digit\") {\n\t code += \"if (isNegative && intPart[0] && matchedCurrency) {intPart[0] = intPart[0].replace('-', '');}\";\n\t code += \"output += \" + (tok.decimal ? \"decPart\" : \"intPart\") + \".shift(); \";\n\t }\n\t else if (tok.type == \"date\") {\n\t code += \"output += runtime.date(culture, date, \"\n\t + JSON.stringify(tok.part) + \", \" + tok.format + \"); \";\n\t }\n\t else if (tok.type == \"time\") {\n\t code += \"output += runtime.time(time, \"\n\t + JSON.stringify(tok.part) + \", \" + tok.format + \", \" + hasAmpm + \", \" + tok.fraction + \"); \";\n\t }\n\t else if (tok.type == \"eltime\") {\n\t code += \"output += runtime.eltime(value, \"\n\t + JSON.stringify(tok.part) + \", \" + tok.format + \", \" + tok.fraction + \"); \";\n\t }\n\t else if (tok.type == \"ampm\") {\n\t // XXX: should use culture? As per the \"spec\", Excel\n\t // displays whatever the token was (AM/PM, a/p etc.)\n\t code += \"output += time.hours < 12 ? \" + JSON.stringify(tok.am) + \" : \" + JSON.stringify(tok.pm) + \"; \";\n\t }\n\t }\n\n\t code += \"if (output) result.body.push(output); \";\n\t code += \"result.type = type; \";\n\t code += \"return result; \";\n\n\t if (preamble) {\n\t code = preamble + code + \"}\";\n\t }\n\n\t return code;\n\t }\n\n\t var TEXT = compileFormatPart({ cond: \"text\", body: [ { type: \"text\" } ] });\n\n\t var compile = util.memoize(function(format) {\n\t var tree = parse(format);\n\t var code = tree.map(compileFormatPart);\n\t code.push(TEXT);\n\t code = code.join(\"\\n\");\n\t code = \"'use strict'; return function(value, culture){ \"\n\t + \"if (!culture) culture = kendo.culture(); \"\n\t + \"var output = '', type = null, result = { body: [] }; \" + code + \"; return result; };\";\n\t return new Function(\"runtime\", code)(runtime);\n\t });\n\n\t // Attempts to produce a format compatible with kendo.parseDate from our Excel format. Needed\n\t // in runtime.parseDate (passing Excel format to kendo.parseDate will mess up the month or\n\t // minutes). https://github.com/telerik/kendo-ui-core/issues/3797\n\t var makeDateFormat = util.memoize(function(format){\n\t var tree = parse(format);\n\t var section, found = false, hasAmpm = false;\n\n\t // locate a section that contains date/time formatting. only the first will be converted.\n\t for (var i = 0; i < tree.length; ++i) {\n\t section = tree[i];\n\t for (var j = 0; j < section.body.length; ++j) {\n\t if (/^(?:date|time|ampm)$/.test(section.body[j].type)) {\n\t found = true;\n\t if (section.body[j].type == \"ampm\") {\n\t hasAmpm = true;\n\t }\n\t }\n\t }\n\t if (found) {\n\t break;\n\t }\n\t }\n\t if (!found) {\n\t return null;\n\t }\n\n\t return section.body.map(printToken).join(\"\");\n\n\t // a little copy/paste goes a long way\n\n\t function maybeFraction(fmt, tok) {\n\t if (tok.fraction) {\n\t fmt += padLeft(\"\", Math.max(tok.fraction, 3), \"f\");\n\t }\n\t return fmt;\n\t }\n\n\t function printToken(tok) {\n\t if (tok.type == \"digit\") {\n\t if (tok.sep) {\n\t return tok.format.charAt(0) + \",\" + tok.format.substr(1);\n\t } else {\n\t return tok.format;\n\t }\n\t }\n\t else if (tok.type == \"exp\") {\n\t return tok.ch + tok.sign;\n\t }\n\t else if (tok.type == \"date\" || tok.type == \"time\") {\n\t var part = tok.part;\n\t if (tok.type == \"date\" && /^m/.test(part)) {\n\t part = \"M\"; // month, not minutes\n\t }\n\t else if (tok.type == \"time\" && /^h/.test(part)) {\n\t if (!hasAmpm) {\n\t // 24-hours clock is H or HH\n\t part = part.toUpperCase();\n\t }\n\t }\n\t return maybeFraction(padLeft(\"\", tok.format, part), tok);\n\t }\n\t else if (tok.type == \"ampm\") {\n\t return \"tt\";\n\t }\n\t else if (tok.type == \"str\") {\n\t // XXX: this is a bit wrong. it doesn't look like kendo.toString / kendo.parseDate\n\t // support arbitrary text (in Excel formats that's quoted), for example:\n\t // kendo.toString(new Date(), \"here's the day dude: dd\")\n\t // → \"3ere'8 t3e 19ay 19u19e: 19\" (it's 19th June, 3 o'clock, probably 8 seconds)\n\t return tok.value;\n\t }\n\t else if (tok.type == \"space\") {\n\t return \" \";\n\t }\n\t else if (tok.type == \"dec\") {\n\t return \".\";\n\t }\n\t else if (tok.type == \"percent\") {\n\t return \"%\";\n\t }\n\t else if (tok.type == \"comma\") {\n\t return \",\";\n\t }\n\t else {\n\t return \"\";\n\t }\n\t }\n\t });\n\n\t var runtime = {\n\n\t unpackDate: calc.runtime.unpackDate,\n\t unpackTime: calc.runtime.unpackTime,\n\n\t date: function(culture, d, part, length) {\n\t switch (part) {\n\t case \"d\":\n\t switch (length) {\n\t case 1: return d.date;\n\t case 2: return padLeft(d.date, 2, \"0\");\n\t case 3: return culture.calendars.standard.days.namesAbbr[d.day];\n\t case 4: return culture.calendars.standard.days.names[d.day];\n\t }\n\t break;\n\t case \"m\":\n\t switch (length) {\n\t case 1: return d.month + 1;\n\t case 2: return padLeft(d.month + 1, 2, \"0\");\n\t case 3: return culture.calendars.standard.months.namesAbbr[d.month];\n\t case 4: return culture.calendars.standard.months.names[d.month];\n\t case 5: return culture.calendars.standard.months.names[d.month].charAt(0);\n\t }\n\t break;\n\t case \"y\":\n\t switch (length) {\n\t case 2: return d.year % 100;\n\t case 4: return d.year;\n\t }\n\t break;\n\t }\n\t return \"##\";\n\t },\n\n\t time: function(t, part, length, ampm, fraclen) {\n\t var ret, fraction;\n\t switch (part) {\n\t case \"h\":\n\t ret = padLeft(ampm ? t.hours % 12 || 12 : t.hours, length, \"0\");\n\t if (fraclen) {\n\t fraction = (t.minutes + (t.seconds + t.milliseconds / 1000) / 60) / 60;\n\t }\n\t break;\n\t case \"m\":\n\t ret = padLeft(t.minutes, length, \"0\");\n\t if (fraclen) {\n\t fraction = (t.seconds + t.milliseconds / 1000) / 60;\n\t }\n\t break;\n\t case \"s\":\n\t ret = padLeft(t.seconds, length, \"0\");\n\t if (fraclen) {\n\t fraction = t.milliseconds / 1000;\n\t }\n\t break;\n\t }\n\t if (fraction) {\n\t ret += runtime.toFixed(fraction, fraclen).replace(/^0+/, \"\");\n\t }\n\t return ret;\n\t },\n\n\t eltime: function(value, part, length, fraclen) {\n\t var ret, fraction;\n\t switch (part) {\n\t case \"h\":\n\t ret = value * 24;\n\t break;\n\t case \"m\":\n\t ret = value * 24 * 60;\n\t break;\n\t case \"s\":\n\t ret = value * 24 * 60 * 60;\n\t break;\n\t }\n\t if (fraclen) {\n\t fraction = ret - (ret | 0);\n\t }\n\t ret = padLeft(ret | 0, length, \"0\");\n\t if (fraction) {\n\t ret += runtime.toFixed(fraction, fraclen).replace(/^0+/, \"\");\n\t }\n\t return ret;\n\t },\n\n\t fill: function(ch) {\n\t // XXX: how to implement this?\n\t return ch;\n\t },\n\n\t // formatting integer part is slightly different than decimal\n\t // part, so they're implemented in two functions. For the\n\t // integer part we need to walk the value and the format\n\t // backwards (right-to-left).\n\n\t formatInt: function(culture, value, parts, declen, sep) {\n\t // toFixed is perfect for rounding our value; if there is\n\t // no format for decimals, for example, we want the number\n\t // rounded up.\n\t value = runtime.toFixed(value, declen).replace(/\\..*$/, \"\");\n\t var lastPart = parts[parts.length - 1];\n\n\t if (declen > 0 && lastPart[parts.length - 1] != \"0\") {\n\t // if the rounded number is zero and we have decimal\n\t // format, consider it a non-significant digit (Excel\n\t // won't display the leading zero for 0.2 in format #.#).\n\t // the zero won't e omitted if using 0.0 format\n\t if (value === \"0\") { value = \"\"; }\n\t else if (value === \"-0\") { value = \"-\"; }\n\t }\n\n\t var shouldInsertMinus = false;\n\t var iv = value.length - 1;\n\t var result = [];\n\t var len = 0, str;\n\n\t function add(ch, skipMinus) {\n\t if (sep && len && len % 3 === 0 && /^[0-9]$/.test(ch)) {\n\t str = culture.numberFormat[\",\"] + str;\n\t }\n\t if(skipMinus && ch === \"-\") {\n\t shouldInsertMinus = true;\n\t ch = \"0\";\n\t }\n\t str = ch + str;\n\t len++;\n\t }\n\n\t for (var j = parts.length; --j >= 0;) {\n\t var format = parts[j];\n\t str = \"\";\n\t for (var k = format.length; --k >= 0;) {\n\t var chf = format.charAt(k);\n\t if (iv < 0) {\n\t if (chf == \"0\") {\n\t add(\"0\");\n\t } else if (chf == \"?\") {\n\t add(\" \");\n\t }\n\t } else {\n\t if (value == \"0\" && chf == \"?\") {\n\t add(\" \");\n\t } else if (chf == \"0\") {\n\t add(value.charAt(iv), true);\n\t } else {\n\t add(value.charAt(iv));\n\t }\n\t iv--;\n\t }\n\t }\n\t if (j === 0) {\n\t while (iv >= 0) {\n\t add(value.charAt(iv--));\n\t }\n\t }\n\t result.unshift(str);\n\t }\n\n\t if(shouldInsertMinus) {\n\t result[0] = \"-\" + result[0];\n\t }\n\n\t return result;\n\t },\n\n\t // for decimal part we walk in normal direction and pad on the\n\t // right if required (for '0' or '?' chars).\n\n\t formatDec: function(value, parts, declen) {\n\t value = runtime.toFixed(value, declen);\n\t var pos = value.indexOf(\".\");\n\t if (pos >= 0) {\n\t value = value.substr(pos + 1).replace(/0+$/, \"\");\n\t } else {\n\t value = \"\";\n\t }\n\n\t var iv = 0;\n\t var result = [];\n\n\t for (var j = 0; j < parts.length; ++j) {\n\t var format = parts[j];\n\t var str = \"\";\n\t for (var k = 0; k < format.length; ++k) {\n\t var chf = format.charAt(k);\n\t if (iv < value.length) {\n\t str += value.charAt(iv++);\n\t } else if (chf == \"0\") {\n\t str += \"0\";\n\t } else if (chf == \"?\") {\n\t str += \" \";\n\t }\n\t }\n\t result.push(str);\n\t }\n\n\t return result;\n\t },\n\n\t // JS's toFixed is broken, it's only OK to use it on integers.\n\t toFixed: function(value, decimals) {\n\t return (function toFixed(value, last) {\n\t if (!isFinite(value)) {\n\t return \"#NUM!\";\n\t }\n\n\t // deal early with the trivial cases\n\t if (value < 0) { // JS's Math.round is broken with negative numbers\n\t return \"-\" + toFixed(-value);\n\t }\n\n\t if (decimals === 0) { // no decimals\n\t return String(Math.round(value));\n\t }\n\n\t if (value === Math.round(value) && !/e/i.test(String(value))) { // value is integer and not too big\n\t return value.toFixed(decimals);\n\t }\n\n\t // this handles cases like 0.3.toFixed(20) == \"0.29999999999999998890\", or\n\t // 2.1825.toFixed(20) = \"2.18250000000000010658\".\n\t // https://github.com/telerik/kendo-ui-core/issues/3520#issuecomment-333768221\n\t // https://twitter.com/mcbazon/status/1035828655652593665\n\t var num = digNumber(value);\n\t var intpart = num.intpart;\n\t var decpart = num.decpart;\n\t if (decpart.length <= decimals) {\n\t while (decpart.length < decimals) {\n\t decpart += \"0\";\n\t }\n\t return intpart + \".\" + decpart;\n\t }\n\n\t if (last) {\n\t // \"we should definitely not get here\" (famous last words). Let's MAKE SURE\n\t // there's no more recursion.\n\t return intpart + \".\" + decpart.substr(0, decimals);\n\t }\n\n\t // if there are more decimals than wanted, round and try again.\n\t // it should not recurse more than once.\n\t var f = Math.pow(10, decimals);\n\t return toFixed(Math.round(value * f) / f, true);\n\n\t })(Number(value.toFixed(14))); /* restrict to 14 decimals, because 0.1 + 0.2 ===\n\t * 0.30000000000000004 */\n\t }\n\n\t };\n\n\t function padLeft(val, width, ch) {\n\t val += \"\";\n\t while (val.length < width) {\n\t val = ch + val;\n\t }\n\t return val;\n\t }\n\n\t function padRight(val, width, ch) {\n\t val += \"\";\n\t while (val.length < width) {\n\t val += ch;\n\t }\n\t return val;\n\t }\n\n\t // given a number, return { intpart, decpart } as strings. the main difficulty here is that JS\n\t // will stringify really large values in scientific notation (e.g. 1.23e+30, which is actually\n\t // the integer 1230000000000000000000000000000).\n\t function digNumber(num) {\n\t var str = String(num).toLowerCase();\n\t var intpart, decpart, m;\n\t var pos = str.indexOf(\".\");\n\t if (pos < 0) {\n\t pos = str.indexOf(\"e\");\n\t if (pos < 0) {\n\t intpart = str;\n\t decpart = \"\";\n\t } else {\n\t intpart = str.substr(0, pos);\n\t decpart = str.substr(pos);\n\t }\n\t } else {\n\t intpart = str.substr(0, pos);\n\t decpart = str.substr(pos + 1);\n\t }\n\t if ((m = /(\\d*)e([-+]?\\d+)/.exec(decpart))) {\n\t var exp = parseInt(m[2], 10);\n\t if (exp >= 0) {\n\t decpart = padRight(m[1], exp, \"0\");\n\t intpart += decpart.substr(0, exp);\n\t decpart = decpart.substr(exp);\n\t } else {\n\t intpart = padLeft(intpart, -exp, \"0\");\n\t decpart = intpart.substr(exp) + m[1];\n\t intpart = intpart.substr(0, intpart.length + exp);\n\t }\n\t }\n\t return { intpart: intpart || \"0\", decpart: decpart };\n\t }\n\n\t /* -----[ exports ]----- */\n\n\t function text(f) {\n\t var a = f.body;\n\t var text = \"\";\n\t for (var i = 0; i < a.length; ++i) {\n\t var el = a[i];\n\t if (typeof el == \"string\") {\n\t text += el;\n\t } else if (el.type == \"space\") {\n\t text += \" \";\n\t }\n\t }\n\t return text;\n\t }\n\n\t kendo.spreadsheet.formatting = {\n\t compile : compile,\n\t parse: parse,\n\t format: function(value, format, culture) {\n\t var f = compile(format)(value, culture);\n\t var span = dom.element(\"span\");\n\t span.__dataType = f.type;\n\t var a = f.body;\n\t if (f.color) {\n\t span.attr.style = { color: f.color };\n\t }\n\t for (var i = 0; i < a.length; ++i) {\n\t var el = a[i];\n\t if (typeof el == \"string\") {\n\t span.children.push(dom.text(el));\n\t } else if (el.type == \"space\") {\n\t span.children.push(dom.element(\"span\", {\n\t style: { visibility: \"hidden\" }\n\t }, [ dom.text(el.value) ]));\n\t }\n\t }\n\t return span;\n\t },\n\t text: function(value, format, culture) {\n\t var f = compile(format)(value, culture);\n\t return text(f);\n\t },\n\t textAndColor: function(value, format, culture) {\n\t var f = compile(format)(value, culture);\n\t return { text: text(f), color: f.color, type: f.type };\n\t },\n\t type: function(value, format) {\n\t return compile(format)(value).type;\n\t },\n\t adjustDecimals: function(format, diff) {\n\t var ast = parse(format);\n\t adjustDecimals(ast, diff);\n\t return print(ast);\n\t },\n\t makeDateFormat: makeDateFormat\n\t };\n\n\t}, __webpack_require__(3));\n\n\n/***/ }),\n\n/***/ 1661:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"../kendo.dom\");\n\n/***/ }),\n\n/***/ 1662:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"../util/main\");\n\n/***/ })\n\n/******/ });","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(1663);\n\tmodule.exports = __webpack_require__(1663);\n\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n/***/ }),\n\n/***/ 957:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"../util/text-metrics\");\n\n/***/ }),\n\n/***/ 972:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./range\");\n\n/***/ }),\n\n/***/ 1641:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./sheet\");\n\n/***/ }),\n\n/***/ 1656:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./references\");\n\n/***/ }),\n\n/***/ 1663:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(f, define){\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(1664), __webpack_require__(1641), __webpack_require__(972), __webpack_require__(1656), __webpack_require__(1665), __webpack_require__(957) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t})(function(){\n\t \"use strict\";\n\n\t var spreadsheet = kendo.spreadsheet;\n\t var CellRef = spreadsheet.CellRef;\n\t var kdrw = kendo.drawing;\n\t var formatting = spreadsheet.formatting;\n\t var geo = kendo.geometry;\n\n\t var GUIDELINE_WIDTH = 0.8;\n\n\t /* jshint eqnull:true, laxbreak:true, shadow:true, -W054 */\n\t /* jshint latedef: nofunc */\n\n\t // This takes a list of row heights and the page height, and\n\t // produces a list of Y coordinates for each row, such that rows\n\t // are not truncated across pages. However, the algorithm will\n\t // decide to truncate a row in the event that more than\n\t // `maxEmpty` (default 0.2) of the available space would\n\t // otherwise be left blank.\n\t //\n\t // It will be used for horizontal splitting too (will receive\n\t // column widths and page width, and produce a list of X coords).\n\t //\n\t // If the third argument (headerRows) is not null, it specifies a\n\t // number of rows to repeat on each page. On pages other than the\n\t // first, the necessary space will be skipped at the top. Header\n\t // coordinates (except for the first page) are pushed in\n\t // headerCoords.\n\t function distributeCoords(heights, pageHeight, maxEmpty, headerRows, headerCoords) {\n\t var curr = 0;\n\t var out = [];\n\t var bottom = pageHeight;\n\t var header = 0;\n\t if (pageHeight && maxEmpty) {\n\t maxEmpty *= pageHeight;\n\t }\n\t heights.forEach(function(h, i){\n\t if (headerRows != null && i < headerRows) {\n\t header += h;\n\t }\n\t if (pageHeight && curr + h > bottom) {\n\t if (bottom - curr < maxEmpty) {\n\t // align to next page\n\t curr = pageHeight * Math.ceil(curr / pageHeight) + header;\n\t if (header > 0) {\n\t headerCoords.push(curr - header);\n\t }\n\t }\n\t // update bottom anyway; don't just add pageHeight, as\n\t // we might need multiple pages for the pathological\n\t // case of one row higher than the page.\n\t bottom += pageHeight * Math.ceil(h / pageHeight);\n\t }\n\t out.push(curr);\n\t curr += h;\n\t });\n\t out.push(curr);\n\t return out;\n\t }\n\n\t function doLayout(sheet, range, options) {\n\t // normalize reference so we don't have to deal with Infinity here.\n\t var grid = sheet._grid;\n\t range = grid.normalize(range);\n\n\t var wholeRect = grid.rectangle(range);\n\t var drawings = [];\n\t sheet._drawings.forEach(function(d) {\n\t var box = sheet.drawingBoundingBox(d);\n\t if (box.intersects(wholeRect)) {\n\t drawings.push({\n\t drawing: d,\n\t box: box.offset(-wholeRect.left, -wholeRect.top)\n\t });\n\t }\n\t });\n\n\t // 1. obtain the list of cells that need to be printed, the\n\t // row heights and column widths. Place in each cell row,\n\t // col (relative to range, i.e. first is 0,0), rowspan,\n\t // colspan and merged. also place a list of drawings\n\t // anchored to that cell.\n\t var cells = [];\n\t var rowHeights = [];\n\t var colWidths = [];\n\t var mergedCells = sheet._getMergedCells(range);\n\n\t var maxRow = -1, maxCol = -1;\n\t sheet.forEach(range, function(row, col, cell){\n\t var relrow = row - range.topLeft.row;\n\t var relcol = col - range.topLeft.col;\n\t var rh = sheet.rowHeight(row);\n\t var cw = sheet.columnWidth(col);\n\t if (!options.forScreen) {\n\t // for printing we'll need the list of anchored\n\t // drawings so that we can adjust them after page\n\t // splitting.\n\t cell.drawings = drawings.filter(function(d){\n\t var tl = d.drawing.topLeftCell;\n\t if (tl && tl.row == row && tl.col == col) {\n\t maxRow = Math.max(maxRow, sheet._rows.index(d.box.bottom));\n\t maxCol = Math.max(maxCol, sheet._columns.index(d.box.right));\n\t return true;\n\t }\n\t });\n\t }\n\t if (!relcol) {\n\t rowHeights.push(rh);\n\t }\n\t if (!relrow) {\n\t colWidths.push(cw);\n\t }\n\t var id = new CellRef(row, col).print();\n\t if (mergedCells.secondary[id]) {\n\t return;\n\t }\n\t cell.row = relrow;\n\t cell.col = relcol;\n\t var m = mergedCells.primary[id];\n\t if (m) {\n\t delete mergedCells.primary[id];\n\t cell.merged = true;\n\t cell.rowspan = m.height();\n\t cell.colspan = m.width();\n\t if (options.forScreen) {\n\t cell.width = sheet._columns.sum(m.topLeft.col, m.bottomRight.col);\n\t cell.height = sheet._rows.sum(m.topLeft.row, m.bottomRight.row);\n\t }\n\t } else {\n\t cell.rowspan = 1;\n\t cell.colspan = 1;\n\t }\n\t if (!sheet._grid._columns.sum(col, col + cell.colspan - 1) ||\n\t !sheet._grid._rows.sum(row, row + cell.rowspan - 1)) {\n\t return;\n\t }\n\t var nonEmpty = options.forScreen || shouldDrawCell(cell);\n\t if (!(options.emptyCells || nonEmpty)) {\n\t return;\n\t }\n\t if (nonEmpty) {\n\t maxRow = Math.max(maxRow, relrow + cell.rowspan - 1);\n\t maxCol = Math.max(maxCol, relcol + cell.colspan - 1);\n\t } else {\n\t cell.empty = true;\n\t }\n\t cells.push(cell);\n\t });\n\n\t if (!options.forScreen) {\n\t // keep only the drawable area\n\t rowHeights = rowHeights.slice(0, maxRow + 1);\n\t colWidths = colWidths.slice(0, maxCol + 1);\n\t }\n\n\t var pageWidth = options.pageWidth;\n\t var pageHeight = options.pageHeight;\n\t var scaleFactor = options.scale || 1;\n\n\t // when fitWidth is requested, we must update the page size\n\t // with the corresponding scale factor; the algorithm below\n\t // (2) will continue to work, just drawing on a bigger page.\n\t if (options.fitWidth) {\n\t var width = colWidths.reduce(sum, 0);\n\t if (width > pageWidth) {\n\t scaleFactor = pageWidth / width;\n\t }\n\t }\n\t pageWidth = Math.ceil(pageWidth / scaleFactor);\n\t pageHeight = Math.ceil(pageHeight / scaleFactor);\n\n\t // 2. calculate top, left, bottom, right, width and height for\n\t // printable cells. Merged cells will be split across\n\t // pages, unless the first row/col is shifted to next page.\n\t // boxWidth and boxHeight get the complete drawing size.\n\t // Note that cell coordinates keep increasing, i.e. they\n\t // are not reset to zero for a new page. The print\n\t // function translates the view to current page.\n\t var hyCoords = []; // will receive header Y coordinates, if needed\n\t var yCoords = distributeCoords(rowHeights, pageHeight || 0, options.maxEmpty,\n\t options.headerRows, hyCoords);\n\t var xCoords = distributeCoords(colWidths, pageWidth || 0, options.maxEmpty);\n\t var boxWidth = 0;\n\t var boxHeight = 0;\n\t var headerCells = [];\n\t cells = cells.filter(function(cell){\n\t if (cell.empty && (cell.row > maxRow || cell.col > maxCol)) {\n\t return false;\n\t }\n\t if (options.headerRows && cell.row < options.headerRows) {\n\t headerCells.push(cell);\n\t }\n\t cell.left = xCoords[cell.col];\n\t cell.top = yCoords[cell.row];\n\t if (cell.merged) {\n\t if (!options.forScreen) {\n\t cell.right = orlast(xCoords, cell.col + cell.colspan);\n\t cell.bottom = orlast(yCoords, cell.row + cell.rowspan);\n\t cell.width = cell.right - cell.left;\n\t cell.height = cell.bottom - cell.top;\n\t } else {\n\t cell.right = cell.left + cell.width;\n\t cell.bottom = cell.top + cell.height;\n\t }\n\t } else {\n\t cell.width = colWidths[cell.col];\n\t cell.height = rowHeights[cell.row];\n\t cell.bottom = cell.top + cell.height;\n\t cell.right = cell.left + cell.width;\n\t }\n\t if (!options.forScreen) {\n\t // page breaking will shift cell coordinates. adjust\n\t // anchored drawings.\n\t cell.drawings.forEach(function(d){\n\t var box = d.box;\n\t box.left = cell.left + d.drawing.offsetX;\n\t box.top = cell.top + d.drawing.offsetY;\n\t box.right = box.left + box.width;\n\t box.bottom = box.top + box.height;\n\t });\n\t }\n\t boxWidth = Math.max(boxWidth, cell.right);\n\t boxHeight = Math.max(boxHeight, cell.bottom);\n\t return true;\n\t });\n\n\t // 3. if any merged cells remain in \"primary\", they start\n\t // outside the printed range and we should still display\n\t // them partially.\n\t Object.keys(mergedCells.primary).forEach(function(id){\n\t var ref = mergedCells.primary[id];\n\t sheet.forEach(ref.topLeft.toRangeRef(), function(row, col, cell){\n\t var relrow = row - range.topLeft.row;\n\t var relcol = col - range.topLeft.col;\n\t cell.merged = true;\n\t cell.colspan = ref.width();\n\t cell.rowspan = ref.height();\n\t if (relrow < 0) {\n\t cell.top = -sheet._rows.sum(row, row - relrow - 1);\n\t } else {\n\t cell.top = yCoords[relrow];\n\t }\n\t if (relcol < 0) {\n\t cell.left = -sheet._columns.sum(col, col - relcol - 1);\n\t } else {\n\t cell.left = xCoords[relcol];\n\t }\n\t cell.height = sheet._rows.sum(ref.topLeft.row, ref.bottomRight.row);\n\t cell.width = sheet._columns.sum(ref.topLeft.col, ref.bottomRight.col);\n\t if (cell.height > 0 && cell.width > 0) {\n\t // zero means a fully hidden merged cell (all rows/columns are hidden)\n\t // https://github.com/telerik/kendo-ui-core/issues/1794\n\t cell.right = cell.left + cell.width;\n\t cell.bottom = cell.top + cell.height;\n\t cell.row = relrow;\n\t cell.col = relcol;\n\t cells.push(cell);\n\t }\n\t });\n\t });\n\n\t // 4. replicate header rows on all pages\n\t if (options.headerRows) {\n\t hyCoords.forEach(function(y){\n\t headerCells.forEach(function(cell){\n\t cell = clone(cell);\n\t cell.top += y;\n\t cell.bottom = cell.top + cell.height;\n\t cells.push(cell);\n\t });\n\t yCoords.push(y);\n\t });\n\t yCoords.sort(orderCoords);\n\t }\n\n\t return {\n\t width : boxWidth,\n\t height : boxHeight,\n\t cells : cells.sort(orderCells),\n\t scale : scaleFactor,\n\t xCoords : xCoords,\n\t yCoords : yCoords,\n\t drawings : drawings\n\t };\n\t }\n\n\t function clone(hash, target) {\n\t if (!target) {\n\t target = {};\n\t }\n\t if (Object.assign) {\n\t return Object.assign(target, hash);\n\t }\n\t return Object.keys(hash).reduce(function(copy, key){\n\t copy[key] = hash[key];\n\t return copy;\n\t }, target);\n\t }\n\n\t function sameBorder(a, b) {\n\t return a.size === b.size && a.color === b.color;\n\t }\n\n\t function sum(a, b) {\n\t return a + b;\n\t }\n\n\t function orlast(a, i) {\n\t return i < a.length ? a[i] : a[a.length - 1];\n\t }\n\n\t function shouldDrawCell(cell) {\n\t return cell.value != null\n\t || cell.merged\n\t || cell.background != null\n\t || cell.borderRight != null\n\t || cell.borderBottom != null\n\t || (cell.validation != null && !cell.validation.value)\n\t || (cell.drawings && cell.drawings.length);\n\t }\n\n\t function orderCells(a, b) {\n\t if (a.top < b.top) {\n\t return -1;\n\t } else if (a.top == b.top) {\n\t if (a.left < b.left) {\n\t return -1;\n\t } else if (a.left == b.left) {\n\t return 0;\n\t } else {\n\t return 1;\n\t }\n\t } else {\n\t return 1;\n\t }\n\t }\n\n\t function orderCoords(a, b) {\n\t return a < b ? -1 : a > b ? 1 : 0;\n\t }\n\n\t function drawLayout(sheet, layout, group, options) {\n\t // options:\n\t // - pageWidth\n\t // - pageHeight\n\t // - fitWidth\n\t // - hCenter\n\t // - vCenter\n\t var ncols = Math.ceil(layout.width / options.pageWidth);\n\t var nrows = Math.ceil(layout.height / options.pageHeight);\n\t var pageWidth = Math.ceil(options.pageWidth / layout.scale);\n\t var pageHeight = Math.ceil(options.pageHeight / layout.scale);\n\n\t for (var j = 0; j < nrows; ++j) {\n\t for (var i = 0; i < ncols; ++i) {\n\t addPage(j, i);\n\t }\n\t }\n\n\t function addPage(row, col) {\n\t var left = col * pageWidth;\n\t var right = left + pageWidth;\n\t var top = row * pageHeight;\n\t var bottom = top + pageHeight;\n\t var endbottom = 0, endright = 0;\n\n\t function isInside(box) {\n\t if (box.right <= left || box.left >= right ||\n\t box.bottom <= top || box.top >= bottom) {\n\t return false;\n\t }\n\t endbottom = Math.max(box.bottom, endbottom);\n\t endright = Math.max(box.right, endright);\n\t return true;\n\t }\n\n\t // XXX: this can be optimized - discard cells that won't\n\t // be used again, and don't walk cells that stand no\n\t // chance to fit.\n\t var cells = layout.cells.filter(isInside);\n\n\t var drawings = layout.drawings.filter(function(d){\n\t return isInside(d.box);\n\t });\n\n\t // merged cells might stretch beyond page; limit to that\n\t endbottom = Math.min(endbottom, bottom);\n\t endright = Math.min(endright, right);\n\n\t if (cells.length || drawings.length) {\n\t var page = new kdrw.Group();\n\t group.append(page);\n\t // page.clip(drawing.Path.fromRect(\n\t // new geo.Rect([ 0, 0 ],\n\t // [ options.pageWidth, options.pageHeight ])));\n\n\t var content = new kdrw.Group();\n\t page.append(content);\n\n\t content.clip(kdrw.Path.fromRect(\n\t new geo.Rect([ left - 1, top - 1 ], [ endright + 1, endbottom + 1 ])\n\t ));\n\n\t var matrix = geo.Matrix.scale(layout.scale, layout.scale)\n\t .multiplyCopy(geo.Matrix.translate(-left, -top));\n\n\t if (options.hCenter || options.vCenter) {\n\t matrix = matrix.multiplyCopy(\n\t geo.Matrix.translate(\n\t options.hCenter ? (right - endright) / 2 : 0,\n\t options.vCenter ? (bottom - endbottom) / 2 : 0)\n\t );\n\t }\n\n\t content.transform(matrix);\n\n\t if (options.guidelines) {\n\t var prev = null;\n\t layout.xCoords.forEach(function(x){\n\t x = Math.min(x, endright);\n\t if (x !== prev && x >= left && x <= right) {\n\t prev = x;\n\t content.append(\n\t new kdrw.Path()\n\t .moveTo(x, top)\n\t .lineTo(x, endbottom)\n\t .close()\n\t .stroke(options.guideColor, GUIDELINE_WIDTH)\n\t );\n\t }\n\t });\n\t var prev = null;\n\t layout.yCoords.forEach(function(y){\n\t y = Math.min(y, endbottom);\n\t if (y !== prev && y >= top && y <= bottom) {\n\t prev = y;\n\t content.append(\n\t new kdrw.Path()\n\t .moveTo(left, y)\n\t .lineTo(endright, y)\n\t .close()\n\t .stroke(options.guideColor, GUIDELINE_WIDTH)\n\t );\n\t }\n\t });\n\t }\n\n\t var borders = Borders(); // jshint ignore: line\n\t cells.forEach(function(cell){\n\t drawCell(cell, content, options);\n\t borders.add(cell, sheet);\n\t });\n\n\t var bordersGroup = new kdrw.Group();\n\t borders.vert.forEach(function(a){\n\t a.forEach(function(b){\n\t if (!b.rendered) {\n\t b.rendered = true;\n\t bordersGroup.append(\n\t new kdrw.Path()\n\t .moveTo(b.x, b.top)\n\t .lineTo(b.x, b.bottom)\n\t .close()\n\t .stroke(b.color, b.size)\n\t );\n\t }\n\t });\n\t });\n\t borders.horiz.forEach(function(a){\n\t a.forEach(function(b){\n\t if (!b.rendered) {\n\t b.rendered = true;\n\t bordersGroup.append(\n\t new kdrw.Path()\n\t .moveTo(b.left, b.y)\n\t .lineTo(b.right, b.y)\n\t .close()\n\t .stroke(b.color, b.size)\n\t );\n\t }\n\t });\n\t });\n\t content.append(bordersGroup);\n\n\t drawings.forEach(function(d){\n\t var drawing = d.drawing;\n\t var image = drawing.image;\n\t if (image != null) {\n\t var box = d.box;\n\t var url = sheet._workbook.imageUrl(image);\n\t content.append(\n\t new kdrw.Image(url, new geo.Rect(\n\t [ box.left, box.top ],\n\t [ box.width, box.height ]\n\t )).opacity(drawing.opacity)\n\t );\n\t }\n\t });\n\t }\n\t }\n\t }\n\n\t function drawCell(cell, content, options) {\n\t var g = new kdrw.Group();\n\t content.append(g);\n\t var rect = new geo.Rect([ cell.left, cell.top ],\n\t [ cell.width, cell.height ]);\n\t if (cell.background || cell.merged) {\n\t var r2d2 = rect;\n\t if (options.guidelines) {\n\t r2d2 = rect.clone();\n\t r2d2.origin.x += GUIDELINE_WIDTH/2 + 0.1;\n\t r2d2.origin.y += GUIDELINE_WIDTH/2 + 0.1;\n\t r2d2.size.width -= GUIDELINE_WIDTH + 0.2;\n\t r2d2.size.height -= GUIDELINE_WIDTH + 0.2;\n\t }\n\t g.append(\n\t new kdrw.Rect(r2d2)\n\t .fill(cell.background || \"#fff\")\n\t .stroke(null)\n\t );\n\t }\n\t var val = cell.value;\n\t if (val != null) {\n\t var type = typeof val == \"number\" ? \"number\" : null;\n\t var clip = new kdrw.Group();\n\t clip.clip(kdrw.Path.fromRect(rect));\n\t g.append(clip);\n\t var f, format = cell.format;\n\t if (!format && type == \"number\" && val != Math.floor(val)) {\n\t format = \"0.##############\";\n\t }\n\t if (format) {\n\t f = formatting.textAndColor(val, format);\n\t val = f.text;\n\t if (f.type) {\n\t type = f.type;\n\t }\n\t } else {\n\t val += \"\";\n\t }\n\t if (!cell.textAlign) {\n\t switch (type) {\n\t case \"number\":\n\t case \"date\":\n\t case \"percent\":\n\t case \"currency\":\n\t cell.textAlign = \"right\";\n\t break;\n\t case \"boolean\":\n\t cell.textAlign = \"center\";\n\t break;\n\t }\n\t }\n\t drawText(val, (f && f.color) || cell.color || \"#000\", cell, clip);\n\t }\n\t }\n\n\t function applyIndent(cell, style) {\n\t if (cell.indent) {\n\t // OOXML spec states the indent is \"An integer value,\n\t // where an increment of 1 represents 3 spaces\". This, of\n\t // course, bears no resemblance to what Excel actually\n\t // does, so we need magic numbers here.\n\t var indent = 1.4 * cell.indent;\n\t switch (style.textAlign) {\n\t case null:\n\t case \"left\":\n\t style.paddingLeft = indent + \"ch\";\n\t break;\n\t case \"right\":\n\t style.paddingRight = indent + \"ch\";\n\t break;\n\t case \"center\":\n\t style.paddingLeft = indent/2 + \"ch\";\n\t style.paddingRight = indent/2 + \"ch\";\n\t break;\n\t }\n\t }\n\t }\n\n\t var CONT;\n\t function drawText(text, color, cell, group) {\n\t if (!CONT) {\n\t CONT = document.createElement(\"div\");\n\t CONT.style.position = \"fixed\";\n\t CONT.style.left = \"0px\";\n\t CONT.style.top = \"0px\";\n\t CONT.style.visibility = \"hidden\";\n\t CONT.style.overflow = \"hidden\";\n\t CONT.style.boxSizing = \"border-box\";\n\t CONT.style.lineHeight = \"normal\";\n\t document.body.appendChild(CONT);\n\t }\n\n\t if (CONT.firstChild) {\n\t CONT.removeChild(CONT.firstChild);\n\t }\n\n\t CONT.style.padding = \"2px 4px\";\n\t CONT.style.color = color;\n\t CONT.style.font = makeFontDef(cell);\n\t CONT.style.width = cell.width + \"px\";\n\t CONT.style.textAlign = cell.textAlign || \"left\";\n\t CONT.style.textDecoration = cell.underline ? \"underline\" : \"none\";\n\n\t applyIndent(cell, CONT.style);\n\n\t if (cell.wrap) {\n\t CONT.style.whiteSpace = \"pre-wrap\";\n\t CONT.style.overflowWrap = CONT.style.wordWrap = \"break-word\";\n\t } else {\n\t CONT.style.whiteSpace = \"pre\";\n\t CONT.style.overflowWrap = CONT.style.wordWrap = \"normal\";\n\t }\n\n\t CONT.appendChild(document.createTextNode(text));\n\n\t var vtrans = 0;\n\t switch (cell.verticalAlign) {\n\t case \"center\":\n\t vtrans = (cell.height - CONT.offsetHeight) >> 1;\n\t break;\n\n\t case undefined:\n\t case null:\n\t case \"bottom\":\n\t vtrans = (cell.height - CONT.offsetHeight);\n\t break;\n\t }\n\t if (vtrans < 0) { vtrans = 0; }\n\n\t var text_group = kendo.drawing.drawDOM.drawText(CONT);\n\t text_group.transform(geo.Matrix.translate(cell.left, cell.top + vtrans));\n\t group.append(text_group);\n\t }\n\n\t function makeFontDef(cell) {\n\t var font = [];\n\t if (cell.italic) {\n\t font.push(\"italic\");\n\t }\n\t if (cell.bold) {\n\t font.push(\"bold\");\n\t }\n\t font.push((cell.fontSize || 12) + \"px\");\n\t font.push((cell.fontFamily || \"Arial\"));\n\t return font.join(\" \");\n\t }\n\n\t function draw(sheet, range, options, callback) {\n\t if (options == null && callback == null) {\n\t callback = range;\n\t options = {};\n\t range = spreadsheet.SHEETREF;\n\t }\n\t if (callback == null) {\n\t callback = options;\n\t if (range instanceof spreadsheet.Range\n\t || range instanceof spreadsheet.Ref\n\t || typeof range == \"string\") {\n\t options = {};\n\t } else {\n\t options = range;\n\t range = spreadsheet.SHEETREF;\n\t }\n\t }\n\t options = kendo.jQuery.extend({\n\t paperSize : \"A4\",\n\t landscape : true,\n\t margin : \"1cm\",\n\t guidelines : true,\n\t guideColor : \"#aaa\",\n\t emptyCells : true,\n\t fitWidth : false,\n\t center : false,\n\t headerRows : null,\n\t maxEmpty : 0.2,\n\t scale : 1\n\t }, options);\n\t var group = new kdrw.Group();\n\t var paper = kendo.pdf.getPaperOptions(options);\n\t group.options.set(\"pdf\", {\n\t author : options.author,\n\t creator : options.creator,\n\t date : options.date,\n\t keywords : options.keywords,\n\t margin : paper.margin,\n\t multiPage : true,\n\t paperSize : paper.paperSize,\n\t subject : options.subject,\n\t title : options.title,\n\t autoPrint : options.autoPrint\n\t });\n\t var pageWidth = paper.paperSize[0];\n\t var pageHeight = paper.paperSize[1];\n\t if (paper.margin) {\n\t pageWidth -= paper.margin.left + paper.margin.right + 1;\n\t pageHeight -= paper.margin.top + paper.margin.bottom + 1;\n\t }\n\t options.pageWidth = pageWidth;\n\t options.pageHeight = pageHeight;\n\t var layout = doLayout(sheet, sheet._ref(range), options);\n\t drawLayout(sheet, layout, group, options);\n\t callback(group);\n\t }\n\n\t spreadsheet.Sheet.prototype.draw = function(range, options, callback) {\n\t var sheet = this;\n\t if (sheet._workbook) {\n\t sheet.recalc(sheet._workbook._context, function(){\n\t draw(sheet, range, options, callback);\n\t });\n\t } else {\n\t draw(sheet, range, options, callback);\n\t }\n\t };\n\n\t // Hack: since we index the border arrays by relative row/col we\n\t // could end up with negative indexes, i.e. horiz[-2] = border.\n\t // Array forEach will ignore these, so we provide a simple\n\t // container here (outside code only needs forEach at this time).\n\t function Container() {}\n\t Container.prototype = {\n\t forEach: function(f) {\n\t Object.keys(this).forEach(function(key){\n\t f(this[key], key, this);\n\t }, this);\n\t }\n\t };\n\n\t function Borders() {\n\t var horiz = new Container();\n\t var vert = new Container();\n\t function add(cell, sheet) {\n\t if (sheet) {\n\t // reset borders here; the propertybag doesn't keep track of merged cells :-/ this\n\t // is ugly, but the inner details of data storage have leaked everywhere anyway.\n\t var pb = sheet._properties;\n\t var grid = sheet._grid;\n\t cell.borderLeft = pb.get(\"vBorders\", grid.index(cell.row, cell.col));\n\t cell.borderRight = pb.get(\"vBorders\", grid.index(cell.row, cell.col + cell.colspan));\n\t cell.borderTop = pb.get(\"hBorders\", grid.index(cell.row, cell.col));\n\t cell.borderBottom = pb.get(\"hBorders\", grid.index(cell.row + cell.rowspan, cell.col));\n\t }\n\t if (cell.borderLeft) {\n\t addVert(cell.row, cell.col, cell.borderLeft,\n\t cell.left, cell.top, cell.bottom);\n\t }\n\t if (cell.borderRight) {\n\t addVert(cell.row, cell.col + cell.colspan, cell.borderRight,\n\t cell.right, cell.top, cell.bottom);\n\t }\n\t if (cell.borderTop) {\n\t addHoriz(cell.row, cell.col, cell.borderTop,\n\t cell.top, cell.left, cell.right);\n\t }\n\t if (cell.borderBottom) {\n\t addHoriz(cell.row + cell.rowspan, cell.col, cell.borderBottom,\n\t cell.bottom, cell.left, cell.right);\n\t }\n\t }\n\t function addVert(row, col, border, x, top, bottom) {\n\t var a = vert[col] || (vert[col] = new Container());\n\t var prev = row > 0 && a[row - 1];\n\t if (prev && sameBorder(prev, border)) {\n\t a[row] = prev;\n\t prev.bottom = bottom;\n\t } else {\n\t a[row] = {\n\t size: border.size,\n\t color: border.color,\n\t x: x,\n\t top: top,\n\t bottom: bottom\n\t };\n\t }\n\t }\n\t function addHoriz(row, col, border, y, left, right) {\n\t var a = horiz[row] || (horiz[row] = new Container());\n\t var prev = col > 0 && a[col - 1];\n\t if (prev && sameBorder(prev, border)) {\n\t a[col] = prev;\n\t prev.right = right;\n\t } else {\n\t a[col] = {\n\t size: border.size,\n\t color: border.color,\n\t y: y,\n\t left: left,\n\t right: right\n\t };\n\t }\n\t }\n\t return { add: add, horiz: horiz, vert: vert };\n\t }\n\n\t function drawTabularData(options) {\n\t var progress = new $.Deferred();\n\t var promise = progress.promise();\n\n\t options = clone(options, {\n\t dataSource : null,\n\t guidelines : true,\n\t guideColor : \"#000\",\n\t columns : null,\n\t headerBackground : \"#999\",\n\t headerColor : \"#000\",\n\t oddBackground : null,\n\t evenBackground : null,\n\t fontFamily : \"Arial\",\n\t fontSize : 12,\n\t paperSize : \"A4\",\n\t margin : \"1cm\",\n\t landscape : true,\n\t fitWidth : false,\n\t scale : 1,\n\t rowHeight : 20,\n\t maxEmpty : 1,\n\t useGridFormat : true\n\t });\n\n\t // retrieve fonts; custom fonts should be already loaded\n\t kendo.drawing.pdf.defineFont(\n\t kendo.drawing.drawDOM.getFontFaces(document)\n\t );\n\n\t var charWidth = charWidthFunction(options.fontFamily, options.fontSize);\n\n\t function textWidth(value) {\n\t if (value != null) {\n\t var width = 12; // magic numbers :-/\n\t for (var i = value.length; --i >= 0;) {\n\t width += charWidth(value.charAt(i));\n\t }\n\t return width;\n\t }\n\t return 0;\n\t }\n\n\t var border = options.guidelines ? { size: 1, color: options.guideColor } : null;\n\n\t function mkCell(data) {\n\t if (!border) {\n\t return data;\n\t }\n\t return clone(data, {\n\t borderLeft: border,\n\t borderTop: border,\n\t borderRight: border,\n\t borderBottom: border\n\t });\n\t }\n\n\t options.dataSource.fetch(function(){\n\t var data = options.dataSource.data();\n\t if (!data.length) {\n\t return progress.reject(\"Empty dataset\");\n\t }\n\n\t // this really must be present\n\t var columns = options.columns.map(function(col){\n\t if (typeof col == \"string\") {\n\t return { title: col, field: col };\n\t } else {\n\t return col;\n\t }\n\t });\n\t var columnTitles = columns.map(function(col){\n\t return col.title || col.field;\n\t });\n\t var columnWidths = columnTitles.map(textWidth);\n\n\t // prepare data for a Sheet object's fromJSON method\n\t var rows = data.map(function(row, rowIndex){\n\t return {\n\t cells: columns.map(function(col, colIndex){\n\t var value = row[col.field];\n\n\t // NOTE: value might not be string. I added option useGridFormat (default\n\t // true), which will use a column's format, if present, to convert the value\n\t // to a string, so that we can measure the width right now.\n\t if (options.useGridFormat) {\n\t if (value != null) {\n\t if (col.format) {\n\t value = kendo.format(col.format, value);\n\t } else {\n\t value += \"\";\n\t }\n\t }\n\t // adjust the column widths while we're at it\n\t columnWidths[colIndex] = Math.max(\n\t textWidth(value),\n\t columnWidths[colIndex]\n\t );\n\t }\n\n\t // if options.useGridFormat is false and col.format is present, pass it over\n\t // to the spreadsheet. In that case we should calculate the widths after\n\t // the spreadsheet is created (XXX to be implemented when someone needs it).\n\t return mkCell({\n\t value: value,\n\t format: options.useGridFormat ? null : col.format,\n\t background: rowIndex % 2 ? options.evenBackground : options.oddBackground\n\t });\n\t })\n\t };\n\t });\n\n\t // insert header line\n\t rows.unshift({\n\t cells: columnTitles.map(function(label){\n\t return mkCell({\n\t value: label,\n\t background: options.headerBackground,\n\t color: options.headerColor\n\t });\n\t })\n\t });\n\n\t // init a Sheet object. Note that we have to add one\n\t // extra-row and column, because the very last ones can't\n\t // have right/bottom borders (known limitation).\n\t var sheet = new kendo.spreadsheet.Sheet(\n\t rows.length + 1, // rows\n\t columns.length + 1, // columns\n\t options.rowHeight, // row height\n\t 50, // column width\n\t 20, // header height\n\t 20, // header width,\n\t { // default cell style\n\t fontFamily: options.fontFamily,\n\t fontSize: options.fontSize,\n\t verticalAlign: \"center\"\n\t }\n\t );\n\n\t // load data\n\t sheet.fromJSON({\n\t name: \"Sheet1\",\n\t rows: rows,\n\t columns: columnWidths.map(function(w, i){\n\t return { index: i, width: w };\n\t })\n\t });\n\n\t sheet.draw({\n\t paperSize : options.paperSize,\n\t landscape : options.landscape,\n\t margin : options.margin,\n\t guidelines : false, // using borders instead (better contrast)\n\t scale : options.scale,\n\t fitWidth : options.fitWidth,\n\t maxEmpty : options.maxEmpty,\n\t headerRows : 1\n\t }, progress.resolve.bind(progress));\n\t });\n\n\t return promise;\n\t }\n\n\t var CACHE_CHAR_WIDTH = {};\n\n\t var charWidthFunction = function(fontFamily, fontSize) {\n\t var id = fontSize + \":\" + fontFamily;\n\t var func = CACHE_CHAR_WIDTH[id];\n\t if (!func) {\n\t var span, div = document.createElement(\"div\");\n\t div.style.position = \"fixed\";\n\t div.style.left = \"-10000px\";\n\t div.style.top = \"-10000px\";\n\t div.style.fontFamily = fontFamily;\n\t div.style.fontSize = fontSize + \"px\";\n\t div.style.whiteSpace = \"pre\";\n\t for (var i = 32; i < 128; ++i) {\n\t span = document.createElement(\"span\");\n\t span.appendChild(document.createTextNode(String.fromCharCode(i)));\n\t div.appendChild(span);\n\t }\n\t document.body.appendChild(div);\n\t var widths = {};\n\t for (i = 32, span = div.firstChild; i < 128 && span; ++i, span = span.nextSibling) {\n\t widths[i] = span.offsetWidth;\n\t }\n\t while ((span = div.firstChild)) {\n\t div.removeChild(span);\n\t }\n\t func = CACHE_CHAR_WIDTH[id] = function(ch) {\n\t var code = ch.charCodeAt(0);\n\t var width = widths[code];\n\t if (width == null) {\n\t // probably not an ASCII character, let's cache its width as well\n\t span = document.createElement(\"span\");\n\t span.appendChild(document.createTextNode(String.fromCharCode(code)));\n\t div.appendChild(span);\n\t width = widths[code] = span.offsetWidth;\n\t div.removeChild(span);\n\t }\n\t return width;\n\t };\n\t }\n\t return func;\n\t };\n\n\t spreadsheet.draw = {\n\t Borders : Borders,\n\t doLayout : doLayout,\n\t applyIndent : applyIndent\n\t };\n\n\t spreadsheet.drawTabularData = drawTabularData;\n\n\t}, __webpack_require__(3));\n\n\n/***/ }),\n\n/***/ 1664:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"../kendo.pdf\");\n\n/***/ }),\n\n/***/ 1665:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./numformat\");\n\n/***/ })\n\n/******/ });","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(1658);\n\tmodule.exports = __webpack_require__(1658);\n\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n/***/ }),\n\n/***/ 20:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"../kendo.core\");\n\n/***/ }),\n\n/***/ 1658:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(f, define){\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(20), __webpack_require__(1659) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t})(function(){\n\n\t(function(kendo) {\n\n\t var RangeRef = kendo.spreadsheet.RangeRef;\n\t var CellRef = kendo.spreadsheet.CellRef;\n\n\t var EdgeNavigator = kendo.Class.extend({\n\t init: function(field, axis, rangeGetter, union) {\n\t this.rangeGetter = rangeGetter;\n\n\t this.prevLeft = function(index) {\n\t var current = union(this.range(index));\n\t var range = this.range(axis.prevVisible(current.topLeft[field]));\n\t return union(range).topLeft[field];\n\t };\n\n\t this.nextRight = function(index) {\n\t var current = union(this.range(index));\n\t var range = this.range(axis.nextVisible(current.bottomRight[field]));\n\t return union(range).bottomRight[field];\n\t };\n\n\t // these two don't look like the other ones, as they \"shrink\"\n\t this.nextLeft = function(index) {\n\t var range = union(this.range(index));\n\t return axis.nextVisible(range.bottomRight[field]);\n\t };\n\n\t this.prevRight = function(index) {\n\t var range = union(this.range(index));\n\t return axis.prevVisible(range.topLeft[field]);\n\t };\n\t },\n\n\t boundary: function(top, bottom) {\n\t this.top = top;\n\t this.bottom = bottom;\n\t },\n\n\t range: function(index) {\n\t return this.rangeGetter(index, this.top, this.bottom);\n\t }\n\t });\n\n\t var SheetNavigator = kendo.Class.extend({\n\t init: function(sheet) {\n\t this._sheet = sheet;\n\t this.autoFillCalculator = new kendo.spreadsheet.AutoFillCalculator(sheet._grid);\n\n\t this.colEdge = new EdgeNavigator(\"col\", this._sheet._grid._columns, this.columnRange.bind(this), this.union.bind(this));\n\t this.rowEdge = new EdgeNavigator(\"row\", this._sheet._grid._rows, this.rowRange.bind(this), this.union.bind(this));\n\t },\n\n\t height: function(height) {\n\t this._viewPortHeight = height;\n\t },\n\n\t union: function(ref) {\n\t return this._sheet.unionWithMerged(ref);\n\t },\n\n\t columnRange: function(col, topRow, bottomRow) {\n\t return this._sheet._ref(topRow, col, bottomRow - topRow, 1);\n\t },\n\n\t rowRange: function(row, leftCol, rightCol) {\n\t return this._sheet._ref(row, leftCol, 1, rightCol - leftCol);\n\t },\n\n\t selectionIncludesMergedCells: function() {\n\t return this._sheet.select().contains(this._sheet._mergedCells);\n\t },\n\n\t setSelectionValue: function(value) {\n\t var selection = this._sheet.selection();\n\n\t setTimeout(function() {\n\t selection.value(value());\n\t });\n\t },\n\n\t selectAll: function() {\n\t this._sheet.select(this._sheet._sheetRef);\n\t },\n\n\t select: function(ref, mode, addToExisting) {\n\t ref = this.refForMode(ref, mode);\n\n\t if (addToExisting) {\n\t ref = this._sheet.select().concat(ref);\n\t }\n\n\t this._sheet.select(ref);\n\t },\n\n\t refForMode: function(ref, mode) {\n\t var grid = this._sheet._grid;\n\n\t switch(mode) {\n\t case \"range\":\n\t ref = grid.normalize(ref);\n\t break;\n\t case \"row\":\n\t ref = grid.rowRef(ref.row);\n\t break;\n\t case \"column\":\n\t ref = grid.colRef(ref.col);\n\t break;\n\t case \"sheet\":\n\t ref = this._sheet._sheetRef;\n\t break;\n\t }\n\n\t return ref;\n\t },\n\n\t startSelection: function(ref, mode, addToExisting, shiftKey, view) {\n\t if (mode == \"autofill\") {\n\t this._sheet.startAutoFill();\n\t } else if (shiftKey && mode == \"range\") {\n\t var range = new RangeRef(this._sheet.activeCell().first(), ref);\n\t this._sheet.select(range, false, false);\n\t this._sheet.startSelection(view);\n\t } else {\n\t this._sheet.startSelection(view);\n\t this.select(ref, mode, addToExisting);\n\t }\n\t },\n\n\t completeSelection: function() {\n\t this._sheet.completeSelection();\n\t },\n\n\t selectForContextMenu: function(ref, mode) {\n\t var sheet = this._sheet;\n\t sheet._activeDrawing = null;\n\t if (!sheet.select().contains(this.refForMode(ref, mode))) {\n\t this.select(ref, mode);\n\t }\n\t },\n\n\t selectDrawingForContextMenu: function(drawing) {\n\t var sheet = this._sheet;\n\t sheet._activeDrawing = drawing;\n\t sheet.triggerChange({ selection: true });\n\t },\n\n\t modifySelection: function(action) {\n\t var direction = this.determineDirection(action);\n\n\t var sheet = this._sheet;\n\t var viewPortHeight = this._viewPortHeight;\n\t var rows = sheet._grid._rows;\n\t var columns = sheet._grid._columns;\n\n\t var originalSelection = sheet.currentOriginalSelectionRange();\n\t var selection = sheet.select().toRangeRef();\n\t var activeCell = sheet.activeCell();\n\n\t var topLeft = originalSelection.topLeft.clone();\n\t var bottomRight = originalSelection.bottomRight.clone();\n\t var bottomLeft = new CellRef(bottomRight.row, topLeft.col);\n\n\t var scrollInto;\n\n\t this.colEdge.boundary(selection.topLeft.row, selection.bottomRight.row);\n\t this.rowEdge.boundary(selection.topLeft.col, selection.bottomRight.col);\n\n\t switch (direction) {\n\t case \"expand-left\": // <| |\n\t topLeft.col = this.colEdge.prevLeft(topLeft.col);\n\t scrollInto = topLeft;\n\t break;\n\t case \"shrink-right\": // |>|\n\t topLeft.col = this.colEdge.nextLeft(topLeft.col);\n\t scrollInto = topLeft;\n\t break;\n\t case \"expand-right\": // | |>\n\t bottomRight.col = this.colEdge.nextRight(bottomRight.col);\n\t scrollInto = bottomRight;\n\t break;\n\t case \"shrink-left\": // |<|\n\t bottomRight.col = this.colEdge.prevRight(bottomRight.col);\n\t scrollInto = bottomRight;\n\t break;\n\n\t // four actions below mirror the upper ones, on the vertical axis\n\t case \"expand-up\":\n\t topLeft.row = this.rowEdge.prevLeft(topLeft.row);\n\t scrollInto = topLeft;\n\t break;\n\t case \"shrink-down\":\n\t topLeft.row = this.rowEdge.nextLeft(topLeft.row);\n\t scrollInto = topLeft;\n\t break;\n\t case \"expand-down\":\n\t bottomRight.row = this.rowEdge.nextRight(bottomRight.row);\n\t scrollInto = bottomRight;\n\t break;\n\t case \"shrink-up\":\n\t bottomRight.row = this.rowEdge.prevRight(bottomRight.row);\n\t scrollInto = bottomRight;\n\t break;\n\n\t // pageup/down - may need improvement\n\t case \"expand-page-up\":\n\t topLeft.row = rows.prevPage(topLeft.row, viewPortHeight);\n\t break;\n\t case \"shrink-page-up\":\n\t bottomRight.row = rows.prevPage(bottomRight.row, viewPortHeight);\n\t break;\n\t case \"expand-page-down\":\n\t bottomRight.row = rows.nextPage(bottomRight.row, viewPortHeight);\n\t break;\n\t case \"shrink-page-down\":\n\t topLeft.row = rows.nextPage(topLeft.row, viewPortHeight);\n\t break;\n\n\t case \"first-col\":\n\t topLeft.col = columns.firstVisible();\n\t bottomRight.col = activeCell.bottomRight.col;\n\t scrollInto = topLeft;\n\t break;\n\t case \"last-col\":\n\t bottomRight.col = columns.lastVisible();\n\t topLeft.col = activeCell.topLeft.col;\n\t scrollInto = bottomRight;\n\t break;\n\t case \"first-row\":\n\t topLeft.row = rows.firstVisible();\n\t bottomRight.row = activeCell.bottomRight.row;\n\t scrollInto = topLeft;\n\t break;\n\t case \"last-row\":\n\t bottomRight.row = rows.lastVisible();\n\t topLeft.row = activeCell.topLeft.row;\n\t scrollInto = bottomRight;\n\t break;\n\t case \"last\":\n\t bottomRight.row = rows.lastVisible();\n\t bottomRight.col = columns.lastVisible();\n\t topLeft = activeCell.topLeft;\n\t scrollInto = bottomRight;\n\t break;\n\t case \"first\":\n\t topLeft.row = rows.firstVisible();\n\t topLeft.col = columns.firstVisible();\n\t bottomRight = activeCell.bottomRight;\n\t scrollInto = topLeft;\n\t break;\n\n\t case \"expand-word-right\":\n\t bottomRight.col = columns.nextUntil(bottomRight.col, makeWordMovement(sheet, bottomRight, true));\n\t scrollInto = bottomRight;\n\t break;\n\t case \"shrink-word-right\":\n\t topLeft.col = columns.nextUntil(bottomLeft.col, makeWordMovement(sheet, bottomLeft, true));\n\t scrollInto = topLeft;\n\t break;\n\t case \"expand-word-left\":\n\t topLeft.col = columns.prevUntil(bottomLeft.col, makeWordMovement(sheet, bottomLeft, true));\n\t scrollInto = topLeft;\n\t break;\n\t case \"shrink-word-left\":\n\t bottomRight.col = columns.prevUntil(bottomRight.col, makeWordMovement(sheet, bottomRight, true));\n\t scrollInto = bottomRight;\n\t break;\n\t case \"expand-word-up\":\n\t topLeft.row = rows.prevUntil(topLeft.row, makeWordMovement(sheet, topLeft, false));\n\t scrollInto = topLeft;\n\t break;\n\t case \"shrink-word-up\":\n\t bottomRight.row = rows.prevUntil(bottomRight.row, makeWordMovement(sheet, bottomRight, false));\n\t scrollInto = bottomRight;\n\t break;\n\t case \"expand-word-down\":\n\t bottomRight.row = rows.nextUntil(bottomRight.row, makeWordMovement(sheet, bottomRight, false));\n\t scrollInto = bottomRight;\n\t break;\n\t case \"shrink-word-down\":\n\t topLeft.row = rows.nextUntil(topLeft.row, makeWordMovement(sheet, topLeft, false));\n\t scrollInto = topLeft;\n\t break;\n\t }\n\n\t var newSelection = new RangeRef(topLeft, bottomRight);\n\n\t if (!this.union(newSelection).intersects(activeCell)) {\n\t // throw new Error(newSelection.print() + \" does not contain \" + activeCell.print());\n\t this.modifySelection(direction.replace(\"shrink\", \"expand\"));\n\t return;\n\t }\n\n\t if (scrollInto) {\n\t sheet.focus(scrollInto);\n\t }\n\n\t this.updateCurrentSelectionRange(newSelection);\n\t },\n\n\t moveActiveCell: function(direction) {\n\t var sheet = this._sheet;\n\t var activeCell = sheet.activeCell();\n\t var topLeft = activeCell.topLeft;\n\t var bottomRight = activeCell.bottomRight;\n\n\t var cell = sheet.originalActiveCell();\n\t var rows = sheet._grid._rows;\n\t var columns = sheet._grid._columns;\n\n\t var row = cell.row;\n\t var column = cell.col;\n\n\t switch (direction) {\n\t case \"left\":\n\t column = columns.prevVisible(topLeft.col);\n\t break;\n\t case \"up\":\n\t row = rows.prevVisible(topLeft.row);\n\t break;\n\t case \"right\":\n\t column = columns.nextVisible(bottomRight.col);\n\t break;\n\t case \"down\":\n\t row = rows.nextVisible(bottomRight.row);\n\t break;\n\t case \"first-col\":\n\t column = columns.firstVisible();\n\t break;\n\t case \"last-col\":\n\t column = columns.lastVisible();\n\t break;\n\t case \"first-row\":\n\t row = rows.firstVisible();\n\t break;\n\t case \"last-row\":\n\t row = rows.lastVisible();\n\t break;\n\t case \"last\":\n\t row = rows.lastVisible();\n\t column = columns.lastVisible();\n\t break;\n\t case \"first\":\n\t row = rows.firstVisible();\n\t column = columns.firstVisible();\n\t break;\n\t case \"next-page\":\n\t row = rows.nextPage(bottomRight.row, this._viewPortHeight);\n\t break;\n\t case \"prev-page\":\n\t row = rows.prevPage(bottomRight.row, this._viewPortHeight);\n\t break;\n\n\t case \"word-right\":\n\t column = columns.nextUntil(column, makeWordMovement(sheet, bottomRight, true));\n\t break;\n\t case \"word-left\":\n\t column = columns.prevUntil(column, makeWordMovement(sheet, bottomRight, true));\n\t break;\n\t case \"word-up\":\n\t row = rows.prevUntil(row, makeWordMovement(sheet, bottomRight, false));\n\t break;\n\t case \"word-down\":\n\t row = rows.nextUntil(row, makeWordMovement(sheet, bottomRight, false));\n\t break;\n\t }\n\n\t sheet.select(new CellRef(row, column));\n\t },\n\n\t navigateInSelection: function(direction) {\n\t var sheet = this._sheet;\n\t var activeCell = sheet.activeCell();\n\t var topLeft = activeCell.topLeft;\n\n\t var cell = sheet.originalActiveCell();\n\t var rows = sheet._grid._rows;\n\t var columns = sheet._grid._columns;\n\n\t var row = cell.row;\n\t var column = cell.col;\n\n\t var isFirstCell = false;\n\t var isLastCell = false;\n\n\t var selTopLeft, selBottomRight;\n\n\t var topLeftCol = topLeft.col;\n\t var topLeftRow = topLeft.row;\n\t var tmp;\n\n\t function setSelection(sel) {\n\t selTopLeft = sel.topLeft;\n\t selBottomRight = sel.bottomRight;\n\t }\n\n\t setSelection(sheet.currentNavigationRange());\n\n\t var done = false;\n\t var navigatedAway = false;\n\n\t while (!done && !navigatedAway) {\n\t var current = new CellRef(row, column);\n\t var isSingleCellSelected = sheet.singleCellSelection();\n\n\t if(isSingleCellSelected) {\n\t isFirstCell = selTopLeft.eq(current) && sheet._sheetRef.topLeft.eq(current);\n\t isLastCell = selBottomRight.eq(current) && sheet._sheetRef.bottomRight.eq(current);\n\n\t if(!isFirstCell) {\n\t isFirstCell = columns.firstVisible() === column && rows.firstVisible() === row;\n\t }\n\n\t if(!isLastCell) {\n\t isLastCell = columns.lastVisible() === column && rows.lastVisible() === row;\n\t }\n\t }\n\n\t switch (direction) {\n\t case \"next\":\n\t if(isLastCell) {\n\t navigatedAway = true;\n\t kendo.focusNextElement();\n\t } else if (selBottomRight.eq(current)) {\n\t setSelection(sheet.nextNavigationRange());\n\t row = selTopLeft.row;\n\t column = selTopLeft.col;\n\t } else {\n\t column = columns.nextVisible(topLeftCol);\n\t if (column == topLeftCol || column > selBottomRight.col) {\n\t column = selTopLeft.col;\n\t tmp = rows.nextVisible(row);\n\t if (tmp == row || tmp > selBottomRight.row) {\n\t row = selTopLeft.row;\n\t } else {\n\t row = tmp;\n\t }\n\t }\n\t }\n\t break;\n\t case \"previous\":\n\t if(isFirstCell) {\n\t navigatedAway = true;\n\t this._sheet._workbook._view.element.find('.k-spreadsheet-name-editor .k-input').trigger(\"focus\");\n\t } else if (selTopLeft.eq(current)) {\n\t setSelection(sheet.previousNavigationRange());\n\t row = selBottomRight.row;\n\t column = selBottomRight.col;\n\t } else {\n\t column = columns.prevVisible(topLeftCol);\n\t if (column == topLeftCol || column < selTopLeft.col) {\n\t column = selBottomRight.col;\n\t tmp = rows.prevVisible(row);\n\t if (tmp == row || tmp < selTopLeft.row) {\n\t row = selBottomRight.row;\n\t } else {\n\t row = tmp;\n\t }\n\t }\n\t }\n\t break;\n\t case \"lower\":\n\t if (selBottomRight.eq(current)) {\n\t setSelection(sheet.nextNavigationRange());\n\t row = selTopLeft.row;\n\t column = selTopLeft.col;\n\t } else {\n\t row = rows.nextVisible(topLeftRow);\n\t if (row == topLeftRow || row > selBottomRight.row) {\n\t row = selTopLeft.row;\n\t tmp = columns.nextVisible(column);\n\t if (tmp == column || tmp > selBottomRight.col) {\n\t column = selTopLeft.col;\n\t } else {\n\t column = tmp;\n\t }\n\t }\n\t }\n\t break;\n\t case \"upper\":\n\t if (selTopLeft.eq(current)) {\n\t setSelection(sheet.previousNavigationRange());\n\t row = selBottomRight.row;\n\t column = selBottomRight.col;\n\t } else {\n\t row = rows.prevVisible(topLeftRow);\n\t if (row == topLeftRow || row < selTopLeft.row) {\n\t row = selBottomRight.row;\n\t tmp = columns.prevVisible(column);\n\t if (tmp == column || tmp < selTopLeft.col) {\n\t column = selBottomRight.col;\n\t } else {\n\t column = tmp;\n\t }\n\t }\n\t }\n\t break;\n\t default:\n\t throw new Error(\"Unknown entry navigation: \" + direction);\n\t }\n\n\t done = !this.shouldSkip(row, column);\n\t // if (!done) { console.log(\"skipping\", row, column); }\n\t topLeftCol = column;\n\t topLeftRow = row;\n\t }\n\n\t if(done) {\n\t if (sheet.singleCellSelection()) {\n\t sheet.select(new CellRef(row, column));\n\t } else {\n\t sheet.activeCell(new CellRef(row, column));\n\t }\n\t }\n\t },\n\n\t extendSelection: function(ref, mode) {\n\t var sheet = this._sheet;\n\t var grid = sheet._grid;\n\n\t if (mode === \"autofill\") {\n\t this.resizeAutoFill(ref);\n\t return;\n\t }\n\t if (mode === \"range\") {\n\t ref = grid.normalize(ref);\n\t }\n\t else if (mode === \"row\") {\n\t ref = grid.rowRef(ref.row).bottomRight;\n\t } else if (mode === \"column\") {\n\t ref = grid.colRef(ref.col).bottomRight;\n\t }\n\n\t var activeCell = sheet.originalActiveCell().toRangeRef();\n\n\t this.updateCurrentSelectionRange(new RangeRef(activeCell.topLeft, ref));\n\t },\n\n\t shouldSkip: function(row, col) {\n\t if (this._sheet.isHiddenRow(row) || this._sheet.isHiddenColumn(col)) {\n\t return true;\n\t }\n\t var ref = new CellRef(row, col);\n\t var isMerged = false;\n\t this._sheet.forEachMergedCell(function(merged) {\n\t if (merged.intersects(ref) && !merged.collapse().eq(ref)) {\n\t isMerged = true;\n\t }\n\t });\n\n\t return isMerged;\n\t },\n\n\t resizeAutoFill: function(ref) {\n\t var sheet = this._sheet;\n\t var selection = sheet.select();\n\t var origin = sheet._autoFillOrigin;\n\t var dest = this.autoFillCalculator.autoFillDest(selection, ref);\n\n\t var punch = this.punch(selection, dest);\n\t var hint, direction;\n\n\t if (!punch) {\n\t var preview = sheet.range(dest)._previewFillFrom(sheet.range(origin));\n\t if (preview) {\n\t direction = preview.direction;\n\t hint = preview.hint;\n\t }\n\t }\n\n\t sheet.updateAutoFill(dest, punch, hint, direction);\n\t },\n\n\t determineDirection: function(action) {\n\t var selection = this._sheet.currentSelectionRange();\n\t var activeCell = this._sheet.activeCell();\n\n\t // There may be a third, indeterminate state, caused by a merged cell.\n\t // In this state, all key movements are treated as shrinks.\n\t // The navigator will reverse them if it detects this it will cause the selection to exclude the active cell.\n\t var leftMode = activeCell.topLeft.col == selection.topLeft.col;\n\t var rightMode = activeCell.bottomRight.col == selection.bottomRight.col;\n\t var topMode = activeCell.topLeft.row == selection.topLeft.row;\n\t var bottomMode = activeCell.bottomRight.row == selection.bottomRight.row;\n\n\t switch (action) {\n\t case \"left\":\n\t action = rightMode ? \"expand-left\" : \"shrink-left\";\n\t break;\n\t case \"right\":\n\t action = leftMode ? \"expand-right\" : \"shrink-right\";\n\t break;\n\t case \"up\":\n\t action = bottomMode ? \"expand-up\" : \"shrink-up\";\n\t break;\n\t case \"down\":\n\t action = topMode ? \"expand-down\" : \"shrink-down\";\n\t break;\n\t case \"prev-page\":\n\t action = bottomMode ? \"expand-page-up\" : \"shrink-page-up\";\n\t break;\n\t case \"next-page\":\n\t action = topMode ? \"expand-page-down\" : \"shrink-page-down\";\n\t break;\n\t case \"word-left\":\n\t action = rightMode ? \"expand-word-left\" : \"shrink-word-left\";\n\t break;\n\t case \"word-right\":\n\t action = leftMode ? \"expand-word-right\" : \"shrink-word-right\";\n\t break;\n\t case \"word-up\":\n\t action = bottomMode ? \"expand-word-up\" : \"shrink-word-up\";\n\t break;\n\t case \"word-down\":\n\t action = topMode ? \"expand-word-down\" : \"shrink-word-down\";\n\t break;\n\t }\n\n\t return action;\n\t },\n\n\t updateCurrentSelectionRange: function(ref) {\n\t var sheet = this._sheet;\n\t sheet.select(sheet.originalSelect().replaceAt(sheet.selectionRangeIndex(), ref), false);\n\t },\n\n\t punch: function(selection, subset) {\n\t var punch;\n\t if (subset.topLeft.eq(selection.topLeft)) {\n\t if (subset.bottomRight.row < selection.bottomRight.row) {\n\t var bottomRow = this.rowEdge.nextRight(subset.bottomRight.row);\n\n\t punch = new RangeRef(\n\t new CellRef(bottomRow, selection.topLeft.col),\n\t selection.bottomRight\n\t );\n\t } else if (subset.bottomRight.col < selection.bottomRight.col) {\n\t var bottomCol = this.colEdge.nextRight(subset.bottomRight.col);\n\n\t punch = new RangeRef(\n\t new CellRef(selection.topLeft.row, bottomCol),\n\t selection.bottomRight\n\t );\n\t }\n\t }\n\n\t return punch;\n\t }\n\t });\n\n\t function makeWordMovement(sheet, pivot, isCol) {\n\t // the general idea is:\n\t //\n\t // - if we start on a non-empty cell, we should select the\n\t // range of non-empty cells that follow it. If, however,\n\t // the second cell is empty, then we don't stop there; we\n\t // should skip all the empty cells and stop at the first\n\t // non-empty cell (and select it).\n\t //\n\t // - if we start on an empty cell, then skip all empty cells\n\t // and select the first non-empty one.\n\n\t var firstVal = sheet.range(pivot).value();\n\t return function(pos, advanced, hidden) {\n\t if (hidden) { return true; } // skip hidden cells\n\t var val = ( isCol ?\n\t sheet.range(pivot.row, pos) :\n\t sheet.range(pos, pivot.col) ).value();\n\t if (firstVal === null) {\n\t return val === null ? false : pos;\n\t } else if (!advanced && val === null) {\n\t firstVal = null; // switch to the other mode\n\t return false;\n\t } else {\n\t return val === null;\n\t }\n\t };\n\t }\n\n\t kendo.spreadsheet.SheetNavigator = SheetNavigator;\n\t})(kendo);\n\t}, __webpack_require__(3));\n\n\n/***/ }),\n\n/***/ 1659:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./autofillcalculator\");\n\n/***/ })\n\n/******/ });","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(1657);\n\tmodule.exports = __webpack_require__(1657);\n\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n/***/ }),\n\n/***/ 20:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"../kendo.core\");\n\n/***/ }),\n\n/***/ 1657:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(f, define){\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(20) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t})(function(){\n\n\t(function(kendo) {\n\n\t var $ = kendo.jQuery;\n\n\t var CLASS_NAMES = {\n\t input: \"k-spreadsheet-name-editor\",\n\t list: \"k-spreadsheet-name-list\"\n\t };\n\n\t var NameEditor = kendo.ui.Widget.extend({\n\t init: function(element, options) {\n\t kendo.ui.Widget.call(this, element, options);\n\t element.addClass(CLASS_NAMES.input);\n\n\t var comboBoxTitle = options.messages.nameBox || \"Name Box\";\n\t var dataSource = new kendo.data.DataSource({\n\t transport: {\n\t read: function(options) {\n\t var data = [];\n\t this._workbook.forEachName(function(def){\n\t if (!def.hidden && def.value instanceof kendo.spreadsheet.Ref) {\n\t data.push({ name: def.name });\n\t }\n\t });\n\t options.success(data);\n\t }.bind(this),\n\t cache: false\n\t }\n\t });\n\n\t var comboElement = $(\"\")\n\t .attr(\"title\", comboBoxTitle)\n\t .attr(\"aria-label\", comboBoxTitle);\n\n\t this.combo = comboElement.appendTo(element)\n\t .kendoComboBox({\n\t clearButton: false,\n\t dataTextField: \"name\",\n\t dataValueField: \"name\",\n\t template: \"#:data.name#\",\n\t dataSource: dataSource,\n\t autoBind: false,\n\t ignoreCase: true,\n\t change: this._on_listChange.bind(this),\n\t noDataTemplate: \"
\",\n\t open: function() {\n\t dataSource.read();\n\t }\n\t }).getKendoComboBox();\n\n\t this.combo.input\n\t .on(\"keydown\", this._on_keyDown.bind(this))\n\t .on(\"focus\", this._on_focus.bind(this));\n\n\t this.combo.popup.element\n\t .addClass(\"k-spreadsheet-names-popup\")\n\n\t .on(\"mousemove\", function(ev){\n\t // XXX: should remove this when we find a better\n\t // solution for the popup closing as we hover the\n\t // resize handles.\n\t ev.stopPropagation();\n\t })\n\n\t .on(\"click\", \".k-button-delete\", function(ev){\n\t ev.preventDefault();\n\t ev.stopPropagation();\n\t var item = $(ev.target).closest(\".k-item\");\n\t item = this.combo.dataItem(item);\n\t this._deleteItem(item.name);\n\t }.bind(this));\n\t },\n\t value: function(val) {\n\t if (val === undefined) {\n\t return this.combo.value();\n\t } else {\n\t this.combo.value(val);\n\t }\n\t },\n\t _deleteItem: function(name) {\n\t this.trigger(\"delete\", { name: name });\n\t },\n\t _on_keyDown: function(ev) {\n\t switch (ev.keyCode) {\n\t case 27:\n\t this.combo.value(this._prevValue);\n\t this.trigger(\"cancel\");\n\t break;\n\t case 13:\n\t this.trigger(\"enter\");\n\t break;\n\t }\n\t },\n\t _on_focus: function() {\n\t this._prevValue = this.combo.value();\n\t },\n\t _on_listChange: function() {\n\t var name = this.combo.value();\n\t if (name) {\n\t this.trigger(\"select\", { name: name });\n\t }\n\t }\n\t });\n\n\t kendo.spreadsheet.NameEditor = NameEditor;\n\t})(window.kendo);\n\t}, __webpack_require__(3));\n\n\n/***/ })\n\n/******/ });","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(1666);\n\tmodule.exports = __webpack_require__(1666);\n\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n/***/ }),\n\n/***/ 20:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"../kendo.core\");\n\n/***/ }),\n\n/***/ 1666:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(f, define){\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(20) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t})(function(){\n\n\t(function(kendo) {\n\n\t var Property = kendo.Class.extend({\n\t init: function(list) {\n\t this.list = list;\n\t },\n\n\t get: function(index) {\n\t return this.parse(this.list.value(index, index));\n\t },\n\n\t set: function(start, end, value) {\n\t if (value === undefined) {\n\t value = end;\n\t end = start;\n\t }\n\n\t this.list.value(start, end, value);\n\t },\n\n\t parse: function(value) {\n\t return value;\n\t },\n\n\t copy: function(start, end, dst) {\n\t this.list.copy(start, end, dst);\n\t },\n\n\t iterator: function(start, end) {\n\t return this.list.iterator(start, end);\n\t }\n\t });\n\n\t var JsonProperty = Property.extend({\n\t set: function(start, end, value) {\n\t this.list.value(start, end, JSON.stringify(value));\n\t },\n\n\t parse: function(value) {\n\t return JSON.parse(value);\n\t }\n\t });\n\n\t var ValueProperty = Property.extend({\n\t init: function(values, formats) {\n\t Property.prototype.init.call(this, values);\n\t this.formats = formats;\n\t },\n\n\t set: function(start, end, value) {\n\t if (value instanceof Date) {\n\t value = kendo.spreadsheet.dateToNumber(value);\n\t if (!this.formats.value(start,end)) {\n\t this.formats.value(start, end, toExcelFormat(kendo.culture().calendar.patterns.d));\n\t }\n\t } else if (typeof value == \"number\") {\n\t value = kendo.spreadsheet.calc.runtime.limitPrecision(value);\n\t }\n\n\t this.list.value(start, end, value);\n\t }\n\t });\n\n\t function toExcelFormat(format) {\n\t return format.replace(/M/g, \"m\").replace(/'/g, '\"').replace(/tt/, \"am/pm\");\n\t }\n\n\t kendo.spreadsheet.PropertyBag = kendo.Class.extend({\n\t specs: [\n\t { property: Property, name: \"format\", value: null, sortable: true, serializable: true },\n\t { property: ValueProperty, name: \"value\", value: null, sortable: true, serializable: true, depends: \"format\" },\n\t { property: Property, name: \"formula\", value: null, sortable: true, serializable: true },\n\t { property: Property, name: \"background\", value: null, sortable: true, serializable: true },\n\t { property: JsonProperty, name: \"vBorders\", value: null, sortable: false, serializable: false },\n\t { property: JsonProperty, name: \"hBorders\", value: null, sortable: false, serializable: false },\n\t { property: Property, name: \"color\", value: null, sortable: true, serializable: true },\n\t { property: Property, name: \"fontFamily\", value: null, sortable: true, serializable: true },\n\t { property: Property, name: \"underline\", value: null, sortable: true, serializable: true },\n\t { property: Property, name: \"fontSize\", value: null, sortable: true, serializable: true },\n\t { property: Property, name: \"italic\", value: null, sortable: true, serializable: true },\n\t { property: Property, name: \"bold\", value: null, sortable: true, serializable: true },\n\t { property: Property, name: \"textAlign\", value: null, sortable: true, serializable: true },\n\t { property: Property, name: \"indent\", value: null, sortable: true, serializable: true },\n\t { property: Property, name: \"verticalAlign\", value: null, sortable: true, serializable: true },\n\t { property: Property, name: \"wrap\", value: null, sortable: true, serializable: true },\n\t { property: Property, name: \"validation\", value: null, sortable: false, serializable: true },\n\t { property: Property, name: \"enable\", value: null, sortable: false, serializable: true },\n\t { property: Property, name: \"link\", value: null, sortable: true, serializable: true },\n\t { property: Property, name: \"editor\", value: null, sortable: true, serializable: true },\n\t { property: Property, name: \"comment\", value: null, sortable: true, serializable: true },\n\t { property: Property, name: \"html\", value: null, sortable: true, serializable: true }\n\t ],\n\n\t init: function(rowCount, columnCount, defaultValues) {\n\t defaultValues = defaultValues || {};\n\t var cellCount = rowCount * columnCount - 1;\n\n\t this.rowCount = rowCount;\n\t this.columnCount = columnCount;\n\t this.cellCount = cellCount;\n\t this.properties = {};\n\t this.lists = {};\n\n\t this.specs.forEach(function(spec) {\n\t var name = spec.name;\n\t var value = defaultValues[name];\n\t if (value === undefined) {\n\t value = spec.value;\n\t }\n\t this.lists[name] = new kendo.spreadsheet.SparseRangeList(0, cellCount, value);\n\t var prop = this.properties[name] = new spec.property(this.lists[name], this.lists[spec.depends]);\n\t prop.spec = spec;\n\t }, this);\n\n\t // XXX: this is a hack but I have no better ideas at this\n\t // point. The getState() method in a SparseRangeList\n\t // clones the tree (which just copies values over), but\n\t // formulas are objects maintaining complex state.\n\t // https://github.com/telerik/kendo-ui-core/issues/2816\n\t this.lists.formula.tree.clone = cloneFormulaTree;\n\t this.lists.validation.tree.clone = cloneFormulaTree;\n\t },\n\n\t getState: function() {\n\t var state = {};\n\n\t this.specs.forEach(function(spec) {\n\t state[spec.name] = this.lists[spec.name].getState();\n\t }, this);\n\n\t return state;\n\t },\n\n\t setState: function(state) {\n\t this.specs.forEach(function(spec) {\n\t this.lists[spec.name].setState(state[spec.name]);\n\t }, this);\n\t },\n\n\t get: function(name, index) {\n\t if (index === undefined) {\n\t return this.lists[name];\n\t }\n\n\t switch (name) {\n\t case \"borderRight\":\n\t index += this.rowCount;\n\t /* falls through */\n\t case \"borderLeft\":\n\t name = \"vBorders\";\n\t break;\n\n\t case \"borderBottom\":\n\t index++;\n\t /* falls through */\n\t case \"borderTop\":\n\t name = \"hBorders\";\n\t break;\n\t }\n\t return index > this.cellCount ? null : this.properties[name].get(index);\n\t },\n\n\t set: function(name, start, end, value) {\n\t switch (name) {\n\t case \"borderRight\":\n\t start += this.rowCount;\n\t end += this.rowCount;\n\t /* falls through */\n\t case \"borderLeft\":\n\t name = \"vBorders\";\n\t break;\n\n\t case \"borderBottom\":\n\t start++;\n\t end++;\n\t /* falls through */\n\t case \"borderTop\":\n\t name = \"hBorders\";\n\t break;\n\t }\n\t if (start <= end && end <= this.cellCount) {\n\t this.properties[name].set(start, end, value);\n\t }\n\t },\n\n\t fromJSON: function(index, value) {\n\t for (var si = 0; si < this.specs.length; si++) {\n\t var spec = this.specs[si];\n\n\t if (spec.serializable) {\n\t if (value[spec.name] !== undefined) {\n\t this.set(spec.name, index, index, value[spec.name], false);\n\t }\n\t }\n\t }\n\n\t [ \"borderLeft\", \"borderRight\", \"borderTop\", \"borderBottom\" ].forEach(function(b){\n\t if (value[b] !== undefined) {\n\t this.set(b, index, index, value[b]);\n\t }\n\t }, this);\n\t },\n\n\t copy: function(sourceStart, sourceEnd, targetStart) {\n\t this.specs.forEach(function(spec) {\n\t this.properties[spec.name].copy(sourceStart, sourceEnd, targetStart);\n\t }, this);\n\t },\n\n\t iterator: function(name, start, end) {\n\t var prop = this.properties[name];\n\t var iter = prop.iterator(start, end), at = iter.at;\n\t var cellCount = this.cellCount;\n\t iter.at = function(index) {\n\t return index > cellCount ? null : prop.parse(at.call(iter, index));\n\t };\n\t iter.name = name;\n\t iter.value = prop.spec.value;\n\t return iter;\n\t },\n\n\t sortable: function() {\n\t return this.specs.filter(function(spec) { return spec.sortable; })\n\t .map(function(spec) {\n\t return this.lists[spec.name];\n\t }, this);\n\t },\n\n\t iterators: function(start, end) {\n\t return this.specs.reduce(function(ret, spec) {\n\t if (spec.serializable) {\n\t ret.push(this.iterator(spec.name, start, end));\n\t }\n\t return ret;\n\t }.bind(this), []);\n\t },\n\n\t forEach: function(start, end, callback) {\n\t var iterators = this.iterators(start, end);\n\t var hBorders = this.iterator(\"hBorders\", start, end + 1);\n\t var leftBorders = this.iterator(\"vBorders\", start, end);\n\t var rightBorders = this.iterator(\"vBorders\", start + this.rowCount, end + this.rowCount);\n\t var values, index;\n\n\t function addBorder(name, iterator, index) {\n\t var val = iterator.at(index);\n\t if (val !== iterator.value) {\n\t values[name] = val;\n\t }\n\t }\n\n\t for (index = start; index <= end; index++) {\n\t values = {};\n\n\t for (var i = 0; i < iterators.length; i++) {\n\t var iterator = iterators[i];\n\t var value = iterator.at(index);\n\n\t if (value !== iterator.value) {\n\t values[iterator.name] = value;\n\t }\n\t }\n\n\t addBorder(\"borderLeft\", leftBorders, index);\n\t addBorder(\"borderRight\", rightBorders, index + this.rowCount);\n\t addBorder(\"borderTop\", hBorders, index);\n\t if ((index + 1) % this.rowCount) {\n\t addBorder(\"borderBottom\", hBorders, index + 1);\n\t }\n\n\t callback(values);\n\t }\n\t },\n\n\t forEachProperty: function(callback) {\n\t for (var name in this.properties) {\n\t callback(this.properties[name]);\n\t }\n\t }\n\t });\n\n\t function cloneFormulaValue(x) {\n\t x = x.clone();\n\t x.value = x.value.deepClone(); // x.value is Formula or Validation\n\t return x;\n\t }\n\n\t function cloneFormulaTree() {\n\t var tree = this.map(cloneFormulaValue);\n\t tree.clone = cloneFormulaTree; // because it's a new RangeTree now\n\t return tree;\n\t }\n\n\t kendo.spreadsheet.ALL_PROPERTIES = kendo.spreadsheet.PropertyBag.prototype.specs.reduce(function(a, spec) {\n\t if (spec.serializable) {\n\t a.push(spec.name);\n\t }\n\t return a;\n\t }, [ \"borderTop\", \"borderRight\", \"borderBottom\", \"borderLeft\" ]);\n\n\t})(window.kendo);\n\n\t}, __webpack_require__(3));\n\n\n/***/ })\n\n/******/ });"],"sourceRoot":""}