@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.
- package/LICENSE +24 -24
- package/README.md +116 -116
- package/dist/jsmind.copy-paste.js +9 -0
- package/dist/jsmind.copy-paste.js.map +1 -0
- package/dist/jsmind.draggable-node.js +1 -1
- package/dist/jsmind.draggable-node.js.map +1 -1
- package/dist/jsmind.history.js +1 -1
- package/dist/jsmind.history.js.map +1 -1
- package/dist/jsmind.js +1 -1
- package/dist/jsmind.js.map +1 -1
- package/dist/jsmind.multi-select.js +1 -1
- package/dist/jsmind.multi-select.js.map +1 -1
- package/dist/jsmind.multiline-text.js +1 -1
- package/dist/jsmind.multiline-text.js.map +1 -1
- package/dist/jsmind.screenshot.js +1 -1
- package/dist/jsmind.screenshot.js.map +1 -1
- package/es/jsmind.copy-paste.js +9 -0
- package/es/jsmind.copy-paste.js.map +1 -0
- package/es/jsmind.draggable-node.js +1 -1
- package/es/jsmind.draggable-node.js.map +1 -1
- package/es/jsmind.history.js +1 -1
- package/es/jsmind.history.js.map +1 -1
- package/es/jsmind.js +1 -1
- package/es/jsmind.js.map +1 -1
- package/es/jsmind.multi-select.js +1 -1
- package/es/jsmind.multi-select.js.map +1 -1
- package/es/jsmind.multiline-text.js +1 -1
- package/es/jsmind.multiline-text.js.map +1 -1
- package/es/jsmind.screenshot.js +1 -1
- package/es/jsmind.screenshot.js.map +1 -1
- package/lib/jsmind.copy-paste.js +9 -0
- package/lib/jsmind.copy-paste.js.map +1 -0
- package/lib/jsmind.draggable-node.js +1 -1
- package/lib/jsmind.draggable-node.js.map +1 -1
- package/lib/jsmind.history.js +1 -1
- package/lib/jsmind.history.js.map +1 -1
- package/lib/jsmind.js +1 -1
- package/lib/jsmind.js.map +1 -1
- package/lib/jsmind.multi-select.js +1 -1
- package/lib/jsmind.multi-select.js.map +1 -1
- package/lib/jsmind.multiline-text.js +1 -1
- package/lib/jsmind.multiline-text.js.map +1 -1
- package/lib/jsmind.screenshot.js +1 -1
- package/lib/jsmind.screenshot.js.map +1 -1
- package/package.json +115 -115
- package/style/jsmind.css +408 -408
- package/types/generated/index.d.ts +8 -0
- package/types/generated/jsmind.common.d.ts +68 -0
- package/types/generated/jsmind.d.ts +632 -0
- package/types/generated/jsmind.data_provider.d.ts +56 -0
- package/types/generated/jsmind.dom.d.ts +59 -0
- package/types/generated/jsmind.enhanced-plugin.d.ts +103 -0
- package/types/generated/jsmind.format.d.ts +113 -0
- package/types/generated/jsmind.graph.d.ts +180 -0
- package/types/generated/jsmind.layout_provider.d.ts +182 -0
- package/types/generated/jsmind.mind.d.ts +129 -0
- package/types/generated/jsmind.node.d.ts +69 -0
- package/types/generated/jsmind.option.d.ts +78 -0
- package/types/generated/jsmind.plugin.d.ts +21 -0
- package/types/generated/jsmind.shortcut_provider.d.ts +52 -0
- package/types/generated/jsmind.util.d.ts +26 -0
- package/types/generated/jsmind.view_provider.d.ts +374 -0
- package/types/generated/plugins/history/history-diff.d.ts +310 -0
- package/types/generated/plugins/history/jsmind.history.d.ts +87 -0
- package/types/generated/plugins/jsmind.draggable-node.d.ts +262 -0
- package/types/generated/plugins/jsmind.multiline-text-v2.d.ts +58 -0
- package/types/generated/plugins/jsmind.multiline-text.d.ts +43 -0
- package/types/generated/plugins/jsmind.screenshot.d.ts +83 -0
- 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":"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"}
|
package/package.json
CHANGED
|
@@ -1,115 +1,115 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@umbraci/jsmind",
|
|
3
|
-
"version": "0.10.
|
|
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
|
+
}
|