{"_id":"@codematic.io/cdp-editor","_rev":"17-67bf400f42586a925117f91982bbf530","name":"@codematic.io/cdp-editor","dist-tags":{"latest":"4.4.0"},"versions":{"2.0.0":{"name":"@codematic.io/cdp-editor","version":"2.0.0","keywords":["React","Rich Text Editor","TailwindCSS","Ant Design","WYSIWYG","Component","Customizable","openCDP","Editor","JavaScript","TypeScript","UI","Modern","Integration","Plugin","Formatting","Toolbar","Content","Library","Open Source"],"author":{"name":"codematic.io"},"_id":"@codematic.io/cdp-editor@2.0.0","maintainers":[{"name":"ibukun-oluwa","email":"ibukun@codematic.io"},{"name":"codematic","email":"developers@codematic.io"}],"homepage":"https://github.com/code-matic/openCDP-editor","dist":{"shasum":"b4c5a5d05d3763b1f7f6f00dfe79f1fd7fa1b0eb","tarball":"https://registry.npmjs.org/@codematic.io/cdp-editor/-/cdp-editor-2.0.0.tgz","fileCount":77,"integrity":"sha512-QTtCNeFhuryH9et9VnqHa8WEJHVFYgvrqgHYGFc56s0yDVmd6dDycp1H1f8mRlO15eue7CXewsoeexz4pvxf2w==","signatures":[{"sig":"MEQCIGQlqsF9qGj6tCXD7ajbYnEO6kSkckLHvCc0H1FDqQUNAiAXyXiwofxxU1RQL4xVrxYbSRYnbPPcugeI7C8DuVXKeA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":87340},"main":"dist/index.cjs","types":"dist/lib.d.ts","module":"dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./dist/index.css":"./dist/index.css"},"gitHead":"254825969051b08894eaf153ac5b8437be2bcea2","scripts":{"build":"react-scripts build","clean":"rimraf dist","start":"react-scripts start","build:js":"webpack --mode production","build:types":"tsc","webpack-build":"npm run clean && npm run build:js && npm run build:types && node scripts/rename-types.js"},"_npmUser":{"name":"codematic","email":"developers@codematic.io"},"overrides":{"postcss-calc":"^9.0.1"},"_npmVersion":"10.9.2","description":"A customizable React rich text editor component built with TailwindCSS and Ant Design, designed for seamless integration into openCDP and modern React applications.","directories":{},"sideEffects":["*.css","src/index.css"],"_nodeVersion":"23.6.1","browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"dependencies":{"dompurify":"^3.2.6"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^6.1.2","postcss":"^8.5.6","webpack":"^5.101.3","css-loader":"^7.1.2","typescript":"^4.9.5","@babel/core":"^7.28.3","@types/jest":"^27.5.2","@types/node":"^16.18.126","tailwindcss":"^3.4.17","webpack-cli":"^6.0.1","@types/react":"^17.0.0","autoprefixer":"^10.4.21","babel-loader":"^10.0.0","style-loader":"^4.0.0","@svgr/webpack":"^8.1.0","ignore-loader":"^0.1.2","react-scripts":"^5.0.1","@types/react-dom":"^17.0.0","@babel/preset-env":"^7.28.3","webpack-dev-server":"^5.2.2","@babel/preset-react":"^7.27.1","html-webpack-plugin":"^5.6.4","@tailwindcss/postcss":"^4.1.11","@testing-library/dom":"^10.4.1","dts-bundle-generator":"^9.5.1","terser-webpack-plugin":"^5.3.14","@testing-library/react":"^16.3.0","mini-css-extract-plugin":"^2.9.4","@babel/preset-typescript":"^7.27.1","@testing-library/jest-dom":"^6.6.4","@testing-library/user-event":"^13.5.0"},"peerDependencies":{"antd":"^6.1.0","react":"^17.0.0 || ^18.0.0","react-dom":"^17.0.0 || ^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cdp-editor_2.0.0_1769016186255_0.03255214270648921","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"@codematic.io/cdp-editor","version":"2.0.1","keywords":["React","Rich Text Editor","TailwindCSS","Ant Design","WYSIWYG","Component","Customizable","openCDP","Editor","JavaScript","TypeScript","UI","Modern","Integration","Plugin","Formatting","Toolbar","Content","Library","Open Source"],"author":{"name":"codematic.io"},"_id":"@codematic.io/cdp-editor@2.0.1","maintainers":[{"name":"ibukun-oluwa","email":"ibukun@codematic.io"},{"name":"codematic","email":"developers@codematic.io"}],"homepage":"https://github.com/code-matic/openCDP-editor","dist":{"shasum":"67b4c1a8246d02af3728af66956c14ad87593caf","tarball":"https://registry.npmjs.org/@codematic.io/cdp-editor/-/cdp-editor-2.0.1.tgz","fileCount":77,"integrity":"sha512-cWng4w6CCXpg+1LUx/gY9PgvFXdpdYXKHPSe0ntecxIVnBhpCcOyb9cPH7fw02dnqC+cB0JCOwAQXIeADP0DZQ==","signatures":[{"sig":"MEYCIQCAkiE7eV6/UI07vIC9yim1tngL/YnYjBIoEHzXacz9JAIhAImrL2Uara17quYa+3SYT9Rq0aTiC1tllWHIbiAXNVo0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":87294},"main":"dist/index.cjs","types":"dist/lib.d.ts","module":"dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./dist/index.css":"./dist/index.css"},"gitHead":"254825969051b08894eaf153ac5b8437be2bcea2","scripts":{"build":"react-scripts build","clean":"rimraf dist","start":"react-scripts start","build:js":"webpack --mode production","build:types":"tsc","webpack-build":"npm run clean && npm run build:js && npm run build:types && node scripts/rename-types.js"},"_npmUser":{"name":"codematic","email":"developers@codematic.io"},"overrides":{"postcss-calc":"^9.0.1"},"_npmVersion":"10.9.2","description":"A customizable React rich text editor component built with TailwindCSS and Ant Design, designed for seamless integration into openCDP and modern React applications.","directories":{},"sideEffects":["*.css","src/index.css"],"_nodeVersion":"23.6.1","browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"dependencies":{"dompurify":"^3.2.6"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^6.1.2","postcss":"^8.5.6","webpack":"^5.101.3","css-loader":"^7.1.2","typescript":"^4.9.5","@babel/core":"^7.28.3","@types/jest":"^27.5.2","@types/node":"^16.18.126","tailwindcss":"^3.4.17","webpack-cli":"^6.0.1","@types/react":"^17.0.0","autoprefixer":"^10.4.21","babel-loader":"^10.0.0","style-loader":"^4.0.0","@svgr/webpack":"^8.1.0","ignore-loader":"^0.1.2","react-scripts":"^5.0.1","@types/react-dom":"^17.0.0","@babel/preset-env":"^7.28.3","webpack-dev-server":"^5.2.2","@babel/preset-react":"^7.27.1","html-webpack-plugin":"^5.6.4","@tailwindcss/postcss":"^4.1.11","@testing-library/dom":"^10.4.1","dts-bundle-generator":"^9.5.1","terser-webpack-plugin":"^5.3.14","@testing-library/react":"^16.3.0","mini-css-extract-plugin":"^2.9.4","@babel/preset-typescript":"^7.27.1","@testing-library/jest-dom":"^6.6.4","@testing-library/user-event":"^13.5.0"},"peerDependencies":{"antd":"^6.1.0","react":"^17.0.0 || ^18.0.0","react-dom":"^17.0.0 || ^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cdp-editor_2.0.1_1769022775830_0.6961273624765181","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@codematic.io/cdp-editor","version":"2.1.0","keywords":["React","Rich Text Editor","TailwindCSS","Ant Design","WYSIWYG","Component","Customizable","openCDP","Editor","JavaScript","TypeScript","UI","Modern","Integration","Plugin","Formatting","Toolbar","Content","Library","Open Source"],"author":{"name":"codematic.io"},"_id":"@codematic.io/cdp-editor@2.1.0","maintainers":[{"name":"ibukun-oluwa","email":"ibukun@codematic.io"},{"name":"codematic","email":"developers@codematic.io"}],"homepage":"https://github.com/code-matic/openCDP-editor","dist":{"shasum":"020611fb8dd14ebe9f5f4a16a951df8bd902df51","tarball":"https://registry.npmjs.org/@codematic.io/cdp-editor/-/cdp-editor-2.1.0.tgz","fileCount":77,"integrity":"sha512-pmchD4YJUaR82x2FUun0iGQHFM2YfY4WAmLX/JFRJYqWPRMPvTvEyNIHIldogeUpVwzpw+KN3LgvJA6tnkZhTA==","signatures":[{"sig":"MEYCIQCnYDXPfaQxSfGkxsYUotKgkpdQ9+Der/pdnf86kcdBCQIhAOPOQQhdyMc49I90tGGSQJmeB55VHnv7ETiaACTllmiY","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":90651},"main":"dist/index.cjs","types":"dist/lib.d.ts","module":"dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./dist/index.css":"./dist/index.css"},"gitHead":"d243dd674e43e26565acb561e5fc6cbd5e031666","scripts":{"prod":"npm run webpack-build && npm pack","build":"react-scripts build","clean":"rimraf dist","start":"react-scripts start","build:js":"webpack --mode production","build:types":"tsc","webpack-build":"npm run clean && npm run build:js && npm run build:types && node scripts/rename-types.js"},"_npmUser":{"name":"codematic","email":"developers@codematic.io"},"overrides":{"postcss-calc":"^9.0.1"},"_npmVersion":"10.9.2","description":"A customizable React rich text editor component built with TailwindCSS and Ant Design, designed for seamless integration into openCDP and modern React applications.","directories":{},"sideEffects":["*.css","src/index.css"],"_nodeVersion":"23.6.1","browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"dependencies":{"dompurify":"^3.2.6"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^6.1.2","postcss":"^8.5.6","webpack":"^5.101.3","css-loader":"^7.1.2","typescript":"^4.9.5","@babel/core":"^7.28.3","@types/jest":"^27.5.2","@types/node":"^16.18.126","tailwindcss":"^3.4.17","webpack-cli":"^6.0.1","@types/react":"^17.0.0","autoprefixer":"^10.4.21","babel-loader":"^10.0.0","style-loader":"^4.0.0","@svgr/webpack":"^8.1.0","ignore-loader":"^0.1.2","react-scripts":"^5.0.1","@types/react-dom":"^17.0.0","@babel/preset-env":"^7.28.3","webpack-dev-server":"^5.2.2","@babel/preset-react":"^7.27.1","html-webpack-plugin":"^5.6.4","@tailwindcss/postcss":"^4.1.11","@testing-library/dom":"^10.4.1","dts-bundle-generator":"^9.5.1","terser-webpack-plugin":"^5.3.14","@testing-library/react":"^16.3.0","mini-css-extract-plugin":"^2.9.4","@babel/preset-typescript":"^7.27.1","@testing-library/jest-dom":"^6.6.4","@testing-library/user-event":"^13.5.0"},"peerDependencies":{"antd":"^6.1.0","react":"^17.0.0 || ^18.0.0","react-dom":"^17.0.0 || ^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cdp-editor_2.1.0_1769278805715_0.6751611572008556","host":"s3://npm-registry-packages-npm-production"}},"2.1.1":{"name":"@codematic.io/cdp-editor","version":"2.1.1","keywords":["React","Rich Text Editor","TailwindCSS","Ant Design","WYSIWYG","Component","Customizable","openCDP","Editor","JavaScript","TypeScript","UI","Modern","Integration","Plugin","Formatting","Toolbar","Content","Library","Open Source"],"author":{"name":"codematic.io"},"_id":"@codematic.io/cdp-editor@2.1.1","maintainers":[{"name":"ibukun-oluwa","email":"ibukun@codematic.io"},{"name":"codematic","email":"developers@codematic.io"}],"homepage":"https://github.com/code-matic/openCDP-editor","dist":{"shasum":"0529b3e718b710824dbce82788b3a2cd1a66de4e","tarball":"https://registry.npmjs.org/@codematic.io/cdp-editor/-/cdp-editor-2.1.1.tgz","fileCount":77,"integrity":"sha512-3Cfc6s9pfKyaOxmgDqzsUF9RmZn3PwCUewiHy7sXZAtmwwonP3MsuoxMiNfB8ajSVb0fI3kx+4ViZpDW+BCajQ==","signatures":[{"sig":"MEUCIQD0+LmbAxdrQbDBJSd6zAmAbU5RMfCGqXtsTnu802xYtgIgXptzFpH3P6+WiOXRKDiGdVNpGoK6A5khHXa19gPq30Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":90603},"main":"dist/index.cjs","types":"dist/lib.d.ts","module":"dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./dist/index.css":"./dist/index.css"},"gitHead":"30aba4d9ce2a2581d6026f6fa172a03258dbeab4","scripts":{"prod":"npm run webpack-build && npm pack","build":"react-scripts build","clean":"rimraf dist","start":"react-scripts start","build:js":"webpack --mode production","build:types":"tsc","webpack-build":"npm run clean && npm run build:js && npm run build:types && node scripts/rename-types.js"},"_npmUser":{"name":"codematic","email":"developers@codematic.io"},"overrides":{"postcss-calc":"^9.0.1"},"_npmVersion":"10.9.2","description":"A customizable React rich text editor component built with TailwindCSS and Ant Design, designed for seamless integration into openCDP and modern React applications.","directories":{},"sideEffects":["*.css","src/index.css"],"_nodeVersion":"23.6.1","browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"dependencies":{"dompurify":"^3.2.6"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^6.1.2","postcss":"^8.5.6","webpack":"^5.101.3","css-loader":"^7.1.2","typescript":"^4.9.5","@babel/core":"^7.28.3","@types/jest":"^27.5.2","@types/node":"^16.18.126","tailwindcss":"^3.4.17","webpack-cli":"^6.0.1","@types/react":"^17.0.0","autoprefixer":"^10.4.21","babel-loader":"^10.0.0","style-loader":"^4.0.0","@svgr/webpack":"^8.1.0","ignore-loader":"^0.1.2","react-scripts":"^5.0.1","@types/react-dom":"^17.0.0","@babel/preset-env":"^7.28.3","webpack-dev-server":"^5.2.2","@babel/preset-react":"^7.27.1","html-webpack-plugin":"^5.6.4","@tailwindcss/postcss":"^4.1.11","@testing-library/dom":"^10.4.1","dts-bundle-generator":"^9.5.1","terser-webpack-plugin":"^5.3.14","@testing-library/react":"^16.3.0","mini-css-extract-plugin":"^2.9.4","@babel/preset-typescript":"^7.27.1","@testing-library/jest-dom":"^6.6.4","@testing-library/user-event":"^13.5.0"},"peerDependencies":{"antd":"^6.1.0","react":"^17.0.0 || ^18.0.0","react-dom":"^17.0.0 || ^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cdp-editor_2.1.1_1769293477676_0.4205424038807717","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"@codematic.io/cdp-editor","version":"3.0.0","keywords":["React","Rich Text Editor","TailwindCSS","Ant Design","WYSIWYG","Component","Customizable","openCDP","Editor","JavaScript","TypeScript","UI","Modern","Integration","Plugin","Formatting","Toolbar","Content","Library","Open Source"],"author":{"name":"codematic.io"},"_id":"@codematic.io/cdp-editor@3.0.0","maintainers":[{"name":"ibukun-oluwa","email":"ibukun@codematic.io"},{"name":"codematic","email":"developers@codematic.io"}],"homepage":"https://github.com/code-matic/openCDP-editor","dist":{"shasum":"ae1a4576ddb0d68cf414655a03bc6ead6d9ec337","tarball":"https://registry.npmjs.org/@codematic.io/cdp-editor/-/cdp-editor-3.0.0.tgz","fileCount":25,"integrity":"sha512-JfJZBPNszdQM0VqA2yC7LZ3BncKocvX7WMrfRZnjEi6czBGRcEhWJKFhHCEfCG0fjnpugvw/oaxwfcJPxfCqhA==","signatures":[{"sig":"MEUCIQDooqAuGVVKVhUeEhRacdAkmR7LnqVkNfUHtF++XEClIwIgC+v68YO1pVBLMK5U6msRGP08KhLWIxU7Y/i9TLBEXDw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":12816492},"main":"./dist/email-editor.umd.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/email-editor.es.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/email-editor.es.js","require":"./dist/email-editor.umd.cjs"},"./style.css":"./dist/style.css"},"gitHead":"4fda8885af44d09b955a4147f7c4b34e99d351cb","scripts":{"dev":"vite","build":"vite build","preview":"vite preview","build:lib":"vite build --config vite.lib.config.ts","type-check":"tsc --noEmit"},"_npmUser":{"name":"codematic","email":"developers@codematic.io"},"_npmVersion":"10.9.2","description":"A powerful rich-text email editor with HTML code view, template variables, image management, and CSS inlining","directories":{},"_nodeVersion":"23.6.1","dependencies":{"antd":"^5.22.4","juice":"^11.0.0","sonner":"^1.7.4","liquidjs":"^10.21.0","currency-codes":"^2.1.0","@monaco-editor/react":"^4.6.0","react-simple-wysiwyg":"^3.1.2"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.2.1","postcss":"^8.5.3","typescript":"^5.7.3","tailwindcss":"^3.4.17","@types/react":"^18.3.18","autoprefixer":"^10.4.21","vite-plugin-dts":"^4.5.3","@types/react-dom":"^18.3.5","@vitejs/plugin-react":"^4.3.4"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cdp-editor_3.0.0_1772772233873_0.14199314717602096","host":"s3://npm-registry-packages-npm-production"}},"3.0.1":{"name":"@codematic.io/cdp-editor","version":"3.0.1","keywords":["React","Rich Text Editor","TailwindCSS","Ant Design","WYSIWYG","Component","Customizable","openCDP","Editor","JavaScript","TypeScript","UI","Modern","Integration","Plugin","Formatting","Toolbar","Content","Library","Open Source"],"author":{"name":"codematic.io"},"_id":"@codematic.io/cdp-editor@3.0.1","maintainers":[{"name":"ibukun-oluwa","email":"ibukun@codematic.io"},{"name":"codematic","email":"developers@codematic.io"}],"homepage":"https://cdp-editor-064.web.app","dist":{"shasum":"ff50c6fcbc7a72adc6d1201a4467b6494e88fe51","tarball":"https://registry.npmjs.org/@codematic.io/cdp-editor/-/cdp-editor-3.0.1.tgz","fileCount":26,"integrity":"sha512-6trtS3mporZ39t1Y50MA30d0z6bJSBrCkSMCp31AhNt9LS7M30SRf8aWMwzUz9RZ29kxgD1u/XG74gtyUTI8kA==","signatures":[{"sig":"MEQCIAeJnx7IkG54t1x6c8+DtotUHh2454G/ufYYpGy4KHXTAiAiAtngDk8oj+EK37QHDS3p/7WJ2q9sDj6sDOWZL2fUIQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":12821565},"main":"./dist/email-editor.umd.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/email-editor.es.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/email-editor.es.js","require":"./dist/email-editor.umd.cjs"},"./style.css":"./dist/style.css"},"gitHead":"3f59dd6d62fc7f55ebf567ce8faca2e6aa3ad909","scripts":{"dev":"vite","build":"vite build","preview":"vite preview","build:lib":"vite build --config vite.lib.config.ts","type-check":"tsc --noEmit","build:deploy":"npm run build && firebase deploy"},"_npmUser":{"name":"codematic","email":"developers@codematic.io"},"_npmVersion":"10.9.2","description":"A powerful rich-text email editor with HTML code view, template variables, image management, and CSS inlining","directories":{},"_nodeVersion":"23.6.1","dependencies":{"antd":"^5.22.4","juice":"^11.0.0","sonner":"^1.7.4","liquidjs":"^10.21.0","currency-codes":"^2.1.0","@monaco-editor/react":"^4.6.0","react-simple-wysiwyg":"^3.1.2"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.2.1","postcss":"^8.5.3","typescript":"^5.7.3","tailwindcss":"^3.4.17","@types/react":"^18.3.18","autoprefixer":"^10.4.21","vite-plugin-dts":"^4.5.3","@types/react-dom":"^18.3.5","@vitejs/plugin-react":"^4.3.4"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cdp-editor_3.0.1_1772806631764_0.4545296100507532","host":"s3://npm-registry-packages-npm-production"}},"3.2.0":{"name":"@codematic.io/cdp-editor","version":"3.2.0","keywords":["React","Rich Text Editor","TailwindCSS","Ant Design","WYSIWYG","Component","Customizable","openCDP","Editor","JavaScript","TypeScript","UI","Modern","Integration","Plugin","Formatting","Toolbar","Content","Library","Open Source"],"author":{"name":"codematic.io"},"_id":"@codematic.io/cdp-editor@3.2.0","maintainers":[{"name":"ibukun-oluwa","email":"ibukun@codematic.io"},{"name":"codematic","email":"developers@codematic.io"}],"homepage":"https://cdp-editor-064.web.app","dist":{"shasum":"e38ec412a90ba525986ba7e6ceeba2db8f3d81c5","tarball":"https://registry.npmjs.org/@codematic.io/cdp-editor/-/cdp-editor-3.2.0.tgz","fileCount":26,"integrity":"sha512-bMQmPIZC8F2N0OQVQHScJDfsgJ/pK0pLzLBaYHDHDgJ/XxpljVixamA6CYdjK6YafcqHp656ZyIL0ll9ahFI1A==","signatures":[{"sig":"MEQCIBREmosLESLFWOjhvoTxZZvWmx/v7IgEih7yv2dEyk0/AiBf9MFsxUEthM65nqFTCDjAboR3tEHtAQ+V66fQm46gNQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":12828119},"main":"./dist/email-editor.umd.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/email-editor.es.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/email-editor.es.js","require":"./dist/email-editor.umd.cjs"},"./style.css":"./dist/style.css"},"gitHead":"9b1f04d1454363a14a75e07ba23a9bab07dc200d","scripts":{"dev":"vite","build":"vite build","preview":"vite preview","build:lib":"vite build --config vite.lib.config.ts","type-check":"tsc --noEmit","build:deploy":"npm run build && firebase deploy"},"_npmUser":{"name":"codematic","email":"developers@codematic.io"},"_npmVersion":"10.9.2","description":"A powerful rich-text email editor with HTML code view, template variables, image management, and CSS inlining","directories":{},"_nodeVersion":"23.6.1","dependencies":{"antd":"^5.22.4","juice":"^11.0.0","sonner":"^1.7.4","liquidjs":"^10.21.0","currency-codes":"^2.1.0","@monaco-editor/react":"^4.6.0","react-simple-wysiwyg":"^3.1.2","@codematic.io/cdp-editor":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.2.1","postcss":"^8.5.3","typescript":"^5.7.3","tailwindcss":"^3.4.17","@types/react":"^18.3.18","autoprefixer":"^10.4.21","vite-plugin-dts":"^4.5.3","@types/react-dom":"^18.3.5","@vitejs/plugin-react":"^4.3.4"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cdp-editor_3.2.0_1773052912897_0.5719534838100506","host":"s3://npm-registry-packages-npm-production"}},"4.0.0":{"name":"@codematic.io/cdp-editor","version":"4.0.0","keywords":["React","Rich Text Editor","TailwindCSS","Ant Design","WYSIWYG","Component","Customizable","openCDP","Editor","JavaScript","TypeScript","UI","Modern","Integration","Plugin","Formatting","Toolbar","Content","Library","Open Source"],"author":{"name":"codematic.io"},"_id":"@codematic.io/cdp-editor@4.0.0","maintainers":[{"name":"ibukun-oluwa","email":"ibukun@codematic.io"},{"name":"codematic","email":"developers@codematic.io"}],"homepage":"https://cdp-editor-064.web.app","dist":{"shasum":"b7e0ef12385c3559f1ae82b37f0d5164d7e24a28","tarball":"https://registry.npmjs.org/@codematic.io/cdp-editor/-/cdp-editor-4.0.0.tgz","fileCount":22,"integrity":"sha512-nznkIBVA2x6wiZ6mIg6L3ezFMNWtcT2PYTWt74tVuZglSRhetX4Bm6wAtsMemfKBtvE1s3jt80Zjj4itgOYaxA==","signatures":[{"sig":"MEUCIG63FtsL749nWQWRo72Vl18fw0LM4WK2hA5Tj7KMyAosAiEA8XLDeRBqS4iktz7TwbOePxptePC+Yrsp7RcP/51v0zI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":408502},"main":"./dist/email-editor.umd.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/email-editor.es.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/email-editor.es.js","require":"./dist/email-editor.umd.cjs"},"./style.css":"./dist/style.css"},"gitHead":"258bd08d5b6de58073b1eb19bf010ba8e4aa1c70","scripts":{"dev":"vite","build":"vite build","preview":"vite preview","build:lib":"vite build --config vite.lib.config.ts","type-check":"tsc --noEmit","build:deploy":"npm run build && firebase deploy"},"_npmUser":{"name":"codematic","email":"developers@codematic.io"},"_npmVersion":"10.9.2","description":"A powerful rich-text email editor with HTML code view, template variables, image management, and CSS inlining","directories":{},"_nodeVersion":"23.6.1","_hasShrinkwrap":false,"devDependencies":{"vite":"^6.2.1","postcss":"^8.5.3","typescript":"^5.7.3","tailwindcss":"^3.4.17","@types/react":"^18.3.18","autoprefixer":"^10.4.21","vite-plugin-dts":"^4.5.3","@types/react-dom":"^18.3.5","@vitejs/plugin-react":"^4.3.4"},"peerDependencies":{"antd":">=5.0.0","juice":">=10.0.0","react":">=18.0.0","sonner":">=1.0.0","liquidjs":">=10.0.0","react-dom":">=18.0.0","currency-codes":">=2.0.0","@monaco-editor/react":">=4.0.0","react-simple-wysiwyg":">=3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cdp-editor_4.0.0_1773058931374_0.2728712798096835","host":"s3://npm-registry-packages-npm-production"}},"4.0.1":{"name":"@codematic.io/cdp-editor","version":"4.0.1","keywords":["React","Rich Text Editor","TailwindCSS","Ant Design","WYSIWYG","Component","Customizable","openCDP","Editor","JavaScript","TypeScript","UI","Modern","Integration","Plugin","Formatting","Toolbar","Content","Library","Open Source"],"author":{"name":"codematic.io"},"_id":"@codematic.io/cdp-editor@4.0.1","maintainers":[{"name":"ibukun-oluwa","email":"ibukun@codematic.io"},{"name":"codematic","email":"developers@codematic.io"}],"homepage":"https://cdp-editor-064.web.app","dist":{"shasum":"5c4641a0bdd4be92bd1ad269b9bcddd3f617ded7","tarball":"https://registry.npmjs.org/@codematic.io/cdp-editor/-/cdp-editor-4.0.1.tgz","fileCount":22,"integrity":"sha512-TNXGRSuyjWHGwKpV08aiwYI68J3UFygou8oxgXsfKtRNNeVMEur36/NkMegztbbWO7qAtSXKRYolp9JeNacFkQ==","signatures":[{"sig":"MEQCIB75UvYcxro8sFtCU4eBhcA/Qb0ZcIb3U9Bi30ZyIYHjAiBFTkbQi/gkVNqXB6lzR224hP41Mh1hT2MdBJcviw2MKA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":442526},"main":"./dist/email-editor.umd.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/email-editor.es.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/email-editor.es.js","require":"./dist/email-editor.umd.cjs"},"./style.css":"./dist/style.css"},"gitHead":"258bd08d5b6de58073b1eb19bf010ba8e4aa1c70","scripts":{"dev":"vite","build":"vite build","preview":"vite preview","build:lib":"vite build --config vite.lib.config.ts","type-check":"tsc --noEmit","build:deploy":"npm run build && firebase deploy"},"_npmUser":{"name":"codematic","email":"developers@codematic.io"},"_npmVersion":"10.9.2","description":"A powerful rich-text email editor with HTML code view, template variables, image management, and CSS inlining","directories":{},"_nodeVersion":"23.6.1","_hasShrinkwrap":false,"devDependencies":{"vite":"^6.2.1","postcss":"^8.5.3","typescript":"^5.7.3","tailwindcss":"^3.4.17","@types/react":"^18.3.18","autoprefixer":"^10.4.21","vite-plugin-dts":"^4.5.3","@types/react-dom":"^18.3.5","@vitejs/plugin-react":"^4.3.4"},"peerDependencies":{"antd":">=5.0.0","juice":">=10.0.0","react":">=18.0.0","sonner":">=1.0.0","liquidjs":">=10.0.0","react-dom":">=18.0.0","currency-codes":">=2.0.0","@monaco-editor/react":">=4.0.0","react-simple-wysiwyg":">=3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cdp-editor_4.0.1_1773064951744_0.7975083442924606","host":"s3://npm-registry-packages-npm-production"}},"4.0.2":{"name":"@codematic.io/cdp-editor","version":"4.0.2","keywords":["React","Rich Text Editor","TailwindCSS","Ant Design","WYSIWYG","Component","Customizable","openCDP","Editor","JavaScript","TypeScript","UI","Modern","Integration","Plugin","Formatting","Toolbar","Content","Library","Open Source"],"author":{"name":"codematic.io"},"_id":"@codematic.io/cdp-editor@4.0.2","maintainers":[{"name":"ibukun-oluwa","email":"ibukun@codematic.io"},{"name":"codematic","email":"developers@codematic.io"}],"homepage":"https://cdp-editor-064.web.app","dist":{"shasum":"7e981d26ebe0f2e7e034934a186ab97f7ac9e41b","tarball":"https://registry.npmjs.org/@codematic.io/cdp-editor/-/cdp-editor-4.0.2.tgz","fileCount":23,"integrity":"sha512-dkPbwI02AKZ77h6X/aJDWuuYRBYwEid2PD9O+UdM/dcFxvjdGNfrmD8T8OPyRHKVH3MjabJQEyuJaC9ZQPyqDw==","signatures":[{"sig":"MEUCIF7JuaHGEhybp1RR/YYN4LUNUEiCZUGktxsERazbDNmHAiEA1wcEz5F81c0g+A+o57gVFRX2b25oYB1crSJvxjvVU5s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":451521},"main":"./dist/email-editor.umd.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/email-editor.es.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/email-editor.es.js","require":"./dist/email-editor.umd.cjs"},"./style.css":"./dist/style.css"},"gitHead":"4eb79f891ab44d07533cecf5ce87877ba33c0eef","scripts":{"dev":"vite","build":"vite build","preview":"vite preview","build:lib":"vite build --config vite.lib.config.ts","type-check":"tsc --noEmit","build:deploy":"npm run build && firebase deploy"},"_npmUser":{"name":"codematic","email":"developers@codematic.io"},"_npmVersion":"10.9.2","description":"A powerful rich-text email editor with HTML code view, template variables, image management, and CSS inlining","directories":{},"_nodeVersion":"23.6.1","_hasShrinkwrap":false,"devDependencies":{"vite":"^6.2.1","postcss":"^8.5.3","typescript":"^5.7.3","tailwindcss":"^3.4.17","@types/react":"^18.3.18","autoprefixer":"^10.4.21","vite-plugin-dts":"^4.5.3","@types/react-dom":"^18.3.5","@vitejs/plugin-react":"^4.3.4"},"peerDependencies":{"antd":">=5.0.0","juice":">=10.0.0","react":">=18.0.0","sonner":">=1.0.0","liquidjs":">=10.0.0","react-dom":">=18.0.0","currency-codes":">=2.0.0","@monaco-editor/react":">=4.0.0","react-simple-wysiwyg":">=3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cdp-editor_4.0.2_1773246404808_0.29519116684614977","host":"s3://npm-registry-packages-npm-production"}},"4.1.0":{"name":"@codematic.io/cdp-editor","version":"4.1.0","keywords":["React","Rich Text Editor","TailwindCSS","Ant Design","WYSIWYG","Component","Customizable","openCDP","Editor","JavaScript","TypeScript","UI","Modern","Integration","Plugin","Formatting","Toolbar","Content","Library","Open Source"],"author":{"name":"codematic.io"},"_id":"@codematic.io/cdp-editor@4.1.0","maintainers":[{"name":"ibukun-oluwa","email":"ibukun@codematic.io"},{"name":"codematic","email":"developers@codematic.io"}],"homepage":"https://cdp-editor-064.web.app","bugs":{"url":"https://github.com/code-matic/openCDP-editor/issues"},"dist":{"shasum":"70e1385fafd91a866c180c30e44416d8c8cdd0c0","tarball":"https://registry.npmjs.org/@codematic.io/cdp-editor/-/cdp-editor-4.1.0.tgz","fileCount":23,"integrity":"sha512-9Hx3wr11QauCp+G4pFrzBye9loivnVJ8Poxpx9lO0lMkZFrJ/LvDf2rEpwrHlayLdoGXOzLXI/k8cJt0cWHRkA==","signatures":[{"sig":"MEUCIBigDRRM+ZrbJL/GbTc0cEtEw3CtSFbHS6S7QbVBEG1AAiEA4Q/y3OJNkMEazfMqMFx16/WAqWLmoIYJSQhN67JYVRg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":502575},"main":"./dist/email-editor.umd.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/email-editor.es.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/email-editor.es.js","require":"./dist/email-editor.umd.cjs"},"./style.css":"./dist/style.css"},"gitHead":"a78c61b295a708e258c63506bfc70f9069fcdff3","scripts":{"dev":"vite","build":"vite build","preview":"vite preview","build:lib":"vite build --config vite.lib.config.ts","type-check":"tsc --noEmit","build:deploy":"npm run build && firebase deploy"},"_npmUser":{"name":"codematic","email":"developers@codematic.io"},"repository":{"url":"git+https://github.com/code-matic/openCDP-editor.git","type":"git"},"_npmVersion":"10.9.2","description":"A powerful rich-text email editor with HTML code view, template variables, image management, and CSS inlining","directories":{},"_nodeVersion":"23.6.1","_hasShrinkwrap":false,"devDependencies":{"vite":"^6.2.1","postcss":"^8.5.3","typescript":"^5.7.3","tailwindcss":"^3.4.17","@types/react":"^18.3.18","autoprefixer":"^10.4.21","vite-plugin-dts":"^4.5.3","@types/react-dom":"^18.3.5","@vitejs/plugin-react":"^4.3.4"},"peerDependencies":{"antd":">=5.0.0","juice":">=10.0.0","react":">=18.0.0","sonner":">=1.0.0","liquidjs":">=10.0.0","react-dom":">=18.0.0","currency-codes":">=2.0.0","@monaco-editor/react":">=4.0.0","react-simple-wysiwyg":">=3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cdp-editor_4.1.0_1777459947099_0.5925194976974066","host":"s3://npm-registry-packages-npm-production"}},"4.1.1":{"name":"@codematic.io/cdp-editor","version":"4.1.1","keywords":["React","Rich Text Editor","TailwindCSS","Ant Design","WYSIWYG","Component","Customizable","openCDP","Editor","JavaScript","TypeScript","UI","Modern","Integration","Plugin","Formatting","Toolbar","Content","Library","Open Source"],"author":{"name":"codematic.io"},"_id":"@codematic.io/cdp-editor@4.1.1","maintainers":[{"name":"ibukun-oluwa","email":"ibukun@codematic.io"},{"name":"codematic","email":"developers@codematic.io"}],"homepage":"https://cdp-editor-064.web.app","bugs":{"url":"https://github.com/code-matic/openCDP-editor/issues"},"dist":{"shasum":"76e84e86b215e7529efa5f431ff03d58ece065ce","tarball":"https://registry.npmjs.org/@codematic.io/cdp-editor/-/cdp-editor-4.1.1.tgz","fileCount":23,"integrity":"sha512-9gZehubI3cgESvAmGPKiV8ugtuJ7R1tBIV+1CDpzsEmEclSsXpKAYcY39PvdbCLfuELGCHW0eOnJrcjx05tY+A==","signatures":[{"sig":"MEUCIDCwKDSy3S1LHlg/Sos6sjoj4OTQXZcGn9zrTnEzaIZbAiEAr7xJoIj4W5+bxob9fljQesQHR4XKWDzX0hwpWv85Lhw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":502575},"main":"./dist/email-editor.umd.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/email-editor.es.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/email-editor.es.js","require":"./dist/email-editor.umd.cjs"},"./style.css":"./dist/style.css"},"gitHead":"7922a7fb8fde3eae254b66f2191d013309b1cab7","scripts":{"dev":"vite","build":"vite build","preview":"vite preview","build:lib":"vite build --config vite.lib.config.ts","type-check":"tsc --noEmit","build:deploy":"npm run build && firebase deploy"},"_npmUser":{"name":"codematic","email":"developers@codematic.io"},"repository":{"url":"git+https://github.com/code-matic/openCDP-editor.git","type":"git"},"_npmVersion":"10.9.2","description":"A powerful rich-text email editor with HTML code view, template variables, image management, and CSS inlining","directories":{},"_nodeVersion":"23.6.1","_hasShrinkwrap":false,"devDependencies":{"vite":"^6.2.1","postcss":"^8.5.3","typescript":"^5.7.3","tailwindcss":"^3.4.17","@types/react":"^18.3.18","autoprefixer":"^10.4.21","vite-plugin-dts":"^4.5.3","@types/react-dom":"^18.3.5","@vitejs/plugin-react":"^4.3.4"},"peerDependencies":{"antd":">=5.0.0","juice":">=10.0.0","react":">=18.0.0","sonner":">=1.0.0","liquidjs":">=10.0.0","react-dom":">=18.0.0","currency-codes":">=2.0.0","@monaco-editor/react":">=4.0.0","react-simple-wysiwyg":">=3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cdp-editor_4.1.1_1778233337164_0.3681339472029239","host":"s3://npm-registry-packages-npm-production"}},"4.1.2":{"name":"@codematic.io/cdp-editor","version":"4.1.2","keywords":["React","Rich Text Editor","TailwindCSS","Ant Design","WYSIWYG","Component","Customizable","openCDP","Editor","JavaScript","TypeScript","UI","Modern","Integration","Plugin","Formatting","Toolbar","Content","Library","Open Source"],"author":{"name":"codematic.io"},"_id":"@codematic.io/cdp-editor@4.1.2","maintainers":[{"name":"ibukun-oluwa","email":"ibukun@codematic.io"},{"name":"codematic","email":"developers@codematic.io"}],"homepage":"https://cdp-editor-064.web.app","bugs":{"url":"https://github.com/code-matic/openCDP-editor/issues"},"dist":{"shasum":"a2153520db16697a001472c883939b8c8a1b6ddf","tarball":"https://registry.npmjs.org/@codematic.io/cdp-editor/-/cdp-editor-4.1.2.tgz","fileCount":23,"integrity":"sha512-gEQGCCje5WFaUwcXxQb6NrBu1gPwc1dN16lAmCP0CqvkgK/Fx1phk9yLnrSFw8TwPcr3KjPWPy3huSvOJsx06Q==","signatures":[{"sig":"MEUCIFcbMzLmyarcodANF9HmWeTdCBrkILMWs5tA1vvWg6/UAiEAsgRkPgHuuqXrxcXq6ThadQ82EUbX/7MnDli3xOxx9v0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":498739},"main":"./dist/email-editor.umd.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/email-editor.es.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/email-editor.es.js","require":"./dist/email-editor.umd.cjs"},"./style.css":"./dist/style.css"},"gitHead":"b7905de0dad1acc2a72b04ba1b9550e2fd05c509","scripts":{"dev":"vite","build":"vite build","preview":"vite preview","build:lib":"vite build --config vite.lib.config.ts","type-check":"tsc --noEmit","build:deploy":"npm run build && firebase deploy"},"_npmUser":{"name":"codematic","email":"developers@codematic.io"},"repository":{"url":"git+https://github.com/code-matic/openCDP-editor.git","type":"git"},"_npmVersion":"10.9.2","description":"A powerful rich-text email editor with HTML code view, template variables, image management, and CSS inlining","directories":{},"_nodeVersion":"23.6.1","_hasShrinkwrap":false,"devDependencies":{"vite":"^6.2.1","postcss":"^8.5.3","typescript":"^5.7.3","tailwindcss":"^3.4.17","@types/react":"^18.3.18","autoprefixer":"^10.4.21","vite-plugin-dts":"^4.5.3","@types/react-dom":"^18.3.5","@vitejs/plugin-react":"^4.3.4"},"peerDependencies":{"antd":">=5.0.0","juice":">=10.0.0","react":">=18.0.0","sonner":">=1.0.0","liquidjs":">=10.0.0","react-dom":">=18.0.0","currency-codes":">=2.0.0","@monaco-editor/react":">=4.0.0","react-simple-wysiwyg":">=3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cdp-editor_4.1.2_1778233565363_0.4524837268046775","host":"s3://npm-registry-packages-npm-production"}},"4.2.1":{"name":"@codematic.io/cdp-editor","version":"4.2.1","keywords":["React","Rich Text Editor","TailwindCSS","Ant Design","WYSIWYG","Component","Customizable","openCDP","Editor","JavaScript","TypeScript","UI","Modern","Integration","Plugin","Formatting","Toolbar","Content","Library","Open Source"],"author":{"name":"codematic.io"},"_id":"@codematic.io/cdp-editor@4.2.1","maintainers":[{"name":"ibukun-oluwa","email":"ibukun@codematic.io"},{"name":"codematic","email":"developers@codematic.io"}],"homepage":"https://cdp-editor-064.web.app","bugs":{"url":"https://github.com/code-matic/openCDP-editor/issues"},"dist":{"shasum":"72873d17366329d28aca6ccf8c4b3cbb93a03b39","tarball":"https://registry.npmjs.org/@codematic.io/cdp-editor/-/cdp-editor-4.2.1.tgz","fileCount":24,"integrity":"sha512-i+2rha9ZWTdY+V4mNW2CflhJEiQq95BHb9S5wGuth9IdIrnaIwj2qVOGjh5447YIPHJNCSm1ufOgQRHvjXv+vA==","signatures":[{"sig":"MEUCIQCnNCI0W0QKoT7QF9is0pq0CM+9F/Y2X21JTnQtxHhGxAIgQOaAM8ML9PYNL6y/k+Ye0mmshG4Q87odO7mmvr/I7RU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":552010},"main":"./dist/email-editor.umd.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/email-editor.es.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/email-editor.es.js","require":"./dist/email-editor.umd.cjs"},"./style.css":"./dist/style.css"},"gitHead":"cb0c4c8791e51ca1fcdaff67f35ad6a9e129718f","scripts":{"dev":"vite","build":"vite build","preview":"vite preview","build:lib":"vite build --config vite.lib.config.ts","type-check":"tsc --noEmit","build:deploy":"npm run build && firebase deploy"},"_npmUser":{"name":"codematic","email":"developers@codematic.io"},"repository":{"url":"git+https://github.com/code-matic/openCDP-editor.git","type":"git"},"_npmVersion":"10.9.2","description":"A powerful rich-text email editor with HTML code view, template variables, image management, and CSS inlining","directories":{},"_nodeVersion":"23.6.1","_hasShrinkwrap":false,"devDependencies":{"vite":"^6.2.1","postcss":"^8.5.3","typescript":"^5.7.3","tailwindcss":"^3.4.17","@types/react":"^18.3.18","autoprefixer":"^10.4.21","vite-plugin-dts":"^4.5.3","@types/react-dom":"^18.3.5","@vitejs/plugin-react":"^4.3.4"},"peerDependencies":{"antd":">=5.0.0","juice":">=10.0.0","react":">=18.0.0","sonner":">=1.0.0","liquidjs":">=10.0.0","react-dom":">=18.0.0","currency-codes":">=2.0.0","@monaco-editor/react":">=4.0.0","react-simple-wysiwyg":">=3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cdp-editor_4.2.1_1778698944568_0.3854106376108102","host":"s3://npm-registry-packages-npm-production"}},"4.3.0":{"name":"@codematic.io/cdp-editor","version":"4.3.0","keywords":["React","Rich Text Editor","TailwindCSS","Ant Design","WYSIWYG","Component","Customizable","openCDP","Editor","JavaScript","TypeScript","UI","Modern","Integration","Plugin","Formatting","Toolbar","Content","Library","Open Source"],"author":{"name":"codematic.io"},"_id":"@codematic.io/cdp-editor@4.3.0","maintainers":[{"name":"ibukun-oluwa","email":"ibukun@codematic.io"},{"name":"codematic","email":"developers@codematic.io"}],"homepage":"https://cdp-editor-064.web.app","bugs":{"url":"https://github.com/code-matic/openCDP-editor/issues"},"dist":{"shasum":"57df3663544827bbf5f7163084c17edd1fd445eb","tarball":"https://registry.npmjs.org/@codematic.io/cdp-editor/-/cdp-editor-4.3.0.tgz","fileCount":24,"integrity":"sha512-+aqfmhbUj7O/z8Gs/18EEqhwHDuCwXXGgYI2wMuwSB6SSCSuN8FvzuxJDuXZ6fWy1HkGnzm3l9g38fxUntd43A==","signatures":[{"sig":"MEUCIQDTGK3Ds5zoBwZTpecUkaG3jJzZd5u4ptxVs5XYbGsNtgIgVThDaNFm1DPS8eT2xn01tdhQC/O0HL5OoY7H/3nYei0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":605123},"main":"./dist/email-editor.umd.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/email-editor.es.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/email-editor.es.js","require":"./dist/email-editor.umd.cjs"},"./style.css":"./dist/style.css"},"gitHead":"fc4f40381441f87960e742c5585d8b76939d9539","scripts":{"dev":"vite","build":"vite build","preview":"vite preview","build:lib":"vite build --config vite.lib.config.ts","type-check":"tsc --noEmit","build:deploy":"npm run build && firebase deploy"},"_npmUser":{"name":"codematic","email":"developers@codematic.io"},"repository":{"url":"git+https://github.com/code-matic/openCDP-editor.git","type":"git"},"_npmVersion":"10.9.2","description":"A powerful rich-text email editor with HTML code view, template variables, image management, and CSS inlining","directories":{},"_nodeVersion":"23.6.1","_hasShrinkwrap":false,"devDependencies":{"vite":"^6.2.1","postcss":"^8.5.3","typescript":"^5.7.3","tailwindcss":"^3.4.17","@types/react":"^18.3.18","autoprefixer":"^10.4.21","vite-plugin-dts":"^4.5.3","@types/react-dom":"^18.3.5","@vitejs/plugin-react":"^4.3.4"},"peerDependencies":{"antd":">=5.0.0","juice":">=10.0.0","react":">=18.0.0","sonner":">=1.0.0","liquidjs":">=10.0.0","react-dom":">=18.0.0","currency-codes":">=2.0.0","@monaco-editor/react":">=4.0.0","react-simple-wysiwyg":">=3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cdp-editor_4.3.0_1780424644099_0.267321638449874","host":"s3://npm-registry-packages-npm-production"}},"4.3.1":{"name":"@codematic.io/cdp-editor","version":"4.3.1","keywords":["React","Rich Text Editor","TailwindCSS","Ant Design","WYSIWYG","Component","Customizable","openCDP","Editor","JavaScript","TypeScript","UI","Modern","Integration","Plugin","Formatting","Toolbar","Content","Library","Open Source"],"author":{"name":"codematic.io"},"_id":"@codematic.io/cdp-editor@4.3.1","maintainers":[{"name":"ibukun-oluwa","email":"ibukun@codematic.io"},{"name":"codematic","email":"developers@codematic.io"}],"homepage":"https://cdp-editor-064.web.app","bugs":{"url":"https://github.com/code-matic/openCDP-editor/issues"},"dist":{"shasum":"d87614fedb42929913742a8343f0d82932a3d54e","tarball":"https://registry.npmjs.org/@codematic.io/cdp-editor/-/cdp-editor-4.3.1.tgz","fileCount":24,"integrity":"sha512-elF8MWj3B7jwvGvFzcusAsGbfXbOEvSTa5RMmHfZPFA5VgTtavWyhOuvt9q/GscRHp/qgaROv8QoIZN5AEOdqw==","signatures":[{"sig":"MEUCIQCTtBkLV6DzYjUDeq2CpvLjQne+qioz+bHO3C0v4C3u2gIgLB8j0uHcfakafRWVbn/qNNwaOQq8S+ijmac6v+eJazg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":616909},"main":"./dist/email-editor.umd.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/email-editor.es.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/email-editor.es.js","require":"./dist/email-editor.umd.cjs"},"./style.css":"./dist/style.css"},"gitHead":"fc4f40381441f87960e742c5585d8b76939d9539","scripts":{"dev":"vite","build":"vite build","preview":"vite preview","build:lib":"vite build --config vite.lib.config.ts","type-check":"tsc --noEmit","build:deploy":"npm run build && firebase deploy"},"_npmUser":{"name":"codematic","email":"developers@codematic.io"},"repository":{"url":"git+https://github.com/code-matic/openCDP-editor.git","type":"git"},"_npmVersion":"10.9.2","description":"A powerful rich-text email editor with HTML code view, template variables, image management, and CSS inlining","directories":{},"_nodeVersion":"23.6.1","_hasShrinkwrap":false,"devDependencies":{"vite":"^6.2.1","postcss":"^8.5.3","typescript":"^5.7.3","tailwindcss":"^3.4.17","@types/react":"^18.3.18","autoprefixer":"^10.4.21","vite-plugin-dts":"^4.5.3","@types/react-dom":"^18.3.5","@vitejs/plugin-react":"^4.3.4"},"peerDependencies":{"antd":">=5.0.0","juice":">=10.0.0","react":">=18.0.0","sonner":">=1.0.0","liquidjs":">=10.0.0","react-dom":">=18.0.0","currency-codes":">=2.0.0","@monaco-editor/react":">=4.0.0","react-simple-wysiwyg":">=3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cdp-editor_4.3.1_1780425338129_0.7264836955316556","host":"s3://npm-registry-packages-npm-production"}},"4.4.0":{"name":"@codematic.io/cdp-editor","version":"4.4.0","description":"A powerful rich-text email editor with HTML code view, template variables, image management, and CSS inlining","type":"module","main":"./dist/email-editor.umd.cjs","module":"./dist/email-editor.es.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/email-editor.es.js","require":"./dist/email-editor.umd.cjs"},"./style.css":"./dist/style.css"},"scripts":{"dev":"vite","build":"vite build","build:deploy":"npm run build && firebase deploy","build:lib":"vite build --config vite.lib.config.ts","preview":"vite preview","type-check":"tsc --noEmit"},"homepage":"https://cdp-editor-064.web.app","repository":{"type":"git","url":"git+https://github.com/code-matic/openCDP-editor.git"},"keywords":["React","Rich Text Editor","TailwindCSS","Ant Design","WYSIWYG","Component","Customizable","openCDP","Editor","JavaScript","TypeScript","UI","Modern","Integration","Plugin","Formatting","Toolbar","Content","Library","Open Source"],"author":{"name":"codematic.io"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0","@monaco-editor/react":">=4.0.0","antd":">=5.0.0","currency-codes":">=2.0.0","juice":">=10.0.0","liquidjs":">=10.0.0","react-simple-wysiwyg":">=3.0.0","sonner":">=1.0.0"},"devDependencies":{"@types/react":"^18.3.18","@types/react-dom":"^18.3.5","@vitejs/plugin-react":"^4.3.4","autoprefixer":"^10.4.21","postcss":"^8.5.3","tailwindcss":"^3.4.17","typescript":"^5.7.3","vite":"^6.2.1","vite-plugin-dts":"^4.5.3"},"_id":"@codematic.io/cdp-editor@4.4.0","gitHead":"0dabe57123c0af7cbfbf05c0d07e2a5ef7c7ee17","bugs":{"url":"https://github.com/code-matic/openCDP-editor/issues"},"_nodeVersion":"23.6.1","_npmVersion":"10.9.2","dist":{"integrity":"sha512-ZRYOTPquU70Y9TqeLzutK/pllKNumBu8qzQnwM5l9oEqIWMSAMpoHr4XUMDlVRf3g1s0R+CQnngXN0gDTIppiw==","shasum":"6ebf12e5bbb5f11baa2ac82c47f7237593a8e4b6","tarball":"https://registry.npmjs.org/@codematic.io/cdp-editor/-/cdp-editor-4.4.0.tgz","fileCount":24,"unpackedSize":625837,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCo1M0Zk3rHt2LMT+8nOJKG5zhra+nrCArH69kxJfO7jQIgV1D4TJQUBSqhK1Yw3u1u9cOb+5VEVQiN2H7qxGksF4k="}]},"_npmUser":{"name":"codematic","email":"developers@codematic.io"},"directories":{},"maintainers":[{"name":"ibukun-oluwa","email":"ibukun@codematic.io"},{"name":"codematic","email":"developers@codematic.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/cdp-editor_4.4.0_1784802417932_0.5779157589767021"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-21T17:23:06.174Z","modified":"2026-07-23T10:26:58.836Z","2.0.0":"2026-01-21T17:23:06.415Z","2.0.1":"2026-01-21T19:12:55.976Z","2.1.0":"2026-01-24T18:20:05.880Z","2.1.1":"2026-01-24T22:24:37.825Z","3.0.0":"2026-03-06T04:43:54.224Z","3.0.1":"2026-03-06T14:17:12.078Z","3.2.0":"2026-03-09T10:41:53.180Z","4.0.0":"2026-03-09T12:22:11.519Z","4.0.1":"2026-03-09T14:02:31.915Z","4.0.2":"2026-03-11T16:26:45.019Z","4.1.0":"2026-04-29T10:52:27.247Z","4.1.1":"2026-05-08T09:42:17.359Z","4.1.2":"2026-05-08T09:46:05.518Z","4.2.1":"2026-05-13T19:02:24.755Z","4.3.0":"2026-06-02T18:24:04.358Z","4.3.1":"2026-06-02T18:35:38.285Z","4.4.0":"2026-07-23T10:26:58.101Z"},"bugs":{"url":"https://github.com/code-matic/openCDP-editor/issues"},"author":{"name":"codematic.io"},"homepage":"https://cdp-editor-064.web.app","keywords":["React","Rich Text Editor","TailwindCSS","Ant Design","WYSIWYG","Component","Customizable","openCDP","Editor","JavaScript","TypeScript","UI","Modern","Integration","Plugin","Formatting","Toolbar","Content","Library","Open Source"],"repository":{"type":"git","url":"git+https://github.com/code-matic/openCDP-editor.git"},"description":"A powerful rich-text email editor with HTML code view, template variables, image management, and CSS inlining","maintainers":[{"name":"ibukun-oluwa","email":"ibukun@codematic.io"},{"name":"codematic","email":"developers@codematic.io"}],"readme":"# @codematic.io/cdp-editor\r\n\r\nA powerful, fully-featured rich text editor built for HTML emails. Drop it into any React app and get WYSIWYG editing, a raw HTML/Monaco code view, image management, CSS inlining, mobile preview, and a flexible cursor-insert API — all in one self-contained component.\r\n\r\n---\r\n\r\n## Features\r\n\r\n- **WYSIWYG editing** — bold, italic, underline, strikethrough, ordered/unordered lists, headings, and text alignment\r\n- **Font & colour controls** — font family picker, text colour, and highlight colour via a full colour picker\r\n- **Image management** — insert images from your own library, upload new files, replace, resize, align, or delete images inline\r\n- **Button builder** — insert styled call-to-action buttons with custom text, URL, colour, border radius, and padding\r\n- **Raw HTML editor** — toggle to a Monaco Editor (VS Code-grade) code view; pass full HTML as `value` to view and edit the complete document (DOCTYPE, head, body)\r\n- **CSS inlining** — one-click inlining of `<style>` blocks into inline styles for maximum email client compatibility\r\n- **Mobile preview** — render a phone-frame preview of the final email; optional **sample data** (`previewData`) so Liquid variables render with real values in preview\r\n- **Cursor insert API** — inject any text, Liquid variable, or HTML snippet at the exact cursor position via a `ref`; ref also exposes **`inlineCss()`** to run CSS inlining from your own button\r\n- **Custom toolbar** — pass `toolbarContent` to replace the default formatting buttons with your own\r\n- **External view controls** — use controlled `showCodeEditor` / `showPreview` and `hideViewToggles` so your own buttons drive View HTML, Preview, and Inline CSS\r\n- **Custom image modal** — pass `onOpenImageModal` and use `ref.insertImage(url)` / `ref.clearImageToReplace()` so your own modal handles insert and replace image\r\n- **Read-only mode** — lock the editor for display or review purposes\r\n- **Fully typed** — complete TypeScript definitions included\r\n\r\n---\r\n\r\n## Installation\r\n\r\n```bash\r\nnpm install @codematic.io/cdp-editor \\\r\n  react react-dom \\\r\n  @monaco-editor/react \\\r\n  antd \\\r\n  liquidjs \\\r\n  juice \\\r\n  sonner \\\r\n  react-simple-wysiwyg \\\r\n  currency-codes \\\r\n  --legacy-peer-deps\r\n```\r\n\r\n> **All of the above are peer dependencies** — they are not bundled into the package and must be installed alongside it. If your project already has any of them, you can omit those from the command.\r\n>\r\n> | Peer dependency | Purpose |\r\n> |---|---|\r\n> | `react`, `react-dom` | React runtime (≥ 18) |\r\n> | `antd` | UI components — buttons, modals, tooltips, colour picker |\r\n> | `@monaco-editor/react` | VS Code-grade HTML code editor |\r\n> | `liquidjs` | Liquid template variable rendering in preview mode |\r\n> | `juice` | CSS inlining for email client compatibility |\r\n> | `sonner` | Toast notifications |\r\n> | `react-simple-wysiwyg` | Core WYSIWYG editing primitives |\r\n> | `currency-codes` | Currency code validation for template variables |\r\n\r\n---\r\n\r\n## Setup\r\n\r\nImport the stylesheet once in your application root (e.g. `_app.tsx`, `layout.tsx`, or `main.tsx`):\r\n\r\n```tsx\r\nimport \"@codematic.io/cdp-editor/style.css\";\r\n```\r\n\r\n---\r\n\r\n## Basic usage\r\n\r\n```tsx\r\nimport { useState } from \"react\";\r\nimport { CDPEditor } from \"@codematic.io/cdp-editor\";\r\n\r\nexport default function MyPage() {\r\n  const [html, setHtml] = useState(\"<p>Start writing…</p>\");\r\n\r\n  return (\r\n    <CDPEditor\r\n      value={html}\r\n      onChange={setHtml}\r\n    />\r\n  );\r\n}\r\n```\r\n\r\nThe editor expects **full HTML** in `value` (e.g. `<!DOCTYPE html>`, `<html>`, `<head>`, `<body>`, etc.). The **code view (Monaco)** shows this full document so you can edit the entire template. Every change is reported via `onChange` with the full HTML string — use that value for save, drafts, and sending.\r\n\r\n---\r\n\r\n## With image management\r\n\r\nProvide three callbacks to enable the image picker, file uploads, and image deletion.\r\n\r\n```tsx\r\nimport { useState } from \"react\";\r\nimport { CDPEditor } from \"@codematic.io/cdp-editor\";\r\nimport type { ImageAsset } from \"@codematic.io/cdp-editor\";\r\n\r\nexport default function MyPage() {\r\n  const [html, setHtml] = useState(\"\");\r\n\r\n  const fetchImages = async (): Promise<ImageAsset[]> => {\r\n    const res = await fetch(\"/api/images\");\r\n    return res.json();\r\n  };\r\n\r\n  const uploadImage = async (file: File): Promise<string> => {\r\n    const form = new FormData();\r\n    form.append(\"file\", file);\r\n    const res = await fetch(\"/api/images/upload\", { method: \"POST\", body: form });\r\n    const { url } = await res.json();\r\n    return url; // must return the public URL of the uploaded file\r\n  };\r\n\r\n  const deleteImage = async (path: string): Promise<void> => {\r\n    await fetch(`/api/images/${encodeURIComponent(path)}`, { method: \"DELETE\" });\r\n  };\r\n\r\n  return (\r\n    <CDPEditor\r\n      value={html}\r\n      onChange={setHtml}\r\n      onFetchImages={fetchImages}\r\n      onUploadImage={uploadImage}\r\n      onDeleteImage={deleteImage}\r\n    />\r\n  );\r\n}\r\n```\r\n\r\n---\r\n\r\n## Inserting text / variables at the cursor\r\n\r\nUse a `ref` to inject any content at the user's current cursor position. This is the intended pattern for custom attribute pickers, variable selectors, merge tags, or any external trigger.\r\n\r\n```tsx\r\nimport { useRef, useState } from \"react\";\r\nimport { CDPEditor } from \"@codematic.io/cdp-editor\";\r\nimport type { CDPEditorHandle } from \"@codematic.io/cdp-editor\";\r\n\r\nexport default function MyPage() {\r\n  const editorRef = useRef<CDPEditorHandle>(null);\r\n  const [html, setHtml] = useState(\"\");\r\n\r\n  return (\r\n    <div>\r\n      {/* Your own variable/attribute picker */}\r\n      <button onClick={() => editorRef.current?.insert(\"{{ customer.first_name }}\")}>\r\n        First Name\r\n      </button>\r\n      <button onClick={() => editorRef.current?.insert(\"{{ event.order_id }}\")}>\r\n        Order ID\r\n      </button>\r\n      <button onClick={() => editorRef.current?.insert(\"{{ unsubscribe_url }}\")}>\r\n        Unsubscribe URL\r\n      </button>\r\n\r\n      <CDPEditor\r\n        ref={editorRef}\r\n        value={html}\r\n        onChange={setHtml}\r\n      />\r\n    </div>\r\n  );\r\n}\r\n```\r\n\r\n`insert()` places the string exactly where the cursor is (or replaces the current selection). It works with plain text, Liquid / Handlebars / Mustache expressions, or raw HTML fragments.\r\n\r\n---\r\n\r\n## Preview with sample data (Liquid)\r\n\r\nWhen your template uses Liquid variables (e.g. `{{ customer.first_name }}`, `{{ event.order_id | json }}`), the built-in **Preview** shows them as raw tags unless you pass sample data. Use the `previewData` prop so the preview iframe renders the template with real values.\r\n\r\n```tsx\r\nconst [html, setHtml] = useState(\"\");\r\nconst previewData = {\r\n  customer: { first_name: \"Jane\", email: \"jane@example.com\" },\r\n  event: { order_id: \"ORD-123\", amount: 99.99 },\r\n  trigger: { data: { name: \"Welcome flow\" } },\r\n};\r\n\r\nreturn (\r\n  <CDPEditor\r\n    value={html}\r\n    onChange={setHtml}\r\n    previewData={previewData}\r\n  />\r\n);\r\n```\r\n\r\nWhen the user switches to Preview, the editor renders the HTML through Liquid with `previewData` as the context, so `{{ customer.first_name }}` appears as “Jane” and `{{ event.order_id | json }}` as `\"ORD-123\"`. Updating `previewData` (e.g. from a sample-data editor) updates the preview in real time.\r\n\r\n---\r\n\r\n## Custom toolbar and external view buttons\r\n\r\nYou can replace the default formatting toolbar and/or move the “View HTML”, “Preview”, and “Inline CSS” actions to your own buttons outside the package.\r\n\r\n### Custom toolbar only\r\n\r\nPass `toolbarContent` to show your own buttons instead of the default (bold, italic, lists, alignment, image, button, colour, font). The package still shows its own View HTML, Preview, and Inline CSS toggles.\r\n\r\n```tsx\r\n<CDPEditor\r\n  value={html}\r\n  onChange={setHtml}\r\n  toolbarContent={\r\n    <div className=\"flex items-center gap-2\">\r\n      <button type=\"button\" onClick={() => editorRef.current?.insert(\"{{ customer.name }}\")}>\r\n        Insert name\r\n      </button>\r\n      {/* your other toolbar buttons */}\r\n    </div>\r\n  }\r\n/>\r\n```\r\n\r\n### External View HTML, Preview, and Inline CSS buttons\r\n\r\nTo use **your own** buttons for “View HTML”, “Preview”, and “Inline CSS” (and hide the package’s), use controlled state and the ref:\r\n\r\n1. Pass **controlled** props: `showCodeEditor`, `onShowCodeEditorChange`, `showPreview`, `onShowPreviewChange`.\r\n2. Set **`hideViewToggles={true}`** so the package does not render its View HTML, Preview, or Inline CSS buttons.\r\n3. For **Inline CSS**, call **`editorRef.current?.inlineCss()`** from your button’s `onClick`.\r\n\r\n```tsx\r\nconst [showCodeEditor, setShowCodeEditor] = useState(false);\r\nconst [showPreview, setShowPreview] = useState(false);\r\nconst editorRef = useRef<CDPEditorHandle>(null);\r\n\r\nreturn (\r\n  <div>\r\n    {/* Your own buttons */}\r\n    <button\r\n      onClick={() => {\r\n        setShowCodeEditor((v) => !v);\r\n        if (!showCodeEditor) setShowPreview(false);\r\n      }}\r\n    >\r\n      {showCodeEditor ? \"View Editor\" : \"View HTML\"}\r\n    </button>\r\n    <button\r\n      onClick={() => {\r\n        setShowPreview((v) => !v);\r\n        if (!showPreview) setShowCodeEditor(false);\r\n      }}\r\n    >\r\n      {showPreview ? \"Hide Preview\" : \"Preview\"}\r\n    </button>\r\n    <button onClick={() => editorRef.current?.inlineCss()}>\r\n      Inline CSS\r\n    </button>\r\n\r\n    <CDPEditor\r\n      ref={editorRef}\r\n      value={html}\r\n      onChange={setHtml}\r\n      showCodeEditor={showCodeEditor}\r\n      onShowCodeEditorChange={(show) => {\r\n        setShowCodeEditor(show);\r\n        if (show) setShowPreview(false);\r\n      }}\r\n      showPreview={showPreview}\r\n      onShowPreviewChange={(show) => {\r\n        setShowPreview(show);\r\n        if (show) setShowCodeEditor(false);\r\n      }}\r\n      hideViewToggles={true}\r\n    />\r\n  </div>\r\n);\r\n```\r\n\r\nKeeping “View HTML” and “Preview” mutually exclusive (only one active at a time) is your responsibility when using external buttons; the snippet above does that by closing preview when opening code view and vice versa.\r\n\r\n---\r\n\r\n## Custom image modal (insert / replace image)\r\n\r\nYou can use your own image picker or upload modal instead of the built-in one. When the user clicks **Insert Image** in the toolbar or **Replace image** in the image context menu, the editor will call your callback; you open your modal and, when the user selects an image, call the ref to insert or replace.\r\n\r\n1. Pass **`onOpenImageModal`** — the editor calls this instead of opening its image picker.\r\n2. When the user selects an image in your modal, call **`editorRef.current.insertImage(url)`** — the editor inserts at the cursor or replaces the image that was chosen for replace.\r\n3. When your modal closes **without** a selection, call **`editorRef.current.clearImageToReplace()`** so the next insert does not replace an image.\r\n\r\n```tsx\r\nconst [showImageModal, setShowImageModal] = useState(false);\r\nconst editorRef = useRef<CDPEditorHandle>(null);\r\n\r\nreturn (\r\n  <>\r\n    <CDPEditor\r\n      ref={editorRef}\r\n      value={html}\r\n      onChange={setHtml}\r\n      onOpenImageModal={() => setShowImageModal(true)}\r\n    />\r\n    <YourImageModal\r\n      show={showImageModal}\r\n      onClose={() => {\r\n        setShowImageModal(false);\r\n        editorRef.current?.clearImageToReplace();\r\n      }}\r\n      onSelectImage={(url) => {\r\n        editorRef.current?.insertImage(url);\r\n        setShowImageModal(false);\r\n      }}\r\n    />\r\n  </>\r\n);\r\n```\r\n\r\nWhen **Replace image** is used, the editor remembers the image to replace; the next `insertImage(url)` replaces it. When **Insert Image** is used, `insertImage(url)` inserts at the cursor.\r\n\r\n---\r\n\r\n## Props\r\n\r\n| Prop | Type | Default | Description |\r\n|---|---|---|---|\r\n| `value` | `string` | `\"\"` | The controlled HTML content. Use the **full document** (DOCTYPE, html, head, body) so the code view (Monaco) shows and edits the complete template. |\r\n| `onChange` | `(html: string) => void` | — | Called on every change with the **full HTML document**. Persist this value for save/drafts and pass it back as `value` on the next render. |\r\n| `readOnly` | `boolean` | `false` | Disables all editing interactions |\r\n| `placeholder` | `string` | — | Text shown when the editor is empty |\r\n| `height` | `number \\| string` | `500` | Height of the editor area (px or any CSS value) |\r\n| `enablePreview` | `boolean` | `true` | Show or hide the mobile phone preview toggle |\r\n| `enableCodeEditor` | `boolean` | `true` | Show or hide the raw HTML / Monaco editor toggle |\r\n| `onFetchImages` | `() => Promise<ImageAsset[]>` | — | Return your image library for the image picker |\r\n| `onUploadImage` | `(file: File) => Promise<string>` | — | Upload a file and return its public URL |\r\n| `onDeleteImage` | `(path: string) => Promise<void>` | — | Delete an image by its path |\r\n| `className` | `string` | — | Additional CSS class applied to the root element |\r\n| `previewData` | `Record<string, unknown>` | — | Sample data for **Preview** mode: the template is rendered with Liquid using this object (e.g. `{ customer: {}, event: {}, trigger: {} }`) so Liquid variables and filters show real values in the preview iframe |\r\n| `toolbarContent` | `ReactNode` | — | When provided, the default formatting toolbar (bold, italic, lists, alignment, image, button, colour, font) is **hidden** and this content is shown instead. The Inline CSS and View HTML / Preview toggles are unaffected unless you use `hideViewToggles` |\r\n| `showCodeEditor` | `boolean` | — | **Controlled** “View HTML” state. Use with `onShowCodeEditorChange` to drive the code-view toggle from your own buttons |\r\n| `onShowCodeEditorChange` | `(show: boolean) => void` | — | Called when the code-editor view should toggle (e.g. when the user clicks your “View HTML” button) |\r\n| `showPreview` | `boolean` | — | **Controlled** “Preview” state. Use with `onShowPreviewChange` to drive the preview toggle from your own buttons |\r\n| `onShowPreviewChange` | `(show: boolean) => void` | — | Called when the preview should toggle (e.g. when the user clicks your “Preview” button) |\r\n| `hideViewToggles` | `boolean` | `false` | When `true`, the package does **not** render its own View HTML, Preview, or Inline CSS buttons. Use with the controlled props above and `ref.inlineCss()` so your external buttons are the only controls |\r\n| `onOpenImageModal` | `() => void` | — | When provided, the package does **not** show its image picker. Insert Image and Replace Image call this instead; open your own modal and call `ref.insertImage(url)` when the user selects, and `ref.clearImageToReplace()` when the modal closes without selecting |\r\n| `recentColors` | `string[]` | — | Recently used hex colours shown in the button colour picker (“Recent”) and Ant Design ColorPicker presets. Persist these per workspace in the host app |\r\n| `onColorUsed` | `(color: string) => void` | — | Fired when the user applies a colour (button background/text or toolbar text colour). Use to update `recentColors` storage |\r\n\r\n---\r\n\r\n## Ref handle\r\n\r\nAttach a `ref` typed as `React.RefObject<CDPEditorHandle>` to access the imperative API.\r\n\r\n| Method | Signature | Description |\r\n|---|---|---|\r\n| `insert` | `(text: string) => void` | Insert a string at the current cursor position (or replace the selection) |\r\n| `inlineCss` | `() => void` | Run CSS inlining on the current HTML (same as the built-in “Inline CSS” button). Use this when you provide your own Inline CSS button and pass `hideViewToggles={true}` |\r\n| `insertImage` | `(url: string) => void` | Insert an image at the cursor, or replace the image chosen for replace. Use when you provide `onOpenImageModal` and the user selects an image in your modal |\r\n| `clearImageToReplace` | `() => void` | Clear the “image to replace” state. Call when your custom image modal closes without a selection |\r\n\r\n---\r\n\r\n## TypeScript types\r\n\r\nAll types are exported from the package root.\r\n\r\n```ts\r\nimport type {\r\n  CDPEditorProps,  // Props accepted by <CDPEditor />\r\n  CDPEditorHandle, // Ref handle shape\r\n  ImageAsset,            // Shape of an image in the image library\r\n  VariableGroup,         // Utility type for grouping variables\r\n  Variable,              // Individual variable definition\r\n} from \"@codematic.io/cdp-editor\";\r\n```\r\n\r\n### `ImageAsset`\r\n\r\n```ts\r\ninterface ImageAsset {\r\n  url: string;\r\n  filename: string;\r\n  path: string;\r\n  size?: number;\r\n  uploadedAt?: string;\r\n  isFolder?: boolean;\r\n  name?: string;\r\n  contents?: ImageAsset[]; // for folder-structured libraries\r\n}\r\n```\r\n\r\n---\r\n\r\n## Advanced: value and onChange (full HTML)\r\n\r\n- **`value`** — Pass the **full HTML document** (DOCTYPE, `<html>`, `<head>`, `<body>`). The code view (Monaco) displays this entire document; the WYSIWYG and preview use the same content.\r\n- **`onChange`** — The editor calls this with the **full HTML document** on every change (WYSIWYG or code view). Use this string for saving, draft autosave, and sending; pass it back as `value` so the editor and Monaco stay in sync.\r\n\r\n```tsx\r\nconst [html, setHtml] = useState(\"\");\r\n\r\nconst handleSave = () => {\r\n  await myApi.saveTemplate({ html });\r\n};\r\n\r\n<CDPEditor value={html} onChange={setHtml} />\r\n```\r\n\r\n---\r\n\r\n## Advanced: CSS inlining\r\n\r\nThe toolbar exposes a one-click “Inline CSS” button (unless you pass `hideViewToggles={true}`). When clicked it moves all rules from `<style>` tags into inline `style` attributes, which is required by many email clients (Gmail, Outlook).\r\n\r\n- **From your own button:** call `editorRef.current?.inlineCss()` (see [Custom toolbar and external view buttons](#custom-toolbar-and-external-view-buttons)).\r\n- **Programmatically (no editor instance):** use the exported utility:\r\n\r\n```ts\r\nimport { handleInlineCSS } from \"@codematic.io/cdp-editor\";\r\n\r\nconst inlinedHtml = await handleInlineCSS(rawHtml);\r\n```\r\n\r\n---\r\n\r\n## Advanced: Liquid template validation\r\n\r\n```ts\r\nimport { validateLiquidTemplate } from \"@codematic.io/cdp-editor\";\r\n\r\nconst errors = await validateLiquidTemplate(html);\r\nif (errors.length > 0) {\r\n  console.warn(\"Template errors:\", errors);\r\n}\r\n```\r\n\r\n---\r\n\r\n## Contributing & local development\r\n\r\n```bash\r\n# Clone the repo\r\ngit clone https://github.com/code-matic/openCDP-editor\r\n\r\n# Install dependencies\r\nnpm install\r\n\r\n# Start the interactive demo\r\nnpm run dev\r\n\r\n# Build the library output\r\nnpm run build:lib\r\n\r\n# Build the demo app\r\nnpm run build\r\n\r\n# Type-check without emitting\r\nnpm run type-check\r\n```\r\n\r\n---\r\n\r\n## License\r\n\r\nMIT © Codematic\r\n","readmeFilename":"README.md"}