@umbraci/jsmind 0.10.14 → 0.10.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/LICENSE +24 -24
  2. package/README.md +116 -116
  3. package/dist/jsmind.copy-paste.js +9 -0
  4. package/dist/jsmind.copy-paste.js.map +1 -0
  5. package/dist/jsmind.draggable-node.js +1 -1
  6. package/dist/jsmind.draggable-node.js.map +1 -1
  7. package/dist/jsmind.history.js +1 -1
  8. package/dist/jsmind.history.js.map +1 -1
  9. package/dist/jsmind.js +1 -1
  10. package/dist/jsmind.js.map +1 -1
  11. package/dist/jsmind.multi-select.js +1 -1
  12. package/dist/jsmind.multi-select.js.map +1 -1
  13. package/dist/jsmind.multiline-text.js +1 -1
  14. package/dist/jsmind.multiline-text.js.map +1 -1
  15. package/dist/jsmind.screenshot.js +1 -1
  16. package/dist/jsmind.screenshot.js.map +1 -1
  17. package/es/jsmind.copy-paste.js +9 -0
  18. package/es/jsmind.copy-paste.js.map +1 -0
  19. package/es/jsmind.draggable-node.js +1 -1
  20. package/es/jsmind.draggable-node.js.map +1 -1
  21. package/es/jsmind.history.js +1 -1
  22. package/es/jsmind.history.js.map +1 -1
  23. package/es/jsmind.js +1 -1
  24. package/es/jsmind.js.map +1 -1
  25. package/es/jsmind.multi-select.js +1 -1
  26. package/es/jsmind.multi-select.js.map +1 -1
  27. package/es/jsmind.multiline-text.js +1 -1
  28. package/es/jsmind.multiline-text.js.map +1 -1
  29. package/es/jsmind.screenshot.js +1 -1
  30. package/es/jsmind.screenshot.js.map +1 -1
  31. package/lib/jsmind.copy-paste.js +9 -0
  32. package/lib/jsmind.copy-paste.js.map +1 -0
  33. package/lib/jsmind.draggable-node.js +1 -1
  34. package/lib/jsmind.draggable-node.js.map +1 -1
  35. package/lib/jsmind.history.js +1 -1
  36. package/lib/jsmind.history.js.map +1 -1
  37. package/lib/jsmind.js +1 -1
  38. package/lib/jsmind.js.map +1 -1
  39. package/lib/jsmind.multi-select.js +1 -1
  40. package/lib/jsmind.multi-select.js.map +1 -1
  41. package/lib/jsmind.multiline-text.js +1 -1
  42. package/lib/jsmind.multiline-text.js.map +1 -1
  43. package/lib/jsmind.screenshot.js +1 -1
  44. package/lib/jsmind.screenshot.js.map +1 -1
  45. package/package.json +115 -115
  46. package/style/jsmind.css +408 -408
  47. package/types/generated/index.d.ts +8 -0
  48. package/types/generated/jsmind.common.d.ts +68 -0
  49. package/types/generated/jsmind.d.ts +632 -0
  50. package/types/generated/jsmind.data_provider.d.ts +56 -0
  51. package/types/generated/jsmind.dom.d.ts +59 -0
  52. package/types/generated/jsmind.enhanced-plugin.d.ts +103 -0
  53. package/types/generated/jsmind.format.d.ts +113 -0
  54. package/types/generated/jsmind.graph.d.ts +180 -0
  55. package/types/generated/jsmind.layout_provider.d.ts +182 -0
  56. package/types/generated/jsmind.mind.d.ts +129 -0
  57. package/types/generated/jsmind.node.d.ts +69 -0
  58. package/types/generated/jsmind.option.d.ts +78 -0
  59. package/types/generated/jsmind.plugin.d.ts +21 -0
  60. package/types/generated/jsmind.shortcut_provider.d.ts +52 -0
  61. package/types/generated/jsmind.util.d.ts +26 -0
  62. package/types/generated/jsmind.view_provider.d.ts +374 -0
  63. package/types/generated/plugins/history/history-diff.d.ts +310 -0
  64. package/types/generated/plugins/history/jsmind.history.d.ts +87 -0
  65. package/types/generated/plugins/jsmind.draggable-node.d.ts +262 -0
  66. package/types/generated/plugins/jsmind.multiline-text-v2.d.ts +58 -0
  67. package/types/generated/plugins/jsmind.multiline-text.d.ts +43 -0
  68. package/types/generated/plugins/jsmind.screenshot.d.ts +83 -0
  69. package/types/tsconfig.declaration.json +19 -19
