openpencil/packages/core/package.json
Danila Poyarkov 99d2703583 Extract createEditor() to packages/core/src/editor/ folder
Split the 2505-line god store into 13 domain modules sharing an
EditorContext interface:

  editor/types.ts       — EditorState, EditorOptions, Tool, EditorToolDef
  editor/create.ts      — createEditor() assembler
  editor/viewport.ts    — screenToCanvas, applyZoom, pan, zoom*
  editor/selection.ts   — select, clearSelection, marquee, snap, hover
  editor/pages.ts       — switchPage, addPage, deletePage, renamePage
  editor/shapes.ts      — createShape, pen tool, adoptNodesIntoSection
  editor/structure.ts   — group, ungroup, reorder, reparent, z-order
  editor/components.ts  — component/instance/detach/componentSet
  editor/clipboard.ts   — duplicate, copy, paste, delete
  editor/undo.ts        — commitMove/Resize/Rotation, snapshot
  editor/text.ts        — startTextEditing, commitTextEdit
  editor/nodes.ts       — updateNode, setLayoutMode

Move design constants (fills, strokes, zoom) from app to core.
Largest file is structure.ts at 394 lines (was 2505).
App store is now a thin Vue wrapper (747 lines) delegating to
the core Editor — ready for @open-pencil/vue SDK consumption.

All 955 tests pass, 0 lint errors, 1.41% duplication.
2026-03-16 15:14:50 +03:00

189 lines
5.1 KiB
JSON

{
"name": "@open-pencil/core",
"version": "0.10.0",
"license": "MIT",
"type": "module",
"sideEffects": false,
"exports": {
".": {
"types": "./src/index.ts",
"bun": "./src/index.ts",
"default": "./src/index.ts"
},
"./scene-graph": {
"types": "./src/scene-graph.ts",
"bun": "./src/scene-graph.ts",
"default": "./src/scene-graph.ts"
},
"./kiwi": {
"types": "./src/kiwi/index.ts",
"bun": "./src/kiwi/index.ts",
"default": "./src/kiwi/index.ts"
},
"./tools": {
"types": "./src/tools/index.ts",
"bun": "./src/tools/index.ts",
"default": "./src/tools/index.ts"
},
"./renderer": {
"types": "./src/renderer/index.ts",
"bun": "./src/renderer/index.ts",
"default": "./src/renderer/index.ts"
},
"./render": {
"types": "./src/render/index.ts",
"bun": "./src/render/index.ts",
"default": "./src/render/index.ts"
},
"./rpc": {
"types": "./src/rpc/index.ts",
"bun": "./src/rpc/index.ts",
"default": "./src/rpc/index.ts"
},
"./figma-api": {
"types": "./src/figma-api.ts",
"bun": "./src/figma-api.ts",
"default": "./src/figma-api.ts"
},
"./canvaskit": {
"types": "./src/canvaskit.ts",
"bun": "./src/canvaskit.ts",
"default": "./src/canvaskit.ts"
},
"./layout": {
"types": "./src/layout.ts",
"bun": "./src/layout.ts",
"default": "./src/layout.ts"
},
"./color": {
"types": "./src/color.ts",
"bun": "./src/color.ts",
"default": "./src/color.ts"
},
"./render-image": {
"types": "./src/render-image.ts",
"bun": "./src/render-image.ts",
"default": "./src/render-image.ts"
},
"./profiler": {
"types": "./src/profiler/index.ts",
"bun": "./src/profiler/index.ts",
"default": "./src/profiler/index.ts"
},
"./editor": {
"types": "./src/editor/index.ts",
"bun": "./src/editor/index.ts",
"default": "./src/editor/index.ts"
}
},
"main": "./src/index.ts",
"types": "./src/index.ts",
"files": ["src", "dist", "assets"],
"scripts": {
"build": "bunx tsgo && bunx fix-esm-import-path dist",
"prepublishOnly": "bun run build"
},
"repository": {
"type": "git",
"url": "git+https://github.com/open-pencil/open-pencil.git",
"directory": "packages/core"
},
"publishConfig": {
"access": "public",
"provenance": true,
"exports": {
".": {
"types": "./dist/index.d.ts",
"import": "./dist/index.js",
"default": "./dist/index.js"
},
"./scene-graph": {
"types": "./dist/scene-graph.d.ts",
"import": "./dist/scene-graph.js",
"default": "./dist/scene-graph.js"
},
"./kiwi": {
"types": "./dist/kiwi/index.d.ts",
"import": "./dist/kiwi/index.js",
"default": "./dist/kiwi/index.js"
},
"./tools": {
"types": "./dist/tools/index.d.ts",
"import": "./dist/tools/index.js",
"default": "./dist/tools/index.js"
},
"./renderer": {
"types": "./dist/renderer/index.d.ts",
"import": "./dist/renderer/index.js",
"default": "./dist/renderer/index.js"
},
"./render": {
"types": "./dist/render/index.d.ts",
"import": "./dist/render/index.js",
"default": "./dist/render/index.js"
},
"./rpc": {
"types": "./dist/rpc/index.d.ts",
"import": "./dist/rpc/index.js",
"default": "./dist/rpc/index.js"
},
"./figma-api": {
"types": "./dist/figma-api.d.ts",
"import": "./dist/figma-api.js",
"default": "./dist/figma-api.js"
},
"./canvaskit": {
"types": "./dist/canvaskit.d.ts",
"import": "./dist/canvaskit.js",
"default": "./dist/canvaskit.js"
},
"./layout": {
"types": "./dist/layout.d.ts",
"import": "./dist/layout.js",
"default": "./dist/layout.js"
},
"./color": {
"types": "./dist/color.d.ts",
"import": "./dist/color.js",
"default": "./dist/color.js"
},
"./render-image": {
"types": "./dist/render-image.d.ts",
"import": "./dist/render-image.js",
"default": "./dist/render-image.js"
},
"./profiler": {
"types": "./dist/profiler/index.d.ts",
"import": "./dist/profiler/index.js",
"default": "./dist/profiler/index.js"
},
"./editor": {
"types": "./dist/editor/index.d.ts",
"import": "./dist/editor/index.js",
"default": "./dist/editor/index.js"
}
},
"main": "./dist/index.js",
"types": "./dist/index.d.ts"
},
"dependencies": {
"@iconify/utils": "^3.1.0",
"canvaskit-wasm": "^0.40.0",
"culori": "^4.0.2",
"diff": "^8.0.3",
"expr-eval": "^2.0.2",
"fflate": "^0.8.2",
"fontoxpath": "^3.34.0",
"fzstd": "^0.1.1",
"nanoevents": "^9.1.0",
"sucrase": "^3.35.1",
"svgpath": "^2.6.0",
"yoga-layout": "npm:@open-pencil/yoga-layout@3.3.0-grid.2"
},
"devDependencies": {
"@types/culori": "^4.0.1",
"@types/diff": "^8.0.0",
"typescript": "~5.8.3"
}
}