{"_id":"@divorcemate/word-calc","_rev":"4-63d64d9e066e0ead151ebf12a549166c","name":"@divorcemate/word-calc","dist-tags":{"latest":"0.0.4"},"versions":{"0.0.1":{"name":"@divorcemate/word-calc","version":"0.0.1","description":"*Populated on [initialize](###initialize)*","main":"index.js","scripts":{"build":"tsc && node copy-assets","test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"DivorceMate Software"},"license":"ISC","types":"./index.d.ts","gitHead":"a8dd426c5bd9e2d3a18f4b6ef180cec92bd3b815","_id":"@divorcemate/word-calc@0.0.1","_nodeVersion":"16.17.0","_npmVersion":"8.15.0","dist":{"integrity":"sha512-Tz8aMucD/yYgXjBihFmVdcN7iaTM0tC+NrgPutYEyP+6JtNhp6DxKJ5DvmN7qY9YNeAXxY8oILuDjiZGNcLKLA==","shasum":"dc96128228c02740993c3cb192bbd83ec43f5101","tarball":"https://registry.npmjs.org/@divorcemate/word-calc/-/word-calc-0.0.1.tgz","fileCount":6,"unpackedSize":21823,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDnbMrYcPZN3w3MD1rofFwyj/S/uCRwiukAx3ygW5Ip8AIgNcV4Bj8IeOqpNiJ09gJiO1jPpzgUkpHqohlXNCjUWNI="}]},"_npmUser":{"name":"sclarke500","email":"sclarke500@gmail.com"},"directories":{},"maintainers":[{"name":"ipiwnica","email":"ilona.piwnica@leaplegalsoftware.ca"},{"name":"sclarke500","email":"sclarke500@gmail.com"},{"name":"msobolev","email":"msobolev@divorcemate.com"},{"name":"emilcon","email":"emil@divorcemate.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/word-calc_0.0.1_1705511384745_0.8891957540967139"},"_hasShrinkwrap":false},"0.0.2":{"name":"@divorcemate/word-calc","version":"0.0.2","description":"*Populated on [initialize](###initialize)*","main":"index.js","scripts":{"build":"tsc && node copy-assets","test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"DivorceMate Software"},"license":"ISC","types":"./index.d.ts","gitHead":"a8dd426c5bd9e2d3a18f4b6ef180cec92bd3b815","_id":"@divorcemate/word-calc@0.0.2","_nodeVersion":"16.17.0","_npmVersion":"8.15.0","dist":{"integrity":"sha512-3dnzrNvNiNa8EivnCZFwzLoi2ngJax+65DLe8uLVaLRlBSl+VARHWYGfRvL+CrBuSgC1y1LAUzCBFTDBPNVw9g==","shasum":"eb7f0cdf604d6341d4f04994fa0bfcbfee58d579","tarball":"https://registry.npmjs.org/@divorcemate/word-calc/-/word-calc-0.0.2.tgz","fileCount":6,"unpackedSize":21823,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEd5OCYLOmDpE/jGPxF8dpPKe4YD8wwDQkLJnKzXoObyAiEA2YQPkzA8prFFTHsjbcKIB9Qk0iYwUfQAui+6lwKSaLo="}]},"_npmUser":{"name":"sclarke500","email":"sclarke500@gmail.com"},"directories":{},"maintainers":[{"name":"ipiwnica","email":"ilona.piwnica@leaplegalsoftware.ca"},{"name":"sclarke500","email":"sclarke500@gmail.com"},{"name":"msobolev","email":"msobolev@divorcemate.com"},{"name":"emilcon","email":"emil@divorcemate.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/word-calc_0.0.2_1705511598662_0.50602095027663"},"_hasShrinkwrap":false},"0.0.3":{"name":"@divorcemate/word-calc","version":"0.0.3","description":"*Populated on [initialize](###initialize)*","main":"index.js","scripts":{"build":"tsc && node copy-assets","test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"DivorceMate Software"},"license":"ISC","types":"./index.d.ts","gitHead":"a8dd426c5bd9e2d3a18f4b6ef180cec92bd3b815","_id":"@divorcemate/word-calc@0.0.3","_nodeVersion":"16.17.0","_npmVersion":"8.15.0","dist":{"integrity":"sha512-sQJrirPfryCYs1OMqBRfmR7iX9D7RaEQ1dOVqZN5BWG7MJwfZdsCnlDpt+b88K67E+Eh7LF1dvHj2oxenqYh3g==","shasum":"edfdeac3bef57598fdc2799ee96f5be294f960c0","tarball":"https://registry.npmjs.org/@divorcemate/word-calc/-/word-calc-0.0.3.tgz","fileCount":8,"unpackedSize":33574,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIByf16Y9KKFaLYNdPgDBqmepdSc8DfEIhvtvgTAQ4ZU/AiARVaBRxDvK+7H5dlOemPkHmROn8jvjLM3dJYZi1QUaXQ=="}]},"_npmUser":{"name":"sclarke500","email":"sclarke500@gmail.com"},"directories":{},"maintainers":[{"name":"ipiwnica","email":"ilona.piwnica@leaplegalsoftware.ca"},{"name":"sclarke500","email":"sclarke500@gmail.com"},{"name":"msobolev","email":"msobolev@divorcemate.com"},{"name":"emilcon","email":"emil@divorcemate.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/word-calc_0.0.3_1705670472027_0.43915438708038623"},"_hasShrinkwrap":false},"0.0.4":{"name":"@divorcemate/word-calc","version":"0.0.4","description":"A library of helper functions for calculating data from Word documents.","main":"index.js","scripts":{"build":"tsc && node copy-assets","test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"DivorceMate Software"},"license":"ISC","types":"./index.d.ts","gitHead":"a8dd426c5bd9e2d3a18f4b6ef180cec92bd3b815","_id":"@divorcemate/word-calc@0.0.4","_nodeVersion":"16.17.0","_npmVersion":"8.15.0","dist":{"integrity":"sha512-uax62puxPZi5RN99FmFLp1zZPiGbDfFhLljqoNgiAv8QCM2OelR6xSS/Hdwb0NAqWjaVmWy7+q3LxysNd0CQ4Q==","shasum":"70c0d4e1c4a1720440cd748c24e53bd171f5689b","tarball":"https://registry.npmjs.org/@divorcemate/word-calc/-/word-calc-0.0.4.tgz","fileCount":8,"unpackedSize":29139,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDtkqC2rVhdiyiHgApIXOVMg0txfYW6DwLcsg2anzIKiAiEA58BWBFOmz7YWRChpdPfwFlJptzrvkFhYxSAYtwPa24A="}]},"_npmUser":{"name":"sclarke500","email":"sclarke500@gmail.com"},"directories":{},"maintainers":[{"name":"ipiwnica","email":"ilona.piwnica@leaplegalsoftware.ca"},{"name":"sclarke500","email":"sclarke500@gmail.com"},{"name":"msobolev","email":"msobolev@divorcemate.com"},{"name":"emilcon","email":"emil@divorcemate.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/word-calc_0.0.4_1705945380706_0.9495697974847508"},"_hasShrinkwrap":false}},"time":{"created":"2024-01-17T17:09:44.744Z","0.0.1":"2024-01-17T17:09:44.891Z","modified":"2024-01-22T17:43:01.154Z","0.0.2":"2024-01-17T17:13:18.787Z","0.0.3":"2024-01-19T13:21:12.262Z","0.0.4":"2024-01-22T17:43:00.877Z"},"maintainers":[{"name":"ipiwnica","email":"ilona.piwnica@leaplegalsoftware.ca"},{"name":"sclarke500","email":"sclarke500@gmail.com"},{"name":"msobolev","email":"msobolev@divorcemate.com"},{"name":"emilcon","email":"emil@divorcemate.com"}],"description":"A library of helper functions for calculating data from Word documents.","author":{"name":"DivorceMate Software"},"license":"ISC","readme":"# @divorcemate/word-calc\r\n\r\nA library of helper functions for calculating data from Word documents. \r\n\r\nWorks in Word add in side panel apps with an Office JS reference (usually in index.html)\r\n\r\n```\r\n<script type=\"text/javascript\" src=\"https://appsforoffice.microsoft.com/lib/1/hosted/office.js\"></script>\r\n```\r\n\r\n## Installation\r\n\r\nnpm i @divorcemate/word-calc\r\n\r\n## Simple Usage\r\n```\r\nimport { calc } from '@divorcemate/word-calc';\r\n\r\n// async function calculate...\r\n\r\n  await calc.initialize();\r\n\r\n  let incomeValues = await calc.getTableValues('c_incomeStartMark'); // [123, 22, 0]\r\n\r\n  let results = {\r\n    calc_totalIncome: calc.sum$(incomeValues), // '$145.00'\r\n  }\r\n\r\n  await calc.populateResults(results);\r\n\r\n  return calc.result(); // { success: true } or { success: false, errors: ['Could not find c_incomeStartMark'] }\r\n\r\n```\r\n\r\n\r\n# Calculator\r\n\r\n## Properties\r\n\r\n### bookmarks\r\n*Populated on [initialize](#initialize)*\r\n\r\nArray of bookmarks names<string> in the document.\r\n\r\n```\r\ncalc.bookmarks\r\n// ['PartAIncome', 'PartBExpenses']\r\n```\r\n\r\n### checkboxValues\r\n*Populated on [initialize](#initialize)*\r\n\r\nObject containing all checkboxes (tag value) in document (that start with 'c_') and their values.  \r\n\r\n*eg* Document contains checked checkbox with tag `c_myVal` \r\nand unchecked checkbox with tag `c_myVal2`\r\n```\r\ncalc.checkboxValues\r\n// {\r\n//   c_myVal: true,\r\n//   c_myVal2: false,\r\n// }\r\n```\r\n\r\n### errors\r\n*Populated by the calculation routine as/if it encounters errors*\r\n\r\nAn array of string error message encountered during the calculaton routine.  Check after running calculation to determine whether to display error message to user.\r\n\r\n\r\n## Methods\r\n\r\n### bookmarkExists\r\nDoes bookmark exist in the document\r\n\r\n*Shorthand function for `calc.bookmarks.includes(bookmarkName)`*\r\n\r\n```\r\ncalc.bookmarkExists('PartAIncome')\r\n// true\r\ncalc.bookmarkExists('ScheduleA')\r\n// false\r\n```\r\n\r\n### checkForBrackets\r\n\r\nLooks for a negative number indicated by brackets.  If the value argument is sandwiched between `()` brackets, it will remove brackets and prepend `-` (minus sign).\r\n\r\n```\r\n calc.checkForBrackets('(45)')\r\n // -45\r\n calc.checkForBrackets('12')\r\n // 12\r\n```\r\n\r\n\r\n\r\n### errorLog\r\nAdds an error message (string) to array of [errors](#errors)\r\n\r\n```\r\ncalc.errorLog('Totals table is missing!');\r\n```\r\n\r\n### fmt\r\nFormats a number value to 2 decimal places (currency wothout the $). Adds brackets for negative numbers.\r\n```\r\ncalc.fmt(12) // 12.00\r\ncalc.fmt(-5) // (5.00)\r\n```\r\n\r\n### fmt$\r\nFormats a number value to dollar currency value $x.xx. Adds brackets for negative numbers.\r\n```\r\ncalc.fmt$(12) // $12.00\r\ncalc.fmt(-5) // ($5.00)\r\n```\r\n\r\n### getBookmarkValues\r\nTakes an array of bookmark names, an optional options argument and returns an object with name/value pairs.  \r\n\r\nBookmark **must be in a table cell** and the value of the text in the cell is returned.\r\n\r\nValue is retrieved/formatted in accordance with the [ICellValueOptions](#icellvalueoptions) specified as the secod argument.\r\n\r\n```\r\n// in doc: bmName1 cell: '12', bmName2 cell: 'TBD'\r\n\r\ncalc.getBookmarkValues(['bmName1', 'bmName2']);\r\n// returns { bmName1: 12, bmName2: 0 }\r\n\r\ncalc.getBookmarkValues(['bmName1', 'bmName2'], { format$: true, alignCell: true });\r\n\r\n// returns { bmName1: 12, bmName2: 0 }\r\n// in doc bmName1 cell now has '$12.00' and is right aligned\r\n// bmName2 cell has TBD and is left aligned \r\n\r\ncalc.getBookmarkValues(['bmName1', 'bmName2'], { rawValuesOnly: true });\r\n// returns { bmName1: '12', bmName2: 'TBD' }\r\n```\r\n\r\n### getTableValues\r\nGets the values of an expandable table.  Takes the name of the start bookmark and an optional [ITableGetOptions](#itablegetoptions) object\r\n\r\nReturns an array of numbers for each column.  \r\n\r\nBy default the fetch starts at the first row after the start bookmark and grabs rows until the first row before the end bookmark.\r\n```\r\n|{myTableStart} |          |\r\n| item a desc   |       22 |\r\n| item b desc   |      325 |\r\n| item c desc   |      TBD |\r\n| {myTableEnd}  |  [$0.00] |\r\n\r\nlet values = calc.getTableValues('myTableStart') // [22, 325, 0]\r\nlet ttl = calc.sum$(values);\r\ncalc.populateResults( { myTableTotal: ttl } );\r\n\r\n|{myTableStart} |          |\r\n| item a desc   |   $22.00 |\r\n| item b desc   |  $325.00 |\r\n| item c desc   | TBD      |  // cell is aligned left bc not a number\r\n| {myTableEnd}  |[$347.00] |\r\n```\r\n\r\n### initialize\r\nCall at the start of your calculate routine.  Sets [bookmarks](#bookmarks), [checkboxValues](#checkboxvalues) and resets [errors](#errors);\r\n\r\n```\r\ncalc.initialize(); // void - no return value\r\n```\r\n\r\n### isNum\r\nTakes a string argument and returns a boolean indicating whether the value is a number.  Ignores `$` and `,`.\r\n\r\n```\r\ncalc.isNum('23.0') // true\r\ncalc.isNum('$2,123') // true\r\ncalc.isNum('~23') // false\r\n```\r\n\r\n### isTableValid\r\nTakes and array of arrays and returns whether each row has the same number of columns (ie ensure no merged cells)\r\n\r\n```\r\ncalc.isTableValid([[1, 4, 5], [54, 22, 0], [0, 0, 99]]) // true\r\ncalc.isTableValid([[1, 4, 5], [54, 0], [0, 0, 99]]) // false\r\n```\r\n\r\n### populateResults\r\nTakes an object with name vaue pairs, and populates content controls in the document with the value based on tag name.\r\n\r\n```\r\ncalc.populateResults({\r\n  calc_totalA: '$23.00',\r\n  calc_totalB: '$44.00',\r\n  calc_grandTotal: '$67.00',\r\n})\r\n```\r\n\r\n### result\r\nCall after your calculation routine is done to see how it went.  Returns an object with a success boolean and an array of errors if applicable.\r\n```\r\ncalc.result();\r\n// { success: false, errors: ['Schedule A table not found'] }\r\n```\r\n\r\n\r\n### sum\r\nTakes an array of numbers and returns the sum.\r\n```\r\ncalc.sum([2, 3, 4]) // 9\r\n```\r\n\r\n### sum$\r\nTakes an array of numbers and returns the sum as a formatted currency string.\r\n```\r\ncalc.sum([2, 3, 4]) // $9.00\r\n```\r\n\r\n### sumTable\r\nCalls [getTableValues](#gettablevalues) and [sum](#sum)s the result.\r\n\r\nTakes `startTableBookmark` and [ITableGetOptions](#itablegetoptions) as auruments.\r\n```\r\ncalc.sumTable('myTableStart') // 67\r\n```\r\n\r\n### sumTable$\r\nCalls [getTableValues](#gettablevalues) and [sum](#sum)s the result, returns as $ formatted string.\r\n\r\nTakes `startTableBookmark` and [ITableGetOptions](#itablegetoptions) as auruments.\r\n```\r\ncalc.sumTable$('myTableStart') // '$67.00'\r\n```\r\n\r\n### setTableValues\r\n```\r\nawait calc.setTableValues(startTableBookmark: string, options: ITableSetOptions): void\r\n```\r\nTakes a `startTableBookmark` and an array of values and populates a column.\r\n\r\nAlso takes an optional [ITableSetOptions](#itablesetoptions) argument. \r\n\r\n### val(v: string): number\r\n```\r\nlet s = calc.val('($4.00)') // -4\r\nlet s = calc.val('$1,234.00') // 1234\r\nlet s = calc.val('TBD') // 0\r\n```\r\n\r\n\r\n\r\n## Interfaces\r\n\r\n### ICellValueOptions\r\n```\r\ninterface ICellValueOptions {\r\n  alignCell?: boolean;\r\n  format$?: boolean;\r\n  readRawValuesOnly?: boolean;\r\n  convertTo?: string;   // weekly / monthly / annual\r\n}\r\n```\r\n\r\n### ITableGetOptions\r\n```\r\ninterface ITableGetOptions {\r\n  endMark?: string,\r\n  startOffset?: number,\r\n  endOffset?: number,\r\n  numCols?: number,\r\n  startColIdx?: number,\r\n  alignCells?: boolean,\r\n  format$?: boolean,\r\n  readRawValuesOnly?: boolean,\r\n  skipMergedCellCheck?: boolean,\r\n  convertTo?: string, // weekly / monthly / annual\r\n}\r\n```\r\n\r\n### ITableSetOptions\r\n```\r\ninterface ITableSetOptions {\r\n  endMark?: string,\r\n  startOffset?: number,\r\n  endOffset?: number,\r\n  colIdx?: number,\r\n  format$?: boolean,\r\n}\r\n```\r\n\r\n\r\n\r\n# Transfer\r\n\r\n## Properties\r\n\r\n### errors\r\n*Populated by the transfer routine as/if it encounters errors*\r\n\r\nAn array of string error message encountered during the transfer routine.  Check after running your transfer to determine whether to display error message to user.\r\n\r\n## Methods\r\n\r\n\r\n### getTableData\r\n\r\nasync function getTableData(startMark: string, options?: [ITableDataOptions](#itabledataoptions)): Promise<any>\r\n\r\n\r\n```\r\n  await transfer.getTableData(`c_p4${ l }Start`, { startOffset: 2, columns: [0, 1, 4] });\r\n```\r\n\r\n### lettersUpTo\r\n```\r\nlet letters = transfer.lettersUpTo('d') // ['a', 'b', 'c', 'd']\r\nlet letters = transfer.lettersUpTo('C') // ['A', 'B', 'C']\r\n```\r\n\r\n### setTableData\r\n\r\nTakes a start bookmark name and array of arrays (table data).  Adds rows to destination table and injects data.\r\n\r\n```\r\nawait transfer.setTableData('c_Table5Start', data);\r\n```\r\n\r\n## Interfaces\r\n\r\n### ITableDataOptions\r\n```\r\ninterface ITableDataOptions {\r\n  endMark?: string,\r\n  startOffset?: number,\r\n  endOffset?: number,\r\n  columns?: Array<number>, // only for get\r\n}\r\n```","readmeFilename":"README.md"}