@@ -1 +1 @@
1
- {"version":3,"file":"jsmind.screenshot.js","sources":["../src/plugins/jsmind.screenshot.js"],"sourcesContent":["/**\r\n * @license BSD\r\n * @copyright 2014-2025 UmbraCi\r\n *\r\n * Project Home:\r\n * https://github.com/UmbraCi/jsmind/\r\n */\r\n\r\nimport jsMind from '@umbraci/jsmind';\r\nimport domtoimage from 'dom-to-image';\r\n\r\nif (!jsMind) {\r\n throw new Error('jsMind is not defined');\r\n}\r\n\r\nif (!domtoimage) {\r\n throw new Error('dom-to-image is required');\r\n}\r\n\r\nconst $ = jsMind.$;\r\n\r\n/**\r\n * Default options for screenshot plugin.\r\n * @typedef {Object} ScreenshotOptions\r\n * @property {string|null} [filename]\r\n * @property {{left?:string|Location,right?:string}} [watermark]\r\n * @property {string} [background]\r\n */\r\nconst DEFAULT_OPTIONS = {\r\n filename: null,\r\n watermark: {\r\n left: $.w.location,\r\n right: 'https://github.com/UmbraCi/jsmind',\r\n },\r\n background: 'transparent',\r\n};\r\n\r\n/**\r\n * Screenshot plugin for jsMind.\r\n */\r\nexport class JmScreenshot {\r\n /**\r\n * Create screenshot plugin instance.\r\n * @param {import('../jsmind.js').default} jm - jsMind instance\r\n * @param {Partial<ScreenshotOptions>} options - Plugin options\r\n */\r\n constructor(jm, options) {\r\n var opts = {};\r\n jsMind.util.json.merge(opts, DEFAULT_OPTIONS);\r\n jsMind.util.json.merge(opts, options);\r\n\r\n this.version = '0.2.0';\r\n /** @type {import('../jsmind.js').default} */\r\n this.jm = jm;\r\n /** @type {ScreenshotOptions} */\r\n this.options = opts;\r\n /** @type {number} */\r\n this.dpr = jm.view.device_pixel_ratio;\r\n }\r\n\r\n /** Take a screenshot of the mind map. */\r\n shoot() {\r\n let c = this.create_canvas();\r\n let ctx = c.getContext('2d');\r\n ctx.scale(this.dpr, this.dpr);\r\n Promise.resolve(ctx)\r\n .then(() => this.draw_background(ctx))\r\n .then(() => this.draw_lines(ctx))\r\n .then(() => this.draw_nodes(ctx))\r\n .then(() => this.draw_watermark(c, ctx))\r\n .then(() => this.download(c))\r\n .then(() => this.clear(c));\r\n }\r\n\r\n /**\r\n * Create canvas for screenshot.\r\n * @returns {HTMLCanvasElement} Canvas element\r\n */\r\n create_canvas() {\r\n let c = $.c('canvas');\r\n const w = this.jm.view.size.w;\r\n const h = this.jm.view.size.h;\r\n c.width = w * this.dpr;\r\n c.height = h * this.dpr;\r\n c.style.width = w + 'px';\r\n c.style.height = h + 'px';\r\n\r\n c.style.visibility = 'hidden';\r\n this.jm.view.e_panel.appendChild(c);\r\n return c;\r\n }\r\n\r\n /**\r\n * Clean up canvas element.\r\n * @param {HTMLCanvasElement} c - Canvas to remove\r\n */\r\n clear(c) {\r\n c.parentNode.removeChild(c);\r\n }\r\n\r\n /**\r\n * Draw background on canvas.\r\n * @param {CanvasRenderingContext2D} ctx - Canvas context\r\n * @returns {Promise<CanvasRenderingContext2D>} Promise resolving to context\r\n */\r\n draw_background(ctx) {\r\n return new Promise(\r\n function (resolve, _) {\r\n const bg = this.options.background;\r\n if (!!bg && bg !== 'transparent') {\r\n ctx.fillStyle = this.options.background;\r\n ctx.fillRect(0, 0, this.jm.view.size.w, this.jm.view.size.h);\r\n }\r\n resolve(ctx);\r\n }.bind(this)\r\n );\r\n }\r\n\r\n /**\r\n * Draw connection lines on canvas by copying from view graph.\r\n * @param {CanvasRenderingContext2D} ctx\r\n * @returns {Promise<CanvasRenderingContext2D>}\r\n */\r\n draw_lines(ctx) {\r\n return new Promise(\r\n function (resolve, _) {\r\n this.jm.view.graph.copy_to(ctx, function () {\r\n resolve(ctx);\r\n });\r\n }.bind(this)\r\n );\r\n }\r\n\r\n /**\r\n * Draw node DOM into canvas via SVG snapshot.\r\n * @param {CanvasRenderingContext2D} ctx\r\n * @returns {Promise<CanvasRenderingContext2D>}\r\n */\r\n draw_nodes(ctx) {\r\n return domtoimage\r\n .toSvg(this.jm.view.e_nodes, { style: { zoom: 1 } })\r\n .then(this.load_image)\r\n .then(function (img) {\r\n ctx.drawImage(img, 0, 0);\r\n return ctx;\r\n });\r\n }\r\n\r\n /**\r\n * Draw watermark text on canvas.\r\n * @param {HTMLCanvasElement} c\r\n * @param {CanvasRenderingContext2D} ctx\r\n * @returns {CanvasRenderingContext2D}\r\n */\r\n draw_watermark(c, ctx) {\r\n ctx.textBaseline = 'bottom';\r\n ctx.fillStyle = '#000';\r\n ctx.font = '11px Verdana,Arial,Helvetica,sans-serif';\r\n if (!!this.options.watermark.left) {\r\n ctx.textAlign = 'left';\r\n ctx.fillText(this.options.watermark.left, 5.5, c.height - 2.5);\r\n }\r\n if (!!this.options.watermark.right) {\r\n ctx.textAlign = 'right';\r\n ctx.fillText(this.options.watermark.right, c.width - 5.5, c.height - 2.5);\r\n }\r\n return ctx;\r\n }\r\n\r\n /**\r\n * Load image from URL and resolve img element.\r\n * @param {string} url\r\n * @returns {Promise<HTMLImageElement>}\r\n */\r\n load_image(url) {\r\n return new Promise(function (resolve, reject) {\r\n let img = new Image();\r\n img.onload = function () {\r\n resolve(img);\r\n };\r\n img.onerror = reject;\r\n img.src = url;\r\n });\r\n }\r\n\r\n /**\r\n * Trigger download of canvas content as PNG.\r\n * @param {HTMLCanvasElement} c\r\n */\r\n download(c) {\r\n var name = (this.options.filename || this.jm.mind.name) + '.png';\r\n\r\n if (navigator.msSaveBlob && !!c.msToBlob) {\r\n var blob = c.msToBlob();\r\n navigator.msSaveBlob(blob, name);\r\n } else {\r\n var blob_url = c.toDataURL();\r\n var anchor = $.c('a');\r\n if ('download' in anchor) {\r\n anchor.style.visibility = 'hidden';\r\n anchor.href = blob_url;\r\n anchor.download = name;\r\n $.d.body.appendChild(anchor);\r\n var evt = $.d.createEvent('MouseEvents');\r\n evt.initEvent('click', true, true);\r\n anchor.dispatchEvent(evt);\r\n $.d.body.removeChild(anchor);\r\n } else {\r\n location.href = blob_url;\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Screenshot plugin registration.\r\n * @type {import('../jsmind.plugin.js').Plugin<Partial<ScreenshotOptions>>}\r\n */\r\nexport const screenshot_plugin = new jsMind.plugin('screenshot', function (jm, options) {\r\n var jmss = new JmScreenshot(jm, options);\r\n jm.screenshot = jmss;\r\n jm.shoot = function () {\r\n jmss.shoot();\r\n };\r\n});\r\n\r\njsMind.register_plugin(screenshot_plugin);\r\n\r\nexport default JmScreenshot;\r\n"],"names":["jsMind","Error","domtoimage","$","DEFAULT_OPTIONS","filename","watermark","left","w","location","right","background","JmScreenshot","constructor","jm","options","opts","util","json","merge","this","version","dpr","view","device_pixel_ratio","shoot","c","create_canvas","ctx","getContext","scale","Promise","resolve","then","draw_background","draw_lines","draw_nodes","draw_watermark","download","clear","size","h","width","height","style","visibility","e_panel","appendChild","parentNode","removeChild","_","bg","fillStyle","fillRect","bind","graph","copy_to","toSvg","e_nodes","zoom","load_image","img","drawImage","textBaseline","font","textAlign","fillText","url","reject","Image","onload","onerror","src","name","mind","navigator","msSaveBlob","msToBlob","blob","blob_url","toDataURL","anchor","href","d","body","evt","createEvent","initEvent","dispatchEvent","screenshot_plugin","plugin","jmss","screenshot","register_plugin"],"mappings":"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"}
1
+ {"version":3,"file":"jsmind.screenshot.js","sources":["../src/plugins/jsmind.screenshot.js"],"sourcesContent":["/**\n * @license BSD\n * @copyright 2014-2025 UmbraCi\n *\n * Project Home:\n * https://github.com/UmbraCi/jsmind/\n */\n\nimport jsMind from '@umbraci/jsmind';\nimport domtoimage from 'dom-to-image';\n\nif (!jsMind) {\n throw new Error('jsMind is not defined');\n}\n\nif (!domtoimage) {\n throw new Error('dom-to-image is required');\n}\n\nconst $ = jsMind.$;\n\n/**\n * Default options for screenshot plugin.\n * @typedef {Object} ScreenshotOptions\n * @property {string|null} [filename]\n * @property {{left?:string|Location,right?:string}} [watermark]\n * @property {string} [background]\n */\nconst DEFAULT_OPTIONS = {\n filename: null,\n watermark: {\n left: $.w.location,\n right: 'https://github.com/UmbraCi/jsmind',\n },\n background: 'transparent',\n};\n\n/**\n * Screenshot plugin for jsMind.\n */\nexport class JmScreenshot {\n /**\n * Create screenshot plugin instance.\n * @param {import('../jsmind.js').default} jm - jsMind instance\n * @param {Partial<ScreenshotOptions>} options - Plugin options\n */\n constructor(jm, options) {\n var opts = {};\n jsMind.util.json.merge(opts, DEFAULT_OPTIONS);\n jsMind.util.json.merge(opts, options);\n\n this.version = '0.2.0';\n /** @type {import('../jsmind.js').default} */\n this.jm = jm;\n /** @type {ScreenshotOptions} */\n this.options = opts;\n /** @type {number} */\n this.dpr = jm.view.device_pixel_ratio;\n }\n\n /** Take a screenshot of the mind map. */\n shoot() {\n let c = this.create_canvas();\n let ctx = c.getContext('2d');\n ctx.scale(this.dpr, this.dpr);\n Promise.resolve(ctx)\n .then(() => this.draw_background(ctx))\n .then(() => this.draw_lines(ctx))\n .then(() => this.draw_nodes(ctx))\n .then(() => this.draw_watermark(c, ctx))\n .then(() => this.download(c))\n .then(() => this.clear(c));\n }\n\n /**\n * Create canvas for screenshot.\n * @returns {HTMLCanvasElement} Canvas element\n */\n create_canvas() {\n let c = $.c('canvas');\n const w = this.jm.view.size.w;\n const h = this.jm.view.size.h;\n c.width = w * this.dpr;\n c.height = h * this.dpr;\n c.style.width = w + 'px';\n c.style.height = h + 'px';\n\n c.style.visibility = 'hidden';\n this.jm.view.e_panel.appendChild(c);\n return c;\n }\n\n /**\n * Clean up canvas element.\n * @param {HTMLCanvasElement} c - Canvas to remove\n */\n clear(c) {\n c.parentNode.removeChild(c);\n }\n\n /**\n * Draw background on canvas.\n * @param {CanvasRenderingContext2D} ctx - Canvas context\n * @returns {Promise<CanvasRenderingContext2D>} Promise resolving to context\n */\n draw_background(ctx) {\n return new Promise(\n function (resolve, _) {\n const bg = this.options.background;\n if (!!bg && bg !== 'transparent') {\n ctx.fillStyle = this.options.background;\n ctx.fillRect(0, 0, this.jm.view.size.w, this.jm.view.size.h);\n }\n resolve(ctx);\n }.bind(this)\n );\n }\n\n /**\n * Draw connection lines on canvas by copying from view graph.\n * @param {CanvasRenderingContext2D} ctx\n * @returns {Promise<CanvasRenderingContext2D>}\n */\n draw_lines(ctx) {\n return new Promise(\n function (resolve, _) {\n this.jm.view.graph.copy_to(ctx, function () {\n resolve(ctx);\n });\n }.bind(this)\n );\n }\n\n /**\n * Draw node DOM into canvas via SVG snapshot.\n * @param {CanvasRenderingContext2D} ctx\n * @returns {Promise<CanvasRenderingContext2D>}\n */\n draw_nodes(ctx) {\n return domtoimage\n .toSvg(this.jm.view.e_nodes, { style: { zoom: 1 } })\n .then(this.load_image)\n .then(function (img) {\n ctx.drawImage(img, 0, 0);\n return ctx;\n });\n }\n\n /**\n * Draw watermark text on canvas.\n * @param {HTMLCanvasElement} c\n * @param {CanvasRenderingContext2D} ctx\n * @returns {CanvasRenderingContext2D}\n */\n draw_watermark(c, ctx) {\n ctx.textBaseline = 'bottom';\n ctx.fillStyle = '#000';\n ctx.font = '11px Verdana,Arial,Helvetica,sans-serif';\n if (!!this.options.watermark.left) {\n ctx.textAlign = 'left';\n ctx.fillText(this.options.watermark.left, 5.5, c.height - 2.5);\n }\n if (!!this.options.watermark.right) {\n ctx.textAlign = 'right';\n ctx.fillText(this.options.watermark.right, c.width - 5.5, c.height - 2.5);\n }\n return ctx;\n }\n\n /**\n * Load image from URL and resolve img element.\n * @param {string} url\n * @returns {Promise<HTMLImageElement>}\n */\n load_image(url) {\n return new Promise(function (resolve, reject) {\n let img = new Image();\n img.onload = function () {\n resolve(img);\n };\n img.onerror = reject;\n img.src = url;\n });\n }\n\n /**\n * Trigger download of canvas content as PNG.\n * @param {HTMLCanvasElement} c\n */\n download(c) {\n var name = (this.options.filename || this.jm.mind.name) + '.png';\n\n if (navigator.msSaveBlob && !!c.msToBlob) {\n var blob = c.msToBlob();\n navigator.msSaveBlob(blob, name);\n } else {\n var blob_url = c.toDataURL();\n var anchor = $.c('a');\n if ('download' in anchor) {\n anchor.style.visibility = 'hidden';\n anchor.href = blob_url;\n anchor.download = name;\n $.d.body.appendChild(anchor);\n var evt = $.d.createEvent('MouseEvents');\n evt.initEvent('click', true, true);\n anchor.dispatchEvent(evt);\n $.d.body.removeChild(anchor);\n } else {\n location.href = blob_url;\n }\n }\n }\n}\n\n/**\n * Screenshot plugin registration.\n * @type {import('../jsmind.plugin.js').Plugin<Partial<ScreenshotOptions>>}\n */\nexport const screenshot_plugin = new jsMind.plugin('screenshot', function (jm, options) {\n var jmss = new JmScreenshot(jm, options);\n jm.screenshot = jmss;\n jm.shoot = function () {\n jmss.shoot();\n };\n});\n\njsMind.register_plugin(screenshot_plugin);\n\nexport default JmScreenshot;\n"],"names":["jsMind","Error","domtoimage","$","DEFAULT_OPTIONS","filename","watermark","left","w","location","right","background","JmScreenshot","constructor","jm","options","opts","util","json","merge","this","version","dpr","view","device_pixel_ratio","shoot","c","create_canvas","ctx","getContext","scale","Promise","resolve","then","draw_background","draw_lines","draw_nodes","draw_watermark","download","clear","size","h","width","height","style","visibility","e_panel","appendChild","parentNode","removeChild","_","bg","fillStyle","fillRect","bind","graph","copy_to","toSvg","e_nodes","zoom","load_image","img","drawImage","textBaseline","font","textAlign","fillText","url","reject","Image","onload","onerror","src","name","mind","navigator","msSaveBlob","msToBlob","blob","blob_url","toDataURL","anchor","href","d","body","evt","createEvent","initEvent","dispatchEvent","screenshot_plugin","plugin","jmss","screenshot","register_plugin"],"mappings":";;;;;;;yNAWA,IAAKA,UACD,MAAM,IAAIC,MAAM,yBAGpB,IAAKC,UACD,MAAM,IAAID,MAAM,4BAGpB,MAAME,EAAIH,EAAM,QAACG,EASXC,EAAkB,CACpBC,SAAU,KACVC,UAAW,CACPC,KAAMJ,EAAEK,EAAEC,SACVC,MAAO,qCAEXC,WAAY,eAMT,MAAMC,EAMT,WAAAC,CAAYC,EAAIC,GACZ,IAAIC,EAAO,CAAA,EACXhB,EAAM,QAACiB,KAAKC,KAAKC,MAAMH,EAAMZ,GAC7BJ,EAAM,QAACiB,KAAKC,KAAKC,MAAMH,EAAMD,GAE7BK,KAAKC,QAAU,QAEfD,KAAKN,GAAKA,EAEVM,KAAKL,QAAUC,EAEfI,KAAKE,IAAMR,EAAGS,KAAKC,kBACtB,CAGD,KAAAC,GACI,IAAIC,EAAIN,KAAKO,gBACTC,EAAMF,EAAEG,WAAW,MACvBD,EAAIE,MAAMV,KAAKE,IAAKF,KAAKE,KACzBS,QAAQC,QAAQJ,GACXK,KAAK,IAAMb,KAAKc,gBAAgBN,IAChCK,KAAK,IAAMb,KAAKe,WAAWP,IAC3BK,KAAK,IAAMb,KAAKgB,WAAWR,IAC3BK,KAAK,IAAMb,KAAKiB,eAAeX,EAAGE,IAClCK,KAAK,IAAMb,KAAKkB,SAASZ,IACzBO,KAAK,IAAMb,KAAKmB,MAAMb,GAC9B,CAMD,aAAAC,GACI,IAAID,EAAIvB,EAAEuB,EAAE,UACZ,MAAMlB,EAAIY,KAAKN,GAAGS,KAAKiB,KAAKhC,EACtBiC,EAAIrB,KAAKN,GAAGS,KAAKiB,KAAKC,EAQ5B,OAPAf,EAAEgB,MAAQlC,EAAIY,KAAKE,IACnBI,EAAEiB,OAASF,EAAIrB,KAAKE,IACpBI,EAAEkB,MAAMF,MAAQlC,EAAI,KACpBkB,EAAEkB,MAAMD,OAASF,EAAI,KAErBf,EAAEkB,MAAMC,WAAa,SACrBzB,KAAKN,GAAGS,KAAKuB,QAAQC,YAAYrB,GAC1BA,CACV,CAMD,KAAAa,CAAMb,GACFA,EAAEsB,WAAWC,YAAYvB,EAC5B,CAOD,eAAAQ,CAAgBN,GACZ,OAAO,IAAIG,QACP,SAAUC,EAASkB,GACf,MAAMC,EAAK/B,KAAKL,QAAQJ,WAClBwC,GAAa,gBAAPA,IACRvB,EAAIwB,UAAYhC,KAAKL,QAAQJ,WAC7BiB,EAAIyB,SAAS,EAAG,EAAGjC,KAAKN,GAAGS,KAAKiB,KAAKhC,EAAGY,KAAKN,GAAGS,KAAKiB,KAAKC,IAE9DT,EAAQJ,EACxB,EAAc0B,KAAKlC,MAEd,CAOD,UAAAe,CAAWP,GACP,OAAO,IAAIG,QACP,SAAUC,EAASkB,GACf9B,KAAKN,GAAGS,KAAKgC,MAAMC,QAAQ5B,EAAK,WAC5BI,EAAQJ,EAC5B,EACA,EAAc0B,KAAKlC,MAEd,CAOD,UAAAgB,CAAWR,GACP,OAAO1B,EAAU,QACZuD,MAAMrC,KAAKN,GAAGS,KAAKmC,QAAS,CAAEd,MAAO,CAAEe,KAAM,KAC7C1B,KAAKb,KAAKwC,YACV3B,KAAK,SAAU4B,GAEZ,OADAjC,EAAIkC,UAAUD,EAAK,EAAG,GACfjC,CACvB,EACK,CAQD,cAAAS,CAAeX,EAAGE,GAYd,OAXAA,EAAImC,aAAe,SACnBnC,EAAIwB,UAAY,OAChBxB,EAAIoC,KAAO,0CACL5C,KAAKL,QAAQT,UAAUC,OACzBqB,EAAIqC,UAAY,OAChBrC,EAAIsC,SAAS9C,KAAKL,QAAQT,UAAUC,KAAM,IAAKmB,EAAEiB,OAAS,MAExDvB,KAAKL,QAAQT,UAAUI,QACzBkB,EAAIqC,UAAY,QAChBrC,EAAIsC,SAAS9C,KAAKL,QAAQT,UAAUI,MAAOgB,EAAEgB,MAAQ,IAAKhB,EAAEiB,OAAS,MAElEf,CACV,CAOD,UAAAgC,CAAWO,GACP,OAAO,IAAIpC,QAAQ,SAAUC,EAASoC,GAClC,IAAIP,EAAM,IAAIQ,MACdR,EAAIS,OAAS,WACTtC,EAAQ6B,EACxB,EACYA,EAAIU,QAAUH,EACdP,EAAIW,IAAML,CACtB,EACK,CAMD,QAAA7B,CAASZ,GACL,IAAI+C,GAAQrD,KAAKL,QAAQV,UAAYe,KAAKN,GAAG4D,KAAKD,MAAQ,OAE1D,GAAIE,UAAUC,YAAgBlD,EAAEmD,SAAU,CACtC,IAAIC,EAAOpD,EAAEmD,WACbF,UAAUC,WAAWE,EAAML,EACvC,KAAe,CACH,IAAIM,EAAWrD,EAAEsD,YACbC,EAAS9E,EAAEuB,EAAE,KACjB,GAAI,aAAcuD,EAAQ,CACtBA,EAAOrC,MAAMC,WAAa,SAC1BoC,EAAOC,KAAOH,EACdE,EAAO3C,SAAWmC,EAClBtE,EAAEgF,EAAEC,KAAKrC,YAAYkC,GACrB,IAAII,EAAMlF,EAAEgF,EAAEG,YAAY,eAC1BD,EAAIE,UAAU,SAAS,GAAM,GAC7BN,EAAOO,cAAcH,GACrBlF,EAAEgF,EAAEC,KAAKnC,YAAYgC,EACrC,MACgBxE,SAASyE,KAAOH,CAEvB,CACJ,EAOO,MAACU,EAAoB,IAAIzF,EAAAA,QAAO0F,OAAO,aAAc,SAAU5E,EAAIC,GAC3E,IAAI4E,EAAO,IAAI/E,EAAaE,EAAIC,GAChCD,EAAG8E,WAAaD,EAChB7E,EAAGW,MAAQ,WACPkE,EAAKlE,OACb,CACA,GAEAzB,EAAAA,QAAO6F,gBAAgBJ"}
package/package.json CHANGED
@@ -1,115 +1,115 @@
1
- {
2
- "name": "@umbraci/jsmind",
3
- "version": "0.10.14",
4
- "description": "jsMind is a pure javascript library for mindmap, it base on html5 canvas. jsMind was released under BSD license, you can embed it in any project, if only you observe the license.",
5
- "main": "lib/jsmind.js",
6
- "module": "es/jsmind.js",
7
- "unpkg": "dist/jsmind.js",
8
- "jsdelivr": "dist/jsmind.js",
9
- "types": "types/generated/index.d.ts",
10
- "exports": {
11
- ".": {
12
- "import": "./es/jsmind.js",
13
- "require": "./lib/jsmind.js",
14
- "types": "./types/generated/index.d.ts"
15
- },
16
- "./draggable-node": {
17
- "import": "./es/jsmind.draggable-node.js",
18
- "require": "./lib/jsmind.draggable-node.js",
19
- "types": "./types/generated/plugins/jsmind.draggable-node.d.ts"
20
- },
21
- "./screenshot": {
22
- "import": "./es/jsmind.screenshot.js",
23
- "require": "./lib/jsmind.screenshot.js",
24
- "types": "./types/generated/plugins/jsmind.screenshot.d.ts"
25
- },
26
- "./multiline-text": {
27
- "import": "./es/jsmind.multiline-text.js",
28
- "require": "./lib/jsmind.multiline-text.js",
29
- "types": "./types/generated/plugins/jsmind.multiline-text.d.ts"
30
- },
31
- "./history": {
32
- "import": "./es/jsmind.history.js",
33
- "require": "./lib/jsmind.history.js",
34
- "types": "./types/generated/plugins/history/jsmind.history.d.ts"
35
- },
36
- "./multi-select": {
37
- "import": "./es/jsmind.multi-select.js",
38
- "require": "./lib/jsmind.multi-select.js"
39
- },
40
- "./style/jsmind.css": "./style/jsmind.css"
41
- },
42
- "directories": {
43
- "doc": "docs",
44
- "example": "example"
45
- },
46
- "files": [
47
- "es",
48
- "lib",
49
- "dist",
50
- "style",
51
- "types",
52
- "LICENSE",
53
- "README.md"
54
- ],
55
- "scripts": {
56
- "server": "http-server",
57
- "build": "rollup -c .config/rollup.config.js",
58
- "build-types": "npx -p typescript tsc -p types/tsconfig.declaration.json",
59
- "test": "NODE_OPTIONS=--experimental-vm-modules jest tests/unit",
60
- "test-es6": "NODE_OPTIONS=--experimental-vm-modules jest tests/unit",
61
- "test-types": "NODE_OPTIONS=--experimental-vm-modules jest tests/types",
62
- "build-test-types": "npm run build-types && npm run test-types",
63
- "test-legacy": "jest tests/legacy",
64
- "format": "prettier --config .config/prettierrc.json --ignore-path .config/prettierignore --write .",
65
- "format-check": "prettier --config .config/prettierrc.json --ignore-path .config/prettierignore --check ."
66
- },
67
- "repository": {
68
- "type": "git",
69
- "url": "git+https://github.com/UmbraCi/jsmind.git"
70
- },
71
- "author": {
72
- "name": "UmbraCi"
73
- },
74
- "license": "BSD-3-Clause",
75
- "bugs": {
76
- "url": "https://github.com/UmbraCi/jsmind/issues"
77
- },
78
- "homepage": "https://github.com/UmbraCi/jsmind#readme",
79
- "keywords": [
80
- "jsmind",
81
- "mindmap"
82
- ],
83
- "maintainers": [
84
- {
85
- "name": "UmbraCi"
86
- }
87
- ],
88
- "devDependencies": {
89
- "@rollup/plugin-commonjs": "^28.0.8",
90
- "@rollup/plugin-node-resolve": "^16.0.3",
91
- "@rollup/plugin-terser": "^0.4.4",
92
- "http-server": "^14.1.1",
93
- "jest": "^28.1.0",
94
- "jest-environment-jsdom": "^28.1.0",
95
- "prettier": "2.6.2",
96
- "rollup": "2.79.2",
97
- "rollup-plugin-cleanup": "^3.2.1",
98
- "tsd-jsdoc": "^2.5.0",
99
- "typescript": "^5.9.2"
100
- },
101
- "jest": {
102
- "verbose": true,
103
- "testEnvironment": "jsdom"
104
- },
105
- "sideEffects": [
106
- "./es6/*",
107
- "./es/*.js",
108
- "./lib/*.js",
109
- "./dist/*.js",
110
- "./style/*.css"
111
- ],
112
- "dependencies": {
113
- "fast-equals": "^5.3.2"
114
- }
115
- }
1
+ {
2
+ "name": "@umbraci/jsmind",
3
+ "version": "0.10.15",
4
+ "description": "jsMind is a pure javascript library for mindmap, it base on html5 canvas. jsMind was released under BSD license, you can embed it in any project, if only you observe the license.",
5
+ "main": "lib/jsmind.js",
6
+ "module": "es/jsmind.js",
7
+ "unpkg": "dist/jsmind.js",
8
+ "jsdelivr": "dist/jsmind.js",
9
+ "types": "types/generated/index.d.ts",
10
+ "exports": {
11
+ ".": {
12
+ "import": "./es/jsmind.js",
13
+ "require": "./lib/jsmind.js",
14
+ "types": "./types/generated/index.d.ts"
15
+ },
16
+ "./draggable-node": {
17
+ "import": "./es/jsmind.draggable-node.js",
18
+ "require": "./lib/jsmind.draggable-node.js",
19
+ "types": "./types/generated/plugins/jsmind.draggable-node.d.ts"
20
+ },
21
+ "./screenshot": {
22
+ "import": "./es/jsmind.screenshot.js",
23
+ "require": "./lib/jsmind.screenshot.js",
24
+ "types": "./types/generated/plugins/jsmind.screenshot.d.ts"
25
+ },
26
+ "./multiline-text": {
27
+ "import": "./es/jsmind.multiline-text.js",
28
+ "require": "./lib/jsmind.multiline-text.js",
29
+ "types": "./types/generated/plugins/jsmind.multiline-text.d.ts"
30
+ },
31
+ "./history": {
32
+ "import": "./es/jsmind.history.js",
33
+ "require": "./lib/jsmind.history.js",
34
+ "types": "./types/generated/plugins/history/jsmind.history.d.ts"
35
+ },
36
+ "./multi-select": {
37
+ "import": "./es/jsmind.multi-select.js",
38
+ "require": "./lib/jsmind.multi-select.js"
39
+ },
40
+ "./style/jsmind.css": "./style/jsmind.css"
41
+ },
42
+ "directories": {
43
+ "doc": "docs",
44
+ "example": "example"
45
+ },
46
+ "files": [
47
+ "es",
48
+ "lib",
49
+ "dist",
50
+ "style",
51
+ "types",
52
+ "LICENSE",
53
+ "README.md"
54
+ ],
55
+ "scripts": {
56
+ "server": "http-server",
57
+ "build": "rollup -c .config/rollup.config.js",
58
+ "build-types": "npx -p typescript tsc -p types/tsconfig.declaration.json",
59
+ "test": "NODE_OPTIONS=--experimental-vm-modules jest tests/unit",
60
+ "test-es6": "NODE_OPTIONS=--experimental-vm-modules jest tests/unit",
61
+ "test-types": "NODE_OPTIONS=--experimental-vm-modules jest tests/types",
62
+ "build-test-types": "npm run build-types && npm run test-types",
63
+ "test-legacy": "jest tests/legacy",
64
+ "format": "prettier --config .config/prettierrc.json --ignore-path .config/prettierignore --write .",
65
+ "format-check": "prettier --config .config/prettierrc.json --ignore-path .config/prettierignore --check ."
66
+ },
67
+ "repository": {
68
+ "type": "git",
69
+ "url": "git+https://github.com/UmbraCi/jsmind.git"
70
+ },
71
+ "author": {
72
+ "name": "UmbraCi"
73
+ },
74
+ "license": "BSD-3-Clause",
75
+ "bugs": {
76
+ "url": "https://github.com/UmbraCi/jsmind/issues"
77
+ },
78
+ "homepage": "https://github.com/UmbraCi/jsmind#readme",
79
+ "keywords": [
80
+ "jsmind",
81
+ "mindmap"
82
+ ],
83
+ "maintainers": [
84
+ {
85
+ "name": "UmbraCi"
86
+ }
87
+ ],
88
+ "devDependencies": {
89
+ "@rollup/plugin-commonjs": "^28.0.8",
90
+ "@rollup/plugin-node-resolve": "^16.0.3",
91
+ "@rollup/plugin-terser": "^0.4.4",
92
+ "http-server": "^14.1.1",
93
+ "jest": "^28.1.0",
94
+ "jest-environment-jsdom": "^28.1.0",
95
+ "prettier": "2.6.2",
96
+ "rollup": "2.79.2",
97
+ "rollup-plugin-cleanup": "^3.2.1",
98
+ "tsd-jsdoc": "^2.5.0",
99
+ "typescript": "^5.9.2"
100
+ },
101
+ "jest": {
102
+ "verbose": true,
103
+ "testEnvironment": "jsdom"
104
+ },
105
+ "sideEffects": [
106
+ "./es6/*",
107
+ "./es/*.js",
108
+ "./lib/*.js",
109
+ "./dist/*.js",
110
+ "./style/*.css"
111
+ ],
112
+ "dependencies": {
113
+ "fast-equals": "^5.3.2"
114
+ }
115
+ }