{"_id":"@lumir-company/editor","_rev":"66-57daadc28f0a38eea601f37b4478f206","name":"@lumir-company/editor","dist-tags":{"latest":"0.18.0"},"versions":{"0.2.0":{"name":"@lumir-company/editor","version":"0.2.0","keywords":["editor","blocknote","rich-text","react","typescript","tailwind","wysiwyg","markdown","text-editor"],"license":"MIT","_id":"@lumir-company/editor@0.2.0","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"}],"homepage":"https://github.com/lumir-company/editor#readme","bugs":{"url":"https://github.com/lumir-company/editor/issues"},"dist":{"shasum":"480a5a47102a6f9540d593069574e2847bba860c","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.2.0.tgz","fileCount":9,"integrity":"sha512-aS/KYG3JOGDf6olFvRb4FCaejKAy7FHJPCwur6SjV7T7S7kDvaf2J/v6XDFWgnObIk1Pj+Qp4JIzKJZx8nYJJw==","signatures":[{"sig":"MEQCIGfe1UiMgMBNghPnlmnfqOpcSQjawn/ACjfVOeslwzU4AiAxmmOPMbKFdeGMKPMa/qTR0XfN+2OJ5UNfyGhOUl4JKA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":118281},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.js"},"./style.css":"./dist/style.css"},"gitHead":"f2ed8bc78121c019c3062c884982dc4ca2294942","private":false,"scripts":{"dev":"tsup src/index.ts --dts --format cjs,esm --sourcemap --watch --onSuccess \"node scripts/copy-style.js\"","build":"tsup src/index.ts --dts --format cjs,esm --sourcemap && node scripts/copy-style.js","type-check":"tsc --noEmit","prepublishOnly":"npm run type-check && npm run build"},"_npmUser":{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},"repository":{"url":"git+https://github.com/lumir-company/editor.git","type":"git"},"_npmVersion":"10.9.2","description":"Advanced BlockNote-based React rich text editor with hybrid content support and flexible styling","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","dependencies":{"@blocknote/core":"^0.35.0","@blocknote/react":"^0.35.0","@blocknote/mantine":"^0.35.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","react":"^18.2.0","react-dom":"^18.2.0","typescript":"^5.4.0","@types/react":"^18.2.0","@types/react-dom":"^18.2.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/editor_0.2.0_1757582192749_0.6275688520350906","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@lumir-company/editor","version":"0.2.1","keywords":["editor","blocknote","rich-text","react","typescript","image-editor","wysiwyg","base64","theme","pretendard"],"license":"MIT","_id":"@lumir-company/editor@0.2.1","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"}],"homepage":"https://github.com/lumir-company/editor#readme","bugs":{"url":"https://github.com/lumir-company/editor/issues"},"dist":{"shasum":"9d76c10eadc2a59717cb1db52f0fc4d2af41343d","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.2.1.tgz","fileCount":9,"integrity":"sha512-/4LSoJgSnB0RYdQL6YwDFsmp+ioGG/0j90idw3Ooj1sXrLsWMuWMKhG4auuvNgTRtnzC5h+Z594K+pVC4I66zQ==","signatures":[{"sig":"MEUCIQCnOE20Y2JKxsHp6fdLY8KNlcEw3ARWyNIFiRcOPGylVAIgG1zS4KxITRXgvguwBotbnaRlzLtm0rItN6DS9zGXBNE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":97021},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.js"},"./style.css":"./dist/style.css"},"gitHead":"5c2a985a454278cd9c216f61ae33c8d0bcdd3a4c","private":false,"scripts":{"dev":"tsup src/index.ts --dts --format cjs,esm --sourcemap --watch --onSuccess \"node scripts/copy-style.js\"","build":"tsup src/index.ts --dts --format cjs,esm --sourcemap && node scripts/copy-style.js","type-check":"tsc --noEmit","prepublishOnly":"npm run type-check && npm run build"},"_npmUser":{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},"repository":{"url":"git+https://github.com/lumir-company/editor.git","type":"git"},"_npmVersion":"10.9.2","description":"Image-only BlockNote based rich text editor with Base64 conversion and theme support","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","dependencies":{"@blocknote/core":"^0.35.0","@blocknote/react":"^0.35.0","@blocknote/mantine":"^0.35.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","react":"^18.2.0","react-dom":"^18.2.0","typescript":"^5.4.0","@types/react":"^18.2.0","@types/react-dom":"^18.2.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/editor_0.2.1_1757605409869_0.8260597365944009","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@lumir-company/editor","version":"0.1.0","keywords":["editor","blocknote","rich-text","react","typescript","image-editor","wysiwyg","s3-upload","loading-spinner","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.1.0","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"homepage":"https://github.com/lumir-company/editor#readme","bugs":{"url":"https://github.com/lumir-company/editor/issues"},"dist":{"shasum":"1c22a13cac476305c3548821fd6cab340aa23111","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.1.0.tgz","fileCount":9,"integrity":"sha512-jWF8ghhXgEw3N64zqzNQNl56TqNVT8h+l1omL8D1bGWLKJGMZvwE3sJ17UgjAiwiA4LvFmCXLRvtoe2J58BVuQ==","signatures":[{"sig":"MEUCID0tblnBE+KTqdqcXx+Vmf321siO2a6bpmxUYEIk/omgAiEAqDPThopNvyh2e3+stXdSNpOacIYniaIiGmUjn4jO7VU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":110614},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.js"},"./style.css":"./dist/style.css"},"gitHead":"3ae7e1cf082c61801d6e532fb11032e03b22a313","private":false,"scripts":{"dev":"tsup src/index.ts --dts --format cjs,esm --sourcemap --watch --onSuccess \"node scripts/copy-style.js\"","build":"tsup src/index.ts --dts --format cjs,esm --sourcemap && node scripts/copy-style.js","type-check":"tsc --noEmit","prepublishOnly":"npm run type-check && npm run build"},"_npmUser":{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},"repository":{"url":"git+https://github.com/lumir-company/editor.git","type":"git"},"_npmVersion":"10.9.2","description":"Image-only BlockNote rich text editor with S3 upload and optimized loading spinner","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","dependencies":{"@blocknote/core":"^0.35.0","@blocknote/react":"^0.35.0","@blocknote/mantine":"^0.35.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","react":"^18.2.0","react-dom":"^18.2.0","typescript":"^5.4.0","@types/react":"^18.2.0","@types/react-dom":"^18.2.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/editor_0.1.0_1765355563036_0.2645516141299431","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"name":"@lumir-company/editor","version":"0.3.3","keywords":["editor","blocknote","rich-text","react","typescript","image-editor","wysiwyg","s3-upload","loading-spinner","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.3.3","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"homepage":"https://github.com/lumir-company/editor#readme","bugs":{"url":"https://github.com/lumir-company/editor/issues"},"dist":{"shasum":"c64520dff46280f418d9967d8ec839510d78b893","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.3.3.tgz","fileCount":9,"integrity":"sha512-eNI5dVv2jnxHuHfUHHwWg/fcINg/vLH7GmRwiIJ2liMmwIelJIJk9yd3K0Fb9PZbN7QV2sKFcbnlbPrCF3fgkg==","signatures":[{"sig":"MEUCIQCie27hD11Tf8wiDP+D8wVK2IBPa7Iil0zM6QEBet7mTAIgU5TTOHOOUBcxchdO5nalUQttd4qsICssUIt8r+lvyyE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":127586},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.js"},"./style.css":"./dist/style.css"},"gitHead":"83750e58cda9ae6fefc7a2148d1005ccaaf961ef","private":false,"scripts":{"dev":"tsup src/index.ts --dts --format cjs,esm --sourcemap --watch --onSuccess \"node scripts/copy-style.js\"","build":"tsup src/index.ts --dts --format cjs,esm --sourcemap && node scripts/copy-style.js","type-check":"tsc --noEmit","prepublishOnly":"npm run type-check && npm run build"},"_npmUser":{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},"repository":{"url":"git+https://github.com/lumir-company/editor.git","type":"git"},"_npmVersion":"10.9.2","description":"Image-only BlockNote rich text editor with S3 upload and optimized loading spinner","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","dependencies":{"@blocknote/core":"^0.35.0","@blocknote/react":"^0.35.0","@blocknote/mantine":"^0.35.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","react":"^18.2.0","react-dom":"^18.2.0","typescript":"^5.4.0","@types/react":"^18.2.0","@types/react-dom":"^18.2.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/editor_0.3.3_1765416600384_0.12897272331198062","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@lumir-company/editor","version":"0.4.0","keywords":["editor","blocknote","rich-text","react","typescript","image-editor","wysiwyg","s3-upload","loading-spinner","filename-transform","uuid","file-upload","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.4.0","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"rojaebl","email":"qgs0924@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"homepage":"https://github.com/lumir-company/editor#readme","bugs":{"url":"https://github.com/lumir-company/editor/issues"},"dist":{"shasum":"498d9b1f7c3bb7ee871643ab1aaa52bfa632fee6","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.4.0.tgz","fileCount":9,"integrity":"sha512-s+miGl65R6V5EB1NTff7knkU5umzABTyCsKQkWQFaiIlZdDMUbgJF7IAotvOgllO58mljFE7q+FEz7o4FSGCIg==","signatures":[{"sig":"MEUCIFtHUA2QdT2+cXLO7w9VFgtad0+UvpxGlJdSn4AxsvtIAiEA40O/IZckvC70tVFqSiJ5WvqYR7rWKGTL+lvhbuDiOY8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":131815},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.js"},"./style.css":"./dist/style.css"},"gitHead":"5f8372962f5b5f5faf10602155e15d6537a88350","private":false,"scripts":{"dev":"tsup src/index.ts --dts --format cjs,esm --sourcemap --watch --onSuccess \"node scripts/copy-style.js\"","build":"tsup src/index.ts --dts --format cjs,esm --sourcemap && node scripts/copy-style.js","type-check":"tsc --noEmit","prepublishOnly":"npm run type-check && npm run build"},"_npmUser":{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},"repository":{"url":"git+https://github.com/lumir-company/editor.git","type":"git"},"_npmVersion":"10.9.2","description":"Image-only BlockNote rich text editor with S3 upload, customizable filename transforms, UUID support, and loading spinner","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","dependencies":{"@blocknote/core":"^0.35.0","@blocknote/react":"^0.35.0","@blocknote/mantine":"^0.35.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","react":"^18.2.0","react-dom":"^18.2.0","typescript":"^5.4.0","@types/react":"^18.2.0","@types/react-dom":"^18.2.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/editor_0.4.0_1768461768139_0.49908080605487526","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@lumir-company/editor","version":"0.4.1","keywords":["editor","blocknote","rich-text","react","typescript","image-editor","wysiwyg","s3-upload","loading-spinner","filename-transform","uuid","file-upload","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.4.1","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"rojaebl","email":"qgs0924@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"homepage":"https://github.com/lumir-company/editor#readme","bugs":{"url":"https://github.com/lumir-company/editor/issues"},"dist":{"shasum":"dc211b04e844f7fd320eb874b9173fdefb48889c","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.4.1.tgz","fileCount":9,"integrity":"sha512-7Rnjz2heyrz7sYki3AxJAIEIUMoq2QhAw7Jvh7BvF+bg3f849p4fzM+2HuY/0RER9FkmTzzqAr9S4ocxKmzlQw==","signatures":[{"sig":"MEQCIB5B3cgUAPM/glU44HsfrI6QYEZh+7c0x/Aqieq5axanAiA8B0L8IKDfjFMr5usblrFJdua2YAcq59cE6ylSHVs4MQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":137763},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.js"},"./style.css":"./dist/style.css"},"gitHead":"a72ac30ca2c6e763b60784b90edeb25dbf313127","private":false,"scripts":{"dev":"tsup src/index.ts --dts --format cjs,esm --sourcemap --watch --onSuccess \"node scripts/copy-style.js\"","build":"tsup src/index.ts --dts --format cjs,esm --sourcemap && node scripts/copy-style.js","type-check":"tsc --noEmit","prepublishOnly":"npm run type-check && npm run build"},"_npmUser":{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},"repository":{"url":"git+https://github.com/lumir-company/editor.git","type":"git"},"_npmVersion":"10.9.2","description":"Image-only BlockNote rich text editor with S3 upload, customizable filename transforms, UUID support, and loading spinner","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","dependencies":{"@blocknote/core":"^0.35.0","@blocknote/react":"^0.35.0","@blocknote/mantine":"^0.35.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","react":"^18.2.0","react-dom":"^18.2.0","typescript":"^5.4.0","@types/react":"^18.2.0","@types/react-dom":"^18.2.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/editor_0.4.1_1768463129747_0.4465117305481734","host":"s3://npm-registry-packages-npm-production"}},"0.4.3":{"name":"@lumir-company/editor","version":"0.4.3","keywords":["editor","blocknote","rich-text","react","typescript","image-editor","wysiwyg","s3-upload","loading-spinner","filename-transform","uuid","file-upload","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.4.3","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"rojaebl","email":"qgs0924@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"homepage":"https://github.com/lumir-company/editor#readme","bugs":{"url":"https://github.com/lumir-company/editor/issues"},"dist":{"shasum":"e0a92b04950e54ff66a6c520f5021db31ca48bbe","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.4.3.tgz","fileCount":9,"integrity":"sha512-e+WZUK55kaCJ7oz0n4MTWP0sC4cpiefLmNpTh6YaTEa96uhLX28zc35VHloPh30s/y+4QujN1vuz0wQMZ6tPXw==","signatures":[{"sig":"MEUCIQCl2rfi0kuGmpmoHSmDJDLoA3wiO6Tc4x+vJogJZOqh7wIgI7BUNm6ZOJdwyjzRLajvzXan7JeGo3xgUf0ekUEOS7o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1196694},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.js"},"./style.css":"./dist/style.css"},"gitHead":"0ce44952c49f197e7b05647dece195ec8e9bf820","private":false,"scripts":{"dev":"tsup src/index.ts --dts --format cjs,esm --sourcemap --watch --onSuccess \"node scripts/copy-style.js\"","test":"vitest run","build":"tsup src/index.ts --dts --format cjs,esm --sourcemap && node scripts/copy-style.js","test:ui":"vitest --ui","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","prepublishOnly":"npm run type-check && npm run build"},"_npmUser":{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},"repository":{"url":"git+https://github.com/lumir-company/editor.git","type":"git"},"_npmVersion":"10.9.2","description":"Image-only BlockNote rich text editor with S3 upload, customizable filename transforms, UUID support, and loading spinner","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","dependencies":{"@blocknote/core":"^0.35.0","@blocknote/react":"^0.35.0","@blocknote/mantine":"^0.35.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","jsdom":"^26.0.0","react":"^18.2.0","vitest":"^3.0.0","react-dom":"^18.2.0","@vitest/ui":"^3.0.0","typescript":"^5.4.0","@types/react":"^18.2.0","@types/react-dom":"^18.2.0","@vitest/coverage-v8":"^3.0.0","@vitejs/plugin-react":"^4.0.0","@testing-library/react":"^16.0.0","@testing-library/jest-dom":"^6.0.0","@testing-library/user-event":"^14.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/editor_0.4.3_1771814728310_0.0763367065071412","host":"s3://npm-registry-packages-npm-production"}},"0.4.4":{"name":"@lumir-company/editor","version":"0.4.4","keywords":["editor","blocknote","rich-text","react","typescript","image-editor","wysiwyg","s3-upload","loading-spinner","filename-transform","uuid","file-upload","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.4.4","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"rojaebl","email":"qgs0924@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"homepage":"https://github.com/lumir-company/editor#readme","bugs":{"url":"https://github.com/lumir-company/editor/issues"},"dist":{"shasum":"b0d54e6b6c6ce6a120d12a493efbef50318c5d89","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.4.4.tgz","fileCount":15,"integrity":"sha512-u23cwBQYDedXuLCsEz8F/psmrm1A4IDoreBCfxkXiliXhnFFYzp64DRMLqcmBokqFVFdpLSq4mkwW95xXASZaA==","signatures":[{"sig":"MEQCIFIQIiUh2Tr9oCrsqBGPt/FCN1A58S3cF2aqRQ9M28FYAiAD9Pzv5n5b7p+CSoPPK9bReLCGkVc7FGrTLKqG3r4kcw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1238410},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./style.css":"./dist/style.css","./api/link-preview":{"types":"./dist/api/link-preview.d.ts","import":"./dist/api/link-preview.mjs","require":"./dist/api/link-preview.js"}},"gitHead":"b7acddcd1d957ce2e00598ee4d6fbc4f36ce20c3","private":false,"scripts":{"dev":"tsup src/index.ts src/api/link-preview.ts --dts --format cjs,esm --sourcemap --watch --onSuccess \"node scripts/copy-style.js\"","test":"vitest run","build":"tsup src/index.ts src/api/link-preview.ts --dts --format cjs,esm --sourcemap && node scripts/copy-style.js","test:ui":"vitest --ui","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","prepublishOnly":"npm run type-check && npm run build"},"_npmUser":{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},"repository":{"url":"git+https://github.com/lumir-company/editor.git","type":"git"},"_npmVersion":"10.9.2","description":"Image-only BlockNote rich text editor with S3 upload, customizable filename transforms, UUID support, and loading spinner","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","dependencies":{"@blocknote/core":"^0.35.0","@blocknote/react":"^0.35.0","@blocknote/mantine":"^0.35.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","jsdom":"^26.0.0","react":"^18.2.0","vitest":"^3.0.0","react-dom":"^18.2.0","@vitest/ui":"^3.0.0","typescript":"^5.4.0","@types/react":"^18.2.0","@types/react-dom":"^18.2.0","@vitest/coverage-v8":"^3.0.0","@vitejs/plugin-react":"^4.0.0","@testing-library/react":"^16.0.0","@testing-library/jest-dom":"^6.0.0","@testing-library/user-event":"^14.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/editor_0.4.4_1771822465114_0.704995017219247","host":"s3://npm-registry-packages-npm-production"}},"0.4.5":{"name":"@lumir-company/editor","version":"0.4.5","keywords":["editor","blocknote","rich-text","react","typescript","image-editor","wysiwyg","s3-upload","loading-spinner","filename-transform","uuid","file-upload","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.4.5","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"rojaebl","email":"qgs0924@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"homepage":"https://github.com/lumir-company/editor#readme","bugs":{"url":"https://github.com/lumir-company/editor/issues"},"dist":{"shasum":"0b16c2e0dc94025c2df25a25213f4bfbc24d9fa4","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.4.5.tgz","fileCount":15,"integrity":"sha512-blfvL9A4O+eE/e4iFEowRkzdm9KLagTTH+BxOPkrQio3bB9wmSWYmyDr+F8/2MJ3pO1zIf0FB6/cxPHX0Z1uNg==","signatures":[{"sig":"MEYCIQDM00LIkDJ+sMobNJYOSIJNa2i4cOwnjJXPZRvgKUdZrwIhALiQLSNAsM8U+ThQcxqBpW/nh6xqKhxlBI2KdZrGwyAq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1320005},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./style.css":"./dist/style.css","./api/link-preview":{"types":"./dist/api/link-preview.d.ts","import":"./dist/api/link-preview.mjs","require":"./dist/api/link-preview.js"}},"gitHead":"5e0285fdd889afd03ac33d2ce12183959339566b","private":false,"scripts":{"dev":"tsup src/index.ts src/api/link-preview.ts --dts --format cjs,esm --sourcemap --watch --onSuccess \"node scripts/copy-style.js\"","test":"vitest run","build":"tsup src/index.ts src/api/link-preview.ts --dts --format cjs,esm --sourcemap && node scripts/copy-style.js","test:ui":"vitest --ui","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","prepublishOnly":"npm run type-check && npm run build"},"_npmUser":{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},"repository":{"url":"git+https://github.com/lumir-company/editor.git","type":"git"},"_npmVersion":"10.9.2","description":"Image-only BlockNote rich text editor with S3 upload, customizable filename transforms, UUID support, and loading spinner","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","dependencies":{"@blocknote/core":"^0.35.0","@blocknote/react":"^0.35.0","@blocknote/mantine":"^0.35.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","jsdom":"^26.0.0","react":"^18.2.0","vitest":"^3.0.0","react-dom":"^18.2.0","@vitest/ui":"^3.0.0","typescript":"^5.4.0","@types/react":"^18.2.0","@types/react-dom":"^18.2.0","@vitest/coverage-v8":"^3.0.0","@vitejs/plugin-react":"^4.0.0","@testing-library/react":"^16.0.0","@testing-library/jest-dom":"^6.0.0","@testing-library/user-event":"^14.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/editor_0.4.5_1772699412257_0.8142477845676686","host":"s3://npm-registry-packages-npm-production"}},"0.4.6":{"name":"@lumir-company/editor","version":"0.4.6","keywords":["editor","blocknote","rich-text","react","typescript","image-editor","wysiwyg","s3-upload","loading-spinner","filename-transform","uuid","file-upload","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.4.6","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"rojaebl","email":"qgs0924@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"homepage":"https://github.com/lumir-company/editor#readme","bugs":{"url":"https://github.com/lumir-company/editor/issues"},"dist":{"shasum":"3fd734c0a2b51a89ddbc861da82440c7eb9fa5ec","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.4.6.tgz","fileCount":15,"integrity":"sha512-dTCZLYMrpAqNCSGqLI1pKvRgH2UbPTILrPucbSHkc3b48/7fDKamg/x+OvYNzwAwkbguB27Nr4XF4YHDWfWmnw==","signatures":[{"sig":"MEYCIQCt8znNLMeR4F9XRHhiL87oW26pJ06MpqR4nIclxGaRmwIhAK4FbfZ6LtWmxiE5UNVeHghvzAaHUqfFub1+RLVdWCPI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1364999},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./style.css":"./dist/style.css","./api/link-preview":{"types":"./dist/api/link-preview.d.ts","import":"./dist/api/link-preview.mjs","require":"./dist/api/link-preview.js"}},"gitHead":"71ffa15381fb9abdd847bc66455e488281f17880","private":false,"scripts":{"dev":"tsup src/index.ts src/api/link-preview.ts --dts --format cjs,esm --sourcemap --watch --onSuccess \"node scripts/copy-style.js\"","test":"vitest run","build":"tsup src/index.ts src/api/link-preview.ts --dts --format cjs,esm --sourcemap && node scripts/copy-style.js","test:ui":"vitest --ui","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","prepublishOnly":"npm run type-check && npm run build"},"_npmUser":{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},"repository":{"url":"git+https://github.com/lumir-company/editor.git","type":"git"},"_npmVersion":"10.9.2","description":"Image-only BlockNote rich text editor with S3 upload, customizable filename transforms, UUID support, and loading spinner","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","dependencies":{"@blocknote/core":"^0.35.0","@blocknote/react":"^0.35.0","@blocknote/mantine":"^0.35.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","jsdom":"^26.0.0","react":"^18.2.0","vitest":"^3.0.0","react-dom":"^18.2.0","@vitest/ui":"^3.0.0","typescript":"^5.4.0","@types/react":"^18.2.0","@types/react-dom":"^18.2.0","@vitest/coverage-v8":"^3.0.0","@vitejs/plugin-react":"^4.0.0","@testing-library/react":"^16.0.0","@testing-library/jest-dom":"^6.0.0","@testing-library/user-event":"^14.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/editor_0.4.6_1772758874039_0.3861835906995219","host":"s3://npm-registry-packages-npm-production"}},"0.4.7":{"name":"@lumir-company/editor","version":"0.4.7","keywords":["editor","blocknote","rich-text","react","typescript","image-editor","wysiwyg","s3-upload","loading-spinner","filename-transform","uuid","file-upload","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.4.7","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"rojaebl","email":"qgs0924@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"homepage":"https://github.com/lumir-company/editor#readme","bugs":{"url":"https://github.com/lumir-company/editor/issues"},"dist":{"shasum":"742c43001f7dc88a3d871a152549f7e1843f6f87","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.4.7.tgz","fileCount":15,"integrity":"sha512-1RLRVDO/QATLjPC+f0F5lX7ZvCNicgrb6Nz2JSU/Do175fwFv9wDS6uSMJtnbCxUbJ22MwVDw8cqX9b6IcvbOw==","signatures":[{"sig":"MEUCIQD+DJKilvlGVx4Zg/p46vP6upz3bDFa7usvcDhrU5ffMAIgML/8dV+0QsozwXHrsgIbFjnorOJDw+rSVSaHEUCyquc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1369108},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./style.css":"./dist/style.css","./api/link-preview":{"types":"./dist/api/link-preview.d.ts","import":"./dist/api/link-preview.mjs","require":"./dist/api/link-preview.js"}},"gitHead":"71ffa15381fb9abdd847bc66455e488281f17880","private":false,"scripts":{"dev":"tsup src/index.ts src/api/link-preview.ts --dts --format cjs,esm --sourcemap --watch --onSuccess \"node scripts/copy-style.js\"","test":"vitest run","build":"tsup src/index.ts src/api/link-preview.ts --dts --format cjs,esm --sourcemap && node scripts/copy-style.js","test:ui":"vitest --ui","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","prepublishOnly":"npm run type-check && npm run build"},"_npmUser":{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},"repository":{"url":"git+https://github.com/lumir-company/editor.git","type":"git"},"_npmVersion":"10.9.2","description":"Image-only BlockNote rich text editor with S3 upload, customizable filename transforms, UUID support, and loading spinner","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","dependencies":{"@blocknote/core":"^0.35.0","@blocknote/react":"^0.35.0","@blocknote/mantine":"^0.35.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","jsdom":"^26.0.0","react":"^18.2.0","vitest":"^3.0.0","react-dom":"^18.2.0","@vitest/ui":"^3.0.0","typescript":"^5.4.0","@types/react":"^18.2.0","@types/react-dom":"^18.2.0","@vitest/coverage-v8":"^3.0.0","@vitejs/plugin-react":"^4.0.0","@testing-library/react":"^16.0.0","@testing-library/jest-dom":"^6.0.0","@testing-library/user-event":"^14.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/editor_0.4.7_1772771320374_0.5568470445077436","host":"s3://npm-registry-packages-npm-production"}},"0.4.8":{"name":"@lumir-company/editor","version":"0.4.8","keywords":["editor","blocknote","rich-text","react","typescript","image-editor","wysiwyg","s3-upload","loading-spinner","filename-transform","uuid","file-upload","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.4.8","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"rojaebl","email":"qgs0924@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"homepage":"https://github.com/lumir-company/editor#readme","bugs":{"url":"https://github.com/lumir-company/editor/issues"},"dist":{"shasum":"12d5c086b3d95951c558bf94919c6053ad0624a5","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.4.8.tgz","fileCount":15,"integrity":"sha512-0h+lyQmBg4e1Tk8EqkhIk3WDOTL8r1KGUa743+HIGsWyfgQSrogeuXg/pyRQQRB8xUeGYb2sMlGtuw3gpwKwKQ==","signatures":[{"sig":"MEUCIClo9qK+M09fQMtAGEWmI5eSIFKTMIHV8Mgvn5PNzZbcAiEApIN3XeZghDOpntuMS/FT+jsiVehCba6dVuhyiTlpGjc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1371536},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./style.css":"./dist/style.css","./api/link-preview":{"types":"./dist/api/link-preview.d.ts","import":"./dist/api/link-preview.mjs","require":"./dist/api/link-preview.js"}},"gitHead":"e9e8f3c2dbca8803f54a8152324e94112b990aec","private":false,"scripts":{"dev":"tsup src/index.ts src/api/link-preview.ts --dts --format cjs,esm --sourcemap --watch --onSuccess \"node scripts/copy-style.js\"","test":"vitest run","build":"tsup src/index.ts src/api/link-preview.ts --dts --format cjs,esm --sourcemap && node scripts/copy-style.js","test:ui":"vitest --ui","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","prepublishOnly":"npm run type-check && npm run build"},"_npmUser":{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},"repository":{"url":"git+https://github.com/lumir-company/editor.git","type":"git"},"_npmVersion":"10.9.2","description":"Image-only BlockNote rich text editor with S3 upload, customizable filename transforms, UUID support, and loading spinner","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","dependencies":{"@blocknote/core":"^0.35.0","@blocknote/react":"^0.35.0","@blocknote/mantine":"^0.35.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","jsdom":"^26.0.0","react":"^18.2.0","vitest":"^3.0.0","react-dom":"^18.2.0","@vitest/ui":"^3.0.0","typescript":"^5.4.0","@types/react":"^18.2.0","@types/react-dom":"^18.2.0","@vitest/coverage-v8":"^3.0.0","@vitejs/plugin-react":"^4.0.0","@testing-library/react":"^16.0.0","@testing-library/jest-dom":"^6.0.0","@testing-library/user-event":"^14.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/editor_0.4.8_1773725261919_0.8976471512082667","host":"s3://npm-registry-packages-npm-production"}},"0.4.9":{"name":"@lumir-company/editor","version":"0.4.9","keywords":["editor","blocknote","rich-text","react","typescript","image-editor","wysiwyg","s3-upload","loading-spinner","filename-transform","uuid","file-upload","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.4.9","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"rojaebl","email":"qgs0924@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"homepage":"https://github.com/lumir-company/editor#readme","bugs":{"url":"https://github.com/lumir-company/editor/issues"},"dist":{"shasum":"00fd7f670691ecf57858ee7724b0d0ffa55c0051","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.4.9.tgz","fileCount":15,"integrity":"sha512-6klYvZ/s7+8sWWxOnODs7xEwbdPCASgU7KhdWVaEpf4fDRTAqCtGoqgZDcGuWntYJqaiDx4T3WC89H6CMP50Rg==","signatures":[{"sig":"MEUCIG1GYK6Fiv5D63AsSaaiXw33hqaHw/bM3fXrbo3y3r1JAiEA1xXU+CyWKZxb2F3RQzOWPxXVrGf5v3ffq4tSEkby4UI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1376204},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./style.css":"./dist/style.css","./api/link-preview":{"types":"./dist/api/link-preview.d.ts","import":"./dist/api/link-preview.mjs","require":"./dist/api/link-preview.js"}},"gitHead":"e9e8f3c2dbca8803f54a8152324e94112b990aec","private":false,"scripts":{"dev":"tsup src/index.ts src/api/link-preview.ts --dts --format cjs,esm --sourcemap --watch --onSuccess \"node scripts/copy-style.js\"","test":"vitest run","build":"tsup src/index.ts src/api/link-preview.ts --dts --format cjs,esm --sourcemap && node scripts/copy-style.js","test:ui":"vitest --ui","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","prepublishOnly":"npm run type-check && npm run build"},"_npmUser":{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},"repository":{"url":"git+https://github.com/lumir-company/editor.git","type":"git"},"_npmVersion":"10.9.2","description":"Image-only BlockNote rich text editor with S3 upload, customizable filename transforms, UUID support, and loading spinner","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","dependencies":{"@blocknote/core":"^0.35.0","@blocknote/react":"^0.35.0","@blocknote/mantine":"^0.35.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","jsdom":"^26.0.0","react":"^18.2.0","vitest":"^3.0.0","react-dom":"^18.2.0","@vitest/ui":"^3.0.0","typescript":"^5.4.0","@types/react":"^18.2.0","@types/react-dom":"^18.2.0","@vitest/coverage-v8":"^3.0.0","@vitejs/plugin-react":"^4.0.0","@testing-library/react":"^16.0.0","@testing-library/jest-dom":"^6.0.0","@testing-library/user-event":"^14.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/editor_0.4.9_1773727836779_0.5760545772367185","host":"s3://npm-registry-packages-npm-production"}},"0.4.10":{"name":"@lumir-company/editor","version":"0.4.10","keywords":["editor","blocknote","rich-text","react","typescript","image-editor","wysiwyg","s3-upload","loading-spinner","filename-transform","uuid","file-upload","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.4.10","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"rojaebl","email":"qgs0924@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"homepage":"https://github.com/lumir-company/editor#readme","bugs":{"url":"https://github.com/lumir-company/editor/issues"},"dist":{"shasum":"c6f99d5e073dd37dd65f6318d3a44f186b24f652","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.4.10.tgz","fileCount":15,"integrity":"sha512-/YqfWiNG3AcLuvUed4kSrTxKCW+vCxNDeNgZE04teSiLyf6eGe8UkDuspx/VUW/esBAma+nyToggXXinsCclNA==","signatures":[{"sig":"MEUCIQCSirhhlTTcU+hdPOzxlJV+ANJtZCkEeUOfSZ/wU+xj3wIgbfYloHbv27M/zfnIgFihB44rHvHTnvrcSh/TdaT6+qk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1387569},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./style.css":"./dist/style.css","./api/link-preview":{"types":"./dist/api/link-preview.d.ts","import":"./dist/api/link-preview.mjs","require":"./dist/api/link-preview.js"}},"gitHead":"99e774141f3d692bbf34e0d56fca11ecc832a2e1","private":false,"scripts":{"dev":"tsup src/index.ts src/api/link-preview.ts --dts --format cjs,esm --sourcemap --watch --onSuccess \"node scripts/copy-style.js\"","test":"vitest run","build":"tsup src/index.ts src/api/link-preview.ts --dts --format cjs,esm --sourcemap && node scripts/copy-style.js","test:ui":"vitest --ui","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","prepublishOnly":"npm run type-check && npm run build"},"_npmUser":{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},"repository":{"url":"git+https://github.com/lumir-company/editor.git","type":"git"},"_npmVersion":"10.9.2","description":"Image-only BlockNote rich text editor with S3 upload, customizable filename transforms, UUID support, and loading spinner","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","dependencies":{"@blocknote/core":"^0.35.0","@blocknote/react":"^0.35.0","@blocknote/mantine":"^0.35.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","jsdom":"^26.0.0","react":"^18.2.0","vitest":"^3.0.0","react-dom":"^18.2.0","@vitest/ui":"^3.0.0","typescript":"^5.4.0","@types/react":"^18.2.0","@types/react-dom":"^18.2.0","@vitest/coverage-v8":"^3.0.0","@vitejs/plugin-react":"^4.0.0","@testing-library/react":"^16.0.0","@testing-library/jest-dom":"^6.0.0","@testing-library/user-event":"^14.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/editor_0.4.10_1773821129932_0.5955646235165895","host":"s3://npm-registry-packages-npm-production"}},"0.4.11":{"name":"@lumir-company/editor","version":"0.4.11","keywords":["editor","blocknote","rich-text","react","typescript","image-editor","wysiwyg","s3-upload","loading-spinner","filename-transform","uuid","file-upload","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.4.11","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"rojaebl","email":"qgs0924@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"homepage":"https://github.com/lumir-company/editor#readme","bugs":{"url":"https://github.com/lumir-company/editor/issues"},"dist":{"shasum":"80a1ff81ca33982a0a5abd5d41fab4b571c6fb41","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.4.11.tgz","fileCount":15,"integrity":"sha512-VYBCA+fFzV0sQ2aLUI+h4XOQ66W/eDjiJKFgVw5A40v54o7b0MRU2nL95+YhB53npGD8xGH39dz3N/RCYV3NVQ==","signatures":[{"sig":"MEQCIFpy/GTH5mfZlUP3WrUj6gvpIa8r6BbGa4D40xMgoJxeAiBFSRxw6NdvSDYLh1hawqZpmOL4LOBeP9x1x0nLY/OW4g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1390611},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./style.css":"./dist/style.css","./api/link-preview":{"types":"./dist/api/link-preview.d.ts","import":"./dist/api/link-preview.mjs","require":"./dist/api/link-preview.js"}},"gitHead":"deb5f2d2d4463e9d96a9250d84fce806b43ab894","private":false,"scripts":{"dev":"tsup src/index.ts src/api/link-preview.ts --dts --format cjs,esm --sourcemap --watch --onSuccess \"node scripts/copy-style.js\"","test":"vitest run","build":"tsup src/index.ts src/api/link-preview.ts --dts --format cjs,esm --sourcemap && node scripts/copy-style.js","test:ui":"vitest --ui","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","prepublishOnly":"npm run type-check && npm run build"},"_npmUser":{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},"repository":{"url":"git+https://github.com/lumir-company/editor.git","type":"git"},"_npmVersion":"10.9.2","description":"Image-only BlockNote rich text editor with S3 upload, customizable filename transforms, UUID support, and loading spinner","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","dependencies":{"@blocknote/core":"^0.35.0","@blocknote/react":"^0.35.0","@blocknote/mantine":"^0.35.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","jsdom":"^26.0.0","react":"^18.2.0","vitest":"^3.0.0","react-dom":"^18.2.0","@vitest/ui":"^3.0.0","typescript":"^5.4.0","@types/react":"^18.2.0","@types/react-dom":"^18.2.0","@vitest/coverage-v8":"^3.0.0","@vitejs/plugin-react":"^4.0.0","@testing-library/react":"^16.0.0","@testing-library/jest-dom":"^6.0.0","@testing-library/user-event":"^14.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/editor_0.4.11_1774499285999_0.8201195295035788","host":"s3://npm-registry-packages-npm-production"}},"0.4.12":{"name":"@lumir-company/editor","version":"0.4.12","keywords":["editor","blocknote","rich-text","react","typescript","image-editor","wysiwyg","s3-upload","loading-spinner","filename-transform","uuid","file-upload","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.4.12","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"rojaebl","email":"qgs0924@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"homepage":"https://github.com/lumir-company/editor#readme","bugs":{"url":"https://github.com/lumir-company/editor/issues"},"dist":{"shasum":"0d8f5a9aa2ab5299ac383d38c86bea9d49c748e8","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.4.12.tgz","fileCount":15,"integrity":"sha512-WL3oDb9rMDPomrLHe2I3ZcHnjW6CFmbaD0qgRLI+QFOFNUtX6BNbAz/0J7jPGIsE2VEoga/FeKMbQJVSo6jPwg==","signatures":[{"sig":"MEUCIQC2woJIfXaVA8R/b0drXIXRT25BeM09JyJoHrz1VBkKeAIgNDGuP/5c1g6VsvuhbeKp9Ckz5lUaULJ1gQU96l8uB1k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3531909},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./style.css":"./dist/style.css","./api/link-preview":{"types":"./dist/api/link-preview.d.ts","import":"./dist/api/link-preview.mjs","require":"./dist/api/link-preview.js"}},"gitHead":"cd031bfaa92f160985b40d74ee66bc3219d15faf","private":false,"scripts":{"dev":"tsup src/index.ts src/api/link-preview.ts --dts --format cjs,esm --sourcemap --watch --onSuccess \"node scripts/copy-style.js\"","test":"vitest run","build":"tsup src/index.ts src/api/link-preview.ts --dts --format cjs,esm --sourcemap && node scripts/copy-style.js","test:ui":"vitest --ui","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","prepublishOnly":"npm run type-check && npm run build"},"_npmUser":{"name":"wukddang","email":"dnr8874@naver.com"},"repository":{"url":"git+https://github.com/lumir-company/editor.git","type":"git"},"_npmVersion":"10.9.3","description":"Image-only BlockNote rich text editor with S3 upload, customizable filename transforms, UUID support, and loading spinner","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.18.0","dependencies":{"@blocknote/core":"^0.35.0","@blocknote/react":"^0.35.0","@blocknote/mantine":"^0.35.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","jsdom":"^26.0.0","react":"^18.2.0","vitest":"^3.0.0","react-dom":"^18.2.0","@vitest/ui":"^3.0.0","typescript":"^5.4.0","@types/react":"^18.2.0","@types/react-dom":"^18.2.0","@vitest/coverage-v8":"^3.0.0","@vitejs/plugin-react":"^4.0.0","@testing-library/react":"^16.0.0","@testing-library/jest-dom":"^6.0.0","@testing-library/user-event":"^14.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/editor_0.4.12_1775209180625_0.32216064978551917","host":"s3://npm-registry-packages-npm-production"}},"0.4.13":{"name":"@lumir-company/editor","version":"0.4.13","keywords":["editor","blocknote","rich-text","react","typescript","image-editor","wysiwyg","s3-upload","loading-spinner","filename-transform","uuid","file-upload","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.4.13","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"rojaebl","email":"qgs0924@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"homepage":"https://github.com/lumir-company/editor#readme","bugs":{"url":"https://github.com/lumir-company/editor/issues"},"dist":{"shasum":"979a1dc982cd3de4285495d4952bddc1c6e58a79","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.4.13.tgz","fileCount":15,"integrity":"sha512-Cen/WR3GrAPp4fI3j8FO4RcUY6udzVaC6A5cWZ4h3c+mxlF/QH4ZxCKrOrYCtllyo6vKDFuDbSFJLAkqjwx0Bw==","signatures":[{"sig":"MEUCIQD1gZWfnPPN2fkUne1NkuDKW7VJXJ6c4epzq4GjcKUNhAIgTMvemY0MmMQpXjBxd8bFcimZpUk4k4KmUPNNZa7TZ5E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1455443},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./style.css":"./dist/style.css","./api/link-preview":{"types":"./dist/api/link-preview.d.ts","import":"./dist/api/link-preview.mjs","require":"./dist/api/link-preview.js"}},"gitHead":"aec1f47d677156bdc856cf3090bb506692c820dd","private":false,"scripts":{"dev":"tsup src/index.ts src/api/link-preview.ts --dts --format cjs,esm --sourcemap --external @tiptap/core --watch --onSuccess \"node scripts/copy-style.js\"","test":"vitest run","build":"tsup src/index.ts src/api/link-preview.ts --dts --format cjs,esm --sourcemap --external @tiptap/core && node scripts/copy-style.js","test:ui":"vitest --ui","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","prepublishOnly":"npm run type-check && npm run build"},"_npmUser":{"name":"wukddang","email":"dnr8874@naver.com"},"repository":{"url":"git+https://github.com/lumir-company/editor.git","type":"git"},"_npmVersion":"10.9.3","description":"Image-only BlockNote rich text editor with S3 upload, customizable filename transforms, UUID support, and loading spinner","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.18.0","dependencies":{"@blocknote/core":"^0.35.0","@blocknote/react":"^0.35.0","@blocknote/mantine":"^0.35.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","jsdom":"^26.0.0","react":"^18.2.0","vitest":"^3.0.0","react-dom":"^18.2.0","@vitest/ui":"^3.0.0","typescript":"^5.4.0","@types/react":"^18.2.0","@types/react-dom":"^18.2.0","@vitest/coverage-v8":"^3.0.0","@vitejs/plugin-react":"^4.0.0","@testing-library/react":"^16.0.0","@testing-library/jest-dom":"^6.0.0","@testing-library/user-event":"^14.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0","@tiptap/core":">=2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/editor_0.4.13_1775222938264_0.11179316770094916","host":"s3://npm-registry-packages-npm-production"}},"0.4.14":{"name":"@lumir-company/editor","version":"0.4.14","keywords":["editor","blocknote","rich-text","react","typescript","image-editor","wysiwyg","s3-upload","loading-spinner","filename-transform","uuid","file-upload","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.4.14","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"seowoohyeok","email":"tjdngur22@gmail.com"},{"name":"rojaebl","email":"qgs0924@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"homepage":"https://github.com/lumir-company/editor#readme","bugs":{"url":"https://github.com/lumir-company/editor/issues"},"dist":{"shasum":"2af4356a0cac9be534eebcdaaebb0edf42ad4244","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.4.14.tgz","fileCount":15,"integrity":"sha512-iZSwWCW0QYrmvHSx9UbyaVpt0ELfKE4MzPtts9rjnDaU/nd4tNRPeuJTuRi+irxjIsVGkmVahvDKsEXV4eeNkg==","signatures":[{"sig":"MEUCIQD/N97NFgitGGGAvHh3fEkMPk0JJkW0zXg5dP+2gYQHJQIgMhB3tnkIf+cQv8TRJekKW5UDuWOqdypKdAfXTTy5K7s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1535349},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./style.css":"./dist/style.css","./api/link-preview":{"types":"./dist/api/link-preview.d.ts","import":"./dist/api/link-preview.mjs","require":"./dist/api/link-preview.js"}},"gitHead":"22a9115c5c5f31e4af8a801243ca4a91a068a265","private":false,"scripts":{"dev":"tsup src/index.ts src/api/link-preview.ts --dts --format cjs,esm --sourcemap --external @tiptap/core --watch --onSuccess \"node scripts/copy-style.js\"","test":"vitest run","build":"tsup src/index.ts src/api/link-preview.ts --dts --format cjs,esm --sourcemap --external @tiptap/core && node scripts/copy-style.js","test:ui":"vitest --ui","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","prepublishOnly":"npm run type-check && npm run build"},"_npmUser":{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},"repository":{"url":"git+https://github.com/lumir-company/editor.git","type":"git"},"_npmVersion":"10.9.2","description":"Image-only BlockNote rich text editor with S3 upload, customizable filename transforms, UUID support, and loading spinner","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","dependencies":{"@blocknote/core":"^0.35.0","@blocknote/react":"^0.35.0","@blocknote/mantine":"^0.35.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","jsdom":"^26.0.0","react":"^18.2.0","vitest":"^3.0.0","react-dom":"^18.2.0","@vitest/ui":"^3.0.0","typescript":"^5.4.0","@types/react":"^18.2.0","@types/react-dom":"^18.2.0","@vitest/coverage-v8":"^3.0.0","@vitejs/plugin-react":"^4.0.0","@testing-library/react":"^16.0.0","@testing-library/jest-dom":"^6.0.0","@testing-library/user-event":"^14.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0","@tiptap/core":">=2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/editor_0.4.14_1780046157198_0.7103794270146135","host":"s3://npm-registry-packages-npm-production"}},"0.4.15":{"name":"@lumir-company/editor","version":"0.4.15","keywords":["editor","blocknote","rich-text","react","typescript","image-editor","wysiwyg","s3-upload","loading-spinner","filename-transform","uuid","file-upload","table","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.4.15","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"seowoohyeok","email":"tjdngur22@gmail.com"},{"name":"rojaebl","email":"qgs0924@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"homepage":"https://github.com/lumir-company/editor#readme","bugs":{"url":"https://github.com/lumir-company/editor/issues"},"dist":{"shasum":"33b6ad059e118b98b0143252c322bb389132916b","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.4.15.tgz","fileCount":15,"integrity":"sha512-xmFCwoB4Cwoo9kqm5Eh5Z6NtMQxpx7TK5fvt6vT/ZZu4ZcxbPXupxhR0PA7X/mFWga8HGVt6aCpuD2IgwaALYA==","signatures":[{"sig":"MEYCIQDhWo8D3Cek+ij62mgCr6mReKfoLKDe/joaz3erOAdv5gIhANGg2dnXhipW08ivb9IbjSFOB6XWudrWkXyG/cWEvAlC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1728177},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./style.css":"./dist/style.css","./api/link-preview":{"types":"./dist/api/link-preview.d.ts","import":"./dist/api/link-preview.mjs","require":"./dist/api/link-preview.js"}},"gitHead":"de5cf474d776f9a863204b0f74a2adce9b195013","private":false,"scripts":{"dev":"tsup src/index.ts src/api/link-preview.ts --dts --format cjs,esm --sourcemap --external @tiptap/core --watch --onSuccess \"node scripts/copy-style.js\"","test":"vitest run","build":"tsup src/index.ts src/api/link-preview.ts --dts --format cjs,esm --sourcemap --external @tiptap/core && node scripts/copy-style.js","test:ui":"vitest --ui","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","prepublishOnly":"npm run type-check && npm run build"},"_npmUser":{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},"repository":{"url":"git+https://github.com/lumir-company/editor.git","type":"git"},"_npmVersion":"10.9.2","description":"Image-only BlockNote rich text editor with S3 upload, customizable filename transforms, UUID support, and loading spinner","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","dependencies":{"@blocknote/core":"^0.35.0","@blocknote/react":"^0.35.0","@blocknote/mantine":"^0.35.0","@floating-ui/react":"^0.26.28"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","jsdom":"^26.0.0","react":"^18.2.0","vitest":"^3.0.0","react-dom":"^18.2.0","@vitest/ui":"^3.0.0","typescript":"^5.4.0","@types/react":"^18.2.0","@types/react-dom":"^18.2.0","@vitest/coverage-v8":"^3.0.0","@vitejs/plugin-react":"^4.0.0","@testing-library/react":"^16.0.0","@testing-library/jest-dom":"^6.0.0","@testing-library/user-event":"^14.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0","@tiptap/core":">=2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/editor_0.4.15_1780619859494_0.9085607049516702","host":"s3://npm-registry-packages-npm-production"}},"0.4.16":{"name":"@lumir-company/editor","version":"0.4.16","keywords":["editor","blocknote","rich-text","react","typescript","image-editor","wysiwyg","s3-upload","loading-spinner","filename-transform","uuid","file-upload","table","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.4.16","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"seowoohyeok","email":"tjdngur22@gmail.com"},{"name":"rojaebl","email":"qgs0924@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"homepage":"https://github.com/lumir-company/editor#readme","bugs":{"url":"https://github.com/lumir-company/editor/issues"},"dist":{"shasum":"1e321cd6d6a1914be575ded555ddf5e06a1e872e","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.4.16.tgz","fileCount":15,"integrity":"sha512-eqIDAx+txJKDuakND0Lz1WFE8DaxsyNYrwPHLWDB6UL7kcmD0BXK1Bmiw2u/Lu9UFQaCkRC3kQxWlfo9C12c8A==","signatures":[{"sig":"MEYCIQC+FE7sOjuR7QkwTnsaXSZ71esl93HbpeYA9j1aEXf42AIhAJp6K5MAjSW0pSVcPoePAJMYWxflexRQ7/Fxu5C1hEnV","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1816354},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./style.css":"./dist/style.css","./api/link-preview":{"types":"./dist/api/link-preview.d.ts","import":"./dist/api/link-preview.mjs","require":"./dist/api/link-preview.js"}},"gitHead":"820accbf0990f5500f75045cd1e116442e09739c","private":false,"scripts":{"dev":"tsup src/index.ts src/api/link-preview.ts --dts --format cjs,esm --sourcemap --external @tiptap/core --watch --onSuccess \"node scripts/copy-style.js\"","test":"vitest run","build":"tsup src/index.ts src/api/link-preview.ts --dts --format cjs,esm --sourcemap --external @tiptap/core && node scripts/copy-style.js","test:ui":"vitest --ui","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","prepublishOnly":"npm run type-check && npm run build"},"_npmUser":{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},"repository":{"url":"git+https://github.com/lumir-company/editor.git","type":"git"},"_npmVersion":"10.9.2","description":"Image-only BlockNote rich text editor with S3 upload, customizable filename transforms, UUID support, and loading spinner","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","dependencies":{"@blocknote/core":"^0.35.0","@blocknote/react":"^0.35.0","@blocknote/mantine":"^0.35.0","@floating-ui/react":"^0.26.28"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","jsdom":"^26.0.0","react":"^18.2.0","vitest":"^3.0.0","react-dom":"^18.2.0","@vitest/ui":"^3.0.0","typescript":"^5.4.0","@types/react":"^18.2.0","@types/react-dom":"^18.2.0","@vitest/coverage-v8":"^3.0.0","@vitejs/plugin-react":"^4.0.0","@testing-library/react":"^16.0.0","@testing-library/jest-dom":"^6.0.0","@testing-library/user-event":"^14.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0","@tiptap/core":">=2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/editor_0.4.16_1780877364201_0.7041002849740658","host":"s3://npm-registry-packages-npm-production"}},"0.4.17":{"name":"@lumir-company/editor","version":"0.4.17","keywords":["editor","blocknote","rich-text","react","typescript","image-editor","wysiwyg","s3-upload","loading-spinner","filename-transform","uuid","file-upload","table","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.4.17","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"seowoohyeok","email":"tjdngur22@gmail.com"},{"name":"rojaebl","email":"qgs0924@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"homepage":"https://github.com/lumir-company/editor#readme","bugs":{"url":"https://github.com/lumir-company/editor/issues"},"dist":{"shasum":"bdd76f774a44b7be5962932376623931e3819ef3","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.4.17.tgz","fileCount":15,"integrity":"sha512-IcfOvWPs1TPZ45juZ3jhAZ84KcYcsHp4EZczwB5kEEqJ6u3SoeTguMd41sR62pDZ3g3JcD/tFAg0Y/g17clJaw==","signatures":[{"sig":"MEUCIQCQmZwK7+3QaWbFfL88HcsCqmea2EwDx7aTY40D7naMwgIgP6pzX3vq1CCxulRjjnATt+59JwKUH+51oggNAi5COH8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2091698},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./style.css":"./dist/style.css","./api/link-preview":{"types":"./dist/api/link-preview.d.ts","import":"./dist/api/link-preview.mjs","require":"./dist/api/link-preview.js"}},"gitHead":"9977f60f2956ce1c860e45a4d14934b2faae6d6f","private":false,"scripts":{"dev":"tsup src/index.ts src/api/link-preview.ts --dts --format cjs,esm --sourcemap --external @tiptap/core --watch --onSuccess \"node scripts/copy-style.js\"","test":"vitest run","build":"tsup src/index.ts src/api/link-preview.ts --dts --format cjs,esm --sourcemap --external @tiptap/core && node scripts/copy-style.js","test:ui":"vitest --ui","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","prepublishOnly":"npm run type-check && npm run build"},"_npmUser":{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},"repository":{"url":"git+https://github.com/lumir-company/editor.git","type":"git"},"_npmVersion":"10.9.2","description":"Image-only BlockNote rich text editor with S3 upload, customizable filename transforms, UUID support, and loading spinner","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","dependencies":{"@blocknote/core":"^0.35.0","@blocknote/react":"^0.35.0","prosemirror-view":"^1.38.1","prosemirror-model":"^1.25.1","prosemirror-state":"^1.4.3","@blocknote/mantine":"^0.35.0","@floating-ui/react":"^0.26.28","prosemirror-tables":"^1.6.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","jsdom":"^26.0.0","react":"^18.2.0","vitest":"^3.0.0","react-dom":"^18.2.0","@vitest/ui":"^3.0.0","typescript":"^5.4.0","@types/react":"^18.2.0","@types/react-dom":"^18.2.0","@vitest/coverage-v8":"^3.0.0","@vitejs/plugin-react":"^4.0.0","@testing-library/react":"^16.0.0","@testing-library/jest-dom":"^6.0.0","@testing-library/user-event":"^14.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0","@tiptap/core":">=2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/editor_0.4.17_1781582540861_0.07960034252766657","host":"s3://npm-registry-packages-npm-production"}},"0.4.18":{"name":"@lumir-company/editor","version":"0.4.18","keywords":["editor","blocknote","rich-text","react","typescript","image-editor","wysiwyg","s3-upload","loading-spinner","filename-transform","uuid","file-upload","table","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.4.18","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"seowoohyeok","email":"tjdngur22@gmail.com"},{"name":"rojaebl","email":"qgs0924@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"homepage":"https://github.com/lumir-company/editor#readme","bugs":{"url":"https://github.com/lumir-company/editor/issues"},"dist":{"shasum":"cf4c2484f2bdd9c528754a47659aa0b68c2aac84","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.4.18.tgz","fileCount":15,"integrity":"sha512-MA5MTuMnW+Op5ghGSFDW/l2v+CXHuJ4QemEHU+gAAXui0dTkvhlD7+jmcz7CWhWMLXS25BEtmTbX63C5zPjkyQ==","signatures":[{"sig":"MEUCIDRWunjYTyp4PXa/CVHhhuMlS8uC07MPr3CCzdNX5qSaAiEAyrG3WCmxvMgRz+orsvvEruz0+9Jua8nOUiU5RjaIYVI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2132175},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./style.css":"./dist/style.css","./api/link-preview":{"types":"./dist/api/link-preview.d.ts","import":"./dist/api/link-preview.mjs","require":"./dist/api/link-preview.js"}},"gitHead":"52b888b06e75177fe64a3149a0592460c0e72e54","private":false,"scripts":{"dev":"tsup src/index.ts src/api/link-preview.ts --dts --format cjs,esm --sourcemap --external @tiptap/core --watch --onSuccess \"node scripts/copy-style.js\"","test":"vitest run","build":"tsup src/index.ts src/api/link-preview.ts --dts --format cjs,esm --sourcemap --external @tiptap/core && node scripts/copy-style.js","test:ui":"vitest --ui","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","prepublishOnly":"npm run type-check && npm run build"},"_npmUser":{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},"repository":{"url":"git+https://github.com/lumir-company/editor.git","type":"git"},"_npmVersion":"10.9.2","description":"Image-only BlockNote rich text editor with S3 upload, customizable filename transforms, UUID support, and loading spinner","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","dependencies":{"@blocknote/core":"^0.35.0","@blocknote/react":"^0.35.0","prosemirror-view":"^1.38.1","prosemirror-model":"^1.25.1","prosemirror-state":"^1.4.3","@blocknote/mantine":"^0.35.0","@floating-ui/react":"^0.26.28","prosemirror-tables":"^1.6.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","jsdom":"^26.0.0","react":"^18.2.0","vitest":"^3.0.0","react-dom":"^18.2.0","@vitest/ui":"^3.0.0","typescript":"^5.4.0","@types/react":"^18.2.0","@types/react-dom":"^18.2.0","@vitest/coverage-v8":"^3.0.0","@vitejs/plugin-react":"^4.0.0","@testing-library/react":"^16.0.0","@testing-library/jest-dom":"^6.0.0","@testing-library/user-event":"^14.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0","@tiptap/core":">=2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/editor_0.4.18_1781672084743_0.4771019589476193","host":"s3://npm-registry-packages-npm-production"}},"0.4.19":{"name":"@lumir-company/editor","version":"0.4.19","keywords":["editor","blocknote","rich-text","react","typescript","image-editor","wysiwyg","s3-upload","loading-spinner","filename-transform","uuid","file-upload","table","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.4.19","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"seowoohyeok","email":"tjdngur22@gmail.com"},{"name":"rojaebl","email":"qgs0924@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"homepage":"https://github.com/lumir-company/editor#readme","bugs":{"url":"https://github.com/lumir-company/editor/issues"},"dist":{"shasum":"8b8152cabe71e50c0107eab30680504eec21a653","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.4.19.tgz","fileCount":15,"integrity":"sha512-mBhr80gRt1i2H7k+u1LTtoI6zXtxb85Pk2s2z+UPrOLwiyAzQtFX04cenUq3Tdoo7paWWUHYjpK6gZIVDNE2ng==","signatures":[{"sig":"MEUCIQCo93gLojdzG+pFIFfTy43fsqaaHP6BzrfbYwmc54EHxwIgNLLEQ9zsDu2SMiduwzXuIXMMSYn6ja4priH2eS0Glsk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2195000},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./style.css":"./dist/style.css","./api/link-preview":{"types":"./dist/api/link-preview.d.ts","import":"./dist/api/link-preview.mjs","require":"./dist/api/link-preview.js"}},"gitHead":"2f94cb160e02fff579d5d1ce02db095bb0803ebc","private":false,"scripts":{"dev":"tsup src/index.ts src/api/link-preview.ts --dts --format cjs,esm --sourcemap --external @tiptap/core --watch --onSuccess \"node scripts/copy-style.js\"","test":"vitest run","build":"tsup src/index.ts src/api/link-preview.ts --dts --format cjs,esm --sourcemap --external @tiptap/core && node scripts/copy-style.js","test:ui":"vitest --ui","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","prepublishOnly":"npm run type-check && npm run build"},"_npmUser":{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},"repository":{"url":"git+https://github.com/lumir-company/editor.git","type":"git"},"_npmVersion":"10.9.2","description":"Image-only BlockNote rich text editor with S3 upload, customizable filename transforms, UUID support, and loading spinner","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","dependencies":{"@blocknote/core":"^0.35.0","@blocknote/react":"^0.35.0","prosemirror-view":"^1.38.1","prosemirror-model":"^1.25.1","prosemirror-state":"^1.4.3","@blocknote/mantine":"^0.35.0","@floating-ui/react":"^0.26.28","prosemirror-tables":"^1.6.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","jsdom":"^26.0.0","react":"^18.2.0","vitest":"^3.0.0","react-dom":"^18.2.0","@vitest/ui":"^3.0.0","typescript":"^5.4.0","@types/react":"^18.2.0","@types/react-dom":"^18.2.0","@vitest/coverage-v8":"^3.0.0","@vitejs/plugin-react":"^4.0.0","@testing-library/react":"^16.0.0","@testing-library/jest-dom":"^6.0.0","@testing-library/user-event":"^14.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0","@tiptap/core":">=2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/editor_0.4.19_1781688109210_0.5592723645492677","host":"s3://npm-registry-packages-npm-production"}},"0.4.21":{"name":"@lumir-company/editor","version":"0.4.21","keywords":["editor","blocknote","rich-text","react","typescript","image-editor","wysiwyg","s3-upload","loading-spinner","filename-transform","uuid","file-upload","table","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.4.21","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"seowoohyeok","email":"tjdngur22@gmail.com"},{"name":"rojaebl","email":"qgs0924@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"homepage":"https://github.com/lumir-company/editor#readme","bugs":{"url":"https://github.com/lumir-company/editor/issues"},"dist":{"shasum":"5e16346264bd1ffcbb5905acc2f88a9db80a8685","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.4.21.tgz","fileCount":15,"integrity":"sha512-9NMp5lWTLWnOlMAgmg7LgUg7AyA2kaqV4Yxx/6Zv9ydyGUHKPpFtsxhSBgC9sK8e4ZiHZs0ZQXjdKge1in9STg==","signatures":[{"sig":"MEQCIA1om4ni5mYyK+6Grl/Awpm9AM49/VD/DxBI5FGWYZVCAiAQ9STg20oKJxjUINU/u5UD7eB0NkqtFQxFcGXQ1osQBg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2252470},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./style.css":"./dist/style.css","./api/link-preview":{"types":"./dist/api/link-preview.d.ts","import":"./dist/api/link-preview.mjs","require":"./dist/api/link-preview.js"}},"gitHead":"4cf0296e3f3d4a99d6de3f515b644a934f5ea8b1","private":false,"scripts":{"dev":"tsup src/index.ts src/api/link-preview.ts --dts --format cjs,esm --sourcemap --external @tiptap/core --watch --onSuccess \"node scripts/copy-style.js\"","test":"vitest run","build":"tsup src/index.ts src/api/link-preview.ts --dts --format cjs,esm --sourcemap --external @tiptap/core && node scripts/copy-style.js","test:ui":"vitest --ui","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","prepublishOnly":"npm run type-check && npm run build"},"_npmUser":{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},"repository":{"url":"git+https://github.com/lumir-company/editor.git","type":"git"},"_npmVersion":"10.9.2","description":"Image-only BlockNote rich text editor with S3 upload, customizable filename transforms, UUID support, and loading spinner","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","dependencies":{"@blocknote/core":"^0.35.0","@blocknote/react":"^0.35.0","prosemirror-view":"^1.38.1","prosemirror-model":"^1.25.1","prosemirror-state":"^1.4.3","@blocknote/mantine":"^0.35.0","@floating-ui/react":"^0.26.28","prosemirror-tables":"^1.6.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","jsdom":"^26.0.0","react":"^18.2.0","vitest":"^3.0.0","react-dom":"^18.2.0","@vitest/ui":"^3.0.0","typescript":"^5.4.0","@types/react":"^18.2.0","@types/react-dom":"^18.2.0","@vitest/coverage-v8":"^3.0.0","@vitejs/plugin-react":"^4.0.0","@testing-library/react":"^16.0.0","@testing-library/jest-dom":"^6.0.0","@testing-library/user-event":"^14.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0","@tiptap/core":">=2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/editor_0.4.21_1781762300754_0.08578380328401591","host":"s3://npm-registry-packages-npm-production"}},"0.4.22":{"name":"@lumir-company/editor","version":"0.4.22","keywords":["editor","blocknote","rich-text","react","typescript","image-editor","wysiwyg","s3-upload","loading-spinner","filename-transform","uuid","file-upload","table","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.4.22","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"seowoohyeok","email":"tjdngur22@gmail.com"},{"name":"rojaebl","email":"qgs0924@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"homepage":"https://github.com/lumir-company/editor#readme","bugs":{"url":"https://github.com/lumir-company/editor/issues"},"dist":{"shasum":"277e7edb9fb972e7fa6d5ed6390b8cc300667308","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.4.22.tgz","fileCount":15,"integrity":"sha512-LH9i0vkXnUzFhKsa1ICLHObuCUi2TEkkwJMSoEpbsxp8WbA20dqCV3c6UsYYDm5gWaiLbpYf3CEzy5nxA8b3ew==","signatures":[{"sig":"MEQCIDiHQ1gYuRka00f5ajj9cHzq655Zf49CK0kzZEYft0R7AiBlEfYDfFvcnMP8oxxjHXK2b0BT5YPiPTyjyr8SU71j1g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2292414},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./style.css":"./dist/style.css","./api/link-preview":{"types":"./dist/api/link-preview.d.ts","import":"./dist/api/link-preview.mjs","require":"./dist/api/link-preview.js"}},"gitHead":"06830fa8d25137d0d4d65bec472dfb73aeacf8c7","private":false,"scripts":{"dev":"tsup src/index.ts src/api/link-preview.ts --dts --format cjs,esm --sourcemap --external @tiptap/core --watch --onSuccess \"node scripts/copy-style.js\"","test":"vitest run","build":"tsup src/index.ts src/api/link-preview.ts --dts --format cjs,esm --sourcemap --external @tiptap/core && node scripts/copy-style.js","test:ui":"vitest --ui","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","prepublishOnly":"npm run type-check && npm run build"},"_npmUser":{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},"repository":{"url":"git+https://github.com/lumir-company/editor.git","type":"git"},"_npmVersion":"10.9.2","description":"Image-only BlockNote rich text editor with S3 upload, customizable filename transforms, UUID support, and loading spinner","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","dependencies":{"@blocknote/core":"^0.35.0","@blocknote/react":"^0.35.0","prosemirror-view":"^1.38.1","prosemirror-model":"^1.25.1","prosemirror-state":"^1.4.3","@blocknote/mantine":"^0.35.0","@floating-ui/react":"^0.26.28","prosemirror-tables":"^1.6.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","jsdom":"^26.0.0","react":"^18.2.0","vitest":"^3.0.0","react-dom":"^18.2.0","@vitest/ui":"^3.0.0","typescript":"^5.4.0","@types/react":"^18.2.0","@types/react-dom":"^18.2.0","@vitest/coverage-v8":"^3.0.0","@vitejs/plugin-react":"^4.0.0","@testing-library/react":"^16.0.0","@testing-library/jest-dom":"^6.0.0","@testing-library/user-event":"^14.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0","@tiptap/core":">=2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/editor_0.4.22_1782090438208_0.5303837586495224","host":"s3://npm-registry-packages-npm-production"}},"0.4.23":{"name":"@lumir-company/editor","version":"0.4.23","keywords":["editor","blocknote","rich-text","react","typescript","image-editor","wysiwyg","s3-upload","loading-spinner","filename-transform","uuid","file-upload","table","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.4.23","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"seowoohyeok","email":"tjdngur22@gmail.com"},{"name":"rojaebl","email":"qgs0924@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"homepage":"https://github.com/lumir-company/editor#readme","bugs":{"url":"https://github.com/lumir-company/editor/issues"},"dist":{"shasum":"a2a67ffa80e657d59203ede41c2ed77bae16daaa","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.4.23.tgz","fileCount":15,"integrity":"sha512-5baeEVZ8fyTP2Y/NCanoBnK/j4xT5pltczuNdKuKxWBPPj27aw/urAUPcQ9zWKBN5Q9YGgZp2kaHzhpH01lTPQ==","signatures":[{"sig":"MEUCIQCM1BnlfwR3n1gYWe8Wt+bvdwGJGhmpYgs9vhfDWtmntgIgdqBdKTZNHQfdmIf/hCqS/33n0hLOMEFo1D2UZoSWUHw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2319589},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./style.css":"./dist/style.css","./api/link-preview":{"types":"./dist/api/link-preview.d.ts","import":"./dist/api/link-preview.mjs","require":"./dist/api/link-preview.js"}},"gitHead":"95d4e470dbfb31d8628b360ed3bd6b28ce7cae95","private":false,"scripts":{"dev":"tsup src/index.ts src/api/link-preview.ts --dts --format cjs,esm --sourcemap --external @tiptap/core --watch --onSuccess \"node scripts/copy-style.js\"","test":"vitest run","build":"tsup src/index.ts src/api/link-preview.ts --dts --format cjs,esm --sourcemap --external @tiptap/core && node scripts/copy-style.js","test:ui":"vitest --ui","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","prepublishOnly":"npm run type-check && npm run build"},"_npmUser":{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},"repository":{"url":"git+https://github.com/lumir-company/editor.git","type":"git"},"_npmVersion":"10.9.2","description":"Image-only BlockNote rich text editor with S3 upload, customizable filename transforms, UUID support, and loading spinner","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","dependencies":{"@blocknote/core":"^0.35.0","@blocknote/react":"^0.35.0","prosemirror-view":"^1.38.1","prosemirror-model":"^1.25.1","prosemirror-state":"^1.4.3","@blocknote/mantine":"^0.35.0","@floating-ui/react":"^0.26.28","prosemirror-tables":"^1.6.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","jsdom":"^26.0.0","react":"^18.2.0","vitest":"^3.0.0","react-dom":"^18.2.0","@vitest/ui":"^3.0.0","typescript":"^5.4.0","@types/react":"^18.2.0","@types/react-dom":"^18.2.0","@vitest/coverage-v8":"^3.0.0","@vitejs/plugin-react":"^4.0.0","@testing-library/react":"^16.0.0","@testing-library/jest-dom":"^6.0.0","@testing-library/user-event":"^14.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0","@tiptap/core":">=2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/editor_0.4.23_1782109300317_0.8057763019288433","host":"s3://npm-registry-packages-npm-production"}},"0.4.25":{"name":"@lumir-company/editor","version":"0.4.25","keywords":["editor","blocknote","rich-text","react","typescript","image-editor","wysiwyg","s3-upload","loading-spinner","filename-transform","uuid","file-upload","table","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.4.25","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"homepage":"https://github.com/lumir-company/editor#readme","bugs":{"url":"https://github.com/lumir-company/editor/issues"},"dist":{"shasum":"6060d82188c78c34fc4bea9f00477499f8b23da6","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.4.25.tgz","fileCount":15,"integrity":"sha512-sErYG9A2RQAJg67b3RWKu5DObBCeL4/A0yCeRBkhNTvVowCMTT0hzj8+MBVR5EaC+LO7OOsKqei3X2e8QQOCMg==","signatures":[{"sig":"MEQCIADgdqjHJfM62hGSA2L2LO1ep/DWfk+5hZWUGKcN8R9fAiBJCvSYHhXnQ3oReC0aC6xP+Yo9sX4pKVn8IR3IdmaBwg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2274471},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./style.css":"./dist/style.css","./api/link-preview":{"types":"./dist/api/link-preview.d.ts","import":"./dist/api/link-preview.mjs","require":"./dist/api/link-preview.js"}},"gitHead":"9ffe3edf01258a7e1de379b579d9926821d1a8c8","private":false,"scripts":{"dev":"tsup src/index.ts src/api/link-preview.ts --dts --format cjs,esm --sourcemap --external @tiptap/core --watch --onSuccess \"node scripts/copy-style.js\"","test":"vitest run","build":"tsup src/index.ts src/api/link-preview.ts --dts --format cjs,esm --sourcemap --external @tiptap/core && node scripts/copy-style.js","test:ui":"vitest --ui","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","prepublishOnly":"npm run type-check && npm run build"},"_npmUser":{"name":"kimjongsik","email":"otw1917@gmail.com"},"overrides":{"@tiptap/core":"^2.27.2"},"repository":{"url":"git+https://github.com/lumir-company/editor.git","type":"git"},"_npmVersion":"10.9.8","description":"Image-only BlockNote rich text editor with S3 upload, customizable filename transforms, UUID support, and loading spinner","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.23.1","dependencies":{"@blocknote/core":"^0.35.0","@blocknote/react":"^0.35.0","prosemirror-view":"^1.38.1","prosemirror-model":"^1.25.1","prosemirror-state":"^1.4.3","@blocknote/mantine":"^0.35.0","@floating-ui/react":"^0.26.28","prosemirror-tables":"^1.6.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","jsdom":"^26.0.0","react":"^18.2.0","vitest":"^3.0.0","react-dom":"^18.2.0","@vitest/ui":"^3.0.0","typescript":"^5.4.0","@types/react":"^18.2.0","@types/react-dom":"^18.2.0","@vitest/coverage-v8":"^3.0.0","@vitejs/plugin-react":"^4.0.0","@testing-library/react":"^16.0.0","@testing-library/jest-dom":"^6.0.0","@testing-library/user-event":"^14.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0","@tiptap/core":"^2.27.2"},"_npmOperationalInternal":{"tmp":"tmp/editor_0.4.25_1782559102208_0.9734874536502542","host":"s3://npm-registry-packages-npm-production"}},"0.4.26":{"name":"@lumir-company/editor","version":"0.4.26","keywords":["editor","blocknote","rich-text","react","typescript","image-editor","wysiwyg","s3-upload","loading-spinner","filename-transform","uuid","file-upload","table","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.4.26","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"homepage":"https://github.com/lumir-company/editor#readme","bugs":{"url":"https://github.com/lumir-company/editor/issues"},"dist":{"shasum":"b3cce7e629e1472e9df443cdc4791c91d7af6245","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.4.26.tgz","fileCount":15,"integrity":"sha512-2RDRixxh+IFNlwMPAhr2xPrvPnaiqGpIGOHAZ8WTni0iZzX6nA1h/scOyxyz5ncwl3YgNWtIn+TNs98uIjq9sQ==","signatures":[{"sig":"MEQCIC9fKzldd7xrwrb4UDkDB4ZDhalW8NNRhJkhp2H8DcFlAiAQ0KutfX62CFRZZfitcRWCsVUVZ1wNsSHibX/z7d6q9w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2274471},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./style.css":"./dist/style.css","./api/link-preview":{"types":"./dist/api/link-preview.d.ts","import":"./dist/api/link-preview.mjs","require":"./dist/api/link-preview.js"}},"gitHead":"aea341ffb5c3d9976d61b064fbd69e9ffb60071c","private":false,"scripts":{"dev":"tsup src/index.ts src/api/link-preview.ts --dts --format cjs,esm --sourcemap --external @tiptap/core --watch --onSuccess \"node scripts/copy-style.js\"","test":"vitest run","build":"tsup src/index.ts src/api/link-preview.ts --dts --format cjs,esm --sourcemap --external @tiptap/core && node scripts/copy-style.js","test:ui":"vitest --ui","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","prepublishOnly":"npm run type-check && npm run build"},"_npmUser":{"name":"kimjongsik","email":"otw1917@gmail.com"},"overrides":{"@tiptap/core":"^2.27.2"},"repository":{"url":"git+https://github.com/lumir-company/editor.git","type":"git"},"_npmVersion":"10.9.8","description":"Image-only BlockNote rich text editor with S3 upload, customizable filename transforms, UUID support, and loading spinner","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.23.1","dependencies":{"@blocknote/core":"^0.35.0","@blocknote/react":"^0.35.0","prosemirror-view":"^1.38.1","prosemirror-model":"^1.25.1","prosemirror-state":"^1.4.3","@blocknote/mantine":"^0.35.0","@floating-ui/react":"^0.26.28","prosemirror-tables":"^1.6.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","jsdom":"^26.0.0","react":"^18.2.0","vitest":"^3.0.0","react-dom":"^18.2.0","@vitest/ui":"^3.0.0","typescript":"^5.4.0","@types/react":"^18.2.0","@types/react-dom":"^18.2.0","@vitest/coverage-v8":"^3.0.0","@vitejs/plugin-react":"^4.0.0","@testing-library/react":"^16.0.0","@testing-library/jest-dom":"^6.0.0","@testing-library/user-event":"^14.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0","@tiptap/core":"^2.27.2"},"_npmOperationalInternal":{"tmp":"tmp/editor_0.4.26_1782559177976_0.666878578211537","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@lumir-company/editor","version":"0.5.0","keywords":["editor","rich-text","wysiwyg","vanilla","react","s3-upload","table","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.5.0","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"dist":{"shasum":"b0b28f30f11bc5884f7c557d5b0c3c4b03c1aaed","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.5.0.tgz","fileCount":18,"integrity":"sha512-q5J+f3aPo9n4x5rWtRaGZde0lYKJH81LkdOQ6V222AcV2JDmuuoKtTxzce33DMTPpJgyqZFAftHXgBcB61p98Q==","signatures":[{"sig":"MEQCIArmR/PKDsu1nB7M6bp3Bjn0hhNfTmgnO4OfKVKzp/xyAiBA7v+ipiYgdbcby5OkCl/YobhC/4lSH/SjDbQXv8cHDg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5756707},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./core":{"types":"./dist/core.d.ts","import":"./dist/core.js","require":"./dist/core.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"},"./style.css":"./dist/style.css","./package.json":"./package.json"},"gitHead":"f81227c3de10b1250677209da4950e430b75cdd5","scripts":{"test":"vitest run","build":"node scripts/build.mjs","test:watch":"vitest","check:types":"tsc -p tsconfig.types.json","prepublishOnly":"npm run test && npm run check:types && npm run build"},"_npmUser":{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},"_npmVersion":"10.9.2","description":"LumirEditor — vanilla (HTML/JS/CSS) rich text editor, BlockNote-JSON round-trip compatible.","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","react":"^18.2.0","vitest":"^3.0.0","esbuild":"^0.24.0","react-dom":"^18.2.0","typescript":"^6.0.3","@types/react":"^19.2.17"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/editor_0.5.0_1782977932724_0.12962034026738922","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@lumir-company/editor","version":"0.5.1","keywords":["editor","rich-text","wysiwyg","vanilla","react","s3-upload","table","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.5.1","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"dist":{"shasum":"d042b77c0ad71f34a55df63ec2352d0e7fe76113","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.5.1.tgz","fileCount":18,"integrity":"sha512-SJwxSU8jErxFq38+iofn5/rK9iSyXIWUPVLtv4YkbocYNBI7b1yiV+lz7gCyOgnolt5IrqgmiUqGgEM07CYzpg==","signatures":[{"sig":"MEUCIQCaN15lFequ6G0mWF17gg1ZS5nuWpWh8l8s72Ois/Fi2AIgKXRn4Njz3VSC0zBy6jnjfH7rLhCuqdfr8u+Otj1La/8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6189958},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./core":{"types":"./dist/core.d.ts","import":"./dist/core.js","require":"./dist/core.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"},"./style.css":"./dist/style.css","./package.json":"./package.json"},"gitHead":"178064164854afa8d5f0a5692be267fd4e00504b","scripts":{"test":"vitest run","build":"node scripts/build.mjs","test:watch":"vitest","check:types":"tsc -p tsconfig.types.json","prepublishOnly":"npm run test && npm run check:types && npm run build"},"_npmUser":{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},"_npmVersion":"10.9.2","description":"LumirEditor — vanilla (HTML/JS/CSS) rich text editor, BlockNote-JSON round-trip compatible.","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","react":"^18.2.0","vitest":"^3.0.0","esbuild":"^0.24.0","react-dom":"^18.2.0","typescript":"^6.0.3","@types/react":"^19.2.17"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/editor_0.5.1_1783047094224_0.9835461154647727","host":"s3://npm-registry-packages-npm-production"}},"0.5.2":{"name":"@lumir-company/editor","version":"0.5.2","keywords":["editor","rich-text","wysiwyg","vanilla","react","s3-upload","table","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.5.2","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"dist":{"shasum":"55316c51c90eedd3f5791d32cebe5662cccfaf30","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.5.2.tgz","fileCount":18,"integrity":"sha512-mqnUYWZKVPVnba5zXIwdeXLj/l7ynn6/XFE7abLwgddU7ZyEm+RMrIC+97clknN0O9VPPjTbU1ljqkC0rflj5g==","signatures":[{"sig":"MEUCIQC9n8xvHXqzgXBa80RbcDVi5bvU8rIWHrqB9F/WiRb6QQIgEHFqsGkFTiZxkOjrUQfpJ6k4yWu34KDeG5ZJ5hb4W0I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6440243},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./core":{"types":"./dist/core.d.ts","import":"./dist/core.js","require":"./dist/core.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"},"./style.css":"./dist/style.css","./package.json":"./package.json"},"gitHead":"795fda2b1434a03a0ebcc96c75924ef9de4db4a4","scripts":{"test":"vitest run","build":"node scripts/build.mjs","test:watch":"vitest","check:types":"tsc -p tsconfig.types.json","prepublishOnly":"npm run test && npm run check:types && npm run build"},"_npmUser":{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},"_npmVersion":"10.9.2","description":"LumirEditor — vanilla (HTML/JS/CSS) rich text editor, BlockNote-JSON round-trip compatible.","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","react":"^18.2.0","vitest":"^3.0.0","esbuild":"^0.24.0","react-dom":"^18.2.0","typescript":"^6.0.3","@types/react":"^19.2.17"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/editor_0.5.2_1783303433667_0.8021499206115323","host":"s3://npm-registry-packages-npm-production"}},"0.5.3":{"name":"@lumir-company/editor","version":"0.5.3","keywords":["editor","rich-text","wysiwyg","vanilla","react","s3-upload","table","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.5.3","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"dist":{"shasum":"e7a3f96810296f856d5553d12fd5396112992065","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.5.3.tgz","fileCount":18,"integrity":"sha512-iswQ0+8hiLBanslJYER/DPReXMWVljx7a0dSk+/sBRB4jWJlo7AD/aqWjD9KxhckOM/3w08jP+CIe+UMGeVgkA==","signatures":[{"sig":"MEUCIQD0G0UGxaelXQZ7BJfEOfPblSRq9fKLHsmJ08x/sHecVAIgI91HAWUdK3WUtzEJv/4hV1n0mBgrKtbsKIerDVHJo5w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6506332},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./core":{"types":"./dist/core.d.ts","import":"./dist/core.js","require":"./dist/core.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"},"./style.css":"./dist/style.css","./package.json":"./package.json"},"gitHead":"be669f41f034e655289046447546577e535c3bf0","scripts":{"test":"vitest run","build":"node scripts/build.mjs","test:watch":"vitest","check:types":"tsc -p tsconfig.types.json","prepublishOnly":"npm run test && npm run check:types && npm run build"},"_npmUser":{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},"_npmVersion":"10.9.2","description":"LumirEditor — vanilla (HTML/JS/CSS) rich text editor, BlockNote-JSON round-trip compatible.","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","react":"^18.2.0","vitest":"^3.0.0","esbuild":"^0.24.0","react-dom":"^18.2.0","typescript":"^6.0.3","@types/react":"^19.2.17"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/editor_0.5.3_1783418591539_0.6409923390770258","host":"s3://npm-registry-packages-npm-production"}},"0.5.4":{"name":"@lumir-company/editor","version":"0.5.4","keywords":["editor","rich-text","wysiwyg","vanilla","react","s3-upload","table","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.5.4","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"dist":{"shasum":"a3c104db23062c385ea8c3a5abb2084f3d7c11ec","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.5.4.tgz","fileCount":18,"integrity":"sha512-6bo9EnGTCpj9i98g3jhOvu/4PdX5txTQ+usa6n5XdQyoWo2FLZYEnWHs2W8mz0xERg9Wqy/e9/QUdY5PKVD1aQ==","signatures":[{"sig":"MEUCIQDSYJtDCe2i/UcM18wnTi4rh/nYOaBicIQDxypT9QkL+AIgMK26R8JkyM4J4M8Y52hTpi2SJV5xA0JhdYTQenQ7EGE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6834839},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./core":{"types":"./dist/core.d.ts","import":"./dist/core.js","require":"./dist/core.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"},"./style.css":"./dist/style.css","./package.json":"./package.json"},"gitHead":"70ee4dfc64ff6c046f5df495473bee07e28ee490","scripts":{"test":"vitest run","build":"node scripts/build.mjs","test:watch":"vitest","check:types":"tsc -p tsconfig.types.json","test:coverage":"vitest run --coverage","prepublishOnly":"npm run test && npm run check:types && npm run build"},"_npmUser":{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},"_npmVersion":"10.9.2","description":"LumirEditor — vanilla (HTML/JS/CSS) rich text editor, BlockNote-JSON round-trip compatible.","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","react":"^18.2.0","vitest":"^3.0.0","esbuild":"^0.24.0","react-dom":"^18.2.0","typescript":"^6.0.3","@types/react":"^19.2.17","@vitest/coverage-v8":"^3.2.7"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/editor_0.5.4_1783501671509_0.36456654833576496","host":"s3://npm-registry-packages-npm-production"}},"0.5.5":{"name":"@lumir-company/editor","version":"0.5.5","keywords":["editor","rich-text","wysiwyg","vanilla","react","s3-upload","table","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.5.5","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"dist":{"shasum":"35e77d9811711e95dd2e4e4d1537d1d2fa95ea57","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.5.5.tgz","fileCount":18,"integrity":"sha512-nee/p7EW8TGyiWQj1HO7gjQQMke3AEybJaUv4h6zf0amZB1+zMa5fZ4U/AP9qe+hvZ+8OzyKBQA8a1HhasZvyA==","signatures":[{"sig":"MEQCIDoOwyXQlBuVWfg+kG9kWXD1uQaORjTqr1bnXRgYxiK9AiAIWDZJz9pTmqlhJ1xVp+ZXKdgvkWXkQs3ZGrin6gMyRA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6850013},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./core":{"types":"./dist/core.d.ts","import":"./dist/core.js","require":"./dist/core.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"},"./style.css":"./dist/style.css","./package.json":"./package.json"},"gitHead":"23483888636935bd450861c15952b60c03491adf","scripts":{"test":"vitest run","build":"node scripts/build.mjs","test:watch":"vitest","check:types":"tsc -p tsconfig.types.json","test:coverage":"vitest run --coverage","prepublishOnly":"npm run test && npm run check:types && npm run build"},"_npmUser":{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},"_npmVersion":"10.9.2","description":"LumirEditor — vanilla (HTML/JS/CSS) rich text editor, BlockNote-JSON round-trip compatible.","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","react":"^18.2.0","vitest":"^3.0.0","esbuild":"^0.24.0","react-dom":"^18.2.0","typescript":"^6.0.3","@types/react":"^19.2.17","@vitest/coverage-v8":"^3.2.7"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/editor_0.5.5_1783505025857_0.4582092250461738","host":"s3://npm-registry-packages-npm-production"}},"0.5.6":{"name":"@lumir-company/editor","version":"0.5.6","keywords":["editor","rich-text","wysiwyg","vanilla","react","s3-upload","table","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.5.6","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"dist":{"shasum":"c4051612b326a5fa8056c874cb02407476e6da0c","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.5.6.tgz","fileCount":18,"integrity":"sha512-kXsc504IwGZyk2UFBubVw4QMF+VTmBxkqmBNmX3yxg3lRuuojxTBGrufknfvCCztZwKuG5z/j7HieNfczzZH4g==","signatures":[{"sig":"MEUCIQCgtj0slbQ8XCS5koT1VS7Q58r0u7KM5KP7PBIWeY1x4QIgHzTJSkZE+bfdtPqqC8HS5Dy6TQMeqy1R990hpWdPIgY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7949088},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./core":{"types":"./dist/core.d.ts","import":"./dist/core.js","require":"./dist/core.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"},"./style.css":"./dist/style.css","./package.json":"./package.json"},"gitHead":"04d29d70c625c8bf9fd758ecf83e939988eac1ff","scripts":{"test":"vitest run","build":"node scripts/build.mjs","test:watch":"vitest","check:types":"tsc -p tsconfig.types.json","test:coverage":"vitest run --coverage","prepublishOnly":"npm run test && npm run check:types && npm run build"},"_npmUser":{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},"_npmVersion":"10.9.2","description":"LumirEditor — vanilla (HTML/JS/CSS) rich text editor, BlockNote-JSON round-trip compatible.","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","react":"^18.2.0","vitest":"^3.0.0","esbuild":"^0.24.0","react-dom":"^18.2.0","typescript":"^6.0.3","@types/react":"^19.2.17","@vitest/coverage-v8":"^3.2.7"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/editor_0.5.6_1783932008357_0.32879049187744047","host":"s3://npm-registry-packages-npm-production"}},"0.5.7":{"name":"@lumir-company/editor","version":"0.5.7","keywords":["editor","rich-text","wysiwyg","vanilla","react","s3-upload","table","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.5.7","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"dist":{"shasum":"117f16dd85acdf28f3df7c84ee8949f3f23551d3","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.5.7.tgz","fileCount":18,"integrity":"sha512-h/s3Yt3dEJyZPaEp/2zMlJN9rQDoHcXuki52QOs2ZDhJM5JUQER7jj/N8RrDUpLjnpO23QS9JBf9oFIDuNpLjg==","signatures":[{"sig":"MEUCIBQ05BoVPk+kRYOzt1fKTuO2OyxUC7DZISvsaHNmovg/AiEAunJKxIXbv4lC2ED7mU7aKKL0flCtoMeWnup0/1h70ts=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8016289},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./core":{"types":"./dist/core.d.ts","import":"./dist/core.js","require":"./dist/core.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"},"./style.css":"./dist/style.css","./package.json":"./package.json"},"gitHead":"355a23a6f3e808c31f398bb98451a834b078233d","scripts":{"test":"vitest run","build":"node scripts/build.mjs","test:watch":"vitest","check:types":"tsc -p tsconfig.types.json","test:coverage":"vitest run --coverage","prepublishOnly":"npm run test && npm run check:types && npm run build"},"_npmUser":{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},"_npmVersion":"10.9.2","description":"LumirEditor — vanilla (HTML/JS/CSS) rich text editor, BlockNote-JSON round-trip compatible.","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","react":"^18.2.0","vitest":"^3.0.0","esbuild":"^0.24.0","react-dom":"^18.2.0","typescript":"^6.0.3","@types/react":"^19.2.17","@vitest/coverage-v8":"^3.2.7"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/editor_0.5.7_1784100063883_0.3143015345313507","host":"s3://npm-registry-packages-npm-production"}},"0.5.9":{"name":"@lumir-company/editor","version":"0.5.9","keywords":["editor","rich-text","wysiwyg","vanilla","react","s3-upload","table","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.5.9","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"dist":{"shasum":"3296ba663e9edfe8ed4a67ebd3a7fa3528a8cade","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.5.9.tgz","fileCount":18,"integrity":"sha512-U8G9F+hxO68ufbI/3QBvh/eENbrv3UrWsai9ITsBnJPRr4W5/x8aKnAovCPnefwvqNvQo1C0LR1CPonYj9WTPA==","signatures":[{"sig":"MEUCIAohArEFBr87+5HewkJjRYjI1JzZti9F6FtHQodcikIfAiEAv0DVr1WDjW5kNC/JBnpazEHYsfcSjlYkSP3lb8EwrN0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8130943},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./core":{"types":"./dist/core.d.ts","import":"./dist/core.js","require":"./dist/core.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"},"./style.css":"./dist/style.css","./package.json":"./package.json"},"gitHead":"300fe74e13df4d2225e112042ee45358f19e64bf","scripts":{"test":"vitest run","build":"node scripts/build.mjs","test:watch":"vitest","check:types":"tsc -p tsconfig.types.json","test:coverage":"vitest run --coverage","prepublishOnly":"npm run test && npm run check:types && npm run build"},"_npmUser":{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},"_npmVersion":"10.9.2","description":"LumirEditor — vanilla (HTML/JS/CSS) rich text editor, BlockNote-JSON round-trip compatible.","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","react":"^18.2.0","vitest":"^3.0.0","esbuild":"^0.24.0","react-dom":"^18.2.0","typescript":"^6.0.3","@types/react":"^19.2.17","@vitest/coverage-v8":"^3.2.7"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/editor_0.5.9_1784682177352_0.5669359450528648","host":"s3://npm-registry-packages-npm-production"}},"0.5.10":{"name":"@lumir-company/editor","version":"0.5.10","keywords":["editor","rich-text","wysiwyg","vanilla","react","s3-upload","table","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.5.10","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"dist":{"shasum":"ca4d4005d023c7edb0accc9caaa844866d539f5e","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.5.10.tgz","fileCount":18,"integrity":"sha512-WSwvEFBSaLghpbWp8q7JpHlYpdRmr+LrEdpa8JbNIfz6m/OQINNxpaZwCupd52C5HEE12WnecZ5X/5j6cTeqfg==","signatures":[{"sig":"MEQCIHbwplf5xqpZxP7mzwiKjSdvRoD3WfySKZgBvIhoHVZDAiBvi09SjOv1CZEygZMqwn8P08IEYoLXXZU/yYOOeNfiMg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8178593},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./core":{"types":"./dist/core.d.ts","import":"./dist/core.js","require":"./dist/core.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"},"./style.css":"./dist/style.css","./package.json":"./package.json"},"gitHead":"07ddb1ddf5c1037687944956594ba57ad323b588","scripts":{"test":"vitest run","build":"node scripts/build.mjs","test:watch":"vitest","check:types":"tsc -p tsconfig.types.json","test:coverage":"vitest run --coverage","prepublishOnly":"npm run test && npm run check:types && npm run build"},"_npmUser":{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},"_npmVersion":"10.9.2","description":"LumirEditor — vanilla (HTML/JS/CSS) rich text editor, BlockNote-JSON round-trip compatible.","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","react":"^18.2.0","vitest":"^3.0.0","esbuild":"^0.24.0","react-dom":"^18.2.0","typescript":"^6.0.3","@types/react":"^19.2.17","@vitest/coverage-v8":"^3.2.7"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/editor_0.5.10_1784688005650_0.518505396632092","host":"s3://npm-registry-packages-npm-production"}},"0.5.12":{"name":"@lumir-company/editor","version":"0.5.12","keywords":["editor","rich-text","wysiwyg","vanilla","react","s3-upload","table","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.5.12","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"dist":{"shasum":"792bdbfec8427db3aeba1a4f1afd9f527014e015","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.5.12.tgz","fileCount":18,"integrity":"sha512-HLe44uWi/ZYZHetQmt0kGWsJzRr7r3lZzJAwsCEi/EbkN4uLGND8qqfWZNBWDzvC3PcMPxDYaQlfJxrtkPRB0Q==","signatures":[{"sig":"MEYCIQD2mdxHXdYXe/BB+0AVa/aaU6TwYpRH+YgqV2JvjapWewIhAPc1DstrisN1GXzytz5gkONn4dIFcqkLAtToApFV1w7E","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8215728},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./core":{"types":"./dist/core.d.ts","import":"./dist/core.js","require":"./dist/core.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"},"./style.css":"./dist/style.css","./package.json":"./package.json"},"gitHead":"9b15ab5136452b752d3ca14bd1f7e4b6af82d4ec","scripts":{"test":"vitest run","build":"node scripts/build.mjs","test:watch":"vitest","check:types":"tsc -p tsconfig.types.json","test:coverage":"vitest run --coverage","prepublishOnly":"npm run test && npm run check:types && npm run build"},"_npmUser":{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},"_npmVersion":"10.9.2","description":"LumirEditor — vanilla (HTML/JS/CSS) rich text editor, BlockNote-JSON round-trip compatible.","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","react":"^18.2.0","vitest":"^3.0.0","esbuild":"^0.24.0","react-dom":"^18.2.0","typescript":"^6.0.3","@types/react":"^19.2.17","@vitest/coverage-v8":"^3.2.7"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/editor_0.5.12_1784693975528_0.6021712066070408","host":"s3://npm-registry-packages-npm-production"}},"0.5.13":{"name":"@lumir-company/editor","version":"0.5.13","keywords":["editor","rich-text","wysiwyg","vanilla","react","s3-upload","table","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.5.13","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"dist":{"shasum":"ee68f7d887c2004b07f0f2d12245207c1d8e29fe","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.5.13.tgz","fileCount":18,"integrity":"sha512-LbKHPMS9QRKnthrq2fpRWtR4j2EIqCAmAZTry2GwsRPMbhIkUcHpVWRVZ3cOmNgIregm0pcQhiD/ptF48t38+Q==","signatures":[{"sig":"MEUCIQDqp8K5JxLr6CZhl6bNlxIZZjKwNQ+jR8Ob83lE25+ybQIgT59tNs8BhZWLanUMgcdQJVXqne/DJnmngfj9X4S1o7E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8321767},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./core":{"types":"./dist/core.d.ts","import":"./dist/core.js","require":"./dist/core.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"},"./style.css":"./dist/style.css","./package.json":"./package.json"},"gitHead":"6252cd56320f9429c37c691869ca5c93ba6a4eb7","scripts":{"test":"vitest run","build":"node scripts/build.mjs","test:watch":"vitest","check:types":"tsc -p tsconfig.types.json","test:coverage":"vitest run --coverage","prepublishOnly":"npm run test && npm run check:types && npm run build"},"_npmUser":{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},"_npmVersion":"10.9.2","description":"LumirEditor — vanilla (HTML/JS/CSS) rich text editor, BlockNote-JSON round-trip compatible.","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","react":"^18.2.0","vitest":"^3.0.0","esbuild":"^0.24.0","react-dom":"^18.2.0","typescript":"^6.0.3","@types/react":"^19.2.17","@vitest/coverage-v8":"^3.2.7"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/editor_0.5.13_1785487354133_0.483542147636298","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@lumir-company/editor","version":"0.6.0","keywords":["editor","rich-text","wysiwyg","vanilla","react","s3-upload","table","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.6.0","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"dist":{"shasum":"f1a54e805c1f31a2d4d57d5d0933fb6b5660fe9b","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.6.0.tgz","fileCount":18,"integrity":"sha512-5/Uhvl7UC8JxkUqUcwxomjc5iIKD1TMS3vh5Pbb5a5xGHLTh2JuQN0crIffNZCGupkI7yyoi+hy4t0bFpTE5NQ==","signatures":[{"sig":"MEUCIQCL6QyAxUv+K0E1fRRg1ek/PY2tQEg6OQ9wUTe0d0t42gIgXg3Vx8dXv49j0pUVQB0Oste/MPMQRD33zFNava7p3ls=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8924065},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./core":{"types":"./dist/core.d.ts","import":"./dist/core.js","require":"./dist/core.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"},"./style.css":"./dist/style.css","./package.json":"./package.json"},"gitHead":"5eb4ed85d2fe519747a4542d9e6fa35dd6dd5ffe","scripts":{"test":"vitest run","build":"node scripts/build.mjs","test:watch":"vitest","check:types":"tsc -p tsconfig.types.json","test:coverage":"vitest run --coverage","prepublishOnly":"npm run test && npm run check:types && npm run build"},"_npmUser":{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},"_npmVersion":"10.9.2","description":"LumirEditor — vanilla (HTML/JS/CSS) rich text editor, BlockNote-JSON round-trip compatible.","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","react":"^18.2.0","vitest":"^3.0.0","esbuild":"^0.24.0","react-dom":"^18.2.0","typescript":"^6.0.3","@types/react":"^19.2.17","@vitest/coverage-v8":"^3.2.7"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/editor_0.6.0_1785735684437_0.0322980807546267","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@lumir-company/editor","version":"0.7.0","keywords":["editor","rich-text","wysiwyg","vanilla","react","s3-upload","table","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.7.0","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"dist":{"shasum":"596235495961da3da221e7698a331f38e5bd6acd","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.7.0.tgz","fileCount":18,"integrity":"sha512-0eO96o0gs82Hv6ox8YdtzmstATodURRNs4Rvkkg8DnnNvicBu1puAuBsUqzkmNViXBMyDOszRUlY9uBU72XRsg==","signatures":[{"sig":"MEUCIQDtej8XtTNd17+hGbzyhRDQxRIfTNGwwmjmx3TrANRPvQIgGC8e6a0yjJ80raObYzRf83YJkGjtvbTZS6kjkuHxisE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13923367},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./core":{"types":"./dist/core.d.ts","import":"./dist/core.js","require":"./dist/core.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"},"./style.css":"./dist/style.css","./package.json":"./package.json"},"gitHead":"15219db7a3ff2c0025bb9a1df152ab54c5a4c2fc","scripts":{"test":"vitest run","build":"node scripts/build.mjs","test:watch":"vitest","check:types":"tsc -p tsconfig.types.json","test:coverage":"vitest run --coverage","prepublishOnly":"npm run test && npm run check:types && npm run build"},"_npmUser":{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},"_npmVersion":"10.9.2","description":"LumirEditor — vanilla (HTML/JS/CSS) rich text editor, BlockNote-JSON round-trip compatible.","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","react":"^18.2.0","vitest":"^3.0.0","esbuild":"^0.24.0","react-dom":"^18.2.0","typescript":"^6.0.3","@types/react":"^19.2.17","@vitest/coverage-v8":"^3.2.7"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/editor_0.7.0_1786350093194_0.8998737088958362","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@lumir-company/editor","version":"0.8.0","keywords":["editor","rich-text","wysiwyg","vanilla","react","s3-upload","table","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.8.0","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"dist":{"shasum":"56f342a46660991b7a7c53333ca331e96b6f3899","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.8.0.tgz","fileCount":18,"integrity":"sha512-bEd6pjKFDgFpPoAc2dFcBggWGv7P1BIdPkDmtKbXAVpTzqiAC8FPj7HOIqz3U4K8/ZmnbWZsBRURneZZTFx1sQ==","signatures":[{"sig":"MEQCID/twvcXw6THwv2AV/akXTuoCQ0/3j10AJGw1wsgHX1QAiBAL5i9GPKxK1BLnCe1wC8x4OSrJZ0RqYWFGAtbosQy7g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15147608},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./core":{"types":"./dist/core.d.ts","import":"./dist/core.js","require":"./dist/core.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"},"./style.css":"./dist/style.css","./package.json":"./package.json"},"gitHead":"5ed6bd474951ad73007884843dd98bcd8188ec2d","scripts":{"test":"vitest run","build":"node scripts/build.mjs","test:watch":"vitest","check:types":"tsc -p tsconfig.types.json","test:coverage":"vitest run --coverage","prepublishOnly":"npm run test && npm run check:types && npm run build"},"_npmUser":{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},"_npmVersion":"10.9.2","description":"LumirEditor — vanilla (HTML/JS/CSS) rich text editor, BlockNote-JSON round-trip compatible.","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","react":"^18.2.0","vitest":"^3.0.0","esbuild":"^0.24.0","react-dom":"^18.2.0","typescript":"^6.0.3","@types/react":"^19.2.17","@vitest/coverage-v8":"^3.2.7"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/editor_0.8.0_1786502532136_0.05488130602051","host":"s3://npm-registry-packages-npm-production"}},"0.8.1":{"name":"@lumir-company/editor","version":"0.8.1","keywords":["editor","rich-text","wysiwyg","vanilla","react","s3-upload","table","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.8.1","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"dist":{"shasum":"dcee428483ecde8dee454f3fe59f68c32d8d5e64","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.8.1.tgz","fileCount":18,"integrity":"sha512-CJNbkx5Kie2jxdPRR/+g2NjAX6qiga3v1LvpJw+2GCg6hma1Pmpcth5YRdKPxqSXwZ4+yQMl39Xp10WkSo5wBQ==","signatures":[{"sig":"MEUCIQCmvnuiLGS+/Y4iFcyIp6cmZXgp/+U5DfqyAXTL6D9mYQIgYbYcMFxT4+GhPlRJVTFiK9n8wm78dFwfEPDa021XLlg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15145528},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./core":{"types":"./dist/core.d.ts","import":"./dist/core.js","require":"./dist/core.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"},"./style.css":"./dist/style.css","./package.json":"./package.json"},"gitHead":"4f79ca41fd09a88f7cfbeb3e1c2a6fe4a0000c30","scripts":{"test":"vitest run","build":"node scripts/build.mjs","test:watch":"vitest","check:types":"tsc -p tsconfig.types.json","test:coverage":"vitest run --coverage","prepublishOnly":"npm run test && npm run check:types && npm run build"},"_npmUser":{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},"_npmVersion":"10.9.2","description":"LumirEditor — vanilla (HTML/JS/CSS) rich text editor, BlockNote-JSON round-trip compatible.","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","react":"^18.2.0","vitest":"^3.0.0","esbuild":"^0.24.0","react-dom":"^18.2.0","typescript":"^6.0.3","@types/react":"^19.2.17","@vitest/coverage-v8":"^3.2.7"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/editor_0.8.1_1786509182575_0.20590675753264742","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@lumir-company/editor","version":"0.9.0","keywords":["editor","rich-text","wysiwyg","vanilla","react","s3-upload","table","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.9.0","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"dist":{"shasum":"d296041f698bbec572359c01fa3d39ddccb93e3f","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.9.0.tgz","fileCount":18,"integrity":"sha512-c62d4adbGF8D5khPJ3038zgeU1AKP80P0JMLe/vaPZskc3hkKEKte2zlCOMaRUiPVI8F8l53VL2Qa+vsHzhVZw==","signatures":[{"sig":"MEQCIDbA1v9OSJwHgzdtK1ktnL6PrbkahgYgdsweAqMUGLKTAiA/dbUi8RthhVnbdcD15Xl113Ybw5lOdZk1Ptqy169zBA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15320072},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./core":{"types":"./dist/core.d.ts","import":"./dist/core.js","require":"./dist/core.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"},"./style.css":"./dist/style.css","./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"node scripts/build.mjs","test:watch":"vitest","check:types":"tsc -p tsconfig.types.json","test:coverage":"vitest run --coverage","prepublishOnly":"npm run test && npm run check:types && npm run build"},"_npmUser":{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},"_npmVersion":"10.9.2","description":"LumirEditor — vanilla (HTML/JS/CSS) rich text editor, BlockNote-JSON round-trip compatible.","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","react":"^18.2.0","vitest":"^3.0.0","esbuild":"^0.24.0","react-dom":"^18.2.0","typescript":"^6.0.3","@types/react":"^19.2.17","@vitest/coverage-v8":"^3.2.7"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/editor_0.9.0_1787031066788_0.6213575289792188","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"@lumir-company/editor","version":"0.10.0","keywords":["editor","rich-text","wysiwyg","vanilla","react","s3-upload","table","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.10.0","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"dist":{"shasum":"914b10c7d39a9cc5022ba2a602bed93584c91551","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.10.0.tgz","fileCount":18,"integrity":"sha512-pPOnuCF/ad1xp7lEFRQzmrqJIWbqmlpxFp2oKkuv17TJuXIaVAGQDKmjR0LWUW0SgEh51eV173S7H7GJI4714g==","signatures":[{"sig":"MEQCIDcguJcWmHicMkMvTdWC9uEyUAQs9v7PPh1rVFWlgvLCAiAbjUAeXT+4bNHXCwkTNA1/iSN51KPp9g7GWZrcWoAGrg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15572310},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./core":{"types":"./dist/core.d.ts","import":"./dist/core.js","require":"./dist/core.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"},"./style.css":"./dist/style.css","./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"node scripts/build.mjs","test:watch":"vitest","check:types":"tsc -p tsconfig.types.json","test:coverage":"vitest run --coverage","prepublishOnly":"npm run test && npm run check:types && npm run build"},"_npmUser":{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},"_npmVersion":"10.9.2","description":"LumirEditor — vanilla (HTML/JS/CSS) rich text editor, BlockNote-JSON round-trip compatible.","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","react":"^18.2.0","vitest":"^3.0.0","esbuild":"^0.24.0","react-dom":"^18.2.0","typescript":"^6.0.3","@types/react":"^19.2.17","@vitest/coverage-v8":"^3.2.7"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/editor_0.10.0_1787213798961_0.14128680890362033","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"@lumir-company/editor","version":"0.11.0","keywords":["editor","rich-text","wysiwyg","vanilla","react","s3-upload","table","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.11.0","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"dist":{"shasum":"14d630eddba52f328e8cec2ee7f785cf37180997","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.11.0.tgz","fileCount":18,"integrity":"sha512-Ej9+9J58WCC57mcrxqIY3s7u4fQvBEWwm1+Qdrzma5T7Dt16yD3hB2daoiYRygrnEdlgO5nNqjmV7l0iRH4LLA==","signatures":[{"sig":"MEYCIQCeBhcJA7YHT6e2E1jqv+wMPcZW51Nje8QEveVmYpyTegIhALG9JzXcDULfp2+DTcvzHZpL22eMwqBYtoLGuDgrT8BX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15827003},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./core":{"types":"./dist/core.d.ts","import":"./dist/core.js","require":"./dist/core.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"},"./style.css":"./dist/style.css","./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"node scripts/build.mjs","test:watch":"vitest","check:types":"tsc -p tsconfig.types.json","test:coverage":"vitest run --coverage","prepublishOnly":"npm run test && npm run check:types && npm run build"},"_npmUser":{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},"_npmVersion":"10.9.2","description":"LumirEditor — vanilla (HTML/JS/CSS) rich text editor, BlockNote-JSON round-trip compatible.","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","react":"^18.2.0","vitest":"^3.0.0","esbuild":"^0.24.0","react-dom":"^18.2.0","typescript":"^6.0.3","@types/react":"^19.2.17","@vitest/coverage-v8":"^3.2.7"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/editor_0.11.0_1787291404620_0.09295056490586995","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"@lumir-company/editor","version":"0.12.0","keywords":["editor","rich-text","wysiwyg","vanilla","react","s3-upload","table","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.12.0","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"dist":{"shasum":"828ee2122998ee9331561a736a6cdbb92e532775","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.12.0.tgz","fileCount":18,"integrity":"sha512-xo88CTeZndppeHyluK7Mavi9/PXGweXQi3Jdj20bPlcbJwUucLNNDJcKxpvwJ/pVKrQPAI7zjZ7p3aE7WGXTDA==","signatures":[{"sig":"MEQCIHVmYioQJwXdLnjSLxaFekXfAwuIV9QZmTd6dXEmeJPgAiBOPhOYthrkRslsQ9+zeK1OqLlzHKqB+q0jXJNE8z+sIg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16468372},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./core":{"types":"./dist/core.d.ts","import":"./dist/core.js","require":"./dist/core.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"},"./style.css":"./dist/style.css","./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"node scripts/build.mjs","test:watch":"vitest","check:types":"tsc -p tsconfig.types.json","test:coverage":"vitest run --coverage","prepublishOnly":"npm run test && npm run check:types && npm run build"},"_npmUser":{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},"_npmVersion":"10.9.2","description":"LumirEditor — vanilla (HTML/JS/CSS) rich text editor, BlockNote-JSON round-trip compatible.","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","react":"^18.2.0","vitest":"^3.0.0","esbuild":"^0.24.0","react-dom":"^18.2.0","typescript":"^6.0.3","@types/react":"^19.2.17","@vitest/coverage-v8":"^3.2.7"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/editor_0.12.0_1787728825643_0.5425481267318748","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"name":"@lumir-company/editor","version":"0.13.0","keywords":["editor","rich-text","wysiwyg","vanilla","react","s3-upload","table","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.13.0","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"dist":{"shasum":"dfd9855edb26bb7901a476355f058a6f68695e15","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.13.0.tgz","fileCount":18,"integrity":"sha512-Wv/N0jvInwcwuMgMC40ubjVZjztQTZBhVZ/DYcB9bfdPQzl1/Ecutru0bFOr7SpLfzBY0j15rFj7byXNPH7TdA==","signatures":[{"sig":"MEUCIQDUBIwezMF2N2zDaou/IVO+Tro81u+VB6zfrQXQhOAvgQIgZwfZaTXwoVTDj7Ml+ltCVBv/zeQY8kWgMuVY2BwN3Hk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17567411},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./core":{"types":"./dist/core.d.ts","import":"./dist/core.js","require":"./dist/core.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"},"./style.css":"./dist/style.css","./package.json":"./package.json"},"gitHead":"7630283afd98a0fcd6df44ac7c861d9a50548fc1","scripts":{"test":"vitest run","build":"node scripts/build.mjs","verify":"npm run test && npm run check:types && npm run build","test:watch":"vitest","check:types":"tsc -p tsconfig.types.json","verify:gate":"npm run test:coverage && npm run check:types && npm run build","test:coverage":"vitest run --coverage --maxWorkers=4","prepublishOnly":"npm run verify:gate"},"_npmUser":{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},"_npmVersion":"10.9.2","description":"LumirEditor — vanilla (HTML/JS/CSS) rich text editor, BlockNote-JSON round-trip compatible.","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","react":"^18.2.0","vitest":"^3.0.0","esbuild":"^0.24.0","react-dom":"^18.2.0","typescript":"^6.0.3","@types/react":"^19.2.17","@vitest/coverage-v8":"^3.2.7"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/editor_0.13.0_1789015267984_0.29289492988416055","host":"s3://npm-registry-packages-npm-production"}},"0.14.0":{"name":"@lumir-company/editor","version":"0.14.0","keywords":["editor","rich-text","wysiwyg","vanilla","react","s3-upload","table","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.14.0","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"dist":{"shasum":"c2bdd1dbea9658ae4288562988a3db4664fb69e1","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.14.0.tgz","fileCount":18,"integrity":"sha512-2+9rHwvjCfNdet97YU1RxT7Z6MgLjvTWsS2obgDuApzgmE1HbedGIHWW0DA6dVukuROf1W/+WjAoGA2xLZKqMQ==","signatures":[{"sig":"MEQCIHrw41MzO89KAGHx+uitP1VX0+3VYNocfUQ5KeV/aRr+AiAm0g2N9fK+4vB1GgPowQfsW8gP9y7IL7147Xq7Yym5OA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIGjARRnupNX9g0nROG4NoKY/H+e5CT+9FQ5FFOXaBg/nAiAhqq5BWiyhjIvrh5QA5XVbQLF/c0nUPx/PhIvuMcCCiA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17787786},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./core":{"types":"./dist/core.d.ts","import":"./dist/core.js","require":"./dist/core.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"},"./style.css":"./dist/style.css","./package.json":"./package.json"},"gitHead":"62ff697a2041180648e6c52a4bcc0e5d4f798950","scripts":{"test":"vitest run","build":"node scripts/build.mjs","verify":"npm run test && npm run check:types && npm run build","test:watch":"vitest","check:types":"tsc -p tsconfig.types.json","verify:gate":"npm run test:coverage && npm run check:types && npm run build","test:coverage":"vitest run --coverage --maxWorkers=4","prepublishOnly":"npm run verify:gate"},"_npmUser":{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},"_npmVersion":"10.9.2","description":"LumirEditor — vanilla (HTML/JS/CSS) rich text editor, BlockNote-JSON round-trip compatible.","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","react":"^18.2.0","vitest":"^3.0.0","esbuild":"^0.24.0","react-dom":"^18.2.0","typescript":"^6.0.3","@types/react":"^19.2.17","@vitest/coverage-v8":"^3.2.7"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/editor_0.14.0_1789111892698_0.31974624922131123","host":"s3://npm-registry-packages-npm-production"}},"0.14.1":{"name":"@lumir-company/editor","version":"0.14.1","keywords":["editor","rich-text","wysiwyg","vanilla","react","s3-upload","table","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.14.1","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"dist":{"shasum":"1488a9444113de113ac883dc949efc9883c01cc2","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.14.1.tgz","fileCount":18,"integrity":"sha512-npZfzcd8TlxxOSkcuVtp7z3YaqkZ642AMngSU79oxl1BvdnMRF0Z9X0H9NKMa9MxBbw2scElSngSHo+tNDCKsg==","signatures":[{"sig":"MEUCIEw6GT5v0R4GJKpUlU0k1Uh8PJWtCj/tD6qMUWPOt9BZAiEA5lGIONXtCvk0kIw1Q2gALpyhsul3qTUfR0N8dsU6tfk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIAzy8BDjnTHD9CdHG9k+IOBtbbiBqcfvwzLU+MfMFc1nAiB72JPneAN39AsiJiT+V37iVDYTWP/yUt+oZGxU+kX0fg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17762872},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./core":{"types":"./dist/core.d.ts","import":"./dist/core.js","require":"./dist/core.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"},"./style.css":"./dist/style.css","./package.json":"./package.json"},"gitHead":"b4e3755286620fe345d32cd5dcf6f63c189c7130","scripts":{"test":"vitest run","build":"node scripts/build.mjs","verify":"npm run test && npm run check:types && npm run build","test:watch":"vitest","check:types":"tsc -p tsconfig.types.json","verify:gate":"npm run test:coverage && npm run check:types && npm run build","test:coverage":"vitest run --coverage --maxWorkers=4","prepublishOnly":"npm run verify:gate"},"_npmUser":{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},"_npmVersion":"10.9.2","description":"LumirEditor — vanilla (HTML/JS/CSS) rich text editor, BlockNote-JSON round-trip compatible.","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","react":"^18.2.0","vitest":"^3.0.0","esbuild":"^0.24.0","react-dom":"^18.2.0","typescript":"^6.0.3","@types/react":"^19.2.17","@vitest/coverage-v8":"^3.2.7"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/editor_0.14.1_1789116169774_0.9499567500902024","host":"s3://npm-registry-packages-npm-production"}},"0.14.2":{"name":"@lumir-company/editor","version":"0.14.2","keywords":["editor","rich-text","wysiwyg","vanilla","react","s3-upload","table","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.14.2","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"dist":{"shasum":"b3dab34a934369eaf4040113bdcc4b97c8de0ba5","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.14.2.tgz","fileCount":18,"integrity":"sha512-nt8K3q9z8mli8FdcyjY6vTLkGsnhJAWbNCn31cN1W4NP24yaXdsTDz77iQErMYKfYjZbStDxHEGHin9y3LM4BQ==","signatures":[{"sig":"MEUCIQCWgwZ7tUlvCNPyx7O2g96tNliZly3OMmR84weuoHqu8QIgLAu/K0WZRRJgc38QJkj3hdkGe0qCAjzG3BEJivojRUU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQC7l1guDKoUOE0xoBN9zBp0FIH7SoMrIwy0uXwQqwJ26wIgDiBl7kFJ+QXhYXSPsfMq1ZK+jFtKdkrql0LRm1Nex4s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17868791},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./core":{"types":"./dist/core.d.ts","import":"./dist/core.js","require":"./dist/core.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"},"./style.css":"./dist/style.css","./package.json":"./package.json"},"gitHead":"0d0efbe3ce97b46ae850366eb3932b509a9ad1df","scripts":{"test":"vitest run","build":"node scripts/build.mjs","verify":"npm run test && npm run check:types && npm run build","test:watch":"vitest","check:types":"tsc -p tsconfig.types.json","verify:gate":"npm run test:coverage && npm run check:types && npm run build","test:coverage":"vitest run --coverage --maxWorkers=4","prepublishOnly":"npm run verify:gate"},"_npmUser":{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},"_npmVersion":"10.9.2","description":"LumirEditor — vanilla (HTML/JS/CSS) rich text editor, BlockNote-JSON round-trip compatible.","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","react":"^18.2.0","vitest":"^3.0.0","esbuild":"^0.24.0","react-dom":"^18.2.0","typescript":"^6.0.3","@types/react":"^19.2.17","@vitest/coverage-v8":"^3.2.7"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/editor_0.14.2_1789369504962_0.7824881258119476","host":"s3://npm-registry-packages-npm-production"}},"0.14.3":{"name":"@lumir-company/editor","version":"0.14.3","keywords":["editor","rich-text","wysiwyg","vanilla","react","s3-upload","table","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.14.3","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"dist":{"shasum":"f58f08315f7dd66b1bd5fe2f8f4daebeddc28dbd","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.14.3.tgz","fileCount":18,"integrity":"sha512-VcQBWz1rpRZMBa+ShgaeCUNmVTJwokWj9rcLRzt7G/w0Bxj9Yhhy6trAKoDyxgweXrSxShN/UeDPwXp1kprL2A==","signatures":[{"sig":"MEQCIG65Mz/sktpxhaujMVyTRIdKaOJxuqEpsPPZUgh+JVorAiBIuQedJDTHVLZsuJuFSbqAMoycFX/F17jRF35emDHQ0Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDbvQd72r4H+gO1WIEe6F+MW3NV+pP62EX8c4nFRjEyVwIgC8K9tn7NGJuHsRofvegcT22POtwwgoswl8Kd6KE0ba4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17994518},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./core":{"types":"./dist/core.d.ts","import":"./dist/core.js","require":"./dist/core.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"},"./style.css":"./dist/style.css","./package.json":"./package.json"},"gitHead":"91d468622e06b70ff3dfce97e304b50880f51b4f","scripts":{"test":"vitest run","build":"node scripts/build.mjs","verify":"npm run test && npm run check:types && npm run build","test:watch":"vitest","check:types":"tsc -p tsconfig.types.json","verify:gate":"npm run test:coverage && npm run check:types && npm run build","test:coverage":"vitest run --coverage --maxWorkers=4","prepublishOnly":"npm run verify:gate"},"_npmUser":{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},"_npmVersion":"10.9.2","description":"LumirEditor — vanilla (HTML/JS/CSS) rich text editor, BlockNote-JSON round-trip compatible.","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","react":"^18.2.0","vitest":"^3.0.0","esbuild":"^0.24.0","react-dom":"^18.2.0","typescript":"^6.0.3","@types/react":"^19.2.17","@vitest/coverage-v8":"^3.2.7"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/editor_0.14.3_1789374037359_0.4770919190887688","host":"s3://npm-registry-packages-npm-production"}},"0.15.0":{"name":"@lumir-company/editor","version":"0.15.0","keywords":["editor","rich-text","wysiwyg","vanilla","react","s3-upload","table","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.15.0","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"dist":{"shasum":"34108b274fa67264b73af547b23f001eede6b6c6","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.15.0.tgz","fileCount":18,"integrity":"sha512-rkVH3VhjSVBtUBt9xkrjEh1fPksc/X4yyUl6wk4CS+gj+TKB3o+aYT8WJyHWyJcfXRgYEd/Z+QXdt/RzIra7oA==","signatures":[{"sig":"MEUCIDGsFVcVz213vqh2dX0LWzSAre4UbKTImSlnONQ/QfhEAiEAgtirjBH0QApuayLZmy+A2vxwP/x9p4a5wMKKeUfji5I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDM6JVP1NhgMg7GcqOxKPDL2LKx4PhqGSJI9C7zKPjD1wIgNSI30vheYV9Z6SX4SHWyqaFTclxQ/EcGW86lStMbtMA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18680103},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./core":{"types":"./dist/core.d.ts","import":"./dist/core.js","require":"./dist/core.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"},"./style.css":"./dist/style.css","./package.json":"./package.json"},"gitHead":"113b37dd1dddc9796ecfd6c37f70e2759b87ce3e","scripts":{"test":"vitest run","build":"node scripts/build.mjs","verify":"npm run test && npm run check:types && npm run build","test:watch":"vitest","check:types":"tsc -p tsconfig.types.json","verify:gate":"npm run test:coverage && npm run check:types && npm run build","test:coverage":"vitest run --coverage --maxWorkers=4","prepublishOnly":"npm run verify:gate"},"_npmUser":{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},"_npmVersion":"10.9.2","description":"LumirEditor — vanilla (HTML/JS/CSS) rich text editor, BlockNote-JSON round-trip compatible.","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","react":"^18.2.0","vitest":"^3.0.0","esbuild":"^0.24.0","react-dom":"^18.2.0","typescript":"^6.0.3","@types/react":"^19.2.17","@vitest/coverage-v8":"^3.2.7"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/editor_0.15.0_1789538652016_0.40518963052800294","host":"s3://npm-registry-packages-npm-production"}},"0.16.0":{"name":"@lumir-company/editor","version":"0.16.0","keywords":["editor","rich-text","wysiwyg","vanilla","react","s3-upload","table","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.16.0","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"dist":{"shasum":"bd26a8fe5379093b37f872be84b0d280504eb42e","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.16.0.tgz","fileCount":18,"integrity":"sha512-ANa4pWAbIkleUFwRGmFqk2h/HuueC1zHLBdpeoT9d0Bjw5S6rNi1oNwQsC1iSgdOoCiJcj01i5DVp7VtTLCazQ==","signatures":[{"sig":"MEYCIQDPcHciTKWsQP927TgEGSlAKYKWfgds9PjjYh2oOJnWzQIhAM4xY5bX7eDahEtodTvcHdtO/Hx7aa+eo2b7TGtIeLPo","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIF327Ys9FBPCKzK/eR7WAOJgcPQuXt6keJie70uGRiiEAiAR+Rc43zPxHcelY67jVmllBsYq1awiM+65/bkBAngAdQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19524485},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./core":{"types":"./dist/core.d.ts","import":"./dist/core.js","require":"./dist/core.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"},"./style.css":"./dist/style.css","./package.json":"./package.json"},"gitHead":"2590ddbea49eeb93f8d5e078d6d15cefcbaf50e4","scripts":{"test":"vitest run","build":"node scripts/build.mjs","verify":"npm run test && npm run check:types && npm run build","test:watch":"vitest","check:types":"tsc -p tsconfig.types.json","verify:gate":"npm run test:coverage && npm run check:types && npm run build","test:coverage":"vitest run --coverage --maxWorkers=4","prepublishOnly":"npm run verify:gate"},"_npmUser":{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},"_npmVersion":"10.9.2","description":"LumirEditor — vanilla (HTML/JS/CSS) rich text editor, BlockNote-JSON round-trip compatible.","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","react":"^18.2.0","vitest":"^3.0.0","esbuild":"^0.24.0","react-dom":"^18.2.0","typescript":"^6.0.3","@types/react":"^19.2.17","@vitest/coverage-v8":"^3.2.7"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/editor_0.16.0_1789693443074_0.31314885816299287","host":"s3://npm-registry-packages-npm-production"}},"0.17.0":{"name":"@lumir-company/editor","version":"0.17.0","keywords":["editor","rich-text","wysiwyg","vanilla","react","s3-upload","table","lumir"],"license":"MIT","_id":"@lumir-company/editor@0.17.0","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"dist":{"shasum":"375d46341b6b801a5be90af445fcd8496d3a09d5","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.17.0.tgz","fileCount":18,"integrity":"sha512-Z/atlZpnktJkJAYZIFgupzvWQ7FDrDaCKVQ/ZYR7yiaFEnO5p7dfGfWfvmRpsfrXWOHm6akwKeXuj/a0rANh5w==","signatures":[{"sig":"MEQCIH+PLf1IMCs9PHZzAdYCMwmzMODsj2CVFl8jxGVUmGoVAiA5+zUZfBez5kG4aav99vpsgopKJq0OZ3s6jiFnvmCIxw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIGTnOwXmPXYxk39ygpMuTohdNB2T9bzQgHRzaqZQ/4vMAiAZBp5JEHIMch/XGv06NHDSFY9CrW/iCir7r1gHa69l6w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19655727},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./core":{"types":"./dist/core.d.ts","import":"./dist/core.js","require":"./dist/core.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"},"./style.css":"./dist/style.css","./package.json":"./package.json"},"gitHead":"08f6c10e065ca5291c0b9837679824cfd4d1e9d2","scripts":{"test":"vitest run","build":"node scripts/build.mjs","verify":"npm run test && npm run check:types && npm run build","test:watch":"vitest","check:types":"tsc -p tsconfig.types.json","verify:gate":"npm run test:coverage && npm run check:types && npm run build","test:coverage":"vitest run --coverage --maxWorkers=4","prepublishOnly":"npm run verify:gate"},"_npmUser":{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},"_npmVersion":"10.9.2","description":"LumirEditor — vanilla (HTML/JS/CSS) rich text editor, BlockNote-JSON round-trip compatible.","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","react":"^18.2.0","vitest":"^3.0.0","esbuild":"^0.24.0","react-dom":"^18.2.0","typescript":"^6.0.3","@types/react":"^19.2.17","@vitest/coverage-v8":"^3.2.7"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/editor_0.17.0_1790044939828_0.13748824028470596","host":"s3://npm-registry-packages-npm-production"}},"0.18.0":{"_id":"@lumir-company/editor@0.18.0","dist":{"shasum":"07e82722489e2b19b2ffae27204fcf66a39c42f3","tarball":"https://registry.npmjs.org/@lumir-company/editor/-/editor-0.18.0.tgz","fileCount":18,"integrity":"sha512-L6DUA5VU8DOxXZ6zAltTim7jOLJFRvmTPkhAgRT0DaJ3v1CyWQUBtQjpJo2+hA5J0hzJmbXr5Kb/GGtR+zHjew==","signatures":[{"sig":"MEQCIFTZ+tcFFT2O7Ly71m4JK/EGWG7/TgJUwwyDDJh3mLG6AiA2oiyevk9vCiQW3qCQI/82pJLFrWIBxJR4U+EjgIhnpw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDAT5G5womdE/JdwHL2Gr2ffDNRJwiNAvR33Y/klFt4GwIhAIfN+00fc0BSa/6PXQxbJb64xLWFH8mFTtZIQtHQgZZp"}],"unpackedSize":19792776},"main":"./dist/index.cjs","name":"@lumir-company/editor","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./core":{"types":"./dist/core.d.ts","import":"./dist/core.js","require":"./dist/core.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"},"./style.css":"./dist/style.css","./package.json":"./package.json"},"gitHead":"10a259764bbe5cba731eee40394db5d63a1bf3f4","license":"MIT","scripts":{"test":"vitest run","build":"node scripts/build.mjs","verify":"npm run test && npm run check:types && npm run build","test:watch":"vitest","check:types":"tsc -p tsconfig.types.json","verify:gate":"npm run test:coverage && npm run check:types && npm run build","test:coverage":"vitest run --coverage --maxWorkers=4","prepublishOnly":"npm run verify:gate"},"version":"0.18.0","_npmUser":{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},"keywords":["editor","rich-text","wysiwyg","vanilla","react","s3-upload","table","lumir"],"_npmVersion":"10.9.2","description":"LumirEditor — vanilla (HTML/JS/CSS) rich text editor, BlockNote-JSON round-trip compatible.","directories":{},"maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"sideEffects":["**/*.css"],"_nodeVersion":"22.17.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","react":"^18.2.0","vitest":"^3.0.0","esbuild":"^0.24.0","react-dom":"^18.2.0","typescript":"^6.0.3","@types/react":"^19.2.17","@vitest/coverage-v8":"^3.2.7"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/editor_0.18.0_1790558636752_0.02488556720189994"}}},"time":{"created":"2025-09-11T09:16:32.650Z","modified":"2026-09-28T01:23:57.428Z","0.2.0":"2025-09-11T09:16:32.930Z","0.2.1":"2025-09-11T15:43:30.063Z","0.1.0":"2025-12-10T08:32:43.204Z","0.3.2":"2025-12-10T08:41:32.732Z","0.3.3":"2025-12-11T01:30:00.543Z","0.3.4":"2026-01-15T04:48:47.583Z","0.4.0":"2026-01-15T07:22:48.266Z","0.4.1":"2026-01-15T07:45:29.889Z","0.4.3":"2026-02-23T02:45:28.577Z","0.4.4":"2026-02-23T04:54:25.293Z","0.4.5":"2026-03-05T08:30:12.462Z","0.4.6":"2026-03-06T01:01:14.259Z","0.4.7":"2026-03-06T04:28:40.543Z","0.4.8":"2026-03-17T05:27:42.081Z","0.4.9":"2026-03-17T06:10:36.957Z","0.4.10":"2026-03-18T08:05:30.097Z","0.4.11":"2026-03-26T04:28:06.208Z","0.4.12":"2026-04-03T09:39:40.856Z","0.4.13":"2026-04-03T13:28:58.507Z","0.4.14":"2026-05-29T09:15:57.404Z","0.4.15":"2026-06-05T00:37:39.664Z","0.4.16":"2026-06-08T00:09:24.366Z","0.4.17":"2026-06-16T04:02:21.098Z","0.4.18":"2026-06-17T04:54:44.910Z","0.4.19":"2026-06-17T09:21:49.350Z","0.4.21":"2026-06-18T05:58:20.951Z","0.4.22":"2026-06-22T01:07:18.385Z","0.4.23":"2026-06-22T06:21:40.495Z","0.4.25":"2026-06-27T11:18:22.360Z","0.4.26":"2026-06-27T11:19:38.157Z","0.5.0":"2026-07-02T07:38:52.938Z","0.5.1":"2026-07-03T02:51:34.458Z","0.5.2":"2026-07-06T02:03:53.860Z","0.5.3":"2026-07-07T10:03:11.761Z","0.5.4":"2026-07-08T09:07:51.691Z","0.5.5":"2026-07-08T10:03:46.012Z","0.5.6":"2026-07-13T08:40:08.562Z","0.5.7":"2026-07-15T07:21:04.067Z","0.5.9":"2026-07-22T01:02:57.556Z","0.5.10":"2026-07-22T02:40:05.832Z","0.5.12":"2026-07-22T04:19:35.708Z","0.5.13":"2026-07-31T08:42:34.279Z","0.6.0":"2026-08-03T05:41:24.617Z","0.7.0":"2026-08-10T08:21:33.442Z","0.8.0":"2026-08-12T02:42:12.376Z","0.8.1":"2026-08-12T04:33:02.889Z","0.9.0":"2026-08-18T05:31:07.056Z","0.10.0":"2026-08-20T08:16:39.223Z","0.11.0":"2026-08-21T05:50:04.880Z","0.12.0":"2026-08-26T07:20:25.893Z","0.13.0":"2026-09-10T04:41:08.229Z","0.14.0":"2026-09-11T07:31:32.879Z","0.14.1":"2026-09-11T08:42:49.936Z","0.14.2":"2026-09-14T07:05:05.158Z","0.14.3":"2026-09-14T08:20:37.527Z","0.15.0":"2026-09-16T06:04:12.176Z","0.16.0":"2026-09-18T01:04:03.264Z","0.17.0":"2026-09-22T02:42:20.132Z","0.18.0":"2026-09-28T01:23:56.906Z"},"license":"MIT","keywords":["editor","rich-text","wysiwyg","vanilla","react","s3-upload","table","lumir"],"description":"LumirEditor — vanilla (HTML/JS/CSS) rich text editor, BlockNote-JSON round-trip compatible.","maintainers":[{"name":"kimjongsik","email":"otw1917@gmail.com"},{"name":"jo.minkyeong","email":"jo.minkyeong@lumir.space"},{"name":"wukddang","email":"dnr8874@naver.com"},{"name":"kingdoo","email":"hunhunseunghun@gmail.com"},{"name":"ggh163700","email":"ggh163700@gmail.com"}],"readme":"# @lumir-company/editor\r\n\r\n**의존성 0(vanilla HTML/JS/CSS)** 리치 텍스트 에디터 — BlockNote-JSON 라운드트립 호환.\r\n\r\n[![npm version](https://img.shields.io/npm/v/@lumir-company/editor.svg)](https://www.npmjs.com/package/@lumir-company/editor)\r\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\r\n\r\n> 구 BlockNote 기반 `@lumir-company/editor@0.4.x`의 **드롭인 대체**입니다. 동일한 API 표면(`LumirEditor` 컴포넌트·props·타입·`s3Upload` 계약)을 유지하되, 코어에서 **React / BlockNote / ProseMirror 런타임을 완전히 제거**했습니다. 코어는 react-free라 서버·명령형 환경에서도 사용할 수 있고, React 컴포넌트는 선택적 래퍼로 제공됩니다.\r\n\r\n---\r\n\r\n## 목차\r\n\r\n- [특징](#특징)\r\n- [설치](#설치)\r\n- [빠른 시작](#빠른-시작)\r\n  - [React 드롭인](#1-react-드롭인)\r\n  - [Next.js](#2-nextjs)\r\n  - [react-free 코어 (vanilla)](#3-react-free-코어-vanilla)\r\n- [Exports (서브패스)](#exports-서브패스)\r\n- [이미지 업로드](#이미지-업로드)\r\n- [동영상·오디오·파일 업로드](#동영상오디오파일-업로드)\r\n- [업로드 진행률](#업로드-진행률)\r\n- [이미지·비디오 삭제](#이미지비디오-삭제)\r\n- [테이블](#테이블)\r\n- [고정 레이아웃 문서 (lockMode)](#고정-레이아웃-문서-lockmode)\r\n- [데이터 자리 칩 (chip)](#데이터-자리-칩-chip)\r\n- [HTML 양식 템플릿](#html-양식-템플릿)\r\n- [호스트 연동 API](#호스트-연동-api)\r\n- [다단 컬럼 (2·3단)](#다단-컬럼-23단)\r\n- [여러 줄 선택](#여러-줄-선택)\r\n- [글자 크기](#글자-크기)\r\n- [링크](#링크)\r\n- [Placeholder](#placeholder)\r\n- [테마](#테마)\r\n- [Props API](#props-api)\r\n- [react-free 코어 API](#react-free-코어-api)\r\n- [유틸리티 API](#유틸리티-api)\r\n- [스타일링](#스타일링)\r\n- [트러블슈팅](#트러블슈팅)\r\n- [0.12.x → 0.13.0 마이그레이션](#012x--0130-마이그레이션)\r\n- [0.4.x → 0.5.0 마이그레이션](#04x--050-마이그레이션)\r\n- [변경 이력](#변경-이력)\r\n- [라이선스](#라이선스)\r\n\r\n---\r\n\r\n## 특징\r\n\r\n| 특징 | 설명 |\r\n| --- | --- |\r\n| **의존성 0** | 코어에 React/BlockNote/ProseMirror 런타임 없음(vanilla HTML/JS/CSS). React는 선택적 peer |\r\n| **드롭인 호환** | 구 `@lumir-company/editor@0.4.x`와 동일한 컴포넌트·props·타입·저장 JSON |\r\n| **react-free 코어** | `mountLumirEditor()` 명령형 API로 서버 컴포넌트·비-React 환경에서도 사용 가능 |\r\n| **이미지 업로드** | 드래그앤드롭·붙여넣기·슬래시 메뉴, S3 presigned URL 내장, 파일명 커스터마이징, 로딩 표시 |\r\n| **동영상/오디오** | `allowVideoUpload`·`allowAudioUpload` opt-in. 일반 파일 업로드는 차단 |\r\n| **테이블** | Notion 스타일 grip 핸들, 셀 배경/글자색·정렬, 병합/분할, 행 높이·열 너비 리사이즈, 표 전체 종횡비 스케일, 에디터 폭 자동 맞춤, Shift·Ctrl 클릭 다중 선택, 잡은 칸 `Delete` 로 일괄 비우기, Excel/Word 붙여넣기 |\r\n| **고정 레이아웃 문서** | `lockMode` `design`·`fill`·`view`. 지정한 칸(표 셀·문단)만 열고 나머지는 잠금, 허용한 표만 행 추가, `fill`에서 체크박스 토글 |\r\n| **데이터 자리 칩** | 양식 **설계용** 인라인 표식(`보안서약 boolean`). 타입별 색 + 받은 `vtype` 그대로. 값을 담지 않고 자리만 보여준다 — 필드 목록·타입 어휘는 호스트 소관 |\r\n| **HTML 양식** | 호스트 카탈로그 기반 `htmlTemplate`, 편집 슬롯, Shadow DOM 격리와 정화 검사 |\r\n| **2·3단 컬럼** | 노션식 다단 컬럼 레이아웃(MIT 자체 구현), 슬래시로 2·3단 삽입, 블록 DnD로 2단 생성, 블록별/전역 구분선, 마지막 블록에서 Enter 두 번으로 컬럼 탈출 |\r\n| **표 행 높이** | 표마다 행 높이를 단계로 줄입니다(보통·좁게·촘촘히). 표 툴바에서 **사용자가** 고르고 저장 JSON 에 남습니다 |\r\n| **셀 테두리 · 대각선** | 표 칸의 테두리를 **굵기·선종·색**으로 지정하고(모든·바깥·안쪽·위·아래·왼·오·없음), 칸을 가로지르는 **대각선**(↘·↗·둘)도 긋습니다. 안 쓰면 렌더가 한 픽셀도 안 바뀝니다 |\r\n| **글자 크기** | 인라인 글자 크기(프리셋 + 1px 스테퍼, 8~96px), 구버전 안전 직렬화 |\r\n| **계층 들여쓰기** | `Tab`/`Shift+Tab` 으로 **블록 종류를 가리지 않고** 부모자식 중첩(노션과 같은 키). **캐럿이 줄 어디에 있든 같습니다**(코드블록만 공백 2칸). 부모는 **직전 형제**이고 한 번에 한 단입니다. 내어쓰기는 **뒤 형제를 자식으로 데려가 줄 순서를 지킵니다**. 목록은 10단 상한(표 셀 안 인라인 마커는 3단), 번호는 **목록마다 1부터** |\r\n| **공백 들여쓰기 · 내어쓰기** | `Ctrl+]`/`Ctrl+[` 한 축으로 **종속관계 없이** 모양만 들여씁니다 — 오른쪽은 첫 줄 들여쓰기, 0 을 지나 왼쪽은 **내어쓰기**(첫 줄은 제자리, `Shift+Enter` 로 나뉜 줄과 길어서 접힌 줄이 함께 들어갑니다). 페이지 첫 줄에서도 되고, 서식 툴바에 버튼 넷(계층 2 · 공백 2) |\r\n| **인라인 체크박스** | 표 셀·문단 어디든 **한 블록에 여러 개**(`☐ 대 ☐ 중 ☐ 소`), `[]`+스페이스·슬래시로 삽입, Enter로 다음 줄 이어받기, 드래그로 영역선택·복사, 글자 크기 입력으로 상자 크기 조절 — 줄당 하나인 「할 일」 블록과 별개 |\r\n| **여러 줄 선택·편집** | 블록 경계를 넘는 드래그로 여러 줄 선택 → 서식 일괄 적용, 선택 영역 삭제·타이핑·붙여넣기·부분 복사(무손실), Shift+클릭·`Ctrl/Cmd+A` 전체선택, 단일 Undo. **들여쓴 블록도 범위 안** |\r\n| **링크** | URL 붙여넣기 → 인라인 링크, Notion식 링크 툴바(hover 툴팁 → 편집 popup) |\r\n| **직렬화** | 블록 JSON ↔ HTML ↔ Markdown 상호 변환 유틸 공개 export |\r\n| **TypeScript** | 전 표면 `.d.ts` 제공 |\r\n| **테마** | 라이트/다크 + 커스텀 테마 객체 |\r\n| **디자인 토큰** | 색·라운드·그림자·글꼴이 `:root` 의 `--lumir-*` 변수 — 호스트가 덮으면 편집기 전체가 따라감 |\r\n\r\n### 지원 파일 형식\r\n\r\n| 종류 | 형식 | 기본 용량 한도 |\r\n| --- | --- | --- |\r\n| 이미지 | PNG · JPEG/JPG · GIF · WebP · BMP (SVG는 XSS 방지로 제외) | 10MB |\r\n| 동영상 | MP4 · WebM · OGG · MOV | 100MB |\r\n| 오디오 | `allowAudioUpload` 활성화 시 | `maxAudioFileSize` 로 설정 |\r\n\r\n> 일반 파일(문서·압축 등) 업로드는 **차단**됩니다 — `allowFileUpload` 는 아무 동작도 하지 않습니다(0.13.0 `@deprecated`).\r\n\r\n---\r\n\r\n## 설치\r\n\r\n```bash\r\nnpm i @lumir-company/editor\r\n# 또는\r\nyarn add @lumir-company/editor\r\n# 또는\r\npnpm add @lumir-company/editor\r\n```\r\n\r\n**Peer dependencies (선택):**\r\n\r\n- `react` ≥ 18.0.0\r\n- `react-dom` ≥ 18.0.0\r\n\r\n> React/`react-dom`은 **React 컴포넌트(`LumirEditor`)나 드롭인 루트를 사용할 때만** 필요합니다. `./core` 서브패스(vanilla)만 사용한다면 React 없이 동작합니다.\r\n\r\n---\r\n\r\n## 빠른 시작\r\n\r\n> **중요**: `@lumir-company/editor/style.css`를 반드시 임포트하세요. 임포트하지 않으면 에디터가 정상적으로 렌더링되지 않습니다.\r\n\r\n### 1. React 드롭인\r\n\r\n```tsx\r\nimport LumirEditor from \"@lumir-company/editor\";        // default export\r\n// 또는: import { LumirEditor } from \"@lumir-company/editor\";\r\nimport \"@lumir-company/editor/style.css\";\r\n\r\nexport default function App() {\r\n  return (\r\n    <div style={{ height: 500 }}>\r\n      <LumirEditor\r\n        initialContent={blocks}\r\n        editable\r\n        s3Upload={{ apiEndpoint: \"/api/s3/presigned\", env: \"production\", path: \"cms/wiki\", appendUUID: true }}\r\n        onContentChange={(blocks) => save(JSON.stringify(blocks))}\r\n        onImageDelete={(url) => deleteFromS3(url)}\r\n      />\r\n    </div>\r\n  );\r\n}\r\n```\r\n\r\n> 컨테이너에 **높이**를 지정해야 에디터가 보입니다.\r\n\r\n### 2. Next.js\r\n\r\n브라우저 전용 API를 사용하므로 SSR을 비활성화합니다.\r\n\r\n```tsx\r\n\"use client\";\r\n\r\nimport dynamic from \"next/dynamic\";\r\nimport \"@lumir-company/editor/style.css\";\r\n\r\nconst LumirEditor = dynamic(\r\n  () => import(\"@lumir-company/editor\").then((m) => ({ default: m.LumirEditor })),\r\n  { ssr: false },\r\n);\r\n\r\nexport default function EditorPage() {\r\n  return (\r\n    <div style={{ height: 500 }}>\r\n      <LumirEditor />\r\n    </div>\r\n  );\r\n}\r\n```\r\n\r\n### 3. react-free 코어 (vanilla)\r\n\r\nReact 없이 임의의 DOM에 마운트하는 명령형 API입니다. 서버 컴포넌트·순수 JS·다른 프레임워크에서 사용할 수 있습니다.\r\n\r\n```js\r\nimport { mountLumirEditor } from \"@lumir-company/editor/core\";\r\nimport \"@lumir-company/editor/style.css\";\r\n\r\nconst editor = mountLumirEditor(document.getElementById(\"host\"), {\r\n  initialContent: blocks,\r\n  s3Upload: { apiEndpoint: \"/api/s3/presigned\", env: \"production\", path: \"docs\" },\r\n  onContentChange: (blocks) => save(blocks),\r\n});\r\n\r\neditor.getDocument();   // 현재 블록 JSON\r\neditor.getHTML();       // HTML 문자열\r\neditor.getMarkdown();   // Markdown 문자열\r\neditor.destroy();       // 정리\r\n```\r\n\r\n자세한 인스턴스 메서드는 [react-free 코어 API](#react-free-코어-api)를 참고하세요.\r\n\r\n---\r\n\r\n## Exports (서브패스)\r\n\r\n| 서브패스 | 내용 | React 필요 |\r\n| --- | --- | --- |\r\n| `.` | React `LumirEditor`(default + named) + 코어/유틸 전체 (`\"use client\"`) | ✅ |\r\n| `./react` | `.`과 동일 표면(하위호환 별칭) | ✅ |\r\n| `./core` | react-free 코어(`mountLumirEditor`·직렬화·유틸) — 서버 컴포넌트 안전 | ❌ |\r\n| `./style.css` | 단일 번들 CSS | — |\r\n\r\n각 서브패스는 `types`(.d.ts) / `import`(ESM) / `require`(CJS) 조건을 모두 제공합니다.\r\n\r\n> **참고**: 구버전에 있던 `@lumir-company/editor/api/link-preview` 서브패스는 **제거**되었습니다. [마이그레이션](#04x--050-마이그레이션)을 참고하세요.\r\n\r\n---\r\n\r\n## 이미지 업로드\r\n\r\n이미지는 **붙여넣기 · 드래그 앤 드롭 · 슬래시 메뉴(`/` → Image) · 사이드/플로팅 메뉴**로 삽입됩니다. 업로드 방식은 아래 우선순위로 결정됩니다.\r\n\r\n1. `uploadFile` prop이 있으면 → 해당 함수로 업로드\r\n2. 없고 `s3Upload`가 있으면 → S3 presigned URL 업로드\r\n3. 둘 다 없으면 → 파일 삽입 시 업로드 실패\r\n\r\n### S3 업로드 (권장)\r\n\r\n```tsx\r\n<LumirEditor\r\n  s3Upload={{\r\n    apiEndpoint: \"/api/s3/presigned\",\r\n    env: \"production\",\r\n    path: \"blog/images\",\r\n  }}\r\n/>\r\n```\r\n\r\n**S3 저장 경로**: `{env}/{path}/{filename}` — 예: `production/blog/images/my-photo.png`\r\n\r\n#### API 엔드포인트 계약\r\n\r\n클라이언트는 `GET {apiEndpoint}?key={파일키}&contentType={MIME}` 형태로 요청하고, 서버는 다음 JSON을 반환해야 합니다.\r\n\r\n```json\r\n{\r\n  \"presignedUrl\": \"https://s3.amazonaws.com/bucket/upload-url\",\r\n  \"publicUrl\": \"https://cdn.example.com/production/blog/images/my-photo.png\"\r\n}\r\n```\r\n\r\n#### Presigned URL API 예시 (Next.js App Router)\r\n\r\n`app/api/s3/presigned/route.ts`:\r\n\r\n```ts\r\nimport { NextRequest, NextResponse } from \"next/server\";\r\nimport { S3Client, PutObjectCommand } from \"@aws-sdk/client-s3\";\r\nimport { getSignedUrl } from \"@aws-sdk/s3-request-presigner\";\r\n\r\nconst s3 = new S3Client({\r\n  region: process.env.AWS_REGION!,\r\n  credentials: {\r\n    accessKeyId: process.env.AWS_ACCESS_KEY_ID!,\r\n    secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY!,\r\n  },\r\n  // ⚠️ 필수: AWS SDK v3(≥3.729)는 기본 체크섬(WHEN_SUPPORTED)으로 presigned PUT 서명에\r\n  // x-amz-checksum-crc32 를 넣는데, 브라우저 PUT은 Content-Type만 전송 → 불일치로 S3 403.\r\n  // 아래처럼 체크섬을 \"요구될 때만\" 계산하도록 낮춰야 브라우저 직접 업로드가 통과됩니다.\r\n  requestChecksumCalculation: \"WHEN_REQUIRED\",\r\n  responseChecksumValidation: \"WHEN_REQUIRED\",\r\n});\r\n\r\nexport async function GET(req: NextRequest) {\r\n  const { searchParams } = new URL(req.url);\r\n  const key = searchParams.get(\"key\");                 // 업로드할 파일 키 ({env}/{path}/{filename})\r\n  const contentType = searchParams.get(\"contentType\"); // MIME (선택, 없으면 application/octet-stream)\r\n  if (!key) return NextResponse.json({ error: \"key is required\" }, { status: 400 });\r\n\r\n  const command = new PutObjectCommand({\r\n    Bucket: process.env.AWS_S3_BUCKET!,\r\n    Key: key,\r\n    ContentType: contentType || \"application/octet-stream\",\r\n  });\r\n\r\n  const presignedUrl = await getSignedUrl(s3, command, { expiresIn: 60 }); // 유효 60초\r\n  const publicUrl = `https://${process.env.AWS_S3_BUCKET}.s3.${process.env.AWS_REGION}.amazonaws.com/${key}`;\r\n  return NextResponse.json({ presignedUrl, publicUrl, key });\r\n}\r\n```\r\n\r\n필요 환경 변수: `AWS_REGION`, `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, `AWS_S3_BUCKET`.\r\n\r\n> **주의**: `requestChecksumCalculation` / `responseChecksumValidation`를 `\"WHEN_REQUIRED\"`로 두지 않으면 최신 AWS SDK v3에서 브라우저 업로드가 **403**으로 실패합니다. 이 레포의 동작 예시는 `lumir-editor-test/src/app/api/s3/presigned/route.ts`에 있습니다.\r\n\r\n> Express / Remix / SvelteKit 등도 동일하게 `key`·`contentType`을 받아 `{ presignedUrl, publicUrl }`을 반환하는 GET 라우트를 만들면 됩니다. `apiEndpoint`만 해당 서버 주소로 맞추세요.\r\n\r\n### 파일명 커스터마이징\r\n\r\n여러 파일을 동시에 올릴 때 이름 충돌을 방지합니다. 기본적으로 확장자는 자동으로 붙습니다(`preserveExtension: false`로 끌 수 있음).\r\n\r\n```tsx\r\n<LumirEditor\r\n  s3Upload={{\r\n    apiEndpoint: \"/api/s3/presigned\",\r\n    env: \"production\",\r\n    path: \"uploads\",\r\n    // 확장자를 제거한 이름(nameWithoutExt)이 전달됩니다\r\n    fileNameTransform: (nameWithoutExt, file) => `user123_${nameWithoutExt}`,\r\n    appendUUID: true,          // 변환 후 UUID를 확장자 앞에 추가\r\n    // preserveExtension: false // 확장자를 붙이지 않음(서버에서 WebP 변환 등)\r\n  }}\r\n/>\r\n```\r\n\r\n**결과**: `photo.png` → `user123_photo_550e8400-…-446655440000.png`\r\n\r\n### 커스텀 업로더\r\n\r\n```tsx\r\n<LumirEditor\r\n  uploadFile={async (file) => {\r\n    const fd = new FormData();\r\n    fd.append(\"file\", file);\r\n    const res = await fetch(\"/api/upload\", { method: \"POST\", body: fd });\r\n    const { url } = await res.json();\r\n    return url; // 공개 URL 문자열 반환\r\n  }}\r\n/>\r\n```\r\n\r\n### 헬퍼: `createS3Uploader`\r\n\r\n```tsx\r\nimport { createS3Uploader } from \"@lumir-company/editor\";\r\n\r\nconst s3Uploader = createS3Uploader({\r\n  apiEndpoint: \"/api/s3/presigned\",\r\n  env: \"production\",\r\n  path: \"images\",\r\n  appendUUID: true,\r\n});\r\n\r\n<LumirEditor uploadFile={s3Uploader} />;\r\n// 또는 독립 사용: const url = await s3Uploader(file);\r\n```\r\n\r\n---\r\n\r\n## 동영상·오디오·파일 업로드\r\n\r\n동영상은 `allowVideoUpload={true}`일 때만 활성화됩니다. 업로드 설정(`s3Upload`/`uploadFile`)은 이미지와 **동일하게 공유**됩니다.\r\n\r\n```tsx\r\n<LumirEditor\r\n  allowVideoUpload\r\n  maxVideoFileSize={200 * 1024 * 1024} // 200MB (기본 100MB)\r\n  s3Upload={{ apiEndpoint: \"/api/s3/presigned\", env: \"production\", path: \"videos\", appendUUID: true }}\r\n/>\r\n```\r\n\r\n- **삽입 경로**: 붙여넣기, 드래그 앤 드롭, 슬래시 메뉴(\"Video\"), 플로팅/사이드 메뉴\r\n- **지원 URL**: 비디오 블록의 `url`은 **직접 재생 가능한 파일 URL**(예: `.mp4`, `.webm`, `.ogg`)만 지원합니다. YouTube/Vimeo 등 스트리밍 페이지 URL은 `<video>`로 재생되지 않습니다.\r\n- **오디오**: `allowAudioUpload`로 opt-in, 용량은 `maxAudioFileSize`로 조절합니다.\r\n- **일반 파일 업로드는 차단됩니다** — `allowFileUpload`는 아무 동작도 하지 않습니다(0.13.0 `@deprecated`). 저장 문서에 이미 있는 파일 블록은 확장자 칩(`PDF`·`XLS`·`ZIP`)과 `props.size` 크기로 그려집니다.\r\n\r\n### 이미지·동영상 경로 분리\r\n\r\n`fileNameTransform`의 두 번째 인자 `file`로 종류를 구분해 prefix를 나눌 수 있습니다.\r\n\r\n```tsx\r\nfileNameTransform: (nameWithoutExt, file) => {\r\n  const isVideo = file.type.startsWith(\"video/\");\r\n  return `${isVideo ? \"videos\" : \"images\"}/${nameWithoutExt}`;\r\n}\r\n// 결과: production/uploads/videos/clip_xxx.mp4, production/uploads/images/photo_xxx.png\r\n```\r\n\r\n### 저장 데이터 구조\r\n\r\n```json\r\n{ \"type\": \"image\", \"props\": { \"url\": \"https://cdn/…/photo.png\", \"caption\": \"\", \"previewWidth\": 512, \"textAlignment\": \"center\" }, \"content\": [], \"children\": [] }\r\n{ \"type\": \"video\", \"props\": { \"url\": \"https://cdn/…/clip.mp4\" }, \"content\": [], \"children\": [] }\r\n```\r\n\r\n### 이미지 편집 (리사이즈 · 정렬)\r\n\r\n이미지에 마우스를 올리면 **손잡이 다섯**이 뜹니다.\r\n\r\n| 손잡이 | 바뀌는 값 | 종횡비 |\r\n|---|---|---|\r\n| 좌 · 우 | `previewWidth` | 높이는 비율 자동 |\r\n| 하단 | `previewHeight` | **자유** — 세로로만 늘어납니다(찌그러짐 허용) |\r\n| 좌하 · 우하 모서리 | 둘 다 | **고정** — 잡은 순간의 비를 지킵니다 |\r\n\r\n`previewHeight`는 세로·대각 손잡이를 쓴 이미지에만 생기고, 없으면 종전처럼 비율이 자동입니다(기존 문서의 렌더는 바뀌지 않습니다). 이미지 **안쪽 우상단**에 뜨는 오버레이 툴바로 **좌·가운데·우 정렬**(`textAlignment`)·삭제를 할 수 있습니다. 세 값 모두 저장 데이터에 반영되어 라운드트립·HTML 내보내기(`<img width height>`)·붙여넣기에서 유지됩니다(읽기전용 모드에선 편집 UI 숨김).\r\n\r\n빈 이미지·비디오 블록은 **드롭존**입니다 — 클릭하면 파일 선택창이 열리고, 그 자리에 파일을 놓으면 **그 블록이 채워집니다**(종전에는 옆에 새 블록이 생겼습니다). 이미지 로드에 실패하면 안내와 「다시 시도」가 뜹니다.\r\n\r\n---\r\n\r\n## 업로드 진행률\r\n\r\nS3 업로드 시 `s3Upload.onProgress` 콜백으로 0~100% 진행률을 받을 수 있습니다. 에디터는 이 값을 툴바에 `n%`로 자동 표시합니다. 대용량 파일에서 브라우저가 `progress` 이벤트를 드물게 보내는 경우를 대비해 **중간 진행률을 보간**하여 부드럽게 갱신합니다.\r\n\r\n```tsx\r\n<LumirEditor\r\n  allowVideoUpload\r\n  s3Upload={{\r\n    apiEndpoint: \"/api/s3/presigned\",\r\n    env: \"production\",\r\n    path: \"videos\",\r\n    uploadTimeoutMs: 180000, // PUT 타임아웃(ms). 기본 120000\r\n    maxRetries: 2,           // PUT 실패 재시도. 기본 2(최대 3회 시도)\r\n    onProgress: (percent) => console.log(`${percent}%`),\r\n  }}\r\n/>\r\n```\r\n\r\n- `onProgress`는 **S3 PUT 요청 시에만** 호출됩니다(presigned URL 요청 단계 제외).\r\n- 업로드 시작 직후 `onProgress(0)`, 완료 시 `onProgress(100)`이 보장됩니다.\r\n\r\n---\r\n\r\n## 이미지·비디오 삭제\r\n\r\n에디터에서 이미지 또는 비디오 블록이 삭제되면 `onImageDelete(url)`이 호출됩니다(둘 다 동일 콜백).\r\n\r\n```tsx\r\n<LumirEditor\r\n  s3Upload={{ /* … */ }}\r\n  onImageDelete={(url) => {\r\n    // S3 등 외부 스토리지 삭제\r\n  }}\r\n/>\r\n```\r\n\r\n### 권장: 지연 삭제 (Undo/Redo 대응)\r\n\r\nUndo로 복원 가능하도록 실제 삭제를 지연시키는 패턴을 권장합니다.\r\n\r\n```tsx\r\n\"use client\";\r\nimport { useRef, useCallback } from \"react\";\r\n\r\nfunction Editor() {\r\n  const pending = useRef(new Map<string, ReturnType<typeof setTimeout>>());\r\n\r\n  const handleImageDelete = useCallback((url: string) => {\r\n    if (pending.current.has(url)) return;\r\n    const t = setTimeout(async () => {\r\n      pending.current.delete(url);\r\n      await fetch(`/api/s3/delete?url=${encodeURIComponent(url)}`, { method: \"DELETE\" });\r\n    }, 5 * 60 * 1000); // 5분 후 삭제\r\n    pending.current.set(url, t);\r\n  }, []);\r\n\r\n  return <LumirEditor s3Upload={{ /* … */ }} onImageDelete={handleImageDelete} />;\r\n}\r\n```\r\n\r\n| 항목 | 권장 |\r\n| --- | --- |\r\n| Undo/Redo | 지연 삭제(5~10분)로 복원 가능하게 구현 |\r\n| 권한 검증 | 프로덕션에서는 인증/인가 필수 |\r\n| 참조 카운트 | 같은 URL을 여러 문서에서 쓰는지 확인 |\r\n\r\n---\r\n\r\n## 테이블\r\n\r\n슬래시 메뉴(`/` → Table)나 Excel/Word 셀 붙여넣기로 표를 만듭니다.\r\n\r\n### 표 툴바\r\n\r\n셀에 캐럿을 두면 표 위에 툴바가 뜹니다. 같은 카테고리는 **드롭다운 하나로** 묶여 있습니다.\r\n\r\n| 버튼 | 안에 든 것 |\r\n| --- | --- |\r\n| **가로 정렬 ▾** | 셀 왼쪽·가운데·오른쪽 정렬 |\r\n| **세로 정렬 ▾** | 위쪽·중간·아래쪽 맞춤 |\r\n| **삽입 ▾** | 위에 행 · 아래에 행 · 왼쪽에 열 · 오른쪽에 열 |\r\n| **삭제 ▾** | 행 삭제 · 열 삭제 |\r\n| **머리 ▾** | 머리행 · 머리열 |\r\n| **표 정렬 ▾** | 표 왼쪽 · 가운데 · 오른쪽 정렬 |\r\n\r\n- 앵커 버튼은 아이콘만 있습니다. 이름은 **hover 툴팁**에 나오고, 메뉴를 열면 항목마다 한글\r\n  문장이 붙습니다.\r\n- 두 정렬 앵커의 아이콘은 **현재 값을 그대로 보여 줍니다** — 메뉴를 열지 않아도 지금 어느\r\n  정렬인지 알 수 있습니다.\r\n- 메뉴는 한 번에 하나만 열립니다. `Esc`로 닫고, `↑``↓`로 항목을 옮기고 `Enter`로 실행합니다.\r\n- **접히지 않은 것**: 글꼴·글자 크기·굵게/기울임/밑줄/취소선·텍스트 배경색(맨 왼쪽) · 셀\r\n  배경색·글자색 · 행/열 전체 선택 · 셀 안 체크박스·번호 목록·글머리 목록 · 표 삭제(맨 끝).\r\n  자주 누르는 것과 잘못 눌리면 안 되는 것은 밖에 둡니다.\r\n- **셀 병합/분할**은 상황에 맞을 때만 나타납니다(병합=셀 2개 이상 선택, 분할=병합 셀에 캐럿).\r\n- 비활성 버튼은 **왜 안 되는지**를 툴팁으로 알립니다(예: 「열을 더 넣을 폭이 없습니다」).\r\n\r\n### 표 칸 안 이미지\r\n\r\n표 칸에 이미지를 **붙여넣거나 떨어뜨리면 그 칸에** 들어갑니다(예전에는 표 아래에 별도 블록으로\r\n생겼습니다). 스크린샷·이미지 파일은 `uploadFile`/`s3Upload` 로 올라간 뒤 서버 URL 로 심기고,\r\n웹에서 복사한 그림(`<img src=\"https://…\">`)은 업로드 없이 그대로 들어옵니다. `data:`·`blob:`\r\n그림은 **문서에 남기지 않습니다**(업로드 경로를 거치거나 버려집니다).\r\n\r\n저장 모델은 인라인 노드입니다:\r\n\r\n```json\r\n{ \"type\": \"inlineImage\", \"url\": \"https://cdn/…/stamp.png\", \"width\": 120, \"height\": 80,\r\n  \"displayWidth\": 160, \"displayHeight\": 90, \"alt\": \"\" }\r\n```\r\n\r\n- **크기는 저장=원본, 화면=맞춤**입니다. `width`/`height` 는 넣을 때의 원본 크기이고, 칸보다 크면\r\n  **CSS 가 칸 폭까지 줄입니다**(비율 유지). 열 너비를 바꾸면 그림이 함께 줄고 늘지만 저장값은\r\n  변하지 않습니다 — 좁은 열에서 저장한 문서를 넓은 화면에서 열어도 그림이 작아진 채 굳지 않습니다.\r\n- **기본 표시 상한은 240px**입니다(`--lumir-inline-img-max-w`). 도장·서명·검사 사진을 기준으로\r\n  잡은 값이고 호스트가 CSS 변수로 바꿀 수 있습니다. 이 상한이 **길이(px)여야 하는** 이유가 있습니다 —\r\n  퍼센트로 두면 표 너비가 `auto` 일 때 크로미움이 내용으로 표 폭을 먼저 정하면서 그 퍼센트를 무시해,\r\n  큰 그림 하나가 표를 편집영역 밖으로 밀어냅니다.\r\n- 그림에 마우스를 올리면 **손잡이 넷**이 뜹니다 — 좌·우(폭) · 하단(높이, 찌그러짐 허용) ·\r\n  우하단 모서리(비율 고정). 손으로 끈 크기는 `displayWidth`/`displayHeight` 에 따로 담깁니다.\r\n  원본(`width`/`height`)을 덮지 않으므로 「저장=원본」계약이 그대로 유지됩니다. 드래그는 **칸 폭을\r\n  상한**으로 삼습니다(넘기면 표가 밀려납니다).\r\n- 세로로 긴 그림은 **행 높이를 밀어냅니다**(행 높이는 최소값이라 내용에 맞춰 자랍니다).\r\n- 엑셀처럼 **표와 비트맵이 함께** 담긴 클립보드는 표가 이깁니다 — 표가 그림 한 장이 되지 않습니다.\r\n- 인라인 이미지는 체크박스·목록 마커와 같은 **인라인 원자**입니다. BlockNote 표준 인라인 밖이라\r\n  구버전 소비자는 이 노드를 읽지 못합니다(기존 원자 3종과 같은 트레이드오프).\r\n\r\n### Notion 스타일 grip 핸들\r\n\r\n셀에 포커스하면 주변에 grip 핸들이 표시됩니다.\r\n\r\n| 위치 | 동작 |\r\n| --- | --- |\r\n| **상단 grip** | 클릭 → 열 메뉴(삭제 / 좌·우 열 추가 / 색) · 드래그 → 열 이동 |\r\n| **좌측 grip** | 클릭 → 행 메뉴(삭제 / 위·아래 행 추가 / 색) · 드래그 → 행 이동 |\r\n| **우측 grip** | hover → 셀 메뉴(셀 배경색 등) |\r\n\r\n- 행/열 메뉴가 열리면 해당 행/열 전체가 하이라이트됩니다.\r\n- 표 우측/하단 가장자리 hover 시 행/열 추가 버튼이 나타납니다.\r\n\r\n### 셀 색·정렬\r\n\r\n- **단일 셀**: 우측 grip 또는 행/열 메뉴의 \"색\"에서 배경색/글자색 적용\r\n- **다중 셀**: 드래그 · **Shift+클릭**(앵커에서 범위) · **Ctrl/Cmd+클릭**(떨어진 칸)으로 고른 뒤 표 툴바에서 일괄 적용\r\n- **표 전체 선택**: 셀 포커스 상태에서 `Ctrl/Cmd + A` → 표의 모든 셀 선택(다시 누르면 문서 전체로 확장)\r\n- 병합 때문에 끌려온 칸은 **점선**으로 갈라 보여 줍니다. 떨어진 칸을 고르면 사각형을 전제하는 동작(병합 ·\r\n  행/열 삭제 · 행/열 삽입 · 행/열 전체 선택)이 회색이 되고 이유를 툴팁으로 알립니다.\r\n- 배경색 14색(진한 단계 4색 포함) · 글자색 10색.\r\n\r\n### 셀 테두리 (굵기 · 선종 · 색)\r\n\r\n표 툴바의 **테두리**를 열어 **펜**(색 · 굵기 · 선종)을 고르고 **적용 대상**을 누릅니다.\r\n\r\n| | |\r\n|---|---|\r\n| **굵기** | 1px · 2px · 3px |\r\n| **선종** | 실선 · 파선 · 점선 |\r\n| **색** | 기본(격자선) · 먹 · 회색 · 빨강 · 파랑 · **투명** |\r\n| **적용 대상** | 모든 · 바깥 · 안쪽 · 위 · 아래 · 왼쪽 · 오른쪽 · **없음** |\r\n\r\n펜만 고르면 아무 일도 일어나지 않습니다(팝업이 닫히지 않는 이유입니다). 펜을 **기본 · 1px ·\r\n실선**으로 둔 채 적용 대상을 누르면 그 변들이 **원래 격자선으로 되돌아갑니다.**\r\n\r\n```tsx\r\n// 호스트가 문서를 만들 때\r\ncreateTableCell(\"합계\", { borderTop: \"3 solid ink\", borderRight: \"none\" })\r\n```\r\n\r\n> **투명과 「없음」은 다릅니다.** `none` 은 선의 **자리까지** 없애 그 행이 1px 줄지만(실측 38.75 →\r\n> 37.75), 투명은 자리를 지키고 선만 감춥니다. 표를 흔들지 않고 칸 하나를 비워 보이게 하려면\r\n> 투명을, 칸 사이를 정말 트려면 「없음」을 씁니다.\r\n\r\n값은 낱말 목록입니다 — `\"<1|2|3> <solid|dashed|dotted> [ink|gray|red|blue|transparent]\"` 또는 `\"none\"`.\r\n낱말 순서는 상관없고 **모르는 낱말은 버립니다.** 색을 빼면 격자선이 그대로 살아 안쪽과 바깥이\r\n같은 선으로 유지됩니다. 색은 **다크 테마에서 먹·회색이 뒤집히고** 빨강·파랑은 그대로입니다.\r\n\r\n> **한 경계는 한 칸만 그립니다.** 저장 JSON 에서 칸의 `borderTop`·`borderLeft` 는 **표 가장자리\r\n> 칸에서만** 쓰입니다 — 그 밖에서는 윗칸의 `borderBottom`, 왼칸의 `borderRight` 가 그 경계입니다.\r\n> 툴바에서 「왼쪽」을 눌러도 값이 **왼쪽 이웃 칸**에 적히는 이유이고, 그 덕에 한 경계에 값이 하나뿐이라\r\n> 이웃끼리 두 줄이 그려지는 일이 없습니다.\r\n\r\n**알아 둘 것 셋**\r\n\r\n- **굵게 해도 표가 안 흔들립니다.** 선은 칸 경계를 **걸쳐서** 그려지므로(엑셀과 같은 방식) 굵기를\r\n  바꿔도 행 높이·표 폭이 그대로이고, 가로선과 세로선이 교차해 **모서리가 닫힙니다.**\r\n- **내보낸 HTML 도 화면과 같습니다.** 테두리를 쓴 표만 `border-collapse: separate` 로 나가고 네 변이\r\n  전부 명시됩니다. 안 쓴 표의 출력은 종전과 한 바이트도 다르지 않습니다. 마크다운에는 남지 않습니다.\r\n  - 다만 **굵은 선이 놓이는 자리**가 다릅니다. 화면·인쇄는 경계를 걸치지만, 내보낸 HTML 은 받는\r\n    쪽이 CSS 만으로 그릴 수 있게 `border-*` 를 그대로 씁니다 — 그쪽에서는 칸 안쪽으로 자라고\r\n    점 간격도 브라우저가 칸마다 맞춥니다. 대신 배경을 지우는 소비처(메일 클라이언트 등)에서도\r\n    **선이 사라지지 않습니다.**\r\n- **인쇄는 화면 그대로** 따라갑니다.\r\n\r\n**대각선** — 같은 팝업 맨 아래 줄에서 칸을 가로지르는 선을 긋습니다(`↘` · `↗` · 둘 다 · 없음).\r\n굵기·색은 **위의 펜을 그대로** 씁니다(펜이 기본·투명이면 먹으로 긋습니다).\r\n\r\n```tsx\r\ncreateTableCell(\"\", { diagonal: \"tlbr 2 red\" })   // ↘ 2px 빨강\r\n```\r\n\r\n값은 테두리와 같은 낱말 목록입니다 — `\"<tlbr|trbl|both> [1|2|3] [ink|gray|red|blue]\"`.\r\n`tlbr` 은 좌상→우하, `trbl` 은 우상→좌하입니다. 테두리와 달리 **한 칸에 한 값**입니다(경계가\r\n아니라 칸 자신의 무늬라 이웃과 나눠 갖지 않습니다). 내보낸 HTML 도 화면과 같은 선을 그리지만,\r\n**남의 HTML 에서 읽어오지는 않습니다**(테두리와 같습니다).\r\n\r\n`tables={{ cellBorder: false }}` 로 도구를 끄면 툴바에서 그룹째 사라집니다(저장된 값은 계속 그려집니다).\r\n\r\n### 리사이즈 · 스케일 · 정렬\r\n\r\n- **열 너비**: 열 경계 드래그\r\n- **행 높이**: 행 경계 드래그. 저장은 표 속성 `content.rowHeights[]`(물리 행 인덱스, 열 너비와\r\n  대칭)이고 셀 `rowHeight` 도 함께 실어 옛 판과 호환됩니다. **모든 열이 세로병합된 행**은 셀에\r\n  실을 칸이 없어 종전에는 높이가 저장되지 않았습니다 — 그 행도 이제 값을 갖습니다\r\n- **표 전체 스케일**: 표 우하단 모서리 hover → 대각 드래그로 종횡비를 고정한 채 표 전체를 균일 배율로 확대/축소\r\n- **표 정렬**: 표 툴바 「표 정렬 ▾」 · 포매팅 툴바 · 드래그핸들 메뉴에서 표 전체를 좌/가운데/우 정렬\r\n- **에디터 폭 자동 맞춤**: 문서를 열 때 표를 본문 폭에 맞춰 그립니다(가로 스크롤 미제공). **표시 전용**이라\r\n  저장 `columnWidths` 는 원본 값을 지킵니다. 미지정 열(`null`·`0`)은 「지정 폭 유지 + 남은 폭 균등 분배」\r\n  규칙으로 확정하고, HTML 내보내기도 같은 규칙을 싣습니다.\r\n\r\n### Excel/Word 붙여넣기\r\n\r\nExcel·Word 등에서 복사한 셀 범위를 붙여넣으면(`Ctrl+V`) 이미지가 아닌 **편집 가능한 테이블**로 삽입됩니다. 셀 배경색·글자색·정렬·글자 크기·세로 정렬·굵게/기울임/밑줄이 함께 변환됩니다(정확한 hex 색은 10색 팔레트로 근사).\r\n\r\n**워드 문서의 들여쓰기는 블록 계층을 만들지 않습니다.** 한 줄이 한 블록이 되고 전부 같은 깊이로\r\n들어갑니다 — `margin-left`·`text-indent`·목록 메타(`mso-list level`)·선두 공백 중 무엇으로 들여썼든\r\n같습니다. 계층이 필요하면 줄 맨 앞에서 `Tab` 으로 직접 만듭니다.\r\n\r\n예외 둘입니다. `<ul>`/`<ol>` 처럼 **마크업이 구조로 적은** 중첩은 그대로 오고, 첫 줄\r\n들여쓰기(`text-indent`)는 계층이 아니라 모양이라 `props.firstLineIndent` 로 보존됩니다(줄 시작\r\n`Backspace` 로 해제).\r\n\r\n**글씨체도 따라오지 않습니다.** 워드·한글의 `font-family` 는 붙여넣기에서 떼어내 편집기 기본\r\n글꼴로 통일됩니다(표 셀 포함). 글씨체는 문서의 내용이 아니라 그 프로그램의 기본값이고, 붙인\r\n줄만 다른 서체로 보이는 것이 문서에서 제일 먼저 눈에 띕니다. **글자 크기는 그대로 옵니다** —\r\n사용자가 고른 값일 수 있고 표 셀 크기 충실도가 기능입니다.\r\n\r\n편집기에서 복사한 조각은 글씨체를 유지합니다(우리 토큰 `data-font-family` 로 실립니다).\r\n호스트가 `getHTML()` 로 내보낸 HTML 을 `parseHtmlToBlocks()` 로 다시 읽는 길도 글꼴을\r\n잃지 않습니다 — 떼어내는 것은 **붙여넣기 경로뿐**입니다.\r\n\r\n### 테이블 기능 설정\r\n\r\n```tsx\r\n<LumirEditor\r\n  tables={{\r\n    splitCells: true,          // 셀 병합/분할 (기본 true)\r\n    cellBackgroundColor: true, // 셀 배경색 (기본 true)\r\n    cellTextColor: true,       // 셀 글자색 (기본 true)\r\n    headers: true,             // 헤더 행/열 (기본 true)\r\n    cellBorder: true,          // 셀 테두리 도구 (기본 true)\r\n    rowDensity: true,          // 툴바 「행 높이」 메뉴 (기본 true)\r\n    density: \"compact\",       // 셀 여백 축소\r\n    cellFontSize: 12,          // 셀 기본 글자 크기(px)\r\n    cellLineHeight: 1.35,      // 셀 줄 간격 배수\r\n  }}\r\n  tableHandles={true}          // 핸들/코너 스케일 전체 게이트 (기본 true, false면 모두 끔)\r\n/>\r\n```\r\n\r\n표 셀에 체크박스를 넣으려면 셀에 캐럿을 두고 표 툴바의 **체크박스** 버튼을 누릅니다. 체크박스가\r\n있는 셀에서는 버튼 오른쪽에 `− 12px +`가 나타나며 상자 크기만 조절합니다. 값을 비우고 확정하면\r\n인접 글자 크기를 다시 따릅니다. 표 글자 크기는 프리셋 셀렉트 없이 `−`·직접 입력·`+`로 지정하며,\r\n입력값을 비우면 기본 크기로 돌아갑니다. 툴바가 본문 단보다 넓어지면 도구가 다음 줄로 감싸집니다.\r\n\r\n셀 **안**에서 드래그해 복사·잘라내기하면 체크박스·목록 마커가 그대로 따라옵니다(붙여넣기도 셀\r\n안쪽만 다시 씁니다 — 열이 늘거나 인접 셀이 바뀌지 않습니다). 복사 시점의 상자 크기가 굳어서\r\n글자 크기가 다른 칸에 붙여도 크기가 변하지 않습니다. 읽기전용·양식 `fill`에서는 잘라내기·\r\n붙여넣기가 막힙니다.\r\n\r\n### 인라인 체크박스 (표 밖 · 한 블록에 여러 개)\r\n\r\n같은 체크박스를 **문단·제목·목록 등 일반 블록 안에도** 개수 제한 없이 넣을 수 있습니다.\r\n`등급: ☐ 대 ☐ 중 ☐ 소`처럼 한 줄에 나란히 두거나, 줄바꿈으로 세로로 늘어놓습니다.\r\n\r\n| 넣는 법 | 어디서 |\r\n| --- | --- |\r\n| `[]` 또는 `[ ]` + 스페이스 | 캐럿 **앞에 내용이 있는** 모든 자리 |\r\n| 슬래시 메뉴 `/체크박스` | 빈 문단(줄 맨 앞에 첫 상자를 놓을 때) |\r\n| 상단 툴바의 체크박스 버튼 | `floatingMenu` 활성 시, 캐럿 자리 |\r\n\r\n**「할 일」 블록(`checkListItem`)과는 다른 물건입니다.** 둘은 같은 `[]`+스페이스를 쓰지만 자리로\r\n갈립니다 — **빈 문단 맨 앞**이면 할 일 블록이 되고(기존 동작 그대로), 그 밖의 모든 자리에서는\r\n인라인 체크박스가 됩니다. 화면에서도 구분됩니다:\r\n\r\n| | 할 일 블록 | 인라인 체크박스 |\r\n| --- | --- | --- |\r\n| 모양 | 둥근 사각, 완료 시 **보라 채움 + 흰 √** | 각진 사각, 완료 시 **검정 √**(채움 없음) |\r\n| 위치·크기 | 줄 왼쪽 거터, 16px 고정 | 글자 흐름 안, 이웃 글자 크기에서 파생 |\r\n| 완료 표시 | 본문에 취소선 | 텍스트에 영향 없음 |\r\n| 개수 | 블록당 하나 | 블록당 제한 없음 |\r\n\r\n클릭하면 체크가 토글되고, `Backspace`로 지웁니다. 방향키는 상자를 **한 번에** 건너고(글자 하나와\r\n같습니다) 캐럿은 상자 바깥에 섭니다. 저장 형태는 인라인 노드 `{ type: \"checkbox\", checked }`이며\r\n표 셀의 것과 같습니다. 마크다운으로 내보낼 때 인라인 상자는 `☐`/`☑` 문자가 되고, 할 일 블록만\r\n`- [ ]`로 나갑니다.\r\n\r\n**Enter로 다음 줄에 이어집니다** — 할 일 목록과 같은 동작입니다. 줄이 상자로 시작하거나 캐럿\r\n직전이 상자면 새 줄도 미체크 상자로 시작하고 캐럿이 그 뒤에 섭니다. 빈 상자 줄에서도 계속\r\n만들어지므로, 빠져나올 때는 `Backspace`로 상자를 지웁니다. (표 셀 안에서 줄을 바꾸는 키는\r\n`Shift+Enter`입니다 — `Enter`는 아래 셀로 이동합니다.)\r\n\r\n#### 영역선택 · 복사 · 크기\r\n\r\n드래그로 상자를 잡으면 **선택 표시가 칠해집니다**(글자 없는 원자에는 브라우저가 하이라이트를\r\n그려 주지 않아 직접 칠합니다). 9px 상자처럼 작아서 드래그로 집기 어려우면 **Alt+클릭**으로 그\r\n상자 하나만 집습니다.\r\n\r\n상자가 걸린 선택을 복사·잘라내기하면 상자가 **그대로 따라옵니다** — 브라우저 기본 복사는\r\n`user-select:none`인 원자를 클립보드에서 빼 버리므로(붙여넣으면 흔적 없이 사라집니다) 편집기가\r\n클립을 직접 씁니다. 평문 슬롯에는 `[ ]`/`[x]`로 나가고, 앱 안에 붙여넣으면 체크 상태와 상자\r\n크기까지 살아 돌아옵니다.\r\n\r\n크기는 **서식 툴바의 글자 크기 입력 하나로** 조절합니다:\r\n\r\n| 선택 | 입력을 바꾸면 | 저장 |\r\n| --- | --- | --- |\r\n| 글자 + 상자 | 글자 크기가 바뀌고 상자가 **따라옵니다** | 상자에 크기를 적지 않습니다(이웃 글자에서 파생) |\r\n| **상자만** (Alt+클릭·드래그) | 그 상자 크기만 바뀝니다(글자 불간섭) | `{ type:\"checkbox\", checked, size }` |\r\n| **상자만** + 프리셋 「기본」 | 명시 크기를 지워 다시 글자를 따릅니다 | `size` 제거 |\r\n\r\n---\r\n\r\n## 고정 레이아웃 문서 (lockMode)\r\n\r\n관리자가 만든 틀은 그대로 두고 **지정한 칸만** 사용자가 채우는 모드입니다. `lockMode`를 생략하면\r\n기존 편집 동작이 한 비트도 바뀌지 않습니다. `lockMode`는 **마운트 전용**이므로 역할을 바꾸려면\r\n편집기를 다시 마운트해야 합니다.\r\n\r\n```tsx\r\n// 설계: 자유 입력 칸·행 추가 허용을 지정한다(표/서식 툴바)\r\n<LumirEditor initialContent={blocks} lockMode={{ role: \"design\" }} />\r\n\r\n// 작성: 지정한 칸 밖은 전부 잠긴다\r\n<LumirEditor initialContent={blocks} editable lockMode={{ role: \"fill\" }} />\r\n\r\n// 열람\r\n<LumirEditor initialContent={blocks} lockMode={{ role: \"view\" }} />\r\n```\r\n\r\n`fill`은 `editable={true}`와 함께 사용합니다. `view`로 마운트한 문서는 `setEditable(true)`로 열 수\r\n없습니다. 모르는 `role`은 경고 후 `view`로 다룹니다 — 조용히 \"모드 없음\"이 되지 않습니다.\r\n\r\n### 어디를 열지는 문서가 정한다\r\n\r\n| 자리 | prop | 지정 방법 |\r\n| --- | --- | --- |\r\n| 자유 입력 칸(표 셀) | `tableCell.props.formEditable` | 표 툴바 「자유 입력 칸」 |\r\n| 자유 입력 문단 | `block.props.formEditable` | 서식 툴바 「자유 입력 칸」 |\r\n| 행 추가 허용(표) | `table.props.allowRowEdit` | 표 툴바 「행 추가 허용」 |\r\n\r\n세 표식은 `design`에서 찍거나 호스트가 문서 JSON에 직접 심습니다. `fill`에서 늘어나는 행은 빈 행이\r\n아니라 **위 행의 표식을 물려받은 새 행**이라 바로 입력할 수 있고, 표식이 없는 표에는 「+」 바가\r\n아예 서지 않습니다. 열 추가·병합·리사이즈는 `fill`에서 전부 막힙니다.\r\n\r\n체크박스(인라인 원자·체크리스트)는 `fill`에서 **토글됩니다** — 체크는 레이아웃을 바꾸지 않기\r\n때문입니다. 값 변경은 `onContentChange`로 나갑니다.\r\n\r\n자세한 배선은 [`docs/lock-mode/GUIDE.md`](docs/lock-mode/GUIDE.md)를 참고하세요.\r\n\r\n### 양식 필드 바인딩 — 동결 (0.9.0)\r\n\r\n`formMode`와 아마란스 바인딩 계약(`{ITEMS, TABLE}` 봉투 · `mapping_key` · 키 카탈로그 · 필드\r\n속성 패널)은 **봉인**됐습니다. 새 문서에 필드를 심을 수 없고, `formMode`를 주면 경고 후 `role`만\r\n`lockMode`로 옮겨 처리합니다(`author`→`design`). 잠금이 조용히 풀리는 경로는 없습니다.\r\n\r\n`formMode.fieldKeys`와 `onFieldChange`는 아무 동작도 하지 않습니다(경고만).\r\n\r\n**이미 저장된 문서는 그대로 돕니다.** 필드 원자는 왕복하고, 아래 순수 JSON API도 0.7.0과 같은\r\n동작을 유지합니다 — 제거하지 않았습니다. 새 작업은 `lockMode` 또는 데이터 자리 칩(`insertChip`)을\r\n쓰세요.\r\n\r\n```ts\r\nimport { extractFormData, applyFormData, validateFormData } from \"@lumir-company/editor/core\";\r\n// applyFormDataWithReport · bindingReport · validateFieldKeys · markValidationErrors 도 그대로 있습니다.\r\n```\r\n\r\n---\r\n\r\n## 데이터 자리 칩 (chip)\r\n\r\n양식을 **설계할 때** \"이 자리에 어떤 데이터가 들어온다\"를 문서 안에 보여 주는 인라인 표식입니다.\r\n알약에 **라벨 + 타입명**이 들어가고(`보안서약 boolean`) **값은 담지 않습니다.**\r\n\r\n```tsx\r\n// 1) 슬래시 메뉴로 고르게 한다 — 카탈로그는 호스트가 준다\r\n<LumirEditor\r\n  initialContent={blocks}\r\n  chipCatalog={[\r\n    { key: \"emp_name\", label: \"성명\", vtype: \"string\" },\r\n    { key: \"security_oath\", label: \"보안서약\", vtype: \"boolean\" },\r\n  ]}\r\n/>\r\n\r\n// 2) 호스트 패널에서 직접 심는다\r\nref.current?.insertChip({ key: \"emp_name\", label: \"성명\", vtype: \"string\" });\r\n```\r\n\r\n- 저장 형태는 `{ type:\"chip\", key, label?, vtype? }`. 칩이 없는 문서는 **한 비트도 달라지지 않습니다.**\r\n- **타입명은 보내신 `vtype`이 그대로 나옵니다** — 편집기는 타입 어휘를 갖지 않고, 값으로 타입을\r\n  추측하지도 않습니다(불리언을 `'Y'`/`'N'` 문자열로 보내면 `string`으로 뜹니다). 색은 `string` 초록 ·\r\n  `number` 갈색 · `boolean` 인디고 · 그 밖 전부 회색입니다.\r\n- `insertChip`은 캐럿이 문단·표 셀 안에 없으면 **아무것도 하지 않고 `null`** 을 돌려줍니다.\r\n- 슬래시 「데이터 필드」 그룹은 `chipCatalog`를 준 경우에만 뜹니다(문단·표 셀 양쪽). 런타임 교체는\r\n  `setChipCatalog(list)`입니다 — 편집기는 카탈로그를 갖지 않습니다.\r\n- 크기는 지정이 없으면 셀·문단의 **0.7배**이고, 서식·표 툴바의 글자 크기 컨트롤로 **그 칩만** 바꿉니다.\r\n  지우기는 Backspace로 통째로입니다.\r\n- 내보내기: HTML은 `data-chip-key`·`data-chip-vtype`과 글자를, 마크다운은 `라벨 (타입)`을 남깁니다.\r\n  `{{key}}` 마커로는 나가지 않습니다.\r\n- **저작 UI는 편집기가 갖지 않습니다** — 필드 목록·속성 패널은 양식을 만드는 쪽 소관이고, `lockMode`·\r\n  `formMode`와 무관합니다.\r\n\r\n---\r\n\r\n## HTML 양식 템플릿\r\n\r\n호스트가 HTML 카탈로그를 주입하면 슬래시 메뉴에 양식별 항목이 나타납니다. 사용자가 편집할 위치는\r\n`data-lumir-slot`으로 표시합니다. 템플릿은 Shadow DOM에 격리되고 렌더·내보내기마다 정화됩니다.\r\n\r\n```tsx\r\nconst htmlTemplates = [{\r\n  id: \"expense-v1\",\r\n  name: \"지출결의서\",\r\n  version: \"1\",\r\n  html: `\r\n    <style>.title { font-weight: 700; }</style>\r\n    <section>\r\n      <h1 class=\"title\">지출결의서</h1>\r\n      신청자: <span data-lumir-slot=\"requester\"\r\n                    data-lumir-slot-placeholder=\"이름 입력\"></span>\r\n    </section>`,\r\n}];\r\n\r\n<LumirEditor htmlTemplates={htmlTemplates} htmlFileDrop />;\r\n```\r\n\r\n배포 전에 템플릿 정화 결과와 슬롯을 검사할 수 있습니다. 이 API는 DOM을 사용하므로 브라우저에서\r\n실행합니다.\r\n\r\n```ts\r\nimport { inspectHtmlTemplate } from \"@lumir-company/editor\";\r\n\r\nconst result = inspectHtmlTemplate(htmlTemplates[0].html);\r\nresult.ok;      // 제거된 위험 요소가 없으면 true\r\nresult.slots;   // [\"requester\"]\r\nresult.removed; // 예: [\"tag:script\", \"attr:onerror\"]\r\n```\r\n\r\n`.html`·`.htm` 파일 드롭은 기본 활성화되어 있으며 `htmlFileDrop={false}`로 끌 수 있습니다.\r\n슬롯이 없는 HTML은 편집 지점이 없는 정적 임베드로 삽입됩니다.\r\n\r\n---\r\n\r\n## 호스트 연동 API\r\n\r\n### 저장 콘텐츠 판정과 블록 팩토리\r\n\r\n```ts\r\nimport {\r\n  parseDocumentContent,\r\n  createTextRun, createParagraph, createHeading,\r\n  createTableCell, createTableRow, createTable,\r\n} from \"@lumir-company/editor/core\";\r\n\r\nconst parsed = parseDocumentContent(savedValue);\r\nif (!parsed.ok) {\r\n  parsed.reason; // \"empty\" | \"not-json\" | \"not-blocks\"\r\n} else {\r\n  parsed.blocks;\r\n}\r\n\r\nconst table = createTable([\r\n  createTableRow([\r\n    createTableCell(\"품목\"),\r\n    createTableCell([createTextRun(\"수량\", { bold: true })]),\r\n  ]),\r\n]);\r\nconst doc = [createHeading(\"신청서\", { level: 2 }), createParagraph(\"내용\"), table];\r\n```\r\n\r\n### 링크 클릭 가로채기\r\n\r\n```tsx\r\n<LumirEditor\r\n  onLinkOpen={(href, event, anchor) => {\r\n    openPopup(href);\r\n    return true; // 기본 새 탭 열기 생략\r\n  }}\r\n/>\r\n```\r\n\r\n`onLinkOpen`은 읽기전용에서도 동작합니다. `true` 이외를 반환하면 기존처럼 새 탭으로 엽니다.\r\n\r\n---\r\n\r\n## 다단 컬럼 (2·3단)\r\n\r\n노션식 다단 컬럼 레이아웃입니다. 공식 `@blocknote/xl-multi-column`(AGPL) 대신 **MIT 자체 구현**을 사용합니다. **2단·3단**을 지원합니다.\r\n\r\n- **삽입**: 슬래시 메뉴 `/2단 컬럼`·`/2단 컬럼 (구분선)`·`/3단 컬럼`·`/3단 컬럼 (구분선)`.\r\n- **블록 DnD 생성**: 블록을 다른 블록의 좌/우 가장자리로 끌어다 놓으면 2단 컬럼이 생성됩니다(세로 드롭 인디케이터). *(3단은 슬래시 메뉴로 생성)*\r\n- **컬럼 간 이동 / 컬럼 밖으로 내보내기**: 블록 그립(⠿)을 다른 컬럼 안으로 드래그하면 그 컬럼으로, **컬럼 바깥(최상위 블록의 위/아래)** 으로 드래그하면 컬럼을 벗어나 일반 블록이 됩니다. 드롭 인디케이터가 컬럼 폭이면 컬럼 안, 에디터 전체 폭이면 최상위입니다.\r\n- **다단 블록 자체 이동**: 다단 블록의 **첫 컬럼 첫 블록 자리(좌상단)** 가 \"블록 전체\" 그립입니다. 그 자리에 커서를 두면(본문이든 왼쪽 거터든) 항상 columnList 그립이 잡히고, 드래그하면 다단 블록이 통째로 최상위에서 재정렬됩니다. 컬럼 사이 여백에서도 같은 그립이 잡힙니다.\r\n  > 그 자리에서는 **첫 컬럼 첫 블록 개별 그립을 쓸 수 없습니다**(두 그립이 같은 좌표라 구분이 불가능해, 묶음 이동으로 통일). 그 블록만 옮기려면 다른 블록을 옮겨 자리를 바꾸거나, 컬럼 안에서 Enter/Backspace로 편집하세요. 첫 컬럼의 **두 번째 이후** 블록과 다른 컬럼의 블록은 모두 자기 그립을 그대로 씁니다.\r\n- **중첩 금지**: 다단 블록을 다른 다단 블록의 컬럼 안에 넣을 수 없습니다(컬럼 안의 컬럼은 지원 범위 밖).\r\n- **컬럼 탈출**: 컬럼 맨 마지막 블록에서 **Enter 두 번** → 컬럼 아래에 일반 문단 생성·포커스(어느 컬럼에서든 동일).\r\n- **컬럼 축소**: 한 컬럼의 **마지막 블록이 그 컬럼을 떠나면** 컬럼이 접힙니다 — 3단 → 2단, 2단 → 컬럼 없는 일반 블록행(언랩). 사라진 컬럼의 폭은 남은 컬럼에 **비례 분배**되어 상대 비율이 유지됩니다. \"떠난다\"는 세 경로 모두를 뜻합니다:\r\n  - 그립(⠿) 드롭다운의 **삭제**\r\n  - 컬럼에 하나만 남은 **빈 블록에서 Backspace**\r\n  - **DnD로 다른 컬럼으로 이동**\r\n  \r\n  축소는 이동이 끝난 뒤에 일어나므로 드래그 중에 드롭 자리가 사라지지는 않습니다. 같은 컬럼 안 재정렬은 축소하지 않습니다.\r\n- **너비 리사이즈**: 컬럼 사이 경계를 드래그해 인접 두 컬럼의 비율 조절(합 유지).\r\n- **구분선**:\r\n  - **블록별**: 생성 시 \"구분선\" 항목을 고르면 그 블록에 고정되어 저장·라운드트립(`showDivider`).\r\n  - **전역**: `columnDivider` prop(기본 `false`)으로 모든 컬럼 사이에 세로 구분선 표시.\r\n\r\n```tsx\r\n<LumirEditor columnDivider />\r\n```\r\n\r\n구분선 색은 CSS 변수 `--lumir-column-divider-color`로 조절합니다(미지정 시 라이트 `--lumir-line` `#CED8E5` / 다크 `#4a4a4a`). 구분선 양옆에는 블록 그립이 뜰 여백(약 18–20px)이 예약됩니다.\r\n\r\n**좁은 화면(640px 이하)에서는 컬럼이 세로로 쌓입니다**(0.13.0). 잡을 이유가 없는 리사이저는 숨습니다.\r\n\r\n> **하위호환**: 4단 이상(레거시/외부 데이터)으로 저장된 `columnList`는 로드 시 초과 컬럼의 블록이 마지막(3번째) 컬럼으로 병합되어 3단으로 정규화됩니다. 1단은 펼쳐서 일반 블록으로 승격됩니다.\r\n\r\n---\r\n\r\n## 여러 줄 선택\r\n\r\n블록 경계를 넘는 드래그 · `Shift`+방향키 · `Shift`+클릭으로 여러 블록을 한 번에 잡습니다.\r\n잡은 범위에는 **일괄 서식 · 복사 · 삭제 · 타이핑 · 붙여넣기**가 걸리고, 되돌리기는 한 번입니다.\r\n\r\n**블록 도구도 그대로 걸립니다**(0.14.3) — 블록 유형 · 정렬 · 들여쓰기 넷이 선택된 블록 **전부**에\r\n적용됩니다. 링크만 단일 블록 전용입니다(블록을 넘는 링크는 저장 모델에 없습니다). 유형·정렬\r\n표시는 선택이 한 가지 값으로 모일 때만 켜지고, 섞였으면 비워 둡니다 — 빈 표시는 「모른다」가\r\n아니라 「여러 값」이라는 뜻입니다.\r\n\r\n**들여쓴 블록도 범위 안입니다**(0.13.0). 목록 아래 본문처럼 한 단 들어간 블록이 최상위 문단과\r\n똑같이 참여합니다 — 종전에는 여기서 잘려 한 줄만 잡혔습니다.\r\n\r\n| 참여 | 대상 |\r\n| --- | --- |\r\n| 된다 | 문단·제목·목록·인용·코드 — **들여쓴 것 포함** |\r\n| 안 된다 | 표 셀 · 2·3단 컬럼 안 · HTML 양식 슬롯 — 각각 **독립 편집 영역**이라 경계를 넘지 않습니다 |\r\n\r\n> 선택이 들여쓰기 경계를 넘고 그 안을 지우면, **선택 밖에 남는 자식 블록은 병합된 블록 아래로\r\n> 옮겨집니다** — 사라지지 않습니다.\r\n\r\n### 복사·잘라내기·붙여넣기·되돌리기 버튼\r\n\r\n여러 줄을 잡으면 서식 툴바 오른쪽 끝에 네 버튼이 붙습니다(0.14.0).\r\n\r\n**왜 버튼이 필요한가**: 여러 줄 선택은 브라우저의 선택이 아니라 편집기가 그린 하이라이트입니다.\r\n그래서 **우클릭 메뉴의 복사·잘라내기가 회색**으로 보입니다 — 브라우저 눈에는 선택이 없기 때문입니다.\r\n단축키(`Ctrl+C`/`X`/`V`/`Z`)는 편집기가 직접 받으므로 종전대로 동작합니다.\r\n\r\n| 버튼 | 비고 |\r\n| --- | --- |\r\n| 복사 · 잘라내기 | 여러 줄 선택도 그대로 실립니다(서식 보존 HTML + 평문) |\r\n| 붙여넣기 | 브라우저가 **클립보드 읽기 권한**을 묻습니다(크롬은 처음 한 번). 막히면 안내가 뜨고, `Ctrl+V` 는 그대로 됩니다 |\r\n| 되돌리기 | 선택이 있을 때 보입니다. 선택 없이 쓰려면 `Ctrl+Z` 또는 상단 고정 툴바(`floatingMenu`) |\r\n\r\n---\r\n\r\n## 글자 크기\r\n\r\n텍스트를 선택한 뒤 **포매팅 툴바** 또는 **상단 고정 툴바(FloatingMenu)** 의 글자 크기 컨트롤로 인라인 크기를 변경합니다.\r\n\r\n- **프리셋**: 기본(14px, 스타일 제거) / 10 · 12 · 14 · 16 · 18 · 20 · 24 · 28 (px)\r\n- **1px 스테퍼**: 드롭다운 상단의 `−`/`+` 버튼과 직접 입력(`↑`/`↓` 키)으로 8~96px 범위 내 임의 값 지정. 명시 크기가 없으면 14px 기준으로 증감\r\n- 테이블 셀 텍스트에도 동일하게 적용됩니다.\r\n- 외부 HTML(웹페이지·Excel 등)을 붙여넣을 때의 글자 크기는 가져오지 않습니다.\r\n\r\n> **0.13.0부터 편집기가 기본 타이포를 스스로 세웁니다** — `.lumir-editor` 에 `font-size: 14px` ·\r\n> `line-height: 1.7` · Pretendard 스택이 선언됩니다. 종전에는 호스트 페이지에서 상속했으므로,\r\n> **16px 페이지에 얹고 있었다면 모든 문서가 작아집니다.** 상속으로 되돌리려면 덮으세요.\r\n>\r\n> ```css\r\n> .lumir-editor { font-size: inherit; line-height: 1.6; font-family: inherit; }\r\n> ```\r\n\r\n### 하위호환 직렬화 포맷 (중요)\r\n\r\n글자 크기는 저장 JSON에서 `styles` 맵이 아니라 **styled-text의 형제(sibling) 키 `fontSize`** 로 직렬화됩니다.\r\n\r\n```json\r\n{\r\n  \"type\": \"paragraph\",\r\n  \"content\": [\r\n    { \"type\": \"text\", \"text\": \"큰 글씨\", \"styles\": { \"bold\": true }, \"fontSize\": \"18px\" }\r\n  ]\r\n}\r\n```\r\n\r\n**이유**: BlockNote는 `styles` 맵에 스키마에 없는 키가 있으면 예외를 던집니다. `styles.fontSize`로 저장하면 fontSize 스펙이 없는 **구버전 SDK(≤0.4.15)** 가 그 JSON을 로드할 때 크래시합니다. 형제 키 방식은 구버전에서 조용히 무시되어(글자 크기만 미표시) 안전하게 로드됩니다.\r\n\r\n- 에디터 로드/저장 시 변환은 자동입니다(`initialContent` ↔ `onContentChange`).\r\n- 외부 렌더러에서 저장 JSON을 직접 다룬다면, 공개 export된 `liftFontSize(blocks)`로 형제 키를 `styles.fontSize`로 복원한 뒤 사용하세요. 반대로 외부로 내보낼 때는 반드시 `lowerFontSize(blocks)`를 거쳐야 합니다(`styles.fontSize`가 유출되면 구버전 소비 앱이 크래시).\r\n- 직렬화 형태 타입은 `SerializedStyledText`로 export됩니다.\r\n\r\n---\r\n\r\n## 링크\r\n\r\nURL을 텍스트에 붙여넣으면 **자동으로 인라인 링크**로 변환됩니다(구버전의 자동 OG 카드 생성은 제거됨).\r\n\r\n- **링크 툴바(Notion식)**: 링크에 hover하면 URL 툴팁이 뜨고, 클릭하면 URL·텍스트를 편집하는 popup이 열립니다.\r\n- **보안**: `javascript:`·`data:`·`vbscript:`·`file:` 등 위험 프로토콜은 차단됩니다.\r\n- `linkToolbar` prop(기본 `true`)으로 링크 툴바 표시를 제어합니다.\r\n\r\n> 구버전의 `linkPreview` prop과 `/api/link-preview` 서브패스는 **제거**되었습니다.\r\n\r\n---\r\n\r\n## Placeholder\r\n\r\n에디터가 비어있을 때 안내 텍스트를 표시합니다.\r\n\r\n```tsx\r\n<LumirEditor placeholder=\"내용을 입력하세요...\" />\r\n```\r\n\r\n- 빈 블록에 연한 색으로 표시되고, 입력을 시작하면 사라집니다.\r\n- 모든 빈 블록(첫 블록 포함)에 동일하게 적용됩니다.\r\n\r\n---\r\n\r\n## 테마\r\n\r\n```tsx\r\n<LumirEditor theme=\"dark\" />\r\n<LumirEditor theme=\"light\" />\r\n<LumirEditor theme={{ /* 커스텀 테마 객체 */ }} />\r\n```\r\n\r\n`theme`은 `\"light\"` | `\"dark\"` | 커스텀 테마 객체를 받습니다(기본 `\"light\"`).\r\n\r\n> **다크는 0.13.0 개편의 범위 밖입니다.** 편집기 크롬(툴바·팝업·메뉴)은 새 라이트 토큰을 쓰고\r\n> 본문은 옛 다크 규칙을 그대로 씁니다 — 섞입니다. 읽을 수 없게 된 대비만 고쳤고,\r\n> 다크 재설계는 다음 판입니다.\r\n\r\n---\r\n\r\n## Props API\r\n\r\n### 자주 쓰는 Props\r\n\r\n| Prop | 타입 | 기본값 | 설명 |\r\n| --- | --- | --- | --- |\r\n| `initialContent` | `DefaultPartialBlock[] \\| string` | `undefined` | 초기 콘텐츠(블록 배열 또는 JSON 문자열) |\r\n| `onContentChange` | `(blocks: DefaultPartialBlock[]) => void` | `undefined` | 콘텐츠 변경 콜백 |\r\n| `s3Upload` | `S3UploaderConfig` | `undefined` | S3 업로드 설정 |\r\n| `uploadFile` | `(file: File) => Promise<string>` | `undefined` | 커스텀 업로드 함수 |\r\n| `onImageDelete` | `(url: string) => void` | `undefined` | 이미지·비디오 삭제 콜백 |\r\n| `onError` | `(error: LumirEditorError) => void` | `undefined` | 에러 콜백 |\r\n| `editable` | `boolean` | `true` | 편집 가능 여부 |\r\n| `placeholder` | `string` | `undefined` | 빈 블록 안내 텍스트 |\r\n| `theme` | `\"light\" \\| \"dark\" \\| object` | `\"light\"` | 테마 |\r\n| `allowVideoUpload` | `boolean` | `false` | 동영상 업로드 허용 |\r\n| `tables` | `TableConfig` | 모두 `true` | 테이블 기능 |\r\n| `lockMode` | `{ role, allowTrailingParagraph? }` | `undefined` | 고정 레이아웃 문서 — `design`·`fill`·`view`(마운트 전용) |\r\n| `formMode` | `{ role, … }` | `undefined` | **봉인** — `role`만 `lockMode`로 매핑됩니다(경고) |\r\n| `chipCatalog` | `Array<{ key, label?, vtype? }>` | `undefined` | 데이터 자리 칩 카탈로그 — 슬래시 「데이터 필드」 그룹 |\r\n| `htmlTemplates` | `HtmlTemplateEntry[]` | `undefined` | HTML 양식 카탈로그 |\r\n| `htmlFileDrop` | `boolean` | `true` | `.html`·`.htm` 파일 드롭 허용 |\r\n| `onFieldChange` | `(key, value, at?) => void` | `undefined` | **봉인** — 호출되지 않습니다. `onContentChange`를 쓰세요 |\r\n| `onLinkOpen` | `(href, event, anchor) => boolean \\| void` | `undefined` | 본문 링크 클릭 가로채기 |\r\n| `maxImageFileSize` | `number` | `10MB` | 이미지 최대 용량(바이트) |\r\n| `maxVideoFileSize` | `number` | `100MB` | 동영상 최대 용량(바이트) |\r\n| `className` | `string` | `\"\"` | 컨테이너 CSS 클래스 |\r\n\r\n### 전체 Props\r\n\r\n<details>\r\n<summary>전체 <code>LumirEditorProps</code> 보기</summary>\r\n\r\n```ts\r\ninterface LumirEditorProps {\r\n  // 콘텐츠\r\n  initialContent?: DefaultPartialBlock[] | string;\r\n  initialEmptyBlocks?: number;          // 초기 빈 블록 개수 (기본 3)\r\n  placeholder?: string;\r\n\r\n  // 업로드\r\n  uploadFile?: (file: File) => Promise<string>;\r\n  s3Upload?: S3UploaderConfig;\r\n  allowVideoUpload?: boolean;           // 기본 false\r\n  allowAudioUpload?: boolean;           // 기본 false\r\n  allowFileUpload?: boolean;            // ⚠ 미구현 — @deprecated (콘솔 경고)\r\n  maxImageFileSize?: number;            // 미설정 시 10MB\r\n  maxVideoFileSize?: number;            // 미설정 시 100MB\r\n  maxAudioFileSize?: number;\r\n\r\n  // 기능\r\n  tables?: {\r\n    splitCells?: boolean;\r\n    cellBackgroundColor?: boolean;\r\n    cellTextColor?: boolean;\r\n    headers?: boolean;\r\n    rowDensity?: boolean;\r\n    density?: \"normal\" | \"compact\";\r\n    cellFontSize?: number;\r\n    cellLineHeight?: number;\r\n  };\r\n  heading?: { levels?: (1 | 2 | 3 | 4 | 5 | 6)[] };\r\n  defaultStyles?: boolean;              // ⚠ 미구현 — @deprecated\r\n  disableExtensions?: string[];         // ⚠ 미구현 — @deprecated\r\n  trailingBlock?: boolean;              // 기본 true\r\n  trailingBlockType?: string;           // ⚠ 미구현 — @deprecated\r\n\r\n  // UI\r\n  editable?: boolean;                   // 기본 true\r\n  theme?: \"light\" | \"dark\" | Record<string, unknown>; // 기본 \"light\"\r\n  formattingToolbar?: boolean;          // 기본 true\r\n  linkToolbar?: boolean;                // 기본 true\r\n  sideMenu?: boolean;                   // 기본 true\r\n  sideMenuAddButton?: boolean;          // ⚠ 미구현 — @deprecated\r\n  slashMenu?: boolean;                  // 기본 true\r\n  emojiPicker?: boolean;                // 기본 true\r\n  filePanel?: boolean;                  // 기본 true\r\n  tableHandles?: boolean;               // 기본 true\r\n  toolbarTopOffset?: number;            // 고정 헤더 아래 표 툴바 안전선(px)\r\n  columnDivider?: boolean;              // 2단 컬럼 세로 구분선 (기본 false)\r\n  floatingMenu?: boolean;               // 상단 고정 툴바 (기본 false)\r\n  floatingMenuPosition?: \"sticky\" | \"fixed\"; // 기본 \"sticky\"\r\n  className?: string;\r\n\r\n  // 로케일/기타\r\n  locale?: string | LumirLocale;        // \"ko\" | \"en\" 등\r\n  resolveFileUrl?: (url: string) => string | Promise<string>;\r\n  fetchLinkPreview?: (url: string) => Promise<LinkPreview> | LinkPreview; // 링크 카드 메타 조회(서버 프록시 권장)\r\n  htmlTemplates?: HtmlTemplateEntry[];  // HTML 양식 카탈로그\r\n  htmlFileDrop?: boolean;               // 기본 true\r\n  lockMode?: {\r\n    role: \"design\" | \"fill\" | \"view\";\r\n    allowTrailingParagraph?: boolean;\r\n  };\r\n  formMode?: { role: \"author\" | \"fill\" | \"view\" }; // 봉인 — role 만 lockMode 로 매핑\r\n  chipCatalog?: Array<{ key: string; label?: string; vtype?: string }>; // 데이터 자리 칩 카탈로그\r\n  showErrorToast?: boolean;\r\n\r\n  // 콜백\r\n  onContentChange?: (blocks: DefaultPartialBlock[]) => void;\r\n  onError?: (error: LumirEditorError) => void;\r\n  onSelectionChange?: () => void;\r\n  onImageDelete?: (url: string) => void;\r\n  onFieldChange?: (key: string, value: string, at?: { group: string; index: number }) => void; // 봉인\r\n  onLinkOpen?: (href: string, event: MouseEvent, anchor: HTMLAnchorElement) => boolean | void;\r\n  onUploadStart?: (file: File) => void;\r\n  onUploadEnd?: (file: File) => void;\r\n}\r\n```\r\n\r\n</details>\r\n\r\n> **미구현 옵션 다섯**(`allowFileUpload` · `defaultStyles` · `disableExtensions` ·\r\n> `sideMenuAddButton` · `trailingBlockType`)은 타입에만 있고 아무 동작도 하지 않습니다.\r\n> 0.13.0에서 `@deprecated` 표시와 콘솔 경고를 붙였고 **다음 메이저에서 제거**합니다.\r\n> 특히 `allowFileUpload: false` 는 업로드를 막은 적이 없습니다 — 막으려면\r\n> `uploadFile`/`s3Upload` 를 **주지 않습니다**.\r\n\r\n### `S3UploaderConfig`\r\n\r\n```ts\r\ninterface S3UploaderConfig {\r\n  apiEndpoint: string;                  // Presigned URL API 엔드포인트\r\n  env: \"development\" | \"production\";\r\n  path: string;                         // S3 저장 경로\r\n\r\n  fileNameTransform?: (nameWithoutExt: string, file: File) => string;\r\n  appendUUID?: boolean;                 // 파일명 뒤(확장자 앞)에 UUID 추가\r\n  preserveExtension?: boolean;          // 기본 true. false면 확장자 미부착\r\n\r\n  onProgress?: (percent: number) => void; // 0~100, S3 PUT 시만 호출(보간)\r\n  uploadTimeoutMs?: number;             // PUT 타임아웃. 기본 120000\r\n  maxRetries?: number;                  // PUT 재시도. 기본 2\r\n}\r\n```\r\n\r\n### React ref (imperative API)\r\n\r\n```tsx\r\nimport { useRef } from \"react\";\r\nimport { LumirEditor, type LumirEditorReactRef } from \"@lumir-company/editor\";\r\n\r\nconst ref = useRef<LumirEditorReactRef>(null);\r\n\r\n<LumirEditor ref={ref} />;\r\n\r\nref.current?.getDocument();      // DefaultPartialBlock[] | null\r\nref.current?.setContent(blocks); // 배열 또는 저장 JSON. 성공 여부 반환\r\nref.current?.getHTML();\r\nref.current?.getMarkdown();\r\nref.current?.undo();  ref.current?.redo();\r\nref.current?.canUndo();  ref.current?.canRedo();\r\nref.current?.insertFile(file);\r\nref.current?.setTheme(\"dark\");\r\nref.current?.setEditable(false);\r\nref.current?.insertChip({ key, label, vtype });  // Element | null\r\nref.current?.setChipCatalog(list);               // 슬래시 카탈로그 교체\r\nref.current?.element;            // 편집기 루트 HTMLElement | null\r\nref.current?.editor;             // 내부 VanillaEditor 인스턴스\r\n```\r\n\r\n---\r\n\r\n## react-free 코어 API\r\n\r\n`mountLumirEditor(host, options)`는 `./core`(또는 루트)에서 import하며 `VanillaEditor` 인스턴스를 반환합니다.\r\n\r\n```ts\r\nimport { mountLumirEditor, type VanillaEditor } from \"@lumir-company/editor/core\";\r\n\r\nconst editor: VanillaEditor = mountLumirEditor(hostEl, options /* LumirEditorProps */);\r\n```\r\n\r\n### `VanillaEditor` 인스턴스 메서드\r\n\r\n| 메서드 | 반환 | 설명 |\r\n| --- | --- | --- |\r\n| `getDocument()` | `DefaultPartialBlock[]` | 현재 블록 JSON |\r\n| `getHTML(opts?)` | `string` | 콘텐츠 HTML **조각**(`{ inlineDefaults }` — 아래) |\r\n| `getFullHTML(opts?)` | `string` | `<html>` 문서 HTML(`{ title, style }`) |\r\n| `getMarkdown()` | `string` | 콘텐츠 Markdown |\r\n| `setBlocks(blocks)` | `void` | 블록 교체 |\r\n| `setMarkdown(md)` | `void` | Markdown으로 콘텐츠 설정 |\r\n| `commit()` | `boolean` | 편집 커밋 |\r\n| `undo()` / `redo()` | `boolean` | 실행 취소/재실행 |\r\n| `canUndo()` / `canRedo()` | `boolean` | 가능 여부 |\r\n| `insertFile(file)` | `void` | 파일 삽입(업로드) |\r\n| `isEditable()` / `setEditable(on)` | — | 편집 가능 상태 |\r\n| `setTheme(theme)` | `void` | 테마 변경 |\r\n| `insertChip(node)` | `Element | null` | 캐럿 자리에 데이터 자리 칩 삽입(자리 없으면 `null`) |\r\n| `setChipCatalog(list)` | `void` | 슬래시 「데이터 필드」 카탈로그 교체 |\r\n| `setOnContentChange(fn)` | `void` | 변경 콜백 교체 |\r\n| `destroy()` | `void` | 정리(리스너 해제) |\r\n\r\n#### `getHTML({ inlineDefaults })` — 조각을 자기 CSS 없이 띄울 때\r\n\r\n`getHTML()` 은 **조각**을 돌려줍니다. 표를 감싸는 CSS 는 호스트 몫이고, 그 때문에 한 가지가 갈립니다 —\r\n**세로정렬**입니다. 편집 화면은 셀을 위 정렬로 두지만(에디터 CSS 가 강제) 조각에는 그 지정이 없어,\r\n받는 쪽 브라우저 기본값인 **가운데 정렬**로 뜹니다.\r\n\r\n```js\r\neditor.getHTML();                            // 기본 — 종전 출력 그대로\r\neditor.getHTML({ inlineDefaults: true });    // 셀마다 vertical-align:top 을 찍는다\r\n```\r\n\r\n- 호스트 뷰어에 `td, th { vertical-align: top }` 이 **이미 있으면 켤 필요가 없습니다.**\r\n- 켜면 표 하나당 약 1KB 늘어납니다(실물 양식 기준 셀의 81%가 세로정렬 무지정).\r\n- **명시한 값은 절대 덮어쓰지 않습니다** — 지정이 언제나 이깁니다.\r\n- `getFullHTML()` 은 자기 스타일블록을 들고 가므로 이 옵션이 필요 없습니다.\r\n\r\n### 직렬화·변환 유틸\r\n\r\n블록 JSON ↔ HTML ↔ Markdown ↔ DOM 변환 함수가 공개 export됩니다.\r\n\r\n```ts\r\nimport {\r\n  blocksToHtml, blocksToFullHtml, parseHtmlToBlocks,\r\n  blocksToMarkdown, markdownToBlocks,\r\n  blocksToDom, domToBlocks, blockToElement, elementToBlock,\r\n  inlineContentToHtml, htmlToInlineContent, blocksFromText,\r\n} from \"@lumir-company/editor/core\";\r\n\r\nconst html = blocksToHtml(blocks);\r\nconst blocks2 = parseHtmlToBlocks(html);\r\nconst md = blocksToMarkdown(blocks);\r\n```\r\n\r\n색상·표 모델(`TableModel`, `newTableModel`, `modelToTableContent` 등) 저수준 유틸도 함께 export됩니다. 전체 목록은 타입 선언(`dist/core.d.ts`)을 참고하세요.\r\n\r\n---\r\n\r\n## 유틸리티 API\r\n\r\n### `ContentUtils`\r\n\r\n```tsx\r\nimport { ContentUtils } from \"@lumir-company/editor\";\r\n\r\nContentUtils.isValidJSONString('[{\"type\":\"paragraph\"}]'); // boolean\r\nContentUtils.parseJSONContent(jsonString);                // DefaultPartialBlock[] | null\r\nContentUtils.createDefaultBlock();                        // DefaultPartialBlock\r\nContentUtils.validateContent(content, emptyBlockCount);   // DefaultPartialBlock[]\r\nContentUtils.createEmptyBlocks(3);                        // DefaultPartialBlock[]\r\n```\r\n\r\n### 글자 크기 유틸\r\n\r\n```tsx\r\nimport {\r\n  liftFontSize, lowerFontSize,\r\n  FONT_SIZE_PRESETS, FONT_SIZE_MIN, FONT_SIZE_MAX, FONT_SIZE_DEFAULT_PX, FONT_SIZE_STEP,\r\n  parseFontSizePx, clampFontSizePx, toFontSizeValue,\r\n} from \"@lumir-company/editor\";\r\n```\r\n\r\n### 색상 상수\r\n\r\n```tsx\r\nimport { TEXT_COLORS, BACKGROUND_COLORS, getHexFromColorValue } from \"@lumir-company/editor\";\r\n// BACKGROUND_COLORS 12색(배경 전용 yellow·gray-strong 포함) · TEXT_COLORS 10색\r\n```\r\n\r\n> **0.13.0에서 값 목록·순서·hex 가 모두 바뀌었습니다.** 이 배열로 자기 색 UI 를 그린다면\r\n> [0.12.x → 0.13.0 마이그레이션](#012x--0130-마이그레이션)을 보세요. `getHexFromColorValue` 는\r\n> 없어진 값(`brown` 등)에도 옛 hex 를 계속 돌려줍니다 — 저장된 문서가 무색으로 나가지 않게 하려는 것입니다.\r\n\r\n### 에러\r\n\r\n```tsx\r\nimport { LumirEditorError, LUMIR_ERROR_CODES } from \"@lumir-company/editor\";\r\n// code: \"UPLOAD_FAILED\" | \"INVALID_FILE_TYPE\" | \"S3_CONFIG_ERROR\" | \"NETWORK_ERROR\" | \"CONTENT_PARSE_ERROR\" | \"UNKNOWN_ERROR\"\r\n```\r\n\r\n### 로케일\r\n\r\n```tsx\r\nimport { KO, EN, LOCALES, resolveLocale } from \"@lumir-company/editor\";\r\n<LumirEditor locale=\"ko\" />; // 또는 locale={EN}\r\n```\r\n\r\n### 기타\r\n\r\n`createS3Uploader`, `generateUUID`, `cn`(className 결합) 등도 export됩니다.\r\n\r\n---\r\n\r\n## 스타일링\r\n\r\n`@lumir-company/editor/style.css`가 모든 스타일을 단일 번들로 포함합니다(별도 CSS import 불필요).\r\n\r\n### Tailwind CSS\r\n\r\n```tsx\r\nimport { LumirEditor, cn } from \"@lumir-company/editor\";\r\n\r\n<LumirEditor\r\n  className={cn(\r\n    \"min-h-[400px] rounded-xl border border-gray-200 shadow-lg\",\r\n    \"focus-within:ring-2 focus-within:ring-blue-500\",\r\n  )}\r\n/>;\r\n```\r\n\r\n### 커스텀 CSS — 공개 셀렉터 계약\r\n\r\n편집기 안쪽을 CSS 로 손볼 때 **아래 이름만 짚으세요.** 여기 있는 이름은\r\n`__tests__/public-selectors.test.js` 가 실제 DOM 에서 잡히는지 고정합니다 — 바뀌면 그 테스트가\r\n먼저 실패합니다. **표에 없는 내부 클래스는 예고 없이 바뀝니다.**\r\n\r\n| 셀렉터 | 무엇 |\r\n| --- | --- |\r\n| `.lumir-editor` | 편집기 루트 |\r\n| `.lumir-editor.lumir-readonly` | `editable: false` 상태 |\r\n| `.lumir-editor.lumir-form-author` / `.lumir-form-fill` | `lockMode` 설계 / 작성 모드(클래스 이름은 0.7.0 그대로) |\r\n| `.lumir-react-host` | React 래퍼가 만드는 바깥 `<div>` |\r\n| `.block[data-type=\"paragraph\"…]` | 블록 래퍼 |\r\n| `.block > .content` | 블록의 편집 영역 |\r\n| `table.lumir-tbl` | 표 |\r\n| `table.lumir-tbl.lumir-tbl--compact` | 열폭이 40px 미만이라 **자동으로** 좁혀진 표 |\r\n| `td.lumir-cell` | 표 셀 |\r\n| `td.lumir-cell[data-bd-top|-right|-bottom|-left]` | 사용자가 지정한 셀 테두리(값은 낱말 목록) — 지정한 변에만 섭니다 |\r\n| `td.lumir-cell[data-diag]` | 칸을 가로지르는 대각선(`tlbr`·`trbl`·`both` + 굵기·색) — 지정한 칸에만 섭니다 |\r\n| `.lumir-field[data-field-key]` | 양식 필드 원자(`data-field-kind`·`data-field-state` 동반) — 저장된 문서에만 |\r\n| `[data-form-editable=\"1\"]` | 자유 입력 영역(셀·블록) |\r\n| `.block[data-allow-row-edit]` | 행 추가를 허용한 표 |\r\n| `.block[data-repeat-group]` · `td[data-repeat-row]` · `td[data-repeat-instance]` | 반복 그룹 표식(동결 — 새로 찍히지 않습니다) |\r\n| `.lumir-slot` | htmlTemplate 블록의 편집 슬롯 |\r\n\r\n**호환 별칭** — 구 BlockNote 기반 패키지의 CSS 를 살려 두려고 함께 내보냅니다.\r\n새 코드에서는 위 이름을 쓰세요.\r\n\r\n| 별칭 | 대응 |\r\n| --- | --- |\r\n| `.bn-editor` | `.lumir-editor` (같은 요소) |\r\n| `.bn-container` | `.lumir-react-host` (같은 요소) |\r\n| `[data-content-type=\"...\"]` | `.block[data-type=\"...\"]` (같은 요소) |\r\n\r\n> ⚠ **`.lumirEditor`(camelCase)는 이 패키지에 존재한 적이 없습니다.** 그 이름을 짚은 규칙은\r\n> 에러 없이 조용히 죽습니다 — 실제로 그 때문에 열이 많은 표가 셀마다 한 글자씩 끊긴 채\r\n> 운영된 사고가 있었습니다. `.lumir-editor`(하이픈)가 맞습니다.\r\n\r\n```css\r\n.my-editor .lumir-editor {\r\n  padding: 20px 30px;\r\n  line-height: 1.6;\r\n}\r\n.my-editor .block[data-type=\"heading\"] {\r\n  font-weight: 700;\r\n}\r\n```\r\n\r\n```tsx\r\n<LumirEditor className=\"my-editor\" />\r\n```\r\n\r\n**표 글자 크기는 CSS 로 덮지 마세요** — `tables.cellFontSize` 옵션이 있습니다(아래).\r\nCSS 로 덮으면 사용자가 그 셀에서 지정한 글자 크기까지 함께 눌립니다.\r\n\r\n### 표 행 높이\r\n\r\n표를 클릭하면 뜨는 툴바의 **「행 높이」** 에서 고릅니다 — 보통(기본) · 좁게 · 촘촘히.\r\n절차서처럼 **한 장에 담아야 하는 문서**를 위한 손잡이입니다.\r\n\r\n| 단계 | 셀 여백 | 셀 줄 간격 |\r\n|---|---|---|\r\n| 보통(기본) | `9px` / `10px` | `1.5` |\r\n| 좁게 | `6px` / `8px` | `1.4` |\r\n| 촘촘히 | `4px` / `6px` | `1.3` |\r\n\r\n**문서에 남습니다.** 값은 표 블록의 `props.rowDensity` 로 저장돼, 결재자가 열어도 같은 자리에서\r\n페이지가 끊깁니다. 내보낸 HTML 과 인쇄도 화면과 같은 수치입니다.\r\n\r\n> **안 고른 표는 렌더가 한 픽셀도 바뀌지 않습니다.** 「보통」은 기본값을 같은 값으로 맞추는 것이\r\n> 아니라 **값을 지웁니다** — 그러면 밀도 규칙이 아예 걸리지 않습니다.\r\n\r\n**행 높이를 끌어 정해 둔 표에서는 마지막에 한 동작이 이깁니다.**\r\n\r\n- 밀도를 고른 뒤 행 경계를 끌면 → 끈 높이가 남습니다\r\n- 행 경계를 끈 뒤 밀도를 고르면 → **끈 높이가 지워지고** 밀도가 정한 높이로 돌아갑니다\r\n\r\n행 높이는 「최소 높이」라 지우지 않으면 밀도를 낮춰도 아무 일도 일어나지 않기 때문입니다.\r\n되돌리려면 `Ctrl+Z` 입니다.\r\n\r\n도구를 감추려면 `tables={{ rowDensity: false }}` 입니다. 호스트가 표 전체를 좁히는 아래\r\n`tables.density` 와는 **다른 축**이고, 표마다 정한 값이 그쪽을 이깁니다.\r\n\r\n### 표 밀도·글자 크기\r\n\r\n열이 많은 표(결재 품의 품목 등)를 한 장에 담아야 할 때 씁니다.\r\n**주지 않으면 렌더가 한 픽셀도 바뀌지 않습니다.**\r\n\r\n```tsx\r\n<LumirEditor\r\n  tables={{\r\n    density: \"compact\",   // 셀 패딩 9/10 → 4/6, 글자 12.5 → 11.5px\r\n    cellFontSize: 10,     // 셀에만 적용 — 사용자가 지정한 글자 크기는 자기 값을 지킨다\r\n    cellLineHeight: 1.3,  // 선택(cellFontSize 를 줬을 때 기본 1.35)\r\n  }}\r\n/>\r\n```\r\n\r\n`density` 는 열폭에서 자동으로 파생되는 `.lumir-tbl--compact` 와 **별개 축**입니다.\r\n둘 다 걸리면 각자 자기 몫을 합니다.\r\n\r\n표 셀의 기본값은 **글자 `12.5px` · 줄 간격 `1.5` · 패딩 `9/10`** 입니다. 0.13.0에서 셀이 자기 값을\r\n갖게 됐습니다 — 종전에는 본문에서 상속했습니다.\r\n\r\n### 인쇄\r\n\r\n`import \"@lumir-company/editor/style.css\"` 에 인쇄 규칙이 포함되어 있습니다.\r\n\r\n- 편집 크롬(툴바·핸들·오버레이·속성 패널)은 찍히지 않습니다\r\n- **표의 행이 페이지 중간에서 잘리지 않습니다**(`break-inside: avoid`)\r\n- 셀 배경·테두리가 보존됩니다(`print-color-adjust: exact`)\r\n- 표가 인쇄 폭에 맞춰 줄어듭니다\r\n- 페이지를 직접 나누려면 `pageBreak` 블록을 넣습니다\r\n\r\n> **한계**: 여러 장으로 넘어가는 표의 **머리행은 2장부터 반복되지 않습니다.** 그러려면 표를\r\n> `<thead>` 로 그려야 하는데, 셀 좌표·선택·병합 코드가 모두 `<tbody>` 를 전제하고 있어\r\n> 별도 작업입니다.\r\n\r\n### 디자인 토큰 (`--lumir-*`)\r\n\r\n0.13.0부터 편집기의 색·라운드·그림자·글꼴은 `:root` 에 선언된 토큰에서 나옵니다.\r\n호스트가 같은 이름을 뒤에 선언하면 편집기 전체가 따라갑니다.\r\n\r\n> 툴바·팝업·토스트는 `body` 직속 오버레이라 `.lumir-editor` 스코프로는 안 닿습니다 —\r\n> **`:root` 에 덮으세요.**\r\n\r\n| 토큰 | 기본값 | 무엇 |\r\n| --- | --- | --- |\r\n| `--lumir-purple` | `#8E51FF` | 강조색 하나 — 선택·포커스 링·활성 표시 |\r\n| `--lumir-purple-rgb` | `142, 81, 255` | 〃 알파 오버레이용 3값. 강조색을 바꾸면 **둘 다** 바꿉니다(`-danger-rgb`·`-blue-rgb` 도 같은 규칙) |\r\n| `--lumir-active-bg` / `--lumir-active-fg` | `#F3DFFF` / `#64117E` | 눌린 버튼·선택된 메뉴 항목(**짝으로** 씁니다) |\r\n| `--lumir-ink` · `-ink-2` · `-ink-3` · `-ink-4` | `#0C1E33` `#495D72` `#6A7282` `#818181` | 글자 4단 |\r\n| `--lumir-paper` · `-paper-2` · `-paper-3` | `#FFFFFF` `#F9FAFB` `#ECEEF3` | 면 3단 |\r\n| `--lumir-line` / `--lumir-line-2` | `#CED8E5` / `#ECEEF3` | 편집기 UI 테두리 강/약 — 툴바·팝업·버튼 |\r\n| `--lumir-grid` / `--lumir-grid-strong` | `#E5E7EB` / `#E5E7EB`<br>다크 `#454545` / `#555555` | **면 위에 그리는 선** — 표 격자와 바깥 테두리, 코드블록, 인라인 `code`, 읽기전용 파일카드, 양식 패널 구분선. 라이트는 안·바깥이 **한 값**입니다(다크는 아직 약/강으로 갈립니다). UI 선(`--lumir-line*`)과는 역할이 달라 값을 따로 둡니다 |\r\n| `--lumir-danger` · `-success` · `-cyan` · `-blue` | `#EB5757` `#04B58B` `#029FE7` `#2B7FFF` | 상태색 |\r\n| `--lumir-r-tag` · `-r-btn` · `-r-card` | `6px` `10px` `14.5px` | 라운드 3단 |\r\n| `--lumir-shadow-card` / `--lumir-shadow-pop` | — | 그림자 2종(카드 / 팝업) |\r\n| `--lumir-font-kr` / `--lumir-font-meta` | Pretendard 스택 / Inter 스택 | 본문 / 숫자·메타 |\r\n| `--lumir-control-h` · `--lumir-icon` | `30px` · `16px` | 컨트롤 높이 · 아이콘 |\r\n| `--lumir-indent` | `1.7em` | 들여쓰기 한 단의 폭(≈23.8px · 공백 약 6.8칸). `em` 이라 글꼴이 바뀌어도 칸수가 유지됩니다. 계층(Tab)과 첫 줄 공백(`Ctrl+]`)이 **같은 값을 씁니다** — 호스트가 바꾸면 둘 다 따라갑니다 |\r\n\r\n> **문서의 색은 토큰이 아닙니다** — 글자·배경 팔레트는 저장 값에서 나옵니다\r\n> (`TEXT_COLORS`/`BACKGROUND_COLORS`). 토큰을 바꿔도 문서 색은 그대로입니다.\r\n\r\n### 호스트가 세우는 CSS 변수\r\n\r\n| 변수 | 기본값 | 용도 |\r\n| --- | --- | --- |\r\n| `--lumir-column-divider-color` | `--lumir-line`(`#CED8E5`) | 2단 컬럼 세로 구분선 색 |\r\n| `--lumir-column-grip-space` | `28px` | 컬럼 구분선 양쪽 여백 |\r\n| `--lumir-inactive-selection` | — | blur 상태 선택 하이라이트 색 |\r\n| `--lumir-cell-font-size` | — | 표 셀 글자 크기. `tables.cellFontSize` 가 세운다(직접 세우지 마세요) |\r\n| `--lumir-cell-line-height` | `1.35` | 〃 줄 간격 |\r\n| `--lumir-thead-bg` | `--lumir-paper-2`(`#F9FAFB`) | 머리행 바탕 — 머리열과 **같은 면**입니다 |\r\n| `--lumir-thead-fg` | `--lumir-ink`(`#0C1E33`) | 머리행 글자 |\r\n| `--lumir-thead-rule` | `transparent`(꺼짐) | 머리행 아래 **굵은** 구분선. 기본은 그리지 않는다 — 색을 주면 2px 로 그려진다 |\r\n| `--lumir-thcol-bg` | `--lumir-paper-2`(`#F9FAFB`) | 머리열 바탕 |\r\n\r\n---\r\n\r\n## 트러블슈팅\r\n\r\n**필수 체크리스트**\r\n\r\n- [ ] CSS 임포트: `import \"@lumir-company/editor/style.css\";`\r\n- [ ] 컨테이너에 높이 지정(부모 요소)\r\n- [ ] Next.js: `dynamic(..., { ssr: false })` 사용\r\n- [ ] React 사용 시 버전 ≥ 18\r\n\r\n**에디터가 보이지 않음** → CSS 임포트 누락 또는 컨테이너 높이 미지정.\r\n\r\n**Next.js hydration 오류** → `dynamic`으로 `ssr: false` 처리(위 [Next.js](#2-nextjs) 예시).\r\n\r\n**이미지 업로드 실패** → `uploadFile` 또는 `s3Upload` 중 하나는 반드시 설정.\r\n\r\n**여러 이미지 업로드 시 파일명 중복** → `s3Upload.appendUUID: true`.\r\n\r\n---\r\n\r\n## 0.12.x → 0.13.0 마이그레이션\r\n\r\n**저장된 문서는 손대지 않습니다** — 데이터 변환도, 스크립트도 없습니다. 편집기 UI 전면 개편이라\r\n**화면**과 **공개 색 배열**이 달라집니다. 호스트가 확인할 것은 넷입니다.\r\n\r\n| 확인할 것 | 무엇이 달라지나 | 조치 |\r\n| --- | --- | --- |\r\n| `TEXT_COLORS`/`BACKGROUND_COLORS` 로 자기 색 UI 를 그리는가 | 배경 14 → **12색**, 값·순서·hex 가 모두 바뀝니다 | 배열을 다시 읽어 그리세요 |\r\n| 편집기를 16px 페이지에 얹고 있는가 | `.lumir-editor` 가 `font-size: 14px`·`line-height: 1.7` 을 스스로 세웁니다(종전 상속) | `.lumir-editor { font-size: inherit; line-height: 1.6; }` |\r\n| `allowFileUpload: false` 로 업로드를 막고 있는가 | 막힌 적이 없습니다. 이제 콘솔 경고가 뜹니다 | `uploadFile`/`s3Upload` 를 **주지 않습니다** |\r\n| 표 셀 글자 크기를 CSS 로 덮고 있는가 | 셀 기본이 `12.5px`/`1.5`/패딩 `9/10` 로 명시됐습니다 | `tables.cellFontSize` 옵션을 쓰세요 |\r\n\r\n**색 어휘 변화**\r\n\r\n- 없어진 값 4개 — `brown` · `blue-strong` · `yellow-strong` · `green-strong`\r\n- 새 값 2개 — `cyan`(하늘) · `plum`(진보라)\r\n- `yellow` 가 **배경 전용**이 됩니다(`TEXT_COLORS` 에서 빠집니다). `gray-strong`(진한 회색)은 배경 팔레트에 남습니다\r\n- hex 는 전부 바뀌고 **배경은 대부분 `rgba`(알파)** 입니다 — 알파를 못 받는 곳으로 내보낼 때 그대로 나가지 않습니다\r\n\r\n> **없어진 값이 문서에 있어도 그대로 그려집니다.** `brown`·글자 `yellow` 는 **값을 보존**하고\r\n> 표시색만 살립니다(새로 고를 수는 없습니다). `*-strong` 셋은 읽을 때 연한 단계로 바뀝니다.\r\n> 모르는 값은 지우지 않습니다 — 호스트가 심은 값을 편집기가 버리지 않습니다.\r\n\r\n**엑셀·스프레드시트 붙여넣기의 임의색 매핑도 바뀝니다** — 색상환 360도 중 115도가 다른 팔레트\r\n색으로 갑니다(예: hue 183~207 이 `blue` → `cyan`). 호스트가 할 일은 없고, 붙여넣기 결과만\r\n저번과 달라 보입니다.\r\n\r\n**알려진 한계**\r\n\r\n- 정본 팔레트의 글자색 셋은 흰 바탕에서 대비가 3 미만입니다(green `#04B58B` 2.6 · orange `#FF6551` 2.9 · cyan `#029FE7` 2.95). 본문 크기 글자에 쓰면 읽기 어렵습니다 — 강조가 목적이면 배경색 쪽을 권합니다.\r\n- 다크 테마는 이번 개편의 범위 밖입니다(크롬은 새 팔레트, 본문은 옛 규칙).\r\n- 지원 브라우저는 Chromium 계열(Chrome·Edge)입니다. Safari/WebKit 은 검증하지 않습니다.\r\n\r\n---\r\n\r\n## 0.4.x → 0.5.0 마이그레이션\r\n\r\n**대부분 코드 변경 없이 버전만 올리면 됩니다.** import 경로·컴포넌트·props·타입(`LumirEditorProps`/`DefaultPartialBlock`)·`s3Upload` 계약이 동일합니다. `package.json`에서 버전을 `^0.5.0`으로 올리세요. (엔진 교체가 파괴적이지 않도록 마이너 버전으로 옵트인)\r\n\r\n**제거된 기능 — 사용처 정리 필요:**\r\n\r\n| 제거 항목 | 조치 |\r\n| --- | --- |\r\n| `linkPreview` prop | 제거. URL 붙여넣기는 이제 항상 인라인 링크로 처리됩니다 |\r\n| `@lumir-company/editor/api/link-preview` 서브패스 | 제거. 해당 API 라우트/import 삭제 |\r\n| `htmlPreview` 블록 · `HtmlPreviewBlock` export | 제거. 저장 JSON에 남아 있어도 로드는 무에러(알 수 없는 블록은 안전하게 폴백) |\r\n| 독립 `FloatingMenu` 컴포넌트 | `<LumirEditor floatingMenu floatingMenuPosition=\"sticky|fixed\" />` prop으로 대체(기존 export는 null 렌더 스텁으로 유지) |\r\n| 독립 `FontSizeButton` 컴포넌트 | 포매팅 툴바에 내장(기존 export는 null 렌더 스텁) |\r\n\r\n> 위 제거 항목을 참조하지 않는 프로젝트라면 별도 조치 없이 그대로 동작합니다.\r\n\r\n---\r\n\r\n## 변경 이력\r\n\r\n**적는 것**: 쓰는 쪽에 달라지는 것만. **안 적는 것**: 내부 구조·판정·연구 문서·테스트 하네스\r\n(`lumir-editor-test`). 판단 근거·구현 경위·실측값은 커밋 메시지에 있습니다.\r\n\r\n작성 규칙 — **이 절 자체가 그 규칙의 예시입니다.**\r\n\r\n1. 분류는 넷이고 순서가 고정입니다: **변경**(호스트가 확인할 것) · **신규** · **버그** · **제거**\r\n2. **한 항목 한 줄**(넘치면 두 줄). 형식은 `**무엇이 달라졌다** — 종전 → 지금`\r\n3. 호스트가 코드·CSS 를 손봐야 할 수 있으면 `⚠`, 저장 문서가 안 바뀌면 `(문서 무영향)`\r\n4. **한 사안은 한 줄로 합칩니다** — 화면·저장·내보내기가 함께 바뀌어도, 계약과 호환 주의가\r\n   같은 기능에 걸려도 한 줄입니다\r\n5. 같은 판에서 두 번 바뀐 값·동작은 **최종 상태만** 적습니다(중간 단계는 커밋에 있습니다)\r\n6. **그 판에 새로 들어온 기능의 개발 중 결함은 「버그」가 아닙니다** — 나간 적 없는 것은 고쳐진\r\n   것이 아닙니다. 「버그」는 **앞 판을 쓰던 사람이 겪은 것**만 적습니다\r\n7. 한 분류가 8항목을 넘으면 주제로 묶고, 자세한 설명은 기능 절이나 `docs/` 로 넘깁니다\r\n8. 판 제목은 `### vX.Y.Z (YYYY-MM-DD)`, 아직 안 나간 것은 `### 미배포`.\r\n   각 판은 **그 판이 무엇을 바꾸는지 한 줄 요약**으로 시작합니다\r\n\r\n### v0.18.0 (2026-09-23)\r\n\r\n**같은 블록 안에서 줄을 다루는 손이 둘 늘어난 판입니다.** `⚠` 한 자리만 확인하면 됩니다.\r\n\r\n**변경**\r\n\r\n- ⚠ **`Ctrl+[` 가 0 에서도 키를 삼킵니다** — 축이 음수(내어쓰기)까지 이어져 그 자리에도 할 일이\r\n  생겼습니다. 호스트가 `Ctrl+[` 를 쓰고 있다면 확인이 필요합니다(맥의 `Cmd+[`=뒤로 가기는\r\n  종전대로 흘려보냅니다).\r\n\r\n**신규**\r\n\r\n- **`Del` 이 다음 줄을 끌어옵니다** — 블록 **끝**에서 누르면 다음 줄의 글이 캐럿 자리로 붙고 그\r\n  줄은 사라집니다(받는 블록의 타입이 남습니다). 자식이 있으면 **첫 자식**이 올라오고, 끌려온\r\n  줄의 자식은 한 단 승격됩니다. 표·구분선처럼 글줄이 아닌 블록과는 병합하지 않고 캐럿만 옮깁니다.\r\n- **내어쓰기** — `Ctrl+[` 를 0 아래로 더 누르면 **첫 줄은 제자리, 둘째 줄부터** 한 단 들어갑니다.\r\n  `Shift+Enter` 로 나눈 줄도, 문장이 길어 접힌 줄도 함께 따라가므로 줄마다 공백을 칠 일이\r\n  없어집니다. 셀 prop 이 아니라 블록 prop `hangingIndent`(px) 한 칸이고, 모르는 소비자는 무시합니다.\r\n\r\n**버그**\r\n\r\n- **코드블록에 여러 줄을 붙이면 블록 뒤로 쪼개지던 것** — 종전 줄마다 문단(블록 안에서 복사한 것은\r\n  강조 조각마다) → 지금 캐럿 자리에 평문 그대로. 줄끝은 LF, NBSP 는 공백으로 들어갑니다.\r\n- **```` ``` ```` 로 만든 코드블록에 언어 선택·복사 버튼이 없던 것** — 새로 생긴 코드블록에는 경로와\r\n  관계없이 붙습니다(언어를 못 골라 강조도 안 칠해졌습니다).\r\n\r\n### v0.17.0 (2026-09-22)\r\n\r\n**표 칸에 대각선을 그을 수 있게 된 판입니다.** 호스트가 손볼 것은 없습니다.\r\n\r\n**신규**\r\n\r\n- **표 셀 대각선** — 칸을 가로지르는 선(↘ · ↗ · 둘 다). 굵기·색은 테두리 펜을 그대로 쓰고\r\n  셀 prop `diagonal` 로 저장됩니다 → [셀 테두리](#셀-테두리-굵기--선종--색).\r\n\r\n**버그**\r\n\r\n- **맨 아래 블록의 그립 드롭다운이 잘리던 것** — 아래 자리가 모자라면 그립 **위로** 열립니다\r\n  (모달·새 창처럼 스크롤 여유가 없는 상자에서 보이던 결함).\r\n\r\n### v0.16.0 (2026-09-17)\r\n\r\n**표 칸에 그림이 들어가고, 계층 들여쓰기 계약이 실동작 관측 위에서 정리된 판입니다.**\r\n`⚠` 표시한 자리는 호스트가 확인할 것이 있습니다.\r\n\r\n**변경**\r\n\r\n- ⚠ **`Tab`/`Shift+Tab` 이 캐럿 위치를 가리지 않습니다** — 종전에는 줄 맨 앞만 계층이고 중간·끝은\r\n  공백 2칸(nbsp)이었습니다. 그 계약은 폐기됩니다(코드블록만 유지). 들여쓸 자리가 없으면 아무 일도\r\n  일어나지 않고, 모양만 들여쓰려면 `Ctrl+]` 를 씁니다.\r\n- ⚠ **최상위 목록 항목의 `Shift+Tab` 이 목록을 벗어나지 않습니다** — 탈출은 줄 맨 앞 `Backspace` ·\r\n  서식 툴바 · 슬래시 메뉴입니다.\r\n- ⚠ **자식이 있는 블록 끝에서 `Enter` → 새 줄이 첫 자식**입니다(종전 다음 형제).\r\n- ⚠ **들여쓰기 한 단이 `1.15em`(≈16px) → `1.7em`(≈24px)** 입니다. `Ctrl+]` 첫 줄 들여쓰기도 같은\r\n  토큰을 씁니다. 되돌리려면 `.lumir-editor { --lumir-indent: 1.15em }` (문서 무영향)\r\n- ⚠ **구조가 바뀌면 그립이 숨습니다** — 종전에는 옛 좌표에 남아 엉뚱한 줄을 가리켰습니다.\r\n  다음 마우스 이동에 그 자리 블록에 다시 뜹니다.\r\n- **목록 깊이 상한이 3단 → 10단**이고 불렛 글리프는 3주기로 되풀이됩니다(표 칸 안 인라인 마커는\r\n  좁은 폭 사정으로 3단 유지).\r\n- **내어쓰기가 뒤 형제를 자식으로 데려갑니다** — 줄 순서가 보존됩니다.\r\n\r\n**신규**\r\n\r\n- **표 칸 안 이미지** — 붙여넣기·드래그드롭한 그림이 **그 칸에** 심기고, 손잡이 넷(좌·우=폭 ·\r\n  하단=높이 · 우하단=비율 고정)으로 표시 크기를 정합니다(`displayWidth`/`displayHeight` — 원본\r\n  `width`/`height` 를 덮지 않습니다). 표시 상한 기본 240px(`--lumir-inline-img-max-w`).\r\n  ⚠ 클립보드 이미지 파일은 `uploadFile`/`s3Upload` 를 탑니다(**새 호출 지점**) — 웹에서 복사한\r\n  그림은 업로드 없이 들어오고 `data:`·`blob:` 은 문서에 남기지 않습니다. ⚠ 새 인라인 노드\r\n  `inlineImage` 는 BlockNote 표준 인라인 밖이라 구버전 소비자가 못 읽습니다(기존 원자 3종과 같은\r\n  트레이드오프). → [표 칸 안 이미지](#표-칸-안-이미지)\r\n- **이미지 블록 세로·대각 크기 조절** — 손잡이 2 → 5개(좌·우=폭 · 하단=높이 · 좌하·우하=비율 고정).\r\n  선택 prop `previewHeight` 가 없으면 종전 렌더와 같습니다. ⚠ 높이를 쓰면 HTML 내보내기에\r\n  `<img height>` 가 함께 나갑니다 — 산출 HTML 을 비교하는 호스트가 걸립니다.\r\n- **블록 이동이 깊이를 바꿉니다** — 그립으로 중첩된 줄 자리에 놓으면 그 깊이를 받고, 새 단축키\r\n  `Ctrl/Cmd+Shift+↑/↓` 로 한 칸씩 옮깁니다(딸린 줄이 함께 갑니다).\r\n- **자동서식 취소** — `- ` 로 글머리 기호가 된 직후 `Backspace` 한 번이 그것을 무르고 `-` 를\r\n  되살립니다. 그 트리거는 그 줄과 이어지는 줄에서 다시 걸리지 않습니다.\r\n- **들여쓴 첫 자식의 줄 맨 앞 `Backspace`** — 유일한 자식이면 내어쓰기, 형제가 있으면 부모 줄에\r\n  병합입니다(종전에는 아무 일도 일어나지 않았습니다).\r\n\r\n**버그**\r\n\r\n- **부모 줄을 지우면 딸린 줄이 전부 사라졌습니다** → 자식이 그 자리·그 깊이로 올라옵니다.\r\n- **블록 유형이 바뀌면 중첩 자식·정렬·색·첫 줄 들여쓰기가 사라졌습니다** → 유형만 바뀝니다.\r\n- **표 칸에 붙여넣은 그림이 저장에서 소리 없이 사라졌습니다** → `inlineImage` 로 회수합니다.\r\n- **문서를 훑어 고르면 표에는 선택 표시가 없는데 `Delete` 로는 지워졌습니다** → 칠하는 대상을\r\n  지우는 대상에 맞췄습니다(새 클래스 `lumir-cross-sel-block`).\r\n- **중첩된 블록(목록·토글) 옆에서 그립이 최상위 조상에 고정됐습니다** → 제 줄을 찾습니다.\r\n- **내보낸 HTML 의 중첩 들여쓰기 폭이 화면과 달랐습니다** → 같은 토큰(≈24px)을 씁니다.\r\n\r\n### v0.15.0 (2026-09-16)\r\n\r\n**표를 쓰는 사람이 직접 정하는 손잡이 둘이 생기고, 행 높이가 사라지던 자리를 막은 판입니다.**\r\n표 색과 툴바 아이콘도 함께 바뀝니다 — 아래 **변경** 넷은 호스트가 확인할 것이 있습니다.\r\n\r\n**변경**\r\n\r\n- **표 머리행 바탕과 격자선 색이 바뀝니다** — 머리행 `#ECEEF3` → `#F9FAFB` 로 **머리열과 같은\r\n  면**이 되고, 격자선은 `#AFB8C3`/`#A5ADB7` 두 값에서 `#E5E7EB` **한 값**으로 갑니다(안쪽·바깥\r\n  이원화 폐기). 되돌리려면 호스트가 `--lumir-thead-bg` · `--lumir-grid` · `--lumir-grid-strong`\r\n  를 덮습니다 → [디자인 토큰](#디자인-토큰---lumir-). 다크 값은 그대로입니다.\r\n- **내보낸 HTML 의 테두리 hex 가 바뀝니다** — 표·코드블록이 `#AFB8C3` 에서 `#E5E7EB` 로 갑니다.\r\n  산출 HTML 을 비교하는 호스트는 여기서 먼저 걸립니다(0.14.0 에서 한 번 바뀐 그 자리입니다).\r\n- **격자선이 옅어집니다** — 흰 바탕·머리행에서는 보이지만 **색을 칠한 칸 위에서는 흐립니다.**\r\n  진하게 써야 하는 화면이라면 호스트가 격자선 토큰을 덮습니다.\r\n- **표 툴바 아이콘이 바뀝니다** — 표면 앵커 14개 중 9개가 같은 3×3 격자라 16px 에서 안 갈렸습니다.\r\n  축(구조 · 서식 · 내용)마다 다른 은유로 가릅니다. **동작과 위치는 그대로입니다.**\r\n\r\n**버그**\r\n\r\n- **굵은 테두리가 색 칠한 칸 옆에서 1px 얇아 보이던 것** — 3px 로 칠해도 머리행·합계행처럼\r\n  배경이 있는 줄에서만 2px 로 보였습니다. 선은 칸 경계를 **걸쳐** 그려지는데, 이웃 칸에 들어간\r\n  1px 을 그 칸의 배경이 덮고 있었습니다.\r\n- **맨 윗줄 양끝 칸만 테두리가 한 겹 더 두껍던 것** — 둥근 모서리의 곡선 획을 선과 같은 층에\r\n  겹쳐 그려, 직선부가 두 번 그려졌습니다(1px → 2px, 3px → 4px).\r\n\r\n- **늘려 둔 표가 다시 열면 줄어들던 것** — 행 높이가 **셀마다** 저장돼, 모든 열이 세로병합으로\r\n  덮인 행은 값을 실을 칸이 없었습니다. 화면은 즉시 커지니 그 세션에선 멀쩡하고 **다시 열면**\r\n  내용 높이로 돌아갔습니다. 행 높이를 표 속성 `content.rowHeights[]` 로 올렸습니다(물리 행\r\n  인덱스, 열 너비 `columnWidths` 와 대칭).\r\n  - **저장 JSON 이 늘어나는 건 높이를 정한 표뿐입니다** — 안 정한 표는 키가 안 생깁니다.\r\n  - 셀 `rowHeight` 도 **계속 함께 실립니다**(옛 판 호환 · 칸 단위 복사·붙여넣기).\r\n  - 이미 저장된 문서는 **한 글자도 안 바뀝니다** — 열었다 저장해도 그대로입니다.\r\n\r\n- **내보낸 HTML 을 다시 붙여넣으면 행 높이만 사라지던 것** — `<tr style=\"height\">` 를 내보내면서\r\n  읽지는 않았습니다(같은 표의 열 너비는 살아났습니다). 엑셀·워드의 `<tr height>` 도 함께 받습니다.\r\n\r\n**신규**\r\n\r\n- **표 행 높이** — 표 툴바의 **「행 높이」** 에서 **보통 · 좁게 · 촘촘히** 를 고릅니다.\r\n  셀 여백 `9/10` → `6/8` → `4/6`, 셀 줄 간격 `1.5` → `1.4` → `1.3` →\r\n  [표 행 높이](#표-행-높이).\r\n  - **안 고른 표는 렌더가 한 픽셀도 바뀌지 않습니다** — 「보통」은 값을 지웁니다.\r\n  - 저장 JSON 은 표 블록 prop `rowDensity` 가 하나 늘었습니다. **문서에 남으므로** 결재자가\r\n    열어도 같은 자리에서 페이지가 끊기고, 내보낸 HTML 과 인쇄도 화면과 같습니다.\r\n  - **끌어 정해 둔 행 높이가 있으면 밀도를 고를 때 지워집니다**(마지막에 한 동작이 이깁니다).\r\n    행 높이는 「최소 높이」라 안 지우면 밀도가 먹지 않습니다. `Ctrl+Z` 로 되돌립니다.\r\n  - `tables={{ rowDensity: false }}` 로 도구를 끕니다. 호스트 옵션 `tables.density` 와는\r\n    **다른 축**이고, 표마다 정한 값이 그쪽을 이깁니다.\r\n\r\n- **표 셀 테두리** — 칸의 테두리를 **굵기(1·2·3px) · 선종(실선·파선·점선) · 색**(기본·먹·회색·\r\n  빨강·파랑·**투명**)으로 지정합니다.\r\n  적용 대상은 모든 · 바깥 · 안쪽 · 위 · 아래 · 왼쪽 · 오른쪽 · 없음 여덟 가지 →\r\n  [셀 테두리](#셀-테두리-굵기--선종--색).\r\n  - **안 쓰면 렌더가 한 픽셀도 바뀌지 않습니다** — 지정한 변에만 속성이 섭니다.\r\n  - **투명**은 「없음」과 다릅니다 — 자리를 지키고 선만 감춥니다(「없음」은 그 행이 1px 줄어듭니다).\r\n  - 저장 JSON 은 셀 prop `borderTop`/`borderRight`/`borderBottom`/`borderLeft` 넷이 늘었습니다.\r\n    **한 경계는 한 칸만 그립니다**(위·왼쪽은 표 가장자리 칸에서만).\r\n  - **내보낸 HTML 도 화면과 같습니다.** 테두리를 쓴 표만 `separate` 로 나갑니다.\r\n  - `tables={{ cellBorder: false }}` 로 도구를 끕니다.\r\n\r\n- **글꼴에 Noto Sans KR** — 목록이 11종이 됩니다(기본 · Pretendard · **Noto Sans KR** · 맑은 고딕 ·\r\n  굴림 · 돋움 · 바탕 · 궁서 · Arial · Times New Roman · Courier New). 붙여넣은 문서의\r\n  `Noto Sans KR` · `Noto Sans CJK KR` · `본고딕` 표기도 이 글꼴로 스냅합니다.\r\n  - **웹폰트는 패키지에 실리지 않습니다**(Pretendard 와 같습니다) — 호스트 앱이 로드한 환경에서만\r\n    실제로 그려지고, 아니면 스택의 다음 후보로 폴백합니다.\r\n  - 본문 **기본 글꼴은 그대로입니다** — 고른 글자에만 걸립니다.\r\n\r\n### v0.14.3 (2026-09-14)\r\n\r\n**여러 줄을 잡았을 때 툴바에서 사라지던 블록 도구를 되살린 판입니다.**\r\n\r\n**신규**\r\n\r\n- **표에서 칸을 여러 개 잡고 `Delete`/`Backspace` 로 한 번에 비웁니다** — 종전에는 아무 일도\r\n  일어나지 않아 칸마다 들어가 지워야 했습니다. 비우는 것은 **내용뿐**이고 칸·병합·배경색·정렬은\r\n  그대로 남습니다(구조를 지우는 것은 표 툴바의 행/열 삭제입니다). 되돌리기 한 번으로 전부\r\n  돌아옵니다. 읽기전용·양식 `fill` 에서는 동작하지 않습니다.\r\n\r\n**변경**\r\n\r\n- **2행 이상 선택에서도 블록 유형·정렬·들여쓰기를 쓸 수 있습니다** — 종전에는 여러 줄을 잡으면\r\n  그 도구들이 툴바에서 **사라지고 빈자리만** 남았습니다(설계상 v1 제한). 이제 선택된 블록\r\n  전부에 걸립니다. 계층 들여쓰기는 위에서부터, 내어쓰기는 **아래에서부터** 처리해 줄 순서가\r\n  보존됩니다. 블록 유형을 바꾸면 요소를 새로 만들므로 선택은 접힙니다(작업은 그대로 적용됩니다).\r\n- **링크는 단일 블록 전용으로 남습니다** — 블록을 넘는 링크는 저장 모델에 없습니다.\r\n- **2행 이상 선택하면 글자 크기 칸이 비던 것을 고칩니다** — 여러 줄을 잡으면 툴바의 크기 표시가\r\n  비어 있었습니다. 크기를 **명시한 적 없는** 문단들은 읽을 값이 없다고 보고 비워 뒀기 때문인데,\r\n  실제로 그려지는 크기는 CSS 가 정합니다. 이제 선택 전체가 한 크기면 그 값을 보여 줍니다.\r\n  **여러 크기가 섞였을 때는 그대로 비우되 칸에 「혼합」이라고 적습니다** — 종전에는 빈칸만 남아\r\n  「표기가 안 나온다」로 읽혔습니다.\r\n\r\n### v0.14.2 (2026-09-14)\r\n\r\n**종속관계 없는 들여쓰기와, 표·페이지 나누기 밑에서 줄이 사라지던 결함을 고친 판입니다.**\r\n\r\n**신규**\r\n\r\n- **`Ctrl+]` / `Ctrl+[` = 공백 들여쓰기** — 계층(종속관계)을 만들지 않고 **첫 줄만** 들여씁니다\r\n  (구글 독스와 같은 키). 앞에 받아 줄 블록이 없는 **페이지 첫 줄에서도** 됩니다 — 앞 장에서\r\n  이어지는 문단을 같은 자리에서 시작할 수 있습니다. 한 단은 계층 한 단과 같은 폭(16px)이라 두\r\n  방식으로 들여쓴 줄이 같은 자리에 섭니다. 저장·되돌리기·HTML 내보내기·인쇄에 그대로 실립니다.\r\n- **서식 툴바의 들여쓰기 버튼이 넷으로 갈립니다** — 계층 들여쓰기/내어쓰기 + 공백 들여쓰기/내어쓰기.\r\n  아이콘이 다르고(공백 쪽은 **첫 줄만** 밀린 모양), 툴팁에 이름·단축키와 「무엇이 다른지」가 적힙니다.\r\n\r\n**변경**\r\n\r\n- **표·페이지 나누기·그림·구분선 밑 줄에서 `Tab` 을 눌러도 그 줄이 사라지지 않습니다** — 종전에는\r\n  앞 형제가 블록이기만 하면 그 안으로 넣었는데, 그 블록들은 자식을 버리므로 **저장 문서에서 줄이\r\n  없어졌습니다**(되돌리기로만 복구). 이제 자식이 뜻을 갖는 블록(문단·제목·인용·목록) 밑으로만\r\n  들어갑니다. 이미 그렇게 저장된 문서는 그대로 그려집니다 — 막는 것은 새로 만드는 것뿐입니다.\r\n\r\n**확인할 것**\r\n\r\n- 호스트가 `Ctrl+]` / `Ctrl+[` 를 자기 단축키로 쓰고 있다면 겹칩니다. 편집기는 **값이 실제로\r\n  바뀔 때만** 키를 삼키므로(상한이거나 대상이 아니면 그대로 흘려보냅니다) 대부분은 문제가 없지만,\r\n  글 위에서 그 키를 쓰는 호스트라면 확인이 필요합니다.\r\n\r\n### v0.14.1 (2026-09-11)\r\n\r\n**읽기전용 화면에서 안내 배너를 뺀 판입니다.** 0.14.0 바로 뒤에 나갑니다.\r\n\r\n**변경**\r\n\r\n- **읽기전용 배너를 뺍니다** — `editable: false` 에서 편집기 맨 위에 붙던 안내 줄\r\n  (「읽기전용 문서예요…」)이 없어집니다. 읽기전용이라는 사실은 호스트 화면이 이미 말하고 있어,\r\n  결재 열람처럼 그 자리에 또 적을 이유가 없는 화면에서 군더더기였습니다. 로케일 키\r\n  `readonlyNotice` 도 함께 사라집니다 — 안내가 필요하면 호스트가 편집기 밖에 그립니다.\r\n\r\n**확인할 것**\r\n\r\n- 읽기전용에서 「왜 안 써지는지」를 화면에 적어야 한다면 **호스트가 편집기 밖에** 그립니다 —\r\n  권한·요청 경로를 아는 자리가 그쪽입니다. 편집기는 `lumir-readonly` 클래스만 남기므로\r\n  `.lumir-readonly` 를 보고 호스트가 자기 안내를 띄울 수 있습니다.\r\n- 로케일을 직접 넘기는 호스트는 `readonlyNotice` 키를 지워도 되고, 남겨 둬도 무시됩니다.\r\n\r\n### v0.14.0 (2026-09-11)\r\n\r\n**워드 문서 붙여넣기와 표 격자선을 고친 판입니다.** 저장 데이터 **형식**은 바뀌지 않습니다.\r\n다만 아래 넷은 호스트가 확인할 것이 있습니다.\r\n\r\n- **붙여넣기 결과의 모양이 바뀝니다** — 워드에서 붙여넣은 문서가 더는 `children` 으로 중첩되지\r\n  않고, 글꼴(`fontFamily`)도 실리지 않습니다. 붙여넣기 결과 JSON 을 스냅샷으로 비교하는 판정이\r\n  있으면 그 기준선을 갱신해야 합니다.\r\n- **내보낸 HTML 의 테두리 hex 가 바뀝니다** — 표·코드블록이 `#ECEEF3`·`#CED8E5` 에서\r\n  `#AFB8C3` 으로 갑니다. 산출 HTML 을 비교하는 호스트는 여기서 먼저 걸립니다.\r\n- **줄 맨 앞 `Tab` 의 뜻이 바뀝니다** — 공백 2칸이 아니라 계층 들여쓰기입니다. 글 중간·끝의\r\n  `Tab` 과 코드블록은 종전대로입니다.\r\n- **되돌리기 스텝이 200 으로 제한됩니다** — 그보다 오래된 스텝은 밀려 사라집니다.\r\n\r\n**신규**\r\n\r\n- **줄 맨 앞 `Tab`/`Shift+Tab` = 계층 들여쓰기** — 문단·제목도 부모자식으로 중첩됩니다(노션과 같은\r\n  키). 종전에는 목록 항목만이었고 문단·제목은 서식 툴바 버튼밖에 없었습니다. `4. > 4.1 > 4.1.1`\r\n  같은 계층을 키로 만듭니다. 깊이 상한은 목록(3단)에만 남고, 번호는 **글자로 적습니다** — 자동\r\n  다단계 번호는 없습니다.\r\n- **서식 툴바에 복사·잘라내기·붙여넣기·되돌리기 버튼** — 여러 줄 선택은 브라우저의 선택이 아니라\r\n  우클릭 메뉴의 복사가 회색이었습니다. 버튼으로 그 길을 냅니다 → [여러 줄 선택](#여러-줄-선택).\r\n\r\n**변경**\r\n\r\n- **표 격자선이 진해집니다** — 종전에는 머리행과 회색 칠한 셀 위에서 격자가 배경과 **같은 값**\r\n  이라 보이지 않았습니다(대비 1.00:1). 면과 선이 한 토큰을 겸하던 것을 갈라\r\n  `--lumir-grid`(`#AFB8C3`) / `--lumir-grid-strong`(`#A5ADB7`) 를 신설했고, 표 격자·바깥 테두리와\r\n  코드블록·인라인 `code`·읽기전용 파일카드·양식 패널 구분선이 그리로 옮겼습니다. **내보낸 HTML\r\n  의 표·코드 테두리도 같은 값입니다.** 툴바·팝업 등 편집기 UI 선(`--lumir-line*`)은 그대로입니다.\r\n- **블록을 옮기려다 2단 컬럼이 생기지 않습니다** — 2단 변환은 커서가 **블록 위를 지나**\r\n  좌·우 가장자리로 들어갔을 때만입니다. 종전에는 판정에 하한이 없어 블록 **왼쪽 바깥**(그립이\r\n  놓이는 거터)도 「왼쪽 가장자리」로 읽혀, 그립을 잡고 세로로만 끌어도 2단이 만들어졌습니다.\r\n- **되돌리기가 이미지·영상을 다시 불러오지 않습니다** — 되돌리기·문서 교체는 DOM 을 다시\r\n  만드는데, 같은 블록·같은 `url` 이면 **미디어 노드를 물려줍니다**. 깜빡임이 사라지고 재생 위치도\r\n  유지됩니다. `resolveFileUrl` 은 물려받은 노드에 다시 걸리지 않습니다(매번 새 presigned URL 을\r\n  주는 호스트에서 실제 재요청이 일어나던 자리입니다).\r\n- **워드 붙여넣기가 글씨체를 가져오지 않습니다** — 편집기 기본 글꼴로 통일","readmeFilename":"README.md"}