json-canvas-viewer 4.1.0 → 4.2.0
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/dist/chimp.js +396 -1
- package/dist/index.d.ts +29 -618
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/kernel/BaseModule.d.ts +27 -0
- package/dist/kernel/BaseModule.js +2 -2
- package/dist/kernel/BaseModule.js.map +1 -1
- package/dist/kernel/Controller.d.ts +30 -0
- package/dist/kernel/Controller.js +2 -2
- package/dist/kernel/Controller.js.map +1 -1
- package/dist/kernel/DataManager.d.ts +67 -0
- package/dist/kernel/DataManager.js +2 -2
- package/dist/kernel/DataManager.js.map +1 -1
- package/dist/kernel/InteractionHandler.d.ts +51 -0
- package/dist/kernel/InteractionHandler.js +2 -2
- package/dist/kernel/InteractionHandler.js.map +1 -1
- package/dist/kernel/OverlayManager.d.ts +62 -0
- package/dist/kernel/OverlayManager.js +2 -2
- package/dist/kernel/OverlayManager.js.map +1 -1
- package/dist/kernel/Renderer.d.ts +37 -0
- package/dist/kernel/Renderer.js +3 -2
- package/dist/kernel/Renderer.js.map +1 -1
- package/dist/kernel/StyleManager.d.ts +135 -0
- package/dist/kernel/StyleManager.js +2 -2
- package/dist/kernel/StyleManager.js.map +1 -1
- package/dist/kernel/index.d.ts +46 -0
- package/dist/kernel/index.js +2 -2
- package/dist/kernel/index.js.map +1 -1
- package/dist/kernel/styles.js +285 -0
- package/dist/kernel/styles.js.map +1 -0
- package/dist/kernel/types.d.ts +33 -0
- package/dist/kernel/utilities.d.ts +13 -0
- package/dist/kernel/utilities.js +2 -2
- package/dist/kernel/utilities.js.map +1 -1
- package/dist/modules/Controls/index.d.ts +42 -0
- package/dist/modules/Controls/index.js +2 -2
- package/dist/modules/Controls/index.js.map +1 -1
- package/dist/modules/Controls/styles.js +29 -0
- package/dist/modules/Controls/styles.js.map +1 -0
- package/dist/modules/DebugPanel/index.d.ts +14 -0
- package/dist/modules/DebugPanel/index.js +2 -2
- package/dist/modules/DebugPanel/index.js.map +1 -1
- package/dist/modules/DebugPanel/styles.js +13 -0
- package/dist/modules/DebugPanel/styles.js.map +1 -0
- package/dist/modules/Minimap/index.d.ts +36 -0
- package/dist/modules/Minimap/index.js +2 -2
- package/dist/modules/Minimap/index.js.map +1 -1
- package/dist/modules/Minimap/styles.js +56 -0
- package/dist/modules/Minimap/styles.js.map +1 -0
- package/dist/modules/MistouchPreventer/index.d.ts +29 -0
- package/dist/modules/MistouchPreventer/index.js +2 -2
- package/dist/modules/MistouchPreventer/index.js.map +1 -1
- package/dist/modules/MistouchPreventer/styles.js +21 -0
- package/dist/modules/MistouchPreventer/styles.js.map +1 -0
- package/dist/shared/index.d.ts +50 -0
- package/dist/utilities/fetch-canvas.d.ts +7 -0
- package/dist/utilities/fetch-canvas.js +2 -0
- package/dist/utilities/fetch-canvas.js.map +1 -0
- package/dist/utilities/parser.d.ts +5 -0
- package/dist/utilities/parser.js +2 -2
- package/dist/utilities/parser.js.map +1 -1
- package/dist/utilities/render-to-string.d.ts +12 -0
- package/dist/utilities/render-to-string.js +2 -0
- package/dist/utilities/render-to-string.js.map +1 -0
- package/package.json +8 -7
- package/dist/kernel/styles.scss.js +0 -2
- package/dist/kernel/styles.scss.js.map +0 -1
- package/dist/modules/Controls/styles.scss.js +0 -2
- package/dist/modules/Controls/styles.scss.js.map +0 -1
- package/dist/modules/DebugPanel/styles.scss.js +0 -2
- package/dist/modules/DebugPanel/styles.scss.js.map +0 -1
- package/dist/modules/Minimap/styles.scss.js +0 -2
- package/dist/modules/Minimap/styles.scss.js.map +0 -1
- package/dist/modules/MistouchPreventer/styles.scss.js +0 -2
- package/dist/modules/MistouchPreventer/styles.scss.js.map +0 -1
- package/dist/utilities/fetchCanvas.js +0 -2
- package/dist/utilities/fetchCanvas.js.map +0 -1
- package/dist/utilities/renderToString.js +0 -2
- package/dist/utilities/renderToString.js.map +0 -1
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { BaseArgs, BaseModule } from "../../kernel/BaseModule.js";
|
|
2
|
+
|
|
3
|
+
//#region src/modules/DebugPanel/index.d.ts
|
|
4
|
+
declare class DebugPanel extends BaseModule {
|
|
5
|
+
private _debugPanel;
|
|
6
|
+
private readonly DM;
|
|
7
|
+
private get debugPanel();
|
|
8
|
+
constructor(...args: BaseArgs);
|
|
9
|
+
private readonly update;
|
|
10
|
+
private readonly dispose;
|
|
11
|
+
}
|
|
12
|
+
//#endregion
|
|
13
|
+
export { DebugPanel };
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{BaseModule as e}from"../../kernel/BaseModule.js";import
|
|
2
|
-
//# sourceMappingURL=index.js.map
|
|
1
|
+
import{BaseModule as e}from"../../kernel/BaseModule.js";import{applyStyles as t,destroyError as n,round as r}from"../../kernel/utilities.js";import i from"../../kernel/DataManager.js";import a from"../../kernel/Controller.js";import o from"./styles.js";var s=class extends e{_debugPanel;DM;get debugPanel(){if(!this._debugPanel)throw n;return this._debugPanel}constructor(...e){super(...e),this.DM=this.container.get(i),this.container.get(a).onRefresh.subscribe(this.update),this._debugPanel=document.createElement(`div`),this._debugPanel.className=`JCV-debug-panel JCV-border-shadow-bg`;let n=this.DM.data.container;t(n,o),n.appendChild(this._debugPanel),this.onDispose(this.dispose)}update=()=>{let e=this.DM.data;this.debugPanel.innerHTML=`<p>Scale: ${r(e.scale,3)}</p><p>Offset: ${r(e.offsetX,1)}, ${r(e.offsetY,1)}</p>`};dispose=()=>{this.debugPanel.remove(),this._debugPanel=void 0}};export{s as default};
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/modules/DebugPanel/index.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"index.js","names":["style"],"sources":["../../../src/modules/DebugPanel/index.ts"],"sourcesContent":["import type { BaseArgs } from '$/BaseModule';\nimport { BaseModule } from '$/BaseModule';\nimport Controller from '$/Controller';\nimport DataManager from '$/DataManager';\nimport { applyStyles, destroyError, round } from '$/utilities';\nimport style from './styles.scss?inline';\n\nexport default class DebugPanel extends BaseModule {\n\tprivate _debugPanel: HTMLDivElement | undefined;\n\tprivate readonly DM: DataManager;\n\n\tprivate get debugPanel() {\n\t\tif (!this._debugPanel) throw destroyError;\n\t\treturn this._debugPanel;\n\t}\n\n\tconstructor(...args: BaseArgs) {\n\t\tsuper(...args);\n\t\tthis.DM = this.container.get(DataManager);\n\t\tthis.container.get(Controller).onRefresh.subscribe(this.update);\n\t\tthis._debugPanel = document.createElement('div');\n\t\tthis._debugPanel.className = 'JCV-debug-panel JCV-border-shadow-bg';\n\t\tconst HTMLContainer = this.DM.data.container;\n\t\tapplyStyles(HTMLContainer, style);\n\t\tHTMLContainer.appendChild(this._debugPanel);\n\t\tthis.onDispose(this.dispose);\n\t}\n\n\tprivate readonly update = () => {\n\t\tconst data = this.DM.data;\n\t\tthis.debugPanel.innerHTML = `<p>Scale: ${round(data.scale, 3)}</p><p>Offset: ${round(data.offsetX, 1)}, ${round(data.offsetY, 1)}</p>`;\n\t};\n\n\tprivate readonly dispose = () => {\n\t\tthis.debugPanel.remove();\n\t\tthis._debugPanel = undefined;\n\t};\n}\n"],"mappings":"6PAOA,IAAqB,EAArB,cAAwC,CAAW,CAClD,YACA,GAEA,IAAY,YAAa,CACxB,GAAI,CAAC,KAAK,YAAa,MAAM,EAC7B,OAAO,KAAK,YAGb,YAAY,GAAG,EAAgB,CAC9B,MAAM,GAAG,EAAK,CACd,KAAK,GAAK,KAAK,UAAU,IAAI,EAAY,CACzC,KAAK,UAAU,IAAI,EAAW,CAAC,UAAU,UAAU,KAAK,OAAO,CAC/D,KAAK,YAAc,SAAS,cAAc,MAAM,CAChD,KAAK,YAAY,UAAY,uCAC7B,IAAM,EAAgB,KAAK,GAAG,KAAK,UACnC,EAAY,EAAeA,EAAM,CACjC,EAAc,YAAY,KAAK,YAAY,CAC3C,KAAK,UAAU,KAAK,QAAQ,CAG7B,WAAgC,CAC/B,IAAM,EAAO,KAAK,GAAG,KACrB,KAAK,WAAW,UAAY,aAAa,EAAM,EAAK,MAAO,EAAE,CAAC,iBAAiB,EAAM,EAAK,QAAS,EAAE,CAAC,IAAI,EAAM,EAAK,QAAS,EAAE,CAAC,OAGlI,YAAiC,CAChC,KAAK,WAAW,QAAQ,CACxB,KAAK,YAAc,IAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
var e=`.JSON-Canvas-Viewer > .JCV-debug-panel {
|
|
2
|
+
position: absolute;
|
|
3
|
+
bottom: 12px;
|
|
4
|
+
left: 12px;
|
|
5
|
+
border-radius: 12px;
|
|
6
|
+
padding: 12px;
|
|
7
|
+
color: var(--text);
|
|
8
|
+
font-size: calc(14px + 0.3vw);
|
|
9
|
+
line-height: calc(17px + 0.3vw);
|
|
10
|
+
pointer-events: none;
|
|
11
|
+
}
|
|
12
|
+
`;export{e as default};
|
|
13
|
+
//# sourceMappingURL=styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles.js","names":[],"sources":["../../../src/modules/DebugPanel/styles.scss?inline"],"sourcesContent":[".JSON-Canvas-Viewer > .JCV-debug-panel {\n\tposition: absolute;\n\tbottom: 12px;\n\tleft: 12px;\n\tborder-radius: 12px;\n\tpadding: 12px;\n\tcolor: var(--text);\n\tfont-size: calc(14px + 0.3vw);\n\tline-height: calc(17px + 0.3vw);\n\tpointer-events: none;\n}\n"],"mappings":"AAAA,IAAA,EAAa"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { BaseArgs, BaseModule } from "../../kernel/BaseModule.js";
|
|
2
|
+
import { BaseOptions } from "../../kernel/index.js";
|
|
3
|
+
|
|
4
|
+
//#region src/modules/Minimap/index.d.ts
|
|
5
|
+
type Options = {
|
|
6
|
+
minimapCollapsed?: boolean;
|
|
7
|
+
} & BaseOptions;
|
|
8
|
+
type Augmentation = {
|
|
9
|
+
toggleMinimapCollapse: Minimap['toggleCollapse'];
|
|
10
|
+
};
|
|
11
|
+
declare class Minimap extends BaseModule<Options, Augmentation> {
|
|
12
|
+
private readonly _minimapCtx;
|
|
13
|
+
private _viewportRectangle;
|
|
14
|
+
private _minimap;
|
|
15
|
+
private _minimapContainer;
|
|
16
|
+
private _toggleMinimapBtn;
|
|
17
|
+
private readonly minimapCache;
|
|
18
|
+
private readonly DM;
|
|
19
|
+
private readonly SM;
|
|
20
|
+
private collapsed;
|
|
21
|
+
private get minimap();
|
|
22
|
+
private get minimapCtx();
|
|
23
|
+
private get viewportRectangle();
|
|
24
|
+
private get minimapContainer();
|
|
25
|
+
private get toggleMinimapBtn();
|
|
26
|
+
constructor(...args: BaseArgs);
|
|
27
|
+
toggleCollapse: () => void;
|
|
28
|
+
private readonly start;
|
|
29
|
+
private readonly drawMinimapNode;
|
|
30
|
+
private readonly drawMinimapEdge;
|
|
31
|
+
private readonly updateViewportRectangle;
|
|
32
|
+
private readonly dispose;
|
|
33
|
+
}
|
|
34
|
+
//#endregion
|
|
35
|
+
export { Minimap };
|
|
36
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{BaseModule as
|
|
2
|
-
//# sourceMappingURL=index.js.map
|
|
1
|
+
import{BaseModule as e}from"../../kernel/BaseModule.js";import{applyStyles as t,destroyError as n,drawRoundRect as r,getAnchorCoord as i,resizeCanvasForDPR as a}from"../../kernel/utilities.js";import o from"../../kernel/DataManager.js";import s from"../../kernel/StyleManager.js";import c from"../../kernel/Controller.js";import l from"./styles.js";var u=class extends e{_minimapCtx;_viewportRectangle;_minimap;_minimapContainer;_toggleMinimapBtn;minimapCache={centerX:0,centerY:0,scale:1};DM;SM;collapsed;get minimap(){if(!this._minimap)throw n;return this._minimap}get minimapCtx(){if(!this._minimapCtx)throw n;return this._minimapCtx}get viewportRectangle(){if(!this._viewportRectangle)throw n;return this._viewportRectangle}get minimapContainer(){if(!this._minimapContainer)throw n;return this._minimapContainer}get toggleMinimapBtn(){if(!this._toggleMinimapBtn)throw n;return this._toggleMinimapBtn}constructor(...e){super(...e),this.collapsed=this.options.minimapCollapsed??!1,this.container.get(c).onRefresh.subscribe(this.updateViewportRectangle),this.DM=this.container.get(o),this.SM=this.container.get(s),this._minimapContainer=document.createElement(`div`),this._minimapContainer.className=`JCV-minimap-container`,t(this._minimapContainer,l),this._toggleMinimapBtn=document.createElement(`button`),this._toggleMinimapBtn.className=`JCV-button JCV-toggle-minimap JCV-collapse-button JCV-border-shadow-bg`,this._toggleMinimapBtn.innerHTML=`<svg viewBox="-3.6 -3.6 31.2 31.2" stroke-width=".4"><path d="M15.707 4.293a1 1 0 0 1 0 1.414L9.414 12l6.293 6.293a1 1 0 0 1-1.414 1.414l-7-7a1 1 0 0 1 0-1.414l7-7a1 1 0 0 1 1.414 0Z" /></svg>`,this._minimapContainer.appendChild(this._toggleMinimapBtn),this._minimap=document.createElement(`div`),this._minimap.className=`JCV-minimap JCV-border-shadow-bg`;let n=document.createElement(`canvas`);n.className=`JCV-minimap-canvas`,n.width=200,n.height=150,this._minimap.appendChild(n),this._minimapCtx=n.getContext(`2d`),this._viewportRectangle=document.createElement(`div`),this._viewportRectangle.className=`JCV-viewport-rectangle`,this._minimap.appendChild(this._viewportRectangle),this._minimapContainer.appendChild(this._minimap),this.DM.data.container.appendChild(this._minimapContainer),this._minimapContainer.classList.toggle(`JCV-collapsed`,this.collapsed),this._toggleMinimapBtn.addEventListener(`click`,this.toggleCollapse),a(n,n.width,n.height),this.augment({toggleMinimapCollapse:this.toggleCollapse}),this.onStart(this.start),this.onRestart(this.start),this.onDispose(this.dispose)}toggleCollapse=()=>{this.collapsed=!this.collapsed,this.minimapContainer.classList.toggle(`JCV-collapsed`,this.collapsed),this.collapsed||this.updateViewportRectangle()};start=()=>{let e=this.DM.data.nodeBounds;if(!e)return;let t=this.minimap.clientWidth,n=this.minimap.clientHeight,r=t/e.width,i=n/e.height;this.minimapCache.scale=Math.min(r,i)*.9,this.minimapCache.centerX=t/2,this.minimapCache.centerY=n/2,this.minimapCtx.clearRect(0,0,t,n),this.minimapCtx.save(),this.minimapCtx.translate(this.minimapCache.centerX,this.minimapCache.centerY),this.minimapCtx.scale(this.minimapCache.scale,this.minimapCache.scale),this.minimapCtx.translate(-e.centerX,-e.centerY);let a=this.DM.data.canvasData;for(let e of a.edges)this.drawMinimapEdge(e);for(let e of a.nodes)this.drawMinimapNode(e);this.minimapCtx.restore()};drawMinimapNode=e=>{let t=this.SM.getColor(e.color);this.minimapCtx.fillStyle=t.border,r(this.minimapCtx,e.x,e.y,e.width,e.height,25),this.minimapCtx.fill()};drawMinimapEdge=e=>{let t=this.DM.data.nodeMap,n=t[e.fromNode].ref,r=t[e.toNode].ref;if(!n||!r)return;let{x:a,y:o}=i(n,e.fromSide),{x:s,y:c}=i(r,e.toSide);this.minimapCtx.beginPath(),this.minimapCtx.moveTo(a,o),this.minimapCtx.lineTo(s,c),this.minimapCtx.strokeStyle=this.SM.getColor(e.color).active,this.minimapCtx.lineWidth=10,this.minimapCtx.stroke()};updateViewportRectangle=()=>{if(this.collapsed)return;let e=this.DM.data.nodeBounds,t=this.DM.data.container,n=this.DM.data.scale;if(!e)return;let r=t.clientWidth/n,i=t.clientHeight/n,a=-this.DM.data.offsetX/n+t.clientWidth/(2*n),o=-this.DM.data.offsetY/n+t.clientHeight/(2*n),s=this.minimapCache.centerX+(a-r/2-e.centerX)*this.minimapCache.scale,c=this.minimapCache.centerY+(o-i/2-e.centerY)*this.minimapCache.scale,l=r*this.minimapCache.scale,u=i*this.minimapCache.scale;this.viewportRectangle.style.left=`${s}px`,this.viewportRectangle.style.top=`${c}px`,this.viewportRectangle.style.width=`${l}px`,this.viewportRectangle.style.height=`${u}px`};dispose=()=>{this.toggleMinimapBtn.removeEventListener(`click`,this.toggleCollapse),this.minimapCtx.clearRect(0,0,this.minimap.clientWidth,this.minimap.clientHeight),this.minimapContainer.remove(),this._minimapContainer=void 0,this._toggleMinimapBtn=void 0,this._viewportRectangle=void 0,this._minimap=void 0}};export{u as default};
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/modules/Minimap/index.ts"],"sourcesContent":["import type { BaseOptions } from '$';\nimport type { JSONCanvasEdge, JSONCanvasNode } from '@repo/shared';\nimport { type BaseArgs, BaseModule } from '$/BaseModule';\nimport Controller from '$/Controller';\nimport DataManager from '$/DataManager';\nimport StyleManager from '$/StyleManager';\nimport utilities, { destroyError } from '$/utilities';\nimport style from './styles.scss?inline';\n\ninterface Options extends BaseOptions {\n\tminimapCollapsed?: boolean;\n}\n\ninterface Augmentation {\n\ttoggleMinimapCollapse: Minimap['toggleCollapse'];\n}\n\nconst toggleCollapseIcon =\n\t'<svg viewBox=\"-3.6 -3.6 31.2 31.2\" stroke-width=\".4\"><path d=\"M15.707 4.293a1 1 0 0 1 0 1.414L9.414 12l6.293 6.293a1 1 0 0 1-1.414 1.414l-7-7a1 1 0 0 1 0-1.414l7-7a1 1 0 0 1 1.414 0Z\" /></svg>';\n\nexport default class Minimap extends BaseModule<Options, Augmentation> {\n\tprivate _minimapCtx: CanvasRenderingContext2D | null = null;\n\tprivate _viewportRectangle: HTMLDivElement | null = null;\n\tprivate _minimap: HTMLDivElement | null = null;\n\tprivate _minimapContainer: HTMLDivElement | null = null;\n\tprivate _toggleMinimapBtn: HTMLButtonElement | null = null;\n\tprivate minimapCache: { scale: number; centerX: number; centerY: number } = {\n\t\tscale: 1,\n\t\tcenterX: 0,\n\t\tcenterY: 0,\n\t};\n\tprivate DM: DataManager;\n\tprivate SM: StyleManager;\n\tprivate collapsed: boolean;\n\n\tprivate get minimap() {\n\t\tif (this._minimap === null) throw destroyError;\n\t\treturn this._minimap;\n\t}\n\tprivate get minimapCtx() {\n\t\tif (this._minimapCtx === null) throw destroyError;\n\t\treturn this._minimapCtx;\n\t}\n\tprivate get viewportRectangle() {\n\t\tif (this._viewportRectangle === null) throw destroyError;\n\t\treturn this._viewportRectangle;\n\t}\n\tprivate get minimapContainer() {\n\t\tif (this._minimapContainer === null) throw destroyError;\n\t\treturn this._minimapContainer;\n\t}\n\tprivate get toggleMinimapBtn() {\n\t\tif (this._toggleMinimapBtn === null) throw destroyError;\n\t\treturn this._toggleMinimapBtn;\n\t}\n\n\tconstructor(...args: BaseArgs) {\n\t\tsuper(...args);\n\t\tthis.collapsed = this.options.minimapCollapsed ?? false;\n\t\tthis.container.get(Controller).onRefresh.subscribe(this.updateViewportRectangle);\n\t\tthis.DM = this.container.get(DataManager);\n\t\tthis.SM = this.container.get(StyleManager);\n\n\t\tthis._minimapContainer = document.createElement('div');\n\t\tthis._minimapContainer.className = 'JCV-minimap-container';\n\n\t\tutilities.applyStyles(this._minimapContainer, style);\n\n\t\tthis._toggleMinimapBtn = document.createElement('button');\n\t\tthis._toggleMinimapBtn.className =\n\t\t\t'JCV-button JCV-toggle-minimap JCV-collapse-button JCV-border-shadow-bg';\n\t\tthis._toggleMinimapBtn.innerHTML = toggleCollapseIcon;\n\t\tthis._minimapContainer.appendChild(this._toggleMinimapBtn);\n\n\t\tthis._minimap = document.createElement('div');\n\t\tthis._minimap.className = 'JCV-minimap JCV-border-shadow-bg';\n\t\tconst minimapCanvas = document.createElement('canvas');\n\t\tminimapCanvas.className = 'JCV-minimap-canvas';\n\t\tminimapCanvas.width = 200;\n\t\tminimapCanvas.height = 150;\n\n\t\tthis._minimap.appendChild(minimapCanvas);\n\t\tthis._minimapCtx = minimapCanvas.getContext('2d') as CanvasRenderingContext2D;\n\t\tthis._viewportRectangle = document.createElement('div');\n\t\tthis._viewportRectangle.className = 'JCV-viewport-rectangle';\n\t\tthis._minimap.appendChild(this._viewportRectangle);\n\t\tthis._minimapContainer.appendChild(this._minimap);\n\n\t\tthis.DM.data.container.appendChild(this._minimapContainer);\n\n\t\tthis._minimapContainer.classList.toggle('JCV-collapsed', this.collapsed);\n\n\t\tthis._toggleMinimapBtn.addEventListener('click', this.toggleCollapse);\n\t\tutilities.resizeCanvasForDPR(minimapCanvas, minimapCanvas.width, minimapCanvas.height);\n\n\t\tthis.augment({ toggleMinimapCollapse: this.toggleCollapse });\n\t\tthis.onStart(this.start);\n\t\tthis.onRestart(this.start);\n\t\tthis.onDispose(this.dispose);\n\t}\n\n\ttoggleCollapse = () => {\n\t\tthis.collapsed = !this.collapsed;\n\t\tthis.minimapContainer.classList.toggle('JCV-collapsed', this.collapsed);\n\t\tif (!this.collapsed) this.updateViewportRectangle();\n\t};\n\n\tprivate start = () => {\n\t\tconst bounds = this.DM.data.nodeBounds;\n\t\tif (!bounds) return;\n\t\tconst displayWidth = this.minimap.clientWidth;\n\t\tconst displayHeight = this.minimap.clientHeight;\n\t\tconst scaleX = displayWidth / bounds.width;\n\t\tconst scaleY = displayHeight / bounds.height;\n\t\tthis.minimapCache.scale = Math.min(scaleX, scaleY) * 0.9;\n\t\tthis.minimapCache.centerX = displayWidth / 2;\n\t\tthis.minimapCache.centerY = displayHeight / 2;\n\t\tthis.minimapCtx.clearRect(0, 0, displayWidth, displayHeight);\n\t\tthis.minimapCtx.save();\n\t\tthis.minimapCtx.translate(this.minimapCache.centerX, this.minimapCache.centerY);\n\t\tthis.minimapCtx.scale(this.minimapCache.scale, this.minimapCache.scale);\n\t\tthis.minimapCtx.translate(-bounds.centerX, -bounds.centerY);\n\t\tconst canvasData = this.DM.data.canvasData;\n\t\tfor (const edge of canvasData.edges) this.drawMinimapEdge(edge);\n\t\tfor (const node of canvasData.nodes) this.drawMinimapNode(node);\n\t\tthis.minimapCtx.restore();\n\t};\n\n\tprivate drawMinimapNode = (node: JSONCanvasNode) => {\n\t\tconst colors = this.SM.getColor(node.color);\n\t\tconst radius = 25;\n\t\tthis.minimapCtx.fillStyle = colors.border;\n\t\tutilities.drawRoundRect(this.minimapCtx, node.x, node.y, node.width, node.height, radius);\n\t\tthis.minimapCtx.fill();\n\t};\n\n\tprivate drawMinimapEdge = (edge: JSONCanvasEdge) => {\n\t\tconst canvasMap = this.DM.data.nodeMap;\n\t\tconst fromNode = canvasMap[edge.fromNode].ref;\n\t\tconst toNode = canvasMap[edge.toNode].ref;\n\t\tif (!fromNode || !toNode) return;\n\t\tconst { x: startX, y: startY } = utilities.getAnchorCoord(fromNode, edge.fromSide);\n\t\tconst { x: endX, y: endY } = utilities.getAnchorCoord(toNode, edge.toSide);\n\t\tthis.minimapCtx.beginPath();\n\t\tthis.minimapCtx.moveTo(startX, startY);\n\t\tthis.minimapCtx.lineTo(endX, endY);\n\t\tthis.minimapCtx.strokeStyle = this.SM.getColor(edge.color).active;\n\t\tthis.minimapCtx.lineWidth = 10;\n\t\tthis.minimapCtx.stroke();\n\t};\n\n\tprivate updateViewportRectangle = () => {\n\t\tif (this.collapsed) return;\n\t\tconst bounds = this.DM.data.nodeBounds;\n\t\tconst container = this.DM.data.container;\n\t\tconst scale = this.DM.data.scale;\n\t\tif (!bounds) return;\n\t\tconst viewWidth = container.clientWidth / scale;\n\t\tconst viewHeight = container.clientHeight / scale;\n\t\tconst viewportCenterX = -this.DM.data.offsetX / scale + container.clientWidth / (2 * scale);\n\t\tconst viewportCenterY =\n\t\t\t-this.DM.data.offsetY / scale + container.clientHeight / (2 * scale);\n\t\tconst viewRectX =\n\t\t\tthis.minimapCache.centerX +\n\t\t\t(viewportCenterX - viewWidth / 2 - bounds.centerX) * this.minimapCache.scale;\n\t\tconst viewRectY =\n\t\t\tthis.minimapCache.centerY +\n\t\t\t(viewportCenterY - viewHeight / 2 - bounds.centerY) * this.minimapCache.scale;\n\t\tconst viewRectWidth = viewWidth * this.minimapCache.scale;\n\t\tconst viewRectHeight = viewHeight * this.minimapCache.scale;\n\t\tthis.viewportRectangle.style.left = `${viewRectX}px`;\n\t\tthis.viewportRectangle.style.top = `${viewRectY}px`;\n\t\tthis.viewportRectangle.style.width = `${viewRectWidth}px`;\n\t\tthis.viewportRectangle.style.height = `${viewRectHeight}px`;\n\t};\n\n\tprivate dispose = () => {\n\t\tthis.toggleMinimapBtn.removeEventListener('click', this.toggleCollapse);\n\t\tthis.minimapCtx.clearRect(0, 0, this.minimap.clientWidth, this.minimap.clientHeight);\n\t\tthis.minimapContainer.remove();\n\t\tthis._minimapContainer = null;\n\t\tthis._toggleMinimapBtn = null;\n\t\tthis._viewportRectangle = null;\n\t\tthis._minimap = null;\n\t};\n}\n"],"names":["Minimap","BaseModule","_minimapCtx","_viewportRectangle","_minimap","_minimapContainer","_toggleMinimapBtn","minimapCache","scale","centerX","centerY","DM","SM","collapsed","minimap","this","destroyError","minimapCtx","viewportRectangle","minimapContainer","toggleMinimapBtn","constructor","args","super","options","minimapCollapsed","container","get","Controller","onRefresh","subscribe","updateViewportRectangle","DataManager","StyleManager","document","createElement","className","utilities","applyStyles","style","innerHTML","appendChild","minimapCanvas","width","height","getContext","data","classList","toggle","addEventListener","toggleCollapse","resizeCanvasForDPR","augment","toggleMinimapCollapse","onStart","start","onRestart","onDispose","dispose","bounds","nodeBounds","displayWidth","clientWidth","displayHeight","clientHeight","scaleX","scaleY","Math","min","clearRect","save","translate","canvasData","edge","edges","drawMinimapEdge","node","nodes","drawMinimapNode","restore","colors","getColor","color","fillStyle","border","drawRoundRect","x","y","fill","canvasMap","nodeMap","fromNode","ref","toNode","startX","startY","getAnchorCoord","fromSide","endX","endY","toSide","beginPath","moveTo","lineTo","strokeStyle","active","lineWidth","stroke","viewWidth","viewHeight","viewportCenterX","offsetX","viewportCenterY","offsetY","viewRectX","viewRectY","viewRectWidth","viewRectHeight","left","top","removeEventListener","remove"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["style"],"sources":["../../../src/modules/Minimap/index.ts"],"sourcesContent":["import type { BaseOptions } from '$';\nimport type { BaseArgs } from '$/BaseModule';\nimport type { JSONCanvasEdge, JSONCanvasNode } from '@repo/shared';\nimport { BaseModule } from '$/BaseModule';\nimport Controller from '$/Controller';\nimport DataManager from '$/DataManager';\nimport StyleManager from '$/StyleManager';\nimport {\n\tapplyStyles,\n\tdestroyError,\n\tdrawRoundRect,\n\tgetAnchorCoord,\n\tresizeCanvasForDPR,\n} from '$/utilities';\nimport style from './styles.scss?inline';\n\ntype Options = {\n\tminimapCollapsed?: boolean;\n} & BaseOptions;\n\ntype Augmentation = {\n\ttoggleMinimapCollapse: Minimap['toggleCollapse'];\n};\n\nconst toggleCollapseIcon =\n\t'<svg viewBox=\"-3.6 -3.6 31.2 31.2\" stroke-width=\".4\"><path d=\"M15.707 4.293a1 1 0 0 1 0 1.414L9.414 12l6.293 6.293a1 1 0 0 1-1.414 1.414l-7-7a1 1 0 0 1 0-1.414l7-7a1 1 0 0 1 1.414 0Z\" /></svg>';\n\nexport default class Minimap extends BaseModule<Options, Augmentation> {\n\tprivate readonly _minimapCtx: CanvasRenderingContext2D | undefined;\n\tprivate _viewportRectangle: HTMLDivElement | undefined;\n\tprivate _minimap: HTMLDivElement | undefined;\n\tprivate _minimapContainer: HTMLDivElement | undefined;\n\tprivate _toggleMinimapBtn: HTMLButtonElement | undefined;\n\tprivate readonly minimapCache: { scale: number; centerX: number; centerY: number } = {\n\t\tcenterX: 0,\n\t\tcenterY: 0,\n\t\tscale: 1,\n\t};\n\tprivate readonly DM: DataManager;\n\tprivate readonly SM: StyleManager;\n\tprivate collapsed: boolean;\n\n\tprivate get minimap() {\n\t\tif (!this._minimap) throw destroyError;\n\t\treturn this._minimap;\n\t}\n\tprivate get minimapCtx() {\n\t\tif (!this._minimapCtx) throw destroyError;\n\t\treturn this._minimapCtx;\n\t}\n\tprivate get viewportRectangle() {\n\t\tif (!this._viewportRectangle) throw destroyError;\n\t\treturn this._viewportRectangle;\n\t}\n\tprivate get minimapContainer() {\n\t\tif (!this._minimapContainer) throw destroyError;\n\t\treturn this._minimapContainer;\n\t}\n\tprivate get toggleMinimapBtn() {\n\t\tif (!this._toggleMinimapBtn) throw destroyError;\n\t\treturn this._toggleMinimapBtn;\n\t}\n\n\tconstructor(...args: BaseArgs) {\n\t\tsuper(...args);\n\t\tthis.collapsed = this.options.minimapCollapsed ?? false;\n\t\tthis.container.get(Controller).onRefresh.subscribe(this.updateViewportRectangle);\n\t\tthis.DM = this.container.get(DataManager);\n\t\tthis.SM = this.container.get(StyleManager);\n\n\t\tthis._minimapContainer = document.createElement('div');\n\t\tthis._minimapContainer.className = 'JCV-minimap-container';\n\n\t\tapplyStyles(this._minimapContainer, style);\n\n\t\tthis._toggleMinimapBtn = document.createElement('button');\n\t\tthis._toggleMinimapBtn.className =\n\t\t\t'JCV-button JCV-toggle-minimap JCV-collapse-button JCV-border-shadow-bg';\n\t\tthis._toggleMinimapBtn.innerHTML = toggleCollapseIcon;\n\t\tthis._minimapContainer.appendChild(this._toggleMinimapBtn);\n\n\t\tthis._minimap = document.createElement('div');\n\t\tthis._minimap.className = 'JCV-minimap JCV-border-shadow-bg';\n\t\tconst minimapCanvas = document.createElement('canvas');\n\t\tminimapCanvas.className = 'JCV-minimap-canvas';\n\t\tminimapCanvas.width = 200;\n\t\tminimapCanvas.height = 150;\n\n\t\tthis._minimap.appendChild(minimapCanvas);\n\t\tthis._minimapCtx = minimapCanvas.getContext('2d') as CanvasRenderingContext2D;\n\t\tthis._viewportRectangle = document.createElement('div');\n\t\tthis._viewportRectangle.className = 'JCV-viewport-rectangle';\n\t\tthis._minimap.appendChild(this._viewportRectangle);\n\t\tthis._minimapContainer.appendChild(this._minimap);\n\n\t\tthis.DM.data.container.appendChild(this._minimapContainer);\n\n\t\tthis._minimapContainer.classList.toggle('JCV-collapsed', this.collapsed);\n\n\t\tthis._toggleMinimapBtn.addEventListener('click', this.toggleCollapse);\n\t\tresizeCanvasForDPR(minimapCanvas, minimapCanvas.width, minimapCanvas.height);\n\n\t\tthis.augment({ toggleMinimapCollapse: this.toggleCollapse });\n\t\tthis.onStart(this.start);\n\t\tthis.onRestart(this.start);\n\t\tthis.onDispose(this.dispose);\n\t}\n\n\ttoggleCollapse = () => {\n\t\tthis.collapsed = !this.collapsed;\n\t\tthis.minimapContainer.classList.toggle('JCV-collapsed', this.collapsed);\n\t\tif (!this.collapsed) this.updateViewportRectangle();\n\t};\n\n\tprivate readonly start = () => {\n\t\tconst bounds = this.DM.data.nodeBounds;\n\t\tif (!bounds) return;\n\t\tconst displayWidth = this.minimap.clientWidth;\n\t\tconst displayHeight = this.minimap.clientHeight;\n\t\tconst scaleX = displayWidth / bounds.width;\n\t\tconst scaleY = displayHeight / bounds.height;\n\t\tthis.minimapCache.scale = Math.min(scaleX, scaleY) * 0.9;\n\t\tthis.minimapCache.centerX = displayWidth / 2;\n\t\tthis.minimapCache.centerY = displayHeight / 2;\n\t\tthis.minimapCtx.clearRect(0, 0, displayWidth, displayHeight);\n\t\tthis.minimapCtx.save();\n\t\tthis.minimapCtx.translate(this.minimapCache.centerX, this.minimapCache.centerY);\n\t\tthis.minimapCtx.scale(this.minimapCache.scale, this.minimapCache.scale);\n\t\tthis.minimapCtx.translate(-bounds.centerX, -bounds.centerY);\n\t\tconst canvasData = this.DM.data.canvasData;\n\t\tfor (const edge of canvasData.edges) this.drawMinimapEdge(edge);\n\t\tfor (const node of canvasData.nodes) this.drawMinimapNode(node);\n\t\tthis.minimapCtx.restore();\n\t};\n\n\tprivate readonly drawMinimapNode = (node: JSONCanvasNode) => {\n\t\tconst colors = this.SM.getColor(node.color);\n\t\tconst radius = 25;\n\t\tthis.minimapCtx.fillStyle = colors.border;\n\t\tdrawRoundRect(this.minimapCtx, node.x, node.y, node.width, node.height, radius);\n\t\tthis.minimapCtx.fill();\n\t};\n\n\tprivate readonly drawMinimapEdge = (edge: JSONCanvasEdge) => {\n\t\tconst canvasMap = this.DM.data.nodeMap;\n\t\tconst fromNode = canvasMap[edge.fromNode].ref;\n\t\tconst toNode = canvasMap[edge.toNode].ref;\n\t\tif (!fromNode || !toNode) return;\n\t\tconst { x: startX, y: startY } = getAnchorCoord(fromNode, edge.fromSide);\n\t\tconst { x: endX, y: endY } = getAnchorCoord(toNode, edge.toSide);\n\t\tthis.minimapCtx.beginPath();\n\t\tthis.minimapCtx.moveTo(startX, startY);\n\t\tthis.minimapCtx.lineTo(endX, endY);\n\t\tthis.minimapCtx.strokeStyle = this.SM.getColor(edge.color).active;\n\t\tthis.minimapCtx.lineWidth = 10;\n\t\tthis.minimapCtx.stroke();\n\t};\n\n\tprivate readonly updateViewportRectangle = () => {\n\t\tif (this.collapsed) return;\n\t\tconst bounds = this.DM.data.nodeBounds;\n\t\tconst container = this.DM.data.container;\n\t\tconst scale = this.DM.data.scale;\n\t\tif (!bounds) return;\n\t\tconst viewWidth = container.clientWidth / scale;\n\t\tconst viewHeight = container.clientHeight / scale;\n\t\tconst viewportCenterX = -this.DM.data.offsetX / scale + container.clientWidth / (2 * scale);\n\t\tconst viewportCenterY =\n\t\t\t-this.DM.data.offsetY / scale + container.clientHeight / (2 * scale);\n\t\tconst viewRectX =\n\t\t\tthis.minimapCache.centerX +\n\t\t\t(viewportCenterX - viewWidth / 2 - bounds.centerX) * this.minimapCache.scale;\n\t\tconst viewRectY =\n\t\t\tthis.minimapCache.centerY +\n\t\t\t(viewportCenterY - viewHeight / 2 - bounds.centerY) * this.minimapCache.scale;\n\t\tconst viewRectWidth = viewWidth * this.minimapCache.scale;\n\t\tconst viewRectHeight = viewHeight * this.minimapCache.scale;\n\t\tthis.viewportRectangle.style.left = `${viewRectX}px`;\n\t\tthis.viewportRectangle.style.top = `${viewRectY}px`;\n\t\tthis.viewportRectangle.style.width = `${viewRectWidth}px`;\n\t\tthis.viewportRectangle.style.height = `${viewRectHeight}px`;\n\t};\n\n\tprivate readonly dispose = () => {\n\t\tthis.toggleMinimapBtn.removeEventListener('click', this.toggleCollapse);\n\t\tthis.minimapCtx.clearRect(0, 0, this.minimap.clientWidth, this.minimap.clientHeight);\n\t\tthis.minimapContainer.remove();\n\t\tthis._minimapContainer = undefined;\n\t\tthis._toggleMinimapBtn = undefined;\n\t\tthis._viewportRectangle = undefined;\n\t\tthis._minimap = undefined;\n\t};\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
var e=`.JSON-Canvas-Viewer > .JCV-minimap-container {
|
|
2
|
+
position: absolute;
|
|
3
|
+
bottom: 10px;
|
|
4
|
+
right: 10px;
|
|
5
|
+
display: flex;
|
|
6
|
+
pointer-events: none;
|
|
7
|
+
transition: transform 200ms;
|
|
8
|
+
}
|
|
9
|
+
.JSON-Canvas-Viewer > .JCV-minimap-container.JCV-collapsed {
|
|
10
|
+
transform: translateX(calc(100% - 30px));
|
|
11
|
+
}
|
|
12
|
+
.JSON-Canvas-Viewer > .JCV-minimap-container .JCV-toggle-minimap {
|
|
13
|
+
margin: auto 10px 0 0;
|
|
14
|
+
pointer-events: auto;
|
|
15
|
+
}
|
|
16
|
+
.JSON-Canvas-Viewer > .JCV-minimap-container .JCV-minimap {
|
|
17
|
+
position: relative;
|
|
18
|
+
pointer-events: none;
|
|
19
|
+
width: 200px;
|
|
20
|
+
height: 150px;
|
|
21
|
+
overflow: hidden;
|
|
22
|
+
border-radius: 12px;
|
|
23
|
+
transform-origin: 0 0;
|
|
24
|
+
}
|
|
25
|
+
.JSON-Canvas-Viewer > .JCV-minimap-container .JCV-minimap .JCV-minimap-canvas {
|
|
26
|
+
width: 100%;
|
|
27
|
+
height: 100%;
|
|
28
|
+
}
|
|
29
|
+
.JSON-Canvas-Viewer > .JCV-minimap-container .JCV-minimap .JCV-viewport-rectangle {
|
|
30
|
+
position: absolute;
|
|
31
|
+
top: 0;
|
|
32
|
+
left: 0;
|
|
33
|
+
pointer-events: none;
|
|
34
|
+
border-radius: 6px;
|
|
35
|
+
box-sizing: border-box;
|
|
36
|
+
border: 2px dashed var(--text);
|
|
37
|
+
}
|
|
38
|
+
@container (max-width: 768px) {
|
|
39
|
+
.JSON-Canvas-Viewer > .JCV-minimap-container .JCV-container .JCV-minimap {
|
|
40
|
+
transform: scale(0.6);
|
|
41
|
+
}
|
|
42
|
+
.JSON-Canvas-Viewer > .JCV-minimap-container .JCV-container .JCV-toggle-minimap {
|
|
43
|
+
transform: translateY(-60px);
|
|
44
|
+
}
|
|
45
|
+
.collapsed .JSON-Canvas-Viewer > .JCV-minimap-container .JCV-container .JCV-toggle-minimap {
|
|
46
|
+
transform: translateY(-60px) rotate(180deg);
|
|
47
|
+
}
|
|
48
|
+
.JSON-Canvas-Viewer > .JCV-minimap-container .JCV-container .JCV-minimap-container {
|
|
49
|
+
transform: translateY(60px) translateX(80px);
|
|
50
|
+
}
|
|
51
|
+
.JSON-Canvas-Viewer > .JCV-minimap-container .JCV-container .JCV-minimap-container.JCV-collapsed {
|
|
52
|
+
transform: translateY(60px) translateX(calc(100% - 32px));
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
`;export{e as default};
|
|
56
|
+
//# sourceMappingURL=styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles.js","names":[],"sources":["../../../src/modules/Minimap/styles.scss?inline"],"sourcesContent":[".JSON-Canvas-Viewer > .JCV-minimap-container {\n\tposition: absolute;\n\tbottom: 10px;\n\tright: 10px;\n\tdisplay: flex;\n\tpointer-events: none;\n\ttransition: transform 200ms;\n\t&.JCV-collapsed {\n\t\ttransform: translateX(calc(100% - 30px));\n\t}\n\t.JCV-toggle-minimap {\n\t\tmargin: auto 10px 0 0;\n\t\tpointer-events: auto;\n\t}\n\n\t.JCV-minimap {\n\t\tposition: relative;\n\t\tpointer-events: none;\n\t\twidth: 200px;\n\t\theight: 150px;\n\t\toverflow: hidden;\n\t\tborder-radius: 12px;\n\t\ttransform-origin: 0 0;\n\t\t.JCV-minimap-canvas {\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t}\n\t\t.JCV-viewport-rectangle {\n\t\t\tposition: absolute;\n\t\t\ttop: 0;\n\t\t\tleft: 0;\n\t\t\tpointer-events: none;\n\t\t\tborder-radius: 6px;\n\t\t\tbox-sizing: border-box;\n\t\t\tborder: 2px dashed var(--text);\n\t\t}\n\t}\n\n\t.JCV-container {\n\t\t@container (max-width: 768px) {\n\t\t\t.JCV-minimap {\n\t\t\t\ttransform: scale(0.6);\n\t\t\t}\n\t\t\t.JCV-toggle-minimap {\n\t\t\t\ttransform: translateY(-60px);\n\t\t\t\t.collapsed & {\n\t\t\t\t\ttransform: translateY(-60px) rotate(180deg);\n\t\t\t\t}\n\t\t\t}\n\t\t\t.JCV-minimap-container {\n\t\t\t\ttransform: translateY(60px) translateX(80px);\n\t\t\t\t&.JCV-collapsed {\n\t\t\t\t\ttransform: translateY(60px) translateX(calc(100% - 32px));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"],"mappings":"AAAA,IAAA,EAAa"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { BaseArgs, BaseModule } from "../../kernel/BaseModule.js";
|
|
2
|
+
import { BaseOptions } from "../../kernel/index.js";
|
|
3
|
+
|
|
4
|
+
//#region src/modules/MistouchPreventer/index.d.ts
|
|
5
|
+
type Options = {
|
|
6
|
+
preventMistouchAtStart?: boolean;
|
|
7
|
+
mistouchPreventerBannerText?: string;
|
|
8
|
+
} & BaseOptions;
|
|
9
|
+
type Augmentation = {
|
|
10
|
+
startMistouchPrevention: MistouchPreventer['startPrevention'];
|
|
11
|
+
endMistouchPrevention: MistouchPreventer['endPrevention'];
|
|
12
|
+
};
|
|
13
|
+
declare class MistouchPreventer extends BaseModule<Options, Augmentation> {
|
|
14
|
+
private _preventionContainer;
|
|
15
|
+
private preventMt;
|
|
16
|
+
private readonly DM;
|
|
17
|
+
private readonly preventMistouch;
|
|
18
|
+
private get preventionContainer();
|
|
19
|
+
constructor(...args: BaseArgs);
|
|
20
|
+
private readonly onPointerDown;
|
|
21
|
+
private readonly onPointerMove;
|
|
22
|
+
private readonly onPointerUp;
|
|
23
|
+
startPrevention: () => void;
|
|
24
|
+
endPrevention: () => void;
|
|
25
|
+
private readonly dispose;
|
|
26
|
+
}
|
|
27
|
+
//#endregion
|
|
28
|
+
export { MistouchPreventer };
|
|
29
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{BaseModule as
|
|
2
|
-
//# sourceMappingURL=index.js.map
|
|
1
|
+
import{BaseModule as e}from"../../kernel/BaseModule.js";import{applyStyles as t,destroyError as n}from"../../kernel/utilities.js";import r from"../../kernel/DataManager.js";import i from"./styles.js";var a=class extends e{_preventionContainer;preventMt=!1;DM;preventMistouch={initialX:0,initialY:0,lastX:0,lastY:0,record:!1};get preventionContainer(){if(!this._preventionContainer)throw n;return this._preventionContainer}constructor(...e){super(...e);let n=document.createElement(`div`);n.className=`JCV-prevention-banner JCV-border-shadow-bg`,n.textContent=this.options.mistouchPreventerBannerText??`Click on to unlock.`,this.DM=this.container.get(r),this._preventionContainer=document.createElement(`div`),this._preventionContainer.className=`JCV-prevention-container JCV-hidden JCV-full JCV-flex-center`,t(this._preventionContainer,i),this._preventionContainer.appendChild(n),this.DM.data.container.appendChild(this._preventionContainer),this.options.preventMistouchAtStart&&this.startPrevention(),window.addEventListener(`pointerdown`,this.onPointerDown),window.addEventListener(`pointermove`,this.onPointerMove),window.addEventListener(`pointerup`,this.onPointerUp),this.augment({endMistouchPrevention:this.endPrevention,startMistouchPrevention:this.startPrevention}),this.onDispose(this.dispose)}onPointerDown=e=>{let t=this.DM.data.container.getBoundingClientRect();e.clientX<t.left||e.clientX>t.right||e.clientY<t.top||e.clientY>t.bottom?this.preventMt||this.startPrevention():this.preventMt&&(this.preventMistouch.initialX=e.clientX,this.preventMistouch.initialY=e.clientY,this.preventMistouch.lastX=e.clientX,this.preventMistouch.lastY=e.clientY,this.preventMistouch.record=!0)};onPointerMove=e=>{this.preventMistouch.record&&(this.preventMistouch.lastX=e.clientX,this.preventMistouch.lastY=e.clientY)};onPointerUp=()=>{this.preventMistouch.record&&(this.preventMistouch.record=!1,Math.abs(this.preventMistouch.lastX-this.preventMistouch.initialX)+Math.abs(this.preventMistouch.lastY-this.preventMistouch.initialY)<5&&this.endPrevention())};startPrevention=()=>{this.preventionContainer.classList.remove(`JCV-hidden`),this.DM.data.container.classList.add(`JCV-numb`),this.preventMt=!0};endPrevention=()=>{this.preventMt=!1,this.preventionContainer.classList.add(`JCV-hidden`),setTimeout(()=>this.DM.data.container.classList.remove(`JCV-numb`),50)};dispose=()=>{window.removeEventListener(`pointerdown`,this.onPointerDown),window.removeEventListener(`pointermove`,this.onPointerMove),window.removeEventListener(`pointerup`,this.onPointerUp),this.preventionContainer.remove(),this._preventionContainer=void 0}};export{a as default};
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/modules/MistouchPreventer/index.ts"],"sourcesContent":["import type { BaseOptions } from '$';\nimport {
|
|
1
|
+
{"version":3,"file":"index.js","names":["style"],"sources":["../../../src/modules/MistouchPreventer/index.ts"],"sourcesContent":["import type { BaseOptions } from '$';\nimport type { BaseArgs } from '$/BaseModule';\nimport { BaseModule } from '$/BaseModule';\nimport DataManager from '$/DataManager';\nimport { applyStyles, destroyError } from '$/utilities';\nimport style from './styles.scss?inline';\n\ntype Options = {\n\tpreventMistouchAtStart?: boolean;\n\tmistouchPreventerBannerText?: string;\n} & BaseOptions;\n\ntype Augmentation = {\n\tstartMistouchPrevention: MistouchPreventer['startPrevention'];\n\tendMistouchPrevention: MistouchPreventer['endPrevention'];\n};\n\nexport default class MistouchPreventer extends BaseModule<Options, Augmentation> {\n\tprivate _preventionContainer: HTMLDivElement | undefined;\n\tprivate preventMt = false;\n\tprivate readonly DM: DataManager;\n\tprivate readonly preventMistouch: {\n\t\trecord: boolean;\n\t\tlastX: number;\n\t\tlastY: number;\n\t\tinitialX: number;\n\t\tinitialY: number;\n\t} = {\n\t\tinitialX: 0,\n\t\tinitialY: 0,\n\t\tlastX: 0,\n\t\tlastY: 0,\n\t\trecord: false,\n\t};\n\n\tprivate get preventionContainer() {\n\t\tif (!this._preventionContainer) throw destroyError;\n\t\treturn this._preventionContainer;\n\t}\n\n\tconstructor(...args: BaseArgs) {\n\t\tsuper(...args);\n\n\t\tconst preventionBanner = document.createElement('div');\n\t\tpreventionBanner.className = 'JCV-prevention-banner JCV-border-shadow-bg';\n\t\tpreventionBanner.textContent =\n\t\t\tthis.options.mistouchPreventerBannerText ?? 'Click on to unlock.';\n\t\tthis.DM = this.container.get(DataManager);\n\t\tthis._preventionContainer = document.createElement('div');\n\t\tthis._preventionContainer.className =\n\t\t\t'JCV-prevention-container JCV-hidden JCV-full JCV-flex-center';\n\n\t\tapplyStyles(this._preventionContainer, style);\n\t\tthis._preventionContainer.appendChild(preventionBanner);\n\t\tthis.DM.data.container.appendChild(this._preventionContainer);\n\n\t\tif (this.options.preventMistouchAtStart) this.startPrevention();\n\n\t\twindow.addEventListener('pointerdown', this.onPointerDown);\n\t\twindow.addEventListener('pointermove', this.onPointerMove);\n\t\twindow.addEventListener('pointerup', this.onPointerUp);\n\n\t\tthis.augment({\n\t\t\tendMistouchPrevention: this.endPrevention,\n\t\t\tstartMistouchPrevention: this.startPrevention,\n\t\t});\n\t\tthis.onDispose(this.dispose);\n\t}\n\n\tprivate readonly onPointerDown = (e: PointerEvent) => {\n\t\tconst bounds = this.DM.data.container.getBoundingClientRect();\n\t\tif (\n\t\t\te.clientX < bounds.left ||\n\t\t\te.clientX > bounds.right ||\n\t\t\te.clientY < bounds.top ||\n\t\t\te.clientY > bounds.bottom\n\t\t) {\n\t\t\tif (!this.preventMt) this.startPrevention();\n\t\t} else if (this.preventMt) {\n\t\t\tthis.preventMistouch.initialX = e.clientX;\n\t\t\tthis.preventMistouch.initialY = e.clientY;\n\t\t\tthis.preventMistouch.lastX = e.clientX;\n\t\t\tthis.preventMistouch.lastY = e.clientY;\n\t\t\tthis.preventMistouch.record = true;\n\t\t}\n\t};\n\n\tprivate readonly onPointerMove = (e: PointerEvent) => {\n\t\tif (this.preventMistouch.record) {\n\t\t\tthis.preventMistouch.lastX = e.clientX;\n\t\t\tthis.preventMistouch.lastY = e.clientY;\n\t\t}\n\t};\n\n\tprivate readonly onPointerUp = () => {\n\t\tif (this.preventMistouch.record) {\n\t\t\tthis.preventMistouch.record = false;\n\t\t\tif (\n\t\t\t\tMath.abs(this.preventMistouch.lastX - this.preventMistouch.initialX) +\n\t\t\t\t\tMath.abs(this.preventMistouch.lastY - this.preventMistouch.initialY) <\n\t\t\t\t5\n\t\t\t)\n\t\t\t\tthis.endPrevention();\n\t\t}\n\t};\n\n\tstartPrevention = () => {\n\t\tthis.preventionContainer.classList.remove('JCV-hidden');\n\t\tthis.DM.data.container.classList.add('JCV-numb');\n\t\tthis.preventMt = true;\n\t};\n\n\tendPrevention = () => {\n\t\tthis.preventMt = false;\n\t\tthis.preventionContainer.classList.add('JCV-hidden');\n\t\tsetTimeout(() => this.DM.data.container.classList.remove('JCV-numb'), 50); // Minimum delay to prevent triggering undesired button touch\n\t};\n\n\tprivate readonly dispose = () => {\n\t\twindow.removeEventListener('pointerdown', this.onPointerDown);\n\t\twindow.removeEventListener('pointermove', this.onPointerMove);\n\t\twindow.removeEventListener('pointerup', this.onPointerUp);\n\t\tthis.preventionContainer.remove();\n\t\tthis._preventionContainer = undefined;\n\t};\n}\n"],"mappings":"wMAiBA,IAAqB,EAArB,cAA+C,CAAkC,CAChF,qBACA,UAAoB,GACpB,GACA,gBAMI,CACH,SAAU,EACV,SAAU,EACV,MAAO,EACP,MAAO,EACP,OAAQ,GACR,CAED,IAAY,qBAAsB,CACjC,GAAI,CAAC,KAAK,qBAAsB,MAAM,EACtC,OAAO,KAAK,qBAGb,YAAY,GAAG,EAAgB,CAC9B,MAAM,GAAG,EAAK,CAEd,IAAM,EAAmB,SAAS,cAAc,MAAM,CACtD,EAAiB,UAAY,6CAC7B,EAAiB,YAChB,KAAK,QAAQ,6BAA+B,sBAC7C,KAAK,GAAK,KAAK,UAAU,IAAI,EAAY,CACzC,KAAK,qBAAuB,SAAS,cAAc,MAAM,CACzD,KAAK,qBAAqB,UACzB,+DAED,EAAY,KAAK,qBAAsBA,EAAM,CAC7C,KAAK,qBAAqB,YAAY,EAAiB,CACvD,KAAK,GAAG,KAAK,UAAU,YAAY,KAAK,qBAAqB,CAEzD,KAAK,QAAQ,wBAAwB,KAAK,iBAAiB,CAE/D,OAAO,iBAAiB,cAAe,KAAK,cAAc,CAC1D,OAAO,iBAAiB,cAAe,KAAK,cAAc,CAC1D,OAAO,iBAAiB,YAAa,KAAK,YAAY,CAEtD,KAAK,QAAQ,CACZ,sBAAuB,KAAK,cAC5B,wBAAyB,KAAK,gBAC9B,CAAC,CACF,KAAK,UAAU,KAAK,QAAQ,CAG7B,cAAkC,GAAoB,CACrD,IAAM,EAAS,KAAK,GAAG,KAAK,UAAU,uBAAuB,CAE5D,EAAE,QAAU,EAAO,MACnB,EAAE,QAAU,EAAO,OACnB,EAAE,QAAU,EAAO,KACnB,EAAE,QAAU,EAAO,OAEd,KAAK,WAAW,KAAK,iBAAiB,CACjC,KAAK,YACf,KAAK,gBAAgB,SAAW,EAAE,QAClC,KAAK,gBAAgB,SAAW,EAAE,QAClC,KAAK,gBAAgB,MAAQ,EAAE,QAC/B,KAAK,gBAAgB,MAAQ,EAAE,QAC/B,KAAK,gBAAgB,OAAS,KAIhC,cAAkC,GAAoB,CACjD,KAAK,gBAAgB,SACxB,KAAK,gBAAgB,MAAQ,EAAE,QAC/B,KAAK,gBAAgB,MAAQ,EAAE,UAIjC,gBAAqC,CAChC,KAAK,gBAAgB,SACxB,KAAK,gBAAgB,OAAS,GAE7B,KAAK,IAAI,KAAK,gBAAgB,MAAQ,KAAK,gBAAgB,SAAS,CACnE,KAAK,IAAI,KAAK,gBAAgB,MAAQ,KAAK,gBAAgB,SAAS,CACrE,GAEA,KAAK,eAAe,GAIvB,oBAAwB,CACvB,KAAK,oBAAoB,UAAU,OAAO,aAAa,CACvD,KAAK,GAAG,KAAK,UAAU,UAAU,IAAI,WAAW,CAChD,KAAK,UAAY,IAGlB,kBAAsB,CACrB,KAAK,UAAY,GACjB,KAAK,oBAAoB,UAAU,IAAI,aAAa,CACpD,eAAiB,KAAK,GAAG,KAAK,UAAU,UAAU,OAAO,WAAW,CAAE,GAAG,EAG1E,YAAiC,CAChC,OAAO,oBAAoB,cAAe,KAAK,cAAc,CAC7D,OAAO,oBAAoB,cAAe,KAAK,cAAc,CAC7D,OAAO,oBAAoB,YAAa,KAAK,YAAY,CACzD,KAAK,oBAAoB,QAAQ,CACjC,KAAK,qBAAuB,IAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
var e=`.JSON-Canvas-Viewer.JCV-numb, .JSON-Canvas-Viewer.JCV-numb * {
|
|
2
|
+
pointer-events: none !important;
|
|
3
|
+
}
|
|
4
|
+
.JSON-Canvas-Viewer .JCV-prevention-container {
|
|
5
|
+
overflow: visible;
|
|
6
|
+
transition: background 200ms, opacity 200ms, box-shadow 200ms, border 200ms, filter 200ms, backdrop-filter 200ms;
|
|
7
|
+
}
|
|
8
|
+
.JSON-Canvas-Viewer .JCV-prevention-container.JCV-hidden {
|
|
9
|
+
pointer-events: none;
|
|
10
|
+
opacity: 0;
|
|
11
|
+
}
|
|
12
|
+
.JSON-Canvas-Viewer .JCV-prevention-container .JCV-prevention-banner {
|
|
13
|
+
border-radius: 12px;
|
|
14
|
+
padding: 12px;
|
|
15
|
+
margin: 12px;
|
|
16
|
+
font-size: calc(14px + 0.3vw);
|
|
17
|
+
line-height: calc(17px + 0.3vw);
|
|
18
|
+
text-align: center;
|
|
19
|
+
}
|
|
20
|
+
`;export{e as default};
|
|
21
|
+
//# sourceMappingURL=styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles.js","names":[],"sources":["../../../src/modules/MistouchPreventer/styles.scss?inline"],"sourcesContent":[".JSON-Canvas-Viewer {\n\t&.JCV-numb,\n\t&.JCV-numb * {\n\t\tpointer-events: none !important;\n\t}\n\n\t.JCV-prevention-container {\n\t\toverflow: visible;\n\t\ttransition:\n\t\t\tbackground 200ms,\n\t\t\topacity 200ms,\n\t\t\tbox-shadow 200ms,\n\t\t\tborder 200ms,\n\t\t\tfilter 200ms,\n\t\t\tbackdrop-filter 200ms;\n\t\t&.JCV-hidden {\n\t\t\tpointer-events: none;\n\t\t\topacity: 0;\n\t\t}\n\t\t.JCV-prevention-banner {\n\t\t\tborder-radius: 12px;\n\t\t\tpadding: 12px;\n\t\t\tmargin: 12px;\n\t\t\tfont-size: calc(14px + 0.3vw);\n\t\t\tline-height: calc(17px + 0.3vw);\n\t\t\ttext-align: center;\n\t\t}\n\t}\n}\n"],"mappings":"AAAA,IAAA,EAAa"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
//#region ../shared/index.d.ts
|
|
2
|
+
type Parser = (markdown: string) => string | Promise<string>;
|
|
3
|
+
type JSONCanvasGroupNode = {
|
|
4
|
+
type: 'group';
|
|
5
|
+
label?: string;
|
|
6
|
+
background?: string;
|
|
7
|
+
backgroundStyle?: 'cover' | 'ratio' | 'repeat';
|
|
8
|
+
} & JSONCanvasGenericNode;
|
|
9
|
+
type JSONCanvasFileNode = {
|
|
10
|
+
type: 'file';
|
|
11
|
+
file: string;
|
|
12
|
+
subpath?: string;
|
|
13
|
+
} & JSONCanvasGenericNode;
|
|
14
|
+
type JSONCanvasTextNode = {
|
|
15
|
+
type: 'text';
|
|
16
|
+
text: string;
|
|
17
|
+
} & JSONCanvasGenericNode;
|
|
18
|
+
type JSONCanvasLinkNode = {
|
|
19
|
+
type: 'link';
|
|
20
|
+
url: string;
|
|
21
|
+
} & JSONCanvasGenericNode;
|
|
22
|
+
type JSONCanvasNode = JSONCanvasGroupNode | JSONCanvasFileNode | JSONCanvasTextNode | JSONCanvasLinkNode;
|
|
23
|
+
type JSONCanvasEdge = {
|
|
24
|
+
id: string;
|
|
25
|
+
fromNode: string;
|
|
26
|
+
toNode: string;
|
|
27
|
+
fromSide: 'right' | 'left' | 'top' | 'bottom';
|
|
28
|
+
toSide: 'right' | 'left' | 'top' | 'bottom';
|
|
29
|
+
toEnd?: 'arrow' | 'none';
|
|
30
|
+
label?: string;
|
|
31
|
+
styleAttributes?: Record<string, string>;
|
|
32
|
+
color?: string;
|
|
33
|
+
};
|
|
34
|
+
type JSONCanvas = {
|
|
35
|
+
nodes?: Array<JSONCanvasNode>;
|
|
36
|
+
edges?: Array<JSONCanvasEdge>;
|
|
37
|
+
};
|
|
38
|
+
type JSONCanvasGenericNode = {
|
|
39
|
+
id: string;
|
|
40
|
+
type: 'group' | 'file' | 'text' | 'link';
|
|
41
|
+
x: number;
|
|
42
|
+
y: number;
|
|
43
|
+
width: number;
|
|
44
|
+
height: number;
|
|
45
|
+
styleAttributes?: Record<string, string>;
|
|
46
|
+
color?: string;
|
|
47
|
+
};
|
|
48
|
+
//#endregion
|
|
49
|
+
export { JSONCanvas, JSONCanvasEdge, JSONCanvasFileNode, JSONCanvasGroupNode, JSONCanvasLinkNode, JSONCanvasNode, JSONCanvasTextNode, Parser };
|
|
50
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { JSONCanvas } from "../shared/index.js";
|
|
2
|
+
|
|
3
|
+
//#region src/utilities/fetch-canvas.d.ts
|
|
4
|
+
declare function fetchCanvas(path: `${string}.canvas` | `${string}.json`): Promise<JSONCanvas>;
|
|
5
|
+
//#endregion
|
|
6
|
+
export { fetchCanvas };
|
|
7
|
+
//# sourceMappingURL=fetch-canvas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-canvas.js","names":[],"sources":["../../src/utilities/fetch-canvas.ts"],"sourcesContent":["import type { JSONCanvas } from '@repo/shared';\n\nexport default async function fetchCanvas(path: `${string}.canvas` | `${string}.json`) {\n\treturn (await fetch(path).then((res) => res.json())) as JSONCanvas;\n}\n"],"mappings":"AAEA,eAA8B,EAAY,EAA6C,CACtF,OAAQ,MAAM,MAAM,EAAK,CAAC,KAAM,GAAQ,EAAI,MAAM,CAAC"}
|
package/dist/utilities/parser.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import
|
|
2
|
-
//# sourceMappingURL=parser.js.map
|
|
1
|
+
import e from"dompurify";import{marked as t}from"marked";async function n(n){return e.sanitize(await t(n))}export{n as default};
|
|
2
|
+
//# sourceMappingURL=parser.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.js","sources":["../../src/utilities/parser.ts"],"sourcesContent":["import purify from 'dompurify';\nimport { marked } from 'marked';\n\nexport default async function (markdown: string) {\n\treturn purify.sanitize(await marked(markdown));\n}\n"],"
|
|
1
|
+
{"version":3,"file":"parser.js","names":[],"sources":["../../src/utilities/parser.ts"],"sourcesContent":["import purify from 'dompurify';\nimport { marked } from 'marked';\n\nexport default async function parser(markdown: string) {\n\treturn purify.sanitize(await marked(markdown));\n}\n"],"mappings":"yDAGA,eAA8B,EAAO,EAAkB,CACtD,OAAO,EAAO,SAAS,MAAM,EAAO,EAAS,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { JSONCanvas, Parser } from "../shared/index.js";
|
|
2
|
+
|
|
3
|
+
//#region src/utilities/render-to-string.d.ts
|
|
4
|
+
declare function renderToString(options: {
|
|
5
|
+
canvas: JSONCanvas;
|
|
6
|
+
attachments?: Record<string, string>;
|
|
7
|
+
attachmentDir?: string;
|
|
8
|
+
parser?: Parser;
|
|
9
|
+
}): Promise<string>;
|
|
10
|
+
//#endregion
|
|
11
|
+
export { renderToString };
|
|
12
|
+
//# sourceMappingURL=render-to-string.d.ts.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
async function e(e){let n=async n=>await t(n,e.parser??(e=>e)),r=e.canvas.nodes??[],i=e.attachmentDir??`./`;r.forEach(t=>{if(t.type===`file`&&!t.file.startsWith(`http`)){let n=t.file.split(`/`).pop()??``;t.file=e.attachments?.[n]??i+n}});let a=[];return await Promise.all(r.map(async e=>a.push(await n(e)))),a.join(``)}async function t(e,t){switch(e.type){case`text`:return await t(e.text);case`file`:return await n(e,t);case`link`:return`<a href="${e.url}" target="_blank" rel="nofollow">${e.url}</a>`;default:return``}}async function n(e,t){return/\.md$/i.exec(e.file)?await r(e.file,t):/\.(png|jpg|jpeg|gif|svg|webp)$/i.exec(e.file)?`<img src="${e.file}" alt="${e.file.split(`/`).pop()}">`:/\.(mp3|wav)$/i.exec(e.file)?`<audio src="${e.file}" controls></audio>`:``}async function r(e,t){let n;try{let r=await(await fetch(e)).text(),i=/^---\n([\s\S]*?)\n---\n([\s\S]*)$/.exec(r);n=await t(i?i[2]:r)}catch{n=`Failed to load content.`}return n}export{e as default};
|
|
2
|
+
//# sourceMappingURL=render-to-string.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-to-string.js","names":[],"sources":["../../src/utilities/render-to-string.ts"],"sourcesContent":["import type { JSONCanvas, JSONCanvasFileNode, JSONCanvasNode, Parser } from '@repo/shared';\n\nexport default async function renderToString(options: {\n\tcanvas: JSONCanvas;\n\tattachments?: Record<string, string>;\n\tattachmentDir?: string;\n\tparser?: Parser;\n}) {\n\tconst render = async (node: JSONCanvasNode) =>\n\t\tawait renderer(node, options.parser ?? ((markdown: string) => markdown));\n\tconst nodes = options.canvas.nodes ?? [];\n\tconst basePath = options.attachmentDir ?? './';\n\tnodes.forEach((node) => {\n\t\tif (node.type === 'file' && !node.file.startsWith('http')) {\n\t\t\tconst file = node.file.split('/');\n\t\t\tconst name = file.pop() ?? '';\n\t\t\tnode.file = options.attachments?.[name] ?? basePath + name;\n\t\t}\n\t});\n\tconst renderedContent: Array<string> = [];\n\tawait Promise.all(nodes.map(async (node) => renderedContent.push(await render(node))));\n\treturn renderedContent.join('');\n}\n\nasync function renderer(node: JSONCanvasNode, parse: Parser) {\n\tswitch (node.type) {\n\t\tcase 'text': {\n\t\t\treturn await parse(node.text);\n\t\t}\n\t\tcase 'file': {\n\t\t\treturn await fileProcessor(node, parse);\n\t\t}\n\t\tcase 'link': {\n\t\t\treturn `<a href=\"${node.url}\" target=\"_blank\" rel=\"nofollow\">${node.url}</a>`;\n\t\t}\n\t\tdefault: {\n\t\t\treturn '';\n\t\t}\n\t}\n}\n\nasync function fileProcessor(node: JSONCanvasFileNode, parse: Parser) {\n\tif (/\\.md$/i.exec(node.file)) return await loadMarkdown(node.file, parse);\n\telse if (/\\.(png|jpg|jpeg|gif|svg|webp)$/i.exec(node.file))\n\t\treturn `<img src=\"${node.file}\" alt=\"${node.file.split('/').pop()}\">`;\n\telse if (/\\.(mp3|wav)$/i.exec(node.file)) return `<audio src=\"${node.file}\" controls></audio>`;\n\treturn '';\n}\n\nasync function loadMarkdown(path: string, parse: Parser) {\n\tlet parsedContent: string;\n\ttry {\n\t\tconst response = await fetch(path);\n\t\tconst result = await response.text();\n\t\tconst frontmatterMatch = /^---\\n([\\s\\S]*?)\\n---\\n([\\s\\S]*)$/.exec(result);\n\t\tparsedContent = await parse(frontmatterMatch ? frontmatterMatch[2] : result);\n\t} catch {\n\t\tparsedContent = 'Failed to load content.';\n\t}\n\treturn parsedContent;\n}\n"],"mappings":"AAEA,eAA8B,EAAe,EAK1C,CACF,IAAM,EAAS,KAAO,IACrB,MAAM,EAAS,EAAM,EAAQ,SAAY,GAAqB,GAAU,CACnE,EAAQ,EAAQ,OAAO,OAAS,EAAE,CAClC,EAAW,EAAQ,eAAiB,KAC1C,EAAM,QAAS,GAAS,CACvB,GAAI,EAAK,OAAS,QAAU,CAAC,EAAK,KAAK,WAAW,OAAO,CAAE,CAE1D,IAAM,EADO,EAAK,KAAK,MAAM,IACZ,CAAC,KAAK,EAAI,GAC3B,EAAK,KAAO,EAAQ,cAAc,IAAS,EAAW,IAEtD,CACF,IAAM,EAAiC,EAAE,CAEzC,OADA,MAAM,QAAQ,IAAI,EAAM,IAAI,KAAO,IAAS,EAAgB,KAAK,MAAM,EAAO,EAAK,CAAC,CAAC,CAAC,CAC/E,EAAgB,KAAK,GAAG,CAGhC,eAAe,EAAS,EAAsB,EAAe,CAC5D,OAAQ,EAAK,KAAb,CACC,IAAK,OACJ,OAAO,MAAM,EAAM,EAAK,KAAK,CAE9B,IAAK,OACJ,OAAO,MAAM,EAAc,EAAM,EAAM,CAExC,IAAK,OACJ,MAAO,YAAY,EAAK,IAAI,mCAAmC,EAAK,IAAI,MAEzE,QACC,MAAO,IAKV,eAAe,EAAc,EAA0B,EAAe,CAKrE,MAJI,SAAS,KAAK,EAAK,KAAK,CAAS,MAAM,EAAa,EAAK,KAAM,EAAM,CAChE,kCAAkC,KAAK,EAAK,KAAK,CAClD,aAAa,EAAK,KAAK,SAAS,EAAK,KAAK,MAAM,IAAI,CAAC,KAAK,CAAC,IAC1D,gBAAgB,KAAK,EAAK,KAAK,CAAS,eAAe,EAAK,KAAK,qBACnE,GAGR,eAAe,EAAa,EAAc,EAAe,CACxD,IAAI,EACJ,GAAI,CAEH,IAAM,EAAS,MAAM,MADE,MAAM,EAAK,EACJ,MAAM,CAC9B,EAAmB,oCAAoC,KAAK,EAAO,CACzE,EAAgB,MAAM,EAAM,EAAmB,EAAiB,GAAK,EAAO,MACrE,CACP,EAAgB,0BAEjB,OAAO"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "json-canvas-viewer",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.2.0",
|
|
4
4
|
"description": "An extensible web-based viewer for JSON Canvas, easy to embed into websites.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"frontend",
|
|
@@ -44,20 +44,21 @@
|
|
|
44
44
|
},
|
|
45
45
|
"dependencies": {
|
|
46
46
|
"@ahmedsemih/color-fns": "^1.3.0",
|
|
47
|
-
"@needle-di/core": "^1.1.
|
|
48
|
-
"dompurify": "^3.
|
|
49
|
-
"marked": "^
|
|
50
|
-
"pointeract": "^1.
|
|
47
|
+
"@needle-di/core": "^1.1.2",
|
|
48
|
+
"dompurify": "^3.4.1",
|
|
49
|
+
"marked": "^18.0.2",
|
|
50
|
+
"pointeract": "^1.2.0"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
|
-
"
|
|
53
|
+
"@tsdown/css": "^0.21.10",
|
|
54
|
+
"sass": "^1.99.0",
|
|
54
55
|
"@repo/shared": "0.0.1",
|
|
55
56
|
"vite-plugin-json-canvas": "1.0.1"
|
|
56
57
|
},
|
|
57
58
|
"scripts": {
|
|
58
59
|
"dev": "vite",
|
|
59
60
|
"lint": "oxlint --type-aware --fix && oxfmt",
|
|
60
|
-
"build": "
|
|
61
|
+
"build": "tsdown && MODE=chimp tsdown",
|
|
61
62
|
"check": "tsc && oxfmt --check && oxlint --type-aware"
|
|
62
63
|
}
|
|
63
64
|
}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const e=".JSON-Canvas-Viewer{--contentTransition: color .2s, opacity .2s, text-shadow .2s, fill .2s;--containerTransition: background .2s, opacity .2s, box-shadow .2s, border .2s, filter .2s, backdrop-filter .2s;color:var(--text);fill:var(--text);stroke:var(--text);background-color:var(--background);position:relative;width:100%;height:100%;overflow:hidden}.JSON-Canvas-Viewer.JCV-numb,.JSON-Canvas-Viewer.JCV-numb *{pointer-events:none!important}.JSON-Canvas-Viewer .JCV-full,.JSON-Canvas-Viewer .JCV-overlay-container .JCV-click-layer,.JSON-Canvas-Viewer .JCV-overlay-container .JCV-link-iframe,.JSON-Canvas-Viewer .JCV-overlay-container .JCV-audio,.JSON-Canvas-Viewer .JCV-overlay-container .JCV-video,.JSON-Canvas-Viewer .JCV-overlay-container .JCV-content{top:0;left:0;width:100%;height:100%;position:absolute}.JSON-Canvas-Viewer .JCV-flex-center,.JSON-Canvas-Viewer .JCV-overlay-container .JCV-content.JCV-markdown-content{display:flex;justify-content:center;align-items:center}.JSON-Canvas-Viewer .JCV-border-shadow-bg{background:var(--background-secondary);border:1px solid var(--border)!important;box-shadow:var(--shadow)}.JSON-Canvas-Viewer .JCV-button{cursor:pointer;font-size:18px;height:32px;border:none;transition:var(--containerTransition);background-color:var(--background-secondary);text-align:center;width:32px;padding:5px 0}.JSON-Canvas-Viewer .JCV-button svg{width:100%;height:100%}.JSON-Canvas-Viewer .JCV-button:hover{background-color:var(--border)}.JSON-Canvas-Viewer .JCV-button.JCV-collapse-button{border-radius:8px;transition:transform .2s,background-color .2s}.JSON-Canvas-Viewer .JCV-collapsed .JCV-collapse-button{transform:rotate(180deg)}.JSON-Canvas-Viewer .JCV-main-canvas{width:100%;height:100%;transform-origin:top left}.JSON-Canvas-Viewer .JCV-overlays{position:absolute;transform-origin:top left;will-change:transform}.JSON-Canvas-Viewer .JCV-overlay-container{position:absolute;box-sizing:border-box;border-radius:12px;-webkit-user-select:none;user-select:none;contain:strict;content-visibility:auto;background-color:var(--overlay-card);transition:var(--containerTransition)}.JSON-Canvas-Viewer .JCV-overlay-container .JCV-overlay-border{box-sizing:border-box;pointer-events:none;position:absolute;color:var(--overlay-border);top:0;left:0;width:100%;height:100%;border-width:1px;border-style:solid;border-radius:12px;transition:var(--containerTransition)}.JSON-Canvas-Viewer .JCV-overlay-container .JCV-content{overflow:hidden}.JSON-Canvas-Viewer .JCV-overlay-container .JCV-content.JCV-markdown-content{position:absolute;padding:0 7px}.JSON-Canvas-Viewer .JCV-overlay-container .JCV-content.JCV-markdown-content.rtl{direction:rtl;text-align:right}.JSON-Canvas-Viewer .JCV-overlay-container.JCV-active{-webkit-user-select:auto;user-select:auto;pointer-events:auto}.JSON-Canvas-Viewer .JCV-overlay-container.JCV-active .JCV-overlay-border{border:4px solid var(--overlay-active)}.JSON-Canvas-Viewer .JCV-overlay-container .JCV-link-iframe,.JSON-Canvas-Viewer .JCV-overlay-container .JCV-audio,.JSON-Canvas-Viewer .JCV-overlay-container .JCV-video{border:none;background:transparent}.JSON-Canvas-Viewer .JCV-overlay-container .JCV-click-layer{background:transparent;pointer-events:auto}.JSON-Canvas-Viewer .JCV-overlay-container.JCV-active .JCV-click-layer{pointer-events:none}.JSON-Canvas-Viewer .JCV-overlay-container .JCV-img{width:100%;height:100%;object-fit:cover;pointer-events:none}.JSON-Canvas-Viewer .JCV-overlay-container.JCV-active .JCV-img{pointer-events:auto}.JSON-Canvas-Viewer .JCV-overlay-container .JCV-parsed-content-wrapper{font-family:sans-serif;box-sizing:border-box;max-width:100%;max-height:100%;padding:10px 6px;pointer-events:none;overflow:hidden;scrollbar-gutter:stable both-edges;display:flex;flex-direction:column;gap:12px}@supports not (scrollbar-gutter: stable both-edges){.JSON-Canvas-Viewer .JCV-overlay-container .JCV-parsed-content-wrapper{padding:10px}}.JSON-Canvas-Viewer .JCV-overlay-container.JCV-active .JCV-parsed-content-wrapper{overflow:auto;pointer-events:auto}.JSON-Canvas-Viewer .JCV-markdown-content ::-webkit-scrollbar{width:4px}.JSON-Canvas-Viewer .JCV-markdown-content ::-webkit-scrollbar-track{background-color:transparent}.JSON-Canvas-Viewer .JCV-markdown-content ::-webkit-scrollbar-thumb{border-radius:2px;background:#ffffff40}.JSON-Canvas-Viewer .JCV-markdown-content ::-webkit-scrollbar-thumb:hover{background:#1e1e1ebf}.JSON-Canvas-Viewer .JCV-markdown-content p{font-size:16px;line-height:21px}.JSON-Canvas-Viewer .JCV-markdown-content img{width:100%;border-radius:8px}.JSON-Canvas-Viewer .JCV-markdown-content h1{font-size:25px}.JSON-Canvas-Viewer .JCV-markdown-content h2{font-size:23px}.JSON-Canvas-Viewer .JCV-markdown-content h3{font-size:22px}.JSON-Canvas-Viewer .JCV-markdown-content h4{font-size:20px}.JSON-Canvas-Viewer .JCV-markdown-content h5{font-size:19px}.JSON-Canvas-Viewer .JCV-markdown-content h6{font-size:17px}.JSON-Canvas-Viewer .JCV-markdown-content p,.JSON-Canvas-Viewer .JCV-markdown-content h1,.JSON-Canvas-Viewer .JCV-markdown-content h2,.JSON-Canvas-Viewer .JCV-markdown-content h3,.JSON-Canvas-Viewer .JCV-markdown-content h4,.JSON-Canvas-Viewer .JCV-markdown-content h5,.JSON-Canvas-Viewer .JCV-markdown-content h6,.JSON-Canvas-Viewer .JCV-markdown-content ol,.JSON-Canvas-Viewer .JCV-markdown-content ul{margin:0}.JSON-Canvas-Viewer .JCV-markdown-content h1,.JSON-Canvas-Viewer .JCV-markdown-content h2{font-weight:800}.JSON-Canvas-Viewer .JCV-markdown-content h3,.JSON-Canvas-Viewer .JCV-markdown-content h4{font-weight:700}.JSON-Canvas-Viewer .JCV-markdown-content h5,.JSON-Canvas-Viewer .JCV-markdown-content h6{font-weight:600}.JSON-Canvas-Viewer .JCV-markdown-content code{background:#ffffff1a;padding:2px 4px;border-radius:8px}pre .JSON-Canvas-Viewer .JCV-markdown-content code{display:block;box-sizing:border-box;width:100%}.JSON-Canvas-Viewer .JCV-markdown-content pre:has(code),.JSON-Canvas-Viewer .JCV-markdown-content table{margin:6px 0}.JSON-Canvas-Viewer .JCV-markdown-content strong{color:#fe8e7c}.JSON-Canvas-Viewer .JCV-markdown-content em{color:#5affb2}.JSON-Canvas-Viewer .JCV-markdown-content a{text-decoration:none;color:#6dadd0;font-weight:800;font-style:italic;cursor:pointer;transition:var(--contentTransition)}.JSON-Canvas-Viewer .JCV-markdown-content a:hover{color:#86d3fd}.JSON-Canvas-Viewer .JCV-markdown-content hr{height:1px;width:100%;background-color:#fff3;border:none}.JSON-Canvas-Viewer .JCV-markdown-content li{margin:5px 0}.JSON-Canvas-Viewer .JCV-markdown-content ul{padding-left:16px}.JSON-Canvas-Viewer .JCV-markdown-content ol{padding-left:15px;padding-right:7.5px}.JSON-Canvas-Viewer .JCV-markdown-content table{border-collapse:collapse;border-radius:8px;overflow:hidden;width:100%}.JSON-Canvas-Viewer .JCV-markdown-content table th,.JSON-Canvas-Viewer .JCV-markdown-content table td{border:1px solid rgba(255,255,255,.2);padding:6px 10px;background:#ffffff0f;text-align:left}.JSON-Canvas-Viewer .JCV-markdown-content table th{background:#ffffff1f;font-weight:700}";export{e as default};
|
|
2
|
-
//# sourceMappingURL=styles.scss.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"styles.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const r=".JSON-Canvas-Viewer>.JCV-controls{position:absolute;top:10px;right:10px;display:flex;align-items:center;transition:transform .2s;border-radius:8px;gap:10px}.JSON-Canvas-Viewer>.JCV-controls.JCV-collapsed{transform:translate(calc(100% - 30px))}.JSON-Canvas-Viewer>.JCV-controls .JCV-controls-content{display:flex;gap:1px;align-items:center;border-radius:8px;overflow:hidden;background:var(--border);box-shadow:var(--shadow);outline:1px solid var(--border)}.JSON-Canvas-Viewer>.JCV-controls .JCV-zoom-slider{width:100px;margin:0 10px}";export{r as default};
|
|
2
|
-
//# sourceMappingURL=styles.scss.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"styles.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const e=".JSON-Canvas-Viewer>.JCV-debug-panel{position:absolute;bottom:12px;left:12px;border-radius:12px;padding:12px;color:var(--text);font-size:calc(14px + .3vw);line-height:calc(17px + .3vw);pointer-events:none}";export{e as default};
|
|
2
|
-
//# sourceMappingURL=styles.scss.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"styles.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const n=".JSON-Canvas-Viewer>.JCV-minimap-container{position:absolute;bottom:10px;right:10px;display:flex;pointer-events:none;transition:transform .2s}.JSON-Canvas-Viewer>.JCV-minimap-container.JCV-collapsed{transform:translate(calc(100% - 30px))}.JSON-Canvas-Viewer>.JCV-minimap-container .JCV-toggle-minimap{margin:auto 10px 0 0;pointer-events:auto}.JSON-Canvas-Viewer>.JCV-minimap-container .JCV-minimap{position:relative;pointer-events:none;width:200px;height:150px;overflow:hidden;border-radius:12px;transform-origin:0 0}.JSON-Canvas-Viewer>.JCV-minimap-container .JCV-minimap .JCV-minimap-canvas{width:100%;height:100%}.JSON-Canvas-Viewer>.JCV-minimap-container .JCV-minimap .JCV-viewport-rectangle{position:absolute;top:0;left:0;pointer-events:none;border-radius:6px;box-sizing:border-box;border:2px dashed var(--text)}@container (max-width: 768px){.JSON-Canvas-Viewer>.JCV-minimap-container .JCV-container .JCV-minimap{transform:scale(.6)}.JSON-Canvas-Viewer>.JCV-minimap-container .JCV-container .JCV-toggle-minimap{transform:translateY(-60px)}.collapsed .JSON-Canvas-Viewer>.JCV-minimap-container .JCV-container .JCV-toggle-minimap{transform:translateY(-60px) rotate(180deg)}.JSON-Canvas-Viewer>.JCV-minimap-container .JCV-container .JCV-minimap-container{transform:translateY(60px) translate(80px)}.JSON-Canvas-Viewer>.JCV-minimap-container .JCV-container .JCV-minimap-container.JCV-collapsed{transform:translateY(60px) translate(calc(100% - 32px))}}";export{n as default};
|
|
2
|
-
//# sourceMappingURL=styles.scss.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"styles.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const e=".JSON-Canvas-Viewer.JCV-numb,.JSON-Canvas-Viewer.JCV-numb *{pointer-events:none!important}.JSON-Canvas-Viewer .JCV-prevention-container{overflow:visible;transition:background .2s,opacity .2s,box-shadow .2s,border .2s,filter .2s,backdrop-filter .2s}.JSON-Canvas-Viewer .JCV-prevention-container.JCV-hidden{pointer-events:none;opacity:0}.JSON-Canvas-Viewer .JCV-prevention-container .JCV-prevention-banner{border-radius:12px;padding:12px;margin:12px;font-size:calc(14px + .3vw);line-height:calc(17px + .3vw);text-align:center}";export{e as default};
|
|
2
|
-
//# sourceMappingURL=styles.scss.js.map
|