openpencil/packages/dom-css/package.json
Danila Poyarkov 9b418de13e
refactor: print OpenPencil JSX export as syntax trees (#799)
* refactor(codegen): share syntax-tree code generation between exporters

dom-css printed Tailwind JSX with its own esrap JSX builders and kept TypeScript template helpers under its Storybook export. The OpenPencil JSX exporter needs the same JSX builders, and design-jsx and dom-css may not depend on each other.

@open-pencil/codegen holds both: es for ESTree templates and modules (moved from dom-css) and jsx for JSX elements, attributes, text, and printing, including the literal rules that keep exported strings from being reinterpreted. dom-css no longer depends on acorn and esrap directly.

* refactor(design-jsx): print JSX export as syntax trees

sceneNodeToJSX concatenated strings with hand-written escaping and indentation. It now collects typed props (moved to export/props.ts) and prints them with @open-pencil/codegen's JSX builders. Output is unchanged except for text: special characters print as a string expression instead of entities, and multi-line text keeps its line breaks, which the old line-splitting lost on render.

* docs(codegen): fix package metadata and dependency rules

codegen's repository.directory still named design-jsx, the README mentioned es without showing it, and the design-jsx and dom-css guides still said they depend only on scene-graph.

* test(core): move the JSX export round-trips to the design-jsx test home

Covers tabs in layer names and text, which JSX keeps as written.
2026-10-01 21:22:43 +04:00

90 lines
2.3 KiB
JSON

{
"name": "@open-pencil/dom-css",
"version": "0.15.1",
"license": "MIT",
"type": "module",
"imports": {
"#dom-css/*": {
"types": "./src/*",
"bun": "./src/*",
"default": "./dist/*"
}
},
"exports": {
".": {
"types": "./dist/index.d.ts",
"bun": "./src/index.ts",
"import": "./dist/index.js",
"default": "./dist/index.js"
},
"./browser": {
"types": "./dist/browser.d.ts",
"bun": "./src/browser.ts",
"import": "./dist/browser.js",
"default": "./dist/browser.js"
},
"./export": {
"types": "./dist/export.d.ts",
"bun": "./src/export/index.ts",
"import": "./dist/export.js",
"default": "./dist/export.js"
},
"./jsx-runtime": {
"types": "./dist/jsx-runtime.d.ts",
"bun": "./src/import/jsx/runtime.ts",
"import": "./dist/jsx-runtime.js",
"default": "./dist/jsx-runtime.js"
},
"./jsx-dev-runtime": {
"types": "./dist/jsx-dev-runtime.d.ts",
"bun": "./src/import/jsx/dev-runtime.ts",
"import": "./dist/jsx-dev-runtime.js",
"default": "./dist/jsx-dev-runtime.js"
}
},
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
"sideEffects": false,
"files": [
"dist",
"src",
"README.md"
],
"scripts": {
"build": "bunx tsdown --config tsdown.config.ts",
"check": "bun run typecheck && bun run test && bun run build && bun run smoke:dist",
"prepack": "bun run build",
"smoke:dist": "bun scripts/smoke-dist.ts",
"test": "bun test tests",
"typecheck": "bunx tsc --noEmit -p tsconfig.test.json"
},
"repository": {
"type": "git",
"url": "git+https://github.com/open-pencil/open-pencil.git",
"directory": "packages/dom-css"
},
"publishConfig": {
"access": "public",
"provenance": true
},
"peerDependencies": {
"@open-pencil/scene-graph": "workspace:*"
},
"devDependencies": {
"@types/bun": "^1.3.14",
"tsdown": "^0.22.14",
"typescript": "~5.8.3"
},
"dependencies": {
"@acemir/cssom": "^0.9.31",
"@open-pencil/codegen": "workspace:*",
"dedent": "^1.7.2",
"es-toolkit": "^1.51.0",
"js-base64": "^3.9.3",
"parse5": "^8.0.1",
"postcss-value-parser": "^4.2.0",
"tailwindcss": "^4.3.3",
"twirlwind": "^0.3.0"
}
}