{"_id":"@blakaa/kinkin-editor","_rev":"13-4c0aed0137ba5cfec808c6eee5b7507a","name":"@blakaa/kinkin-editor","dist-tags":{"latest":"0.8.1"},"versions":{"0.1.0":{"name":"@blakaa/kinkin-editor","version":"0.1.0","keywords":["tiptap","prosemirror","rich-text-editor","wysiwyg","react","markdown","editor"],"license":"UNLICENSED","_id":"@blakaa/kinkin-editor@0.1.0","maintainers":[{"name":"dqhuy","email":"dqhuy9@gmail.com"}],"homepage":"https://github.com/blakaalab/kinkin-editor#readme","bugs":{"url":"https://github.com/blakaalab/kinkin-editor/issues"},"dist":{"shasum":"ba3ace04d4444e735e6c3e1db8f9ae6839272b93","tarball":"https://registry.npmjs.org/@blakaa/kinkin-editor/-/kinkin-editor-0.1.0.tgz","fileCount":98,"integrity":"sha512-3Frf2F5SvjcWnN3/OnOvLTuU233ORm8ZGgXi8B4NhLjEMgS3VYsm3Ts0fe9brxE39RTp+mTx1a64S7YKgYFSFw==","signatures":[{"sig":"MEYCIQCesgQqBtQKVXaMexzNt6Wr/Sin3Ml8zsQCuGONfBBkFwIhAMzGTeNFlgGfuWed7z+L5ReVrR4Ct7sD3fIlCkVs55HV","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2621582},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./style.css":"./dist/style.css","./package.json":"./package.json"},"gitHead":"5d49798338b4dd00e2f6014097fc68e846035382","scripts":{"dev":"vite","lint":"biome lint","build":"tsc --noEmit && vite build --mode lib","check":"biome check","format":"biome format --write","prepare":"npm run build","preview":"vite preview","check:fix":"biome check --fix","type-check":"tsc --noEmit","build:playground":"vite build"},"_npmUser":{"name":"dqhuy","email":"dqhuy9@gmail.com"},"overrides":{"@tiptap/pm":"3.22.4","@tiptap/core":"3.22.4","@tiptap/react":"3.22.4","@tiptap/markdown":"3.22.4","@tiptap/extensions":"3.22.4","@tiptap/suggestion":"3.22.4","@tiptap/starter-kit":"3.22.4","@tiptap/extension-bold":"3.22.4","@tiptap/extension-code":"3.22.4","@tiptap/extension-link":"3.22.4","@tiptap/extension-list":"3.22.4","@tiptap/extension-text":"3.22.4","@tiptap/extension-emoji":"3.22.4","@tiptap/extension-image":"3.22.4","@tiptap/extension-table":"3.22.4","@tiptap/extension-italic":"3.22.4","@tiptap/extension-strike":"3.22.4","@tiptap/extension-heading":"3.22.4","@tiptap/extension-history":"3.22.4","@tiptap/extension-mention":"3.22.4","@tiptap/extension-document":"3.22.4","@tiptap/extension-gapcursor":"3.22.4","@tiptap/extension-highlight":"3.22.4","@tiptap/extension-list-item":"3.22.4","@tiptap/extension-paragraph":"3.22.4","@tiptap/extension-underline":"3.22.4","@tiptap/extension-unique-id":"3.22.4","@tiptap/extension-blockquote":"3.22.4","@tiptap/extension-code-block":"3.22.4","@tiptap/extension-dropcursor":"3.22.4","@tiptap/extension-hard-break":"3.22.4","@tiptap/extension-node-range":"3.22.4","@tiptap/extension-text-align":"3.22.4","@tiptap/extension-text-style":"3.22.4","@tiptap/extension-typography":"3.22.4","@tiptap/extension-bubble-menu":"3.22.4","@tiptap/extension-bullet-list":"3.22.4","@tiptap/extension-drag-handle":"3.22.4","@tiptap/extension-list-keymap":"3.22.4","@tiptap/extension-ordered-list":"3.22.4","@tiptap/extension-collaboration":"3.22.4","@tiptap/extension-floating-menu":"3.22.4","@tiptap/extension-horizontal-rule":"3.22.4","@tiptap/extension-drag-handle-react":"3.22.4","@tiptap/extension-table-of-contents":"3.22.4"},"repository":{"url":"git+https://github.com/blakaalab/kinkin-editor.git","type":"git"},"_npmVersion":"11.17.0","description":"A standalone Tiptap-based rich text editor with slash commands, tables, AI assist and markdown I/O.","directories":{},"sideEffects":["**/*.css","**/*.scss"],"_nodeVersion":"24.19.0","dependencies":{"clsx":"2.1.1","dompurify":"3.4.0","es-toolkit":"1.40.0","lucide-react":"0.563.0","@ariakit/react":"0.4.15","tailwind-merge":"3.5.0","@floating-ui/react":"0.27.5","react-hotkeys-hook":"4.6.1","@radix-ui/react-slot":"1.2.0","@radix-ui/react-tooltip":"1.2.0","class-variance-authority":"0.7.1","@radix-ui/react-separator":"1.1.7"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.3.6","react":"19.2.3","react-dom":"19.2.3","@tiptap/pm":"3.22.4","typescript":"5.9.2","tailwindcss":"4.2.4","@tiptap/core":"3.22.4","@types/react":"19.2.7","@tiptap/react":"3.22.4","sass-embedded":"1.99.0","@biomejs/biome":"^2.4.12","vite-plugin-dts":"^5.1.0","@tiptap/markdown":"3.22.4","@types/react-dom":"19.2.3","@tailwindcss/vite":"4.2.4","@tiptap/extensions":"3.22.4","@tiptap/suggestion":"3.22.4","@tiptap/starter-kit":"3.22.4","@vitejs/plugin-react":"5.1.3","@tiptap/extension-list":"3.22.4","@tiptap/extension-emoji":"3.22.4","@tiptap/extension-image":"3.22.4","@tiptap/extension-table":"3.22.4","postcss-prefix-selector":"^2.2.0","@tiptap/extension-strike":"3.22.4","@tiptap/extension-history":"3.22.4","@tiptap/extension-mention":"3.22.4","@tiptap/extension-highlight":"3.22.4","@tiptap/extension-unique-id":"3.22.4","@tiptap/extension-text-style":"3.22.4","@tiptap/extension-typography":"3.22.4","@tiptap/extension-horizontal-rule":"3.22.4","@tiptap/extension-drag-handle-react":"3.22.4","@tiptap/extension-table-of-contents":"3.22.4"},"peerDependencies":{"react":">=18","react-dom":">=18","@tiptap/pm":"~3.22.4","@tiptap/core":"~3.22.4","@tiptap/react":"~3.22.4","@tiptap/markdown":"~3.22.4","@tiptap/extensions":"~3.22.4","@tiptap/suggestion":"~3.22.4","@tiptap/starter-kit":"~3.22.4","@tiptap/extension-list":"~3.22.4","@tiptap/extension-emoji":"~3.22.4","@tiptap/extension-image":"~3.22.4","@tiptap/extension-table":"~3.22.4","@tiptap/extension-strike":"~3.22.4","@tiptap/extension-history":"~3.22.4","@tiptap/extension-mention":"~3.22.4","@tiptap/extension-highlight":"~3.22.4","@tiptap/extension-unique-id":"~3.22.4","@tiptap/extension-text-style":"~3.22.4","@tiptap/extension-typography":"~3.22.4","@tiptap/extension-horizontal-rule":"~3.22.4","@tiptap/extension-drag-handle-react":"~3.22.4","@tiptap/extension-table-of-contents":"~3.22.4"},"_npmOperationalInternal":{"tmp":"tmp/kinkin-editor_0.1.0_1788579300505_0.24573141439020474","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@blakaa/kinkin-editor","version":"0.2.0","keywords":["tiptap","prosemirror","rich-text-editor","wysiwyg","react","markdown","editor"],"license":"UNLICENSED","_id":"@blakaa/kinkin-editor@0.2.0","maintainers":[{"name":"dqhuy","email":"dqhuy9@gmail.com"}],"homepage":"https://github.com/blakaalab/kinkin-editor#readme","bugs":{"url":"https://github.com/blakaalab/kinkin-editor/issues"},"dist":{"shasum":"a0da257e8e6a249ec393564e70e7f9e2d2a74bc2","tarball":"https://registry.npmjs.org/@blakaa/kinkin-editor/-/kinkin-editor-0.2.0.tgz","fileCount":98,"integrity":"sha512-+xtAsAOuPWJr22CnTHtgQAs3THyfBL8k7e6kTnTnE+eQvz9zodOqNqrs0kdAtWsLprCy3oVUasqgioS/82HcLQ==","signatures":[{"sig":"MEUCIQCpf8yQMMOEQtUKe279TeSqThRyTctRnL58pD2jPKhimQIgDkknilaZNwAmPuOpDVLYhK0lYL82KZcjTr2DXAMd+us=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIG7Lr6scysTVv5B9ewlE7ZMUieewCUxMFQd2fImDwNS8AiEA9JCsRzQWFv9HSHa8466t21tZTiKI44IWeyy0NCJreBA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2621993},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./style.css":"./dist/style.css","./package.json":"./package.json"},"gitHead":"568e8326e855d05e124ea129e94691fe91d26d1e","scripts":{"dev":"vite","lint":"biome lint","build":"tsc --noEmit && vite build --mode lib","check":"biome check","format":"biome format --write","prepare":"npm run build","preview":"vite preview","check:fix":"biome check --fix","type-check":"tsc --noEmit","build:playground":"vite build"},"_npmUser":{"name":"dqhuy","email":"dqhuy9@gmail.com"},"overrides":{"@tiptap/pm":"3.31.3","@tiptap/core":"3.31.3","@tiptap/react":"3.31.3","@tiptap/markdown":"3.31.3","@tiptap/extensions":"3.31.3","@tiptap/suggestion":"3.31.3","@tiptap/starter-kit":"3.31.3","@tiptap/extension-bold":"3.31.3","@tiptap/extension-code":"3.31.3","@tiptap/extension-link":"3.31.3","@tiptap/extension-list":"3.31.3","@tiptap/extension-text":"3.31.3","@tiptap/extension-emoji":"3.31.3","@tiptap/extension-image":"3.31.3","@tiptap/extension-table":"3.31.3","@tiptap/extension-italic":"3.31.3","@tiptap/extension-strike":"3.31.3","@tiptap/extension-heading":"3.31.3","@tiptap/extension-history":"3.31.3","@tiptap/extension-mention":"3.31.3","@tiptap/extension-document":"3.31.3","@tiptap/extension-gapcursor":"3.31.3","@tiptap/extension-highlight":"3.31.3","@tiptap/extension-list-item":"3.31.3","@tiptap/extension-paragraph":"3.31.3","@tiptap/extension-underline":"3.31.3","@tiptap/extension-unique-id":"3.31.3","@tiptap/extension-blockquote":"3.31.3","@tiptap/extension-code-block":"3.31.3","@tiptap/extension-dropcursor":"3.31.3","@tiptap/extension-hard-break":"3.31.3","@tiptap/extension-node-range":"3.31.3","@tiptap/extension-text-align":"3.31.3","@tiptap/extension-text-style":"3.31.3","@tiptap/extension-typography":"3.31.3","@tiptap/extension-bubble-menu":"3.31.3","@tiptap/extension-bullet-list":"3.31.3","@tiptap/extension-drag-handle":"3.31.3","@tiptap/extension-list-keymap":"3.31.3","@tiptap/extension-ordered-list":"3.31.3","@tiptap/extension-collaboration":"3.31.3","@tiptap/extension-floating-menu":"3.31.3","@tiptap/extension-horizontal-rule":"3.31.3","@tiptap/extension-drag-handle-react":"3.31.3","@tiptap/extension-table-of-contents":"3.31.3"},"repository":{"url":"git+https://github.com/blakaalab/kinkin-editor.git","type":"git"},"_npmVersion":"11.17.0","description":"A standalone Tiptap-based rich text editor with slash commands, tables, AI assist and markdown I/O.","directories":{},"sideEffects":["**/*.css","**/*.scss"],"_nodeVersion":"24.19.0","dependencies":{"clsx":"2.1.1","dompurify":"3.4.0","es-toolkit":"1.40.0","lucide-react":"0.563.0","@ariakit/react":"0.4.15","tailwind-merge":"3.5.0","@floating-ui/react":"0.27.5","react-hotkeys-hook":"4.6.1","@radix-ui/react-slot":"1.2.0","@radix-ui/react-tooltip":"1.2.0","class-variance-authority":"0.7.1","@radix-ui/react-separator":"1.1.7"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.3.6","react":"19.2.3","motion":"^13.2.0","react-dom":"19.2.3","@tiptap/pm":"3.31.3","typescript":"5.9.2","tailwindcss":"4.2.4","@tiptap/core":"3.31.3","@types/react":"19.2.7","@tiptap/react":"3.31.3","sass-embedded":"1.99.0","@biomejs/biome":"^2.4.12","vite-plugin-dts":"^5.1.0","@tiptap/markdown":"3.31.3","@types/react-dom":"19.2.3","@tailwindcss/vite":"4.2.4","@tiptap/extensions":"3.31.3","@tiptap/suggestion":"3.31.3","@tiptap/starter-kit":"3.31.3","@vitejs/plugin-react":"5.1.3","@tiptap/extension-list":"3.31.3","@tiptap/extension-emoji":"3.31.3","@tiptap/extension-image":"3.31.3","@tiptap/extension-table":"3.31.3","postcss-prefix-selector":"^2.2.0","@tiptap/extension-strike":"3.31.3","@tiptap/extension-history":"3.31.3","@tiptap/extension-mention":"3.31.3","@tiptap/extension-highlight":"3.31.3","@tiptap/extension-unique-id":"3.31.3","@tiptap/extension-text-style":"3.31.3","@tiptap/extension-typography":"3.31.3","@tiptap/extension-horizontal-rule":"3.31.3","@tiptap/extension-drag-handle-react":"3.31.3","@tiptap/extension-table-of-contents":"3.31.3"},"peerDependencies":{"react":">=18","react-dom":">=18","@tiptap/pm":"~3.31.3","@tiptap/core":"~3.31.3","@tiptap/react":"~3.31.3","@tiptap/markdown":"~3.31.3","@tiptap/extensions":"~3.31.3","@tiptap/suggestion":"~3.31.3","@tiptap/starter-kit":"~3.31.3","@tiptap/extension-list":"~3.31.3","@tiptap/extension-emoji":"~3.31.3","@tiptap/extension-image":"~3.31.3","@tiptap/extension-table":"~3.31.3","@tiptap/extension-strike":"~3.31.3","@tiptap/extension-history":"~3.31.3","@tiptap/extension-mention":"~3.31.3","@tiptap/extension-highlight":"~3.31.3","@tiptap/extension-unique-id":"~3.31.3","@tiptap/extension-text-style":"~3.31.3","@tiptap/extension-typography":"~3.31.3","@tiptap/extension-horizontal-rule":"~3.31.3","@tiptap/extension-drag-handle-react":"~3.31.3","@tiptap/extension-table-of-contents":"~3.31.3"},"_npmOperationalInternal":{"tmp":"tmp/kinkin-editor_0.2.0_1788762976098_0.6262281692766616","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@blakaa/kinkin-editor","version":"0.5.0","keywords":["rich-text-editor","react-rich-text-editor","wysiwyg","wysiwyg-editor","react","react-editor","tiptap","tiptap-react","prosemirror","markdown","markdown-editor","block-editor","notion","notion-like","slash-commands","text-editor","editor","ai","typescript"],"license":"MIT","_id":"@blakaa/kinkin-editor@0.5.0","maintainers":[{"name":"dqhuy","email":"dqhuy9@gmail.com"}],"homepage":"https://github.com/blakaalab/kinkin-editor#readme","bugs":{"url":"https://github.com/blakaalab/kinkin-editor/issues"},"dist":{"shasum":"f01f7842d4cdd06a105c69ebece0b1d606c6e37f","tarball":"https://registry.npmjs.org/@blakaa/kinkin-editor/-/kinkin-editor-0.5.0.tgz","fileCount":109,"integrity":"sha512-+T4NuX97Rq+iDZM2i4NJ6ohr13A4T5AHYLhnyZfs1EaaalQ1rR+bxkrS6KnOgZvPXThAQ6M/vAG3598H+qZblA==","signatures":[{"sig":"MEUCIQCnf3fnbSOtRkZpX9y4p0xzWgeQvO/0I1rf+Gq4J9B42wIgVA7udFooSrFT2S2kUJqa3eXVcx38d785UN/yLWFpnnw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCQ+h7JJq60NUEnK5IPICjIK3UirxktZfrb01+rJXP9SgIhAK0KYju5my+SDruJav7ZV0/ehyS5Gav484/T5PX+sZVJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2659656},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./content":{"types":"./dist/content.d.ts","import":"./dist/content.js"},"./style.css":"./dist/style.css","./content.css":"./dist/content.css","./package.json":"./package.json"},"gitHead":"bc763d4ebe838c5730d4d1afff9c014b392dfb97","scripts":{"dev":"vite","lint":"biome lint","build":"tsc --noEmit && vite build --mode lib && node scripts/build-content-css.mjs","check":"biome check","format":"biome format --write","prepare":"npm run build","preview":"vite preview","check:fix":"biome check --fix","type-check":"tsc --noEmit","build:playground":"vite build"},"_npmUser":{"name":"dqhuy","email":"dqhuy9@gmail.com"},"overrides":{"@tiptap/pm":"3.31.3","@tiptap/core":"3.31.3","@tiptap/react":"3.31.3","@tiptap/markdown":"3.31.3","@tiptap/extensions":"3.31.3","@tiptap/suggestion":"3.31.3","@tiptap/starter-kit":"3.31.3","@tiptap/extension-bold":"3.31.3","@tiptap/extension-code":"3.31.3","@tiptap/extension-link":"3.31.3","@tiptap/extension-list":"3.31.3","@tiptap/extension-text":"3.31.3","@tiptap/extension-emoji":"3.31.3","@tiptap/extension-image":"3.31.3","@tiptap/extension-table":"3.31.3","@tiptap/extension-italic":"3.31.3","@tiptap/extension-strike":"3.31.3","@tiptap/extension-heading":"3.31.3","@tiptap/extension-history":"3.31.3","@tiptap/extension-mention":"3.31.3","@tiptap/extension-document":"3.31.3","@tiptap/extension-gapcursor":"3.31.3","@tiptap/extension-highlight":"3.31.3","@tiptap/extension-list-item":"3.31.3","@tiptap/extension-paragraph":"3.31.3","@tiptap/extension-underline":"3.31.3","@tiptap/extension-unique-id":"3.31.3","@tiptap/extension-blockquote":"3.31.3","@tiptap/extension-code-block":"3.31.3","@tiptap/extension-dropcursor":"3.31.3","@tiptap/extension-hard-break":"3.31.3","@tiptap/extension-node-range":"3.31.3","@tiptap/extension-text-align":"3.31.3","@tiptap/extension-text-style":"3.31.3","@tiptap/extension-typography":"3.31.3","@tiptap/extension-bubble-menu":"3.31.3","@tiptap/extension-bullet-list":"3.31.3","@tiptap/extension-drag-handle":"3.31.3","@tiptap/extension-list-keymap":"3.31.3","@tiptap/extension-ordered-list":"3.31.3","@tiptap/extension-collaboration":"3.31.3","@tiptap/extension-floating-menu":"3.31.3","@tiptap/extension-horizontal-rule":"3.31.3","@tiptap/extension-drag-handle-react":"3.31.3","@tiptap/extension-table-of-contents":"3.31.3"},"repository":{"url":"git+https://github.com/blakaalab/kinkin-editor.git","type":"git"},"_npmVersion":"11.17.0","description":"A drop-in rich text editor for React - a Notion-style WYSIWYG built on Tiptap, with slash commands, tables, images, markdown I/O and streaming AI Assist.","directories":{},"sideEffects":["**/*.css","**/*.scss"],"_nodeVersion":"24.19.0","dependencies":{"clsx":"2.1.1","dompurify":"3.4.0","es-toolkit":"1.40.0","lucide-react":"0.563.0","@ariakit/react":"0.4.15","tailwind-merge":"3.5.0","@floating-ui/react":"0.27.5","react-hotkeys-hook":"4.6.1","@radix-ui/react-slot":"1.2.0","@radix-ui/react-tooltip":"1.2.0","class-variance-authority":"0.7.1","@radix-ui/react-separator":"1.1.7"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.3.6","react":"19.2.3","motion":"^13.2.0","react-dom":"19.2.3","@tiptap/pm":"3.31.3","typescript":"5.9.2","tailwindcss":"4.2.4","@tiptap/core":"3.31.3","@types/react":"19.2.7","@tiptap/react":"3.31.3","sass-embedded":"1.99.0","@biomejs/biome":"^2.4.12","vite-plugin-dts":"^5.1.0","@tiptap/markdown":"3.31.3","@types/react-dom":"19.2.3","@tailwindcss/vite":"4.2.4","@tiptap/extensions":"3.31.3","@tiptap/suggestion":"3.31.3","@tiptap/starter-kit":"3.31.3","@vitejs/plugin-react":"5.1.3","@tiptap/extension-list":"3.31.3","@tiptap/extension-emoji":"3.31.3","@tiptap/extension-image":"3.31.3","@tiptap/extension-table":"3.31.3","postcss-prefix-selector":"^2.2.0","@tiptap/extension-strike":"3.31.3","@tiptap/extension-history":"3.31.3","@tiptap/extension-mention":"3.31.3","@tiptap/extension-highlight":"3.31.3","@tiptap/extension-unique-id":"3.31.3","@tiptap/extension-text-style":"3.31.3","@tiptap/extension-typography":"3.31.3","@tiptap/extension-horizontal-rule":"3.31.3","@tiptap/extension-drag-handle-react":"3.31.3","@tiptap/extension-table-of-contents":"3.31.3"},"peerDependencies":{"react":">=18","react-dom":">=18","@tiptap/pm":"~3.31.3","@tiptap/core":"~3.31.3","@tiptap/react":"~3.31.3","@tiptap/markdown":"~3.31.3","@tiptap/extensions":"~3.31.3","@tiptap/suggestion":"~3.31.3","@tiptap/starter-kit":"~3.31.3","@tiptap/extension-list":"~3.31.3","@tiptap/extension-emoji":"~3.31.3","@tiptap/extension-image":"~3.31.3","@tiptap/extension-table":"~3.31.3","@tiptap/extension-strike":"~3.31.3","@tiptap/extension-history":"~3.31.3","@tiptap/extension-mention":"~3.31.3","@tiptap/extension-highlight":"~3.31.3","@tiptap/extension-unique-id":"~3.31.3","@tiptap/extension-text-style":"~3.31.3","@tiptap/extension-typography":"~3.31.3","@tiptap/extension-horizontal-rule":"~3.31.3","@tiptap/extension-drag-handle-react":"~3.31.3","@tiptap/extension-table-of-contents":"~3.31.3"},"_npmOperationalInternal":{"tmp":"tmp/kinkin-editor_0.5.0_1788836599063_0.17422038168085563","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@blakaa/kinkin-editor","version":"0.5.1","keywords":["rich-text-editor","react-rich-text-editor","wysiwyg","wysiwyg-editor","react","react-editor","tiptap","tiptap-react","prosemirror","markdown","markdown-editor","block-editor","notion","notion-like","slash-commands","text-editor","editor","ai","typescript"],"license":"MIT","_id":"@blakaa/kinkin-editor@0.5.1","maintainers":[{"name":"dqhuy","email":"dqhuy9@gmail.com"}],"homepage":"https://github.com/blakaalab/kinkin-editor#readme","bugs":{"url":"https://github.com/blakaalab/kinkin-editor/issues"},"dist":{"shasum":"eca08bb39557ca0bef8353f2472a30b33b9e7a0d","tarball":"https://registry.npmjs.org/@blakaa/kinkin-editor/-/kinkin-editor-0.5.1.tgz","fileCount":109,"integrity":"sha512-cHZv5qSxBSkTkizuvqNGG2pNEA4zeLl/m+Vc+hAuxAKzqZp8PmF/TewzI+1tBuZQgheGxNX9pWntUuJuTtbloA==","signatures":[{"sig":"MEUCIA5672GQ5zCxW88SqSltXgqy/GeE5/Njt9dP/dDk8finAiEA5ahIpGsLxtAWkaCpg7WUjTwKdy8KW+kOx6jFCHkESAE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCsuSeMLhtO+E9i0PwoPlXSKigZtlnx31vncUJLKl+V3QIhAPngaVLhGlhDmSfyPib1V8ASHkak7jfo8NPNIkUT4hbR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2660009},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./content":{"types":"./dist/content.d.ts","import":"./dist/content.js"},"./style.css":"./dist/style.css","./content.css":"./dist/content.css","./package.json":"./package.json"},"gitHead":"03147eb7220e2118c45bcef25c053383e463a97c","scripts":{"dev":"vite","lint":"biome lint","build":"tsc --noEmit && vite build --mode lib && node scripts/build-content-css.mjs","check":"biome check","format":"biome format --write","prepare":"npm run build","preview":"vite preview","check:fix":"biome check --fix","type-check":"tsc --noEmit","build:playground":"vite build"},"_npmUser":{"name":"dqhuy","email":"dqhuy9@gmail.com"},"overrides":{"@tiptap/pm":"3.31.3","@tiptap/core":"3.31.3","@tiptap/react":"3.31.3","@tiptap/markdown":"3.31.3","@tiptap/extensions":"3.31.3","@tiptap/suggestion":"3.31.3","@tiptap/starter-kit":"3.31.3","@tiptap/extension-bold":"3.31.3","@tiptap/extension-code":"3.31.3","@tiptap/extension-link":"3.31.3","@tiptap/extension-list":"3.31.3","@tiptap/extension-text":"3.31.3","@tiptap/extension-emoji":"3.31.3","@tiptap/extension-image":"3.31.3","@tiptap/extension-table":"3.31.3","@tiptap/extension-italic":"3.31.3","@tiptap/extension-strike":"3.31.3","@tiptap/extension-heading":"3.31.3","@tiptap/extension-history":"3.31.3","@tiptap/extension-mention":"3.31.3","@tiptap/extension-document":"3.31.3","@tiptap/extension-gapcursor":"3.31.3","@tiptap/extension-highlight":"3.31.3","@tiptap/extension-list-item":"3.31.3","@tiptap/extension-paragraph":"3.31.3","@tiptap/extension-underline":"3.31.3","@tiptap/extension-unique-id":"3.31.3","@tiptap/extension-blockquote":"3.31.3","@tiptap/extension-code-block":"3.31.3","@tiptap/extension-dropcursor":"3.31.3","@tiptap/extension-hard-break":"3.31.3","@tiptap/extension-node-range":"3.31.3","@tiptap/extension-text-align":"3.31.3","@tiptap/extension-text-style":"3.31.3","@tiptap/extension-typography":"3.31.3","@tiptap/extension-bubble-menu":"3.31.3","@tiptap/extension-bullet-list":"3.31.3","@tiptap/extension-drag-handle":"3.31.3","@tiptap/extension-list-keymap":"3.31.3","@tiptap/extension-ordered-list":"3.31.3","@tiptap/extension-collaboration":"3.31.3","@tiptap/extension-floating-menu":"3.31.3","@tiptap/extension-horizontal-rule":"3.31.3","@tiptap/extension-drag-handle-react":"3.31.3","@tiptap/extension-table-of-contents":"3.31.3"},"repository":{"url":"git+https://github.com/blakaalab/kinkin-editor.git","type":"git"},"_npmVersion":"11.17.0","description":"A drop-in rich text editor for React - a Notion-style WYSIWYG built on Tiptap, with slash commands, tables, images, markdown I/O and streaming AI Assist.","directories":{},"sideEffects":["**/*.css","**/*.scss"],"_nodeVersion":"24.19.0","dependencies":{"clsx":"2.1.1","dompurify":"3.4.0","es-toolkit":"1.40.0","lucide-react":"0.563.0","@ariakit/react":"0.4.15","tailwind-merge":"3.5.0","@floating-ui/react":"0.27.5","react-hotkeys-hook":"4.6.1","@radix-ui/react-slot":"1.2.0","@radix-ui/react-tooltip":"1.2.0","class-variance-authority":"0.7.1","@radix-ui/react-separator":"1.1.7"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.3.6","react":"19.2.3","motion":"^13.2.0","react-dom":"19.2.3","@tiptap/pm":"3.31.3","typescript":"5.9.2","tailwindcss":"4.2.4","@tiptap/core":"3.31.3","@types/react":"19.2.7","@tiptap/react":"3.31.3","sass-embedded":"1.99.0","@biomejs/biome":"^2.4.12","vite-plugin-dts":"^5.1.0","@tiptap/markdown":"3.31.3","@types/react-dom":"19.2.3","@tailwindcss/vite":"4.2.4","@tiptap/extensions":"3.31.3","@tiptap/suggestion":"3.31.3","@tiptap/starter-kit":"3.31.3","@vitejs/plugin-react":"5.1.3","@tiptap/extension-list":"3.31.3","@tiptap/extension-emoji":"3.31.3","@tiptap/extension-image":"3.31.3","@tiptap/extension-table":"3.31.3","postcss-prefix-selector":"^2.2.0","@tiptap/extension-strike":"3.31.3","@tiptap/extension-history":"3.31.3","@tiptap/extension-mention":"3.31.3","@tiptap/extension-highlight":"3.31.3","@tiptap/extension-unique-id":"3.31.3","@tiptap/extension-text-style":"3.31.3","@tiptap/extension-typography":"3.31.3","@tiptap/extension-horizontal-rule":"3.31.3","@tiptap/extension-drag-handle-react":"3.31.3","@tiptap/extension-table-of-contents":"3.31.3"},"peerDependencies":{"react":">=18","react-dom":">=18","@tiptap/pm":"~3.31.3","@tiptap/core":"~3.31.3","@tiptap/react":"~3.31.3","@tiptap/markdown":"~3.31.3","@tiptap/extensions":"~3.31.3","@tiptap/suggestion":"~3.31.3","@tiptap/starter-kit":"~3.31.3","@tiptap/extension-list":"~3.31.3","@tiptap/extension-emoji":"~3.31.3","@tiptap/extension-image":"~3.31.3","@tiptap/extension-table":"~3.31.3","@tiptap/extension-strike":"~3.31.3","@tiptap/extension-history":"~3.31.3","@tiptap/extension-mention":"~3.31.3","@tiptap/extension-highlight":"~3.31.3","@tiptap/extension-unique-id":"~3.31.3","@tiptap/extension-text-style":"~3.31.3","@tiptap/extension-typography":"~3.31.3","@tiptap/extension-horizontal-rule":"~3.31.3","@tiptap/extension-drag-handle-react":"~3.31.3","@tiptap/extension-table-of-contents":"~3.31.3"},"_npmOperationalInternal":{"tmp":"tmp/kinkin-editor_0.5.1_1788840220235_0.42961055989526375","host":"s3://npm-registry-packages-npm-production"}},"0.5.5":{"name":"@blakaa/kinkin-editor","version":"0.5.5","keywords":["rich-text-editor","react-rich-text-editor","wysiwyg","wysiwyg-editor","react","react-editor","tiptap","tiptap-react","prosemirror","markdown","markdown-editor","block-editor","notion","notion-like","slash-commands","text-editor","editor","ai","typescript"],"license":"MIT","_id":"@blakaa/kinkin-editor@0.5.5","maintainers":[{"name":"dqhuy","email":"dqhuy9@gmail.com"}],"homepage":"https://github.com/blakaalab/kinkin-editor#readme","bugs":{"url":"https://github.com/blakaalab/kinkin-editor/issues"},"dist":{"shasum":"a717b8b9c3b044576ba17ff42fe85b37ffae2a63","tarball":"https://registry.npmjs.org/@blakaa/kinkin-editor/-/kinkin-editor-0.5.5.tgz","fileCount":115,"integrity":"sha512-ZMfidVKZPmmPXhg7Y3mWHv0U6ZcJwOi/Snua+SyRAS9nNVNWncuhdiBez7Olq9uRgQcOTvAmsUGp1AxoDSxnpg==","signatures":[{"sig":"MEUCIQC50P9/mg9kXJsqKwD4F8GuWy8PSnhDcrWU4Oq/YTtHkwIga/QEO5W678dGE1TXY7LajIIGnM0iCBOxhU5bcaxQTv0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCICOXkz9ypdLEjpMnT5XJ8/oXUD+89HC45gmwpbD6L8wQAiAd35aWSk0sJ4f3u5MEGgUBnXxbRk0MupBhZGkftn+iAQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2731865},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./content":{"types":"./dist/content.d.ts","import":"./dist/content.js"},"./style.css":"./dist/style.css","./content.css":"./dist/content.css","./package.json":"./package.json"},"gitHead":"8e3793c96319df4e23b191a983b3bcaf76474de3","scripts":{"dev":"vite","lint":"biome lint","build":"tsc --noEmit && vite build --mode lib && node scripts/build-content-css.mjs","check":"biome check","format":"biome format --write","prepare":"npm run build","preview":"vite preview","check:fix":"biome check --fix","type-check":"tsc --noEmit","build:playground":"vite build"},"_npmUser":{"name":"dqhuy","email":"dqhuy9@gmail.com"},"overrides":{"@tiptap/pm":"3.31.3","@tiptap/core":"3.31.3","@tiptap/react":"3.31.3","@tiptap/markdown":"3.31.3","@tiptap/extensions":"3.31.3","@tiptap/suggestion":"3.31.3","@tiptap/starter-kit":"3.31.3","@tiptap/extension-bold":"3.31.3","@tiptap/extension-code":"3.31.3","@tiptap/extension-link":"3.31.3","@tiptap/extension-list":"3.31.3","@tiptap/extension-text":"3.31.3","@tiptap/extension-emoji":"3.31.3","@tiptap/extension-image":"3.31.3","@tiptap/extension-table":"3.31.3","@tiptap/extension-italic":"3.31.3","@tiptap/extension-strike":"3.31.3","@tiptap/extension-heading":"3.31.3","@tiptap/extension-history":"3.31.3","@tiptap/extension-mention":"3.31.3","@tiptap/extension-document":"3.31.3","@tiptap/extension-gapcursor":"3.31.3","@tiptap/extension-highlight":"3.31.3","@tiptap/extension-list-item":"3.31.3","@tiptap/extension-paragraph":"3.31.3","@tiptap/extension-underline":"3.31.3","@tiptap/extension-unique-id":"3.31.3","@tiptap/extension-blockquote":"3.31.3","@tiptap/extension-code-block":"3.31.3","@tiptap/extension-dropcursor":"3.31.3","@tiptap/extension-hard-break":"3.31.3","@tiptap/extension-node-range":"3.31.3","@tiptap/extension-text-align":"3.31.3","@tiptap/extension-text-style":"3.31.3","@tiptap/extension-typography":"3.31.3","@tiptap/extension-bubble-menu":"3.31.3","@tiptap/extension-bullet-list":"3.31.3","@tiptap/extension-drag-handle":"3.31.3","@tiptap/extension-list-keymap":"3.31.3","@tiptap/extension-ordered-list":"3.31.3","@tiptap/extension-collaboration":"3.31.3","@tiptap/extension-floating-menu":"3.31.3","@tiptap/extension-horizontal-rule":"3.31.3","@tiptap/extension-drag-handle-react":"3.31.3","@tiptap/extension-table-of-contents":"3.31.3"},"repository":{"url":"git+https://github.com/blakaalab/kinkin-editor.git","type":"git"},"_npmVersion":"11.17.0","description":"A drop-in rich text editor for React - a Notion-style WYSIWYG built on Tiptap, with slash commands, tables, images, markdown I/O and streaming AI Assist.","directories":{},"sideEffects":["**/*.css","**/*.scss"],"_nodeVersion":"24.19.0","dependencies":{"clsx":"2.1.1","dompurify":"3.4.0","es-toolkit":"1.40.0","lucide-react":"0.563.0","@ariakit/react":"0.4.15","tailwind-merge":"3.5.0","@floating-ui/react":"0.27.5","react-hotkeys-hook":"4.6.1","@radix-ui/react-slot":"1.2.0","@radix-ui/react-tooltip":"1.2.0","class-variance-authority":"0.7.1","@radix-ui/react-separator":"1.1.7"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.3.6","react":"19.2.3","motion":"^13.2.0","react-dom":"19.2.3","@tiptap/pm":"3.31.3","typescript":"5.9.2","tailwindcss":"4.2.4","@tiptap/core":"3.31.3","@types/react":"19.2.7","@tiptap/react":"3.31.3","sass-embedded":"1.99.0","@biomejs/biome":"^2.4.12","vite-plugin-dts":"^5.1.0","@tiptap/markdown":"3.31.3","@types/react-dom":"19.2.3","@tailwindcss/vite":"4.2.4","@tiptap/extensions":"3.31.3","@tiptap/suggestion":"3.31.3","@tiptap/starter-kit":"3.31.3","@vitejs/plugin-react":"5.1.3","@tiptap/extension-list":"3.31.3","@tiptap/extension-emoji":"3.31.3","@tiptap/extension-image":"3.31.3","@tiptap/extension-table":"3.31.3","postcss-prefix-selector":"^2.2.0","@tiptap/extension-strike":"3.31.3","@tiptap/extension-history":"3.31.3","@tiptap/extension-mention":"3.31.3","@tiptap/extension-highlight":"3.31.3","@tiptap/extension-unique-id":"3.31.3","@tiptap/extension-text-align":"3.31.3","@tiptap/extension-text-style":"3.31.3","@tiptap/extension-typography":"3.31.3","@tiptap/extension-horizontal-rule":"3.31.3","@tiptap/extension-drag-handle-react":"3.31.3","@tiptap/extension-table-of-contents":"3.31.3"},"peerDependencies":{"react":">=18","react-dom":">=18","@tiptap/pm":"~3.31.3","@tiptap/core":"~3.31.3","@tiptap/react":"~3.31.3","@tiptap/markdown":"~3.31.3","@tiptap/extensions":"~3.31.3","@tiptap/suggestion":"~3.31.3","@tiptap/starter-kit":"~3.31.3","@tiptap/extension-list":"~3.31.3","@tiptap/extension-emoji":"~3.31.3","@tiptap/extension-image":"~3.31.3","@tiptap/extension-table":"~3.31.3","@tiptap/extension-strike":"~3.31.3","@tiptap/extension-history":"~3.31.3","@tiptap/extension-mention":"~3.31.3","@tiptap/extension-highlight":"~3.31.3","@tiptap/extension-unique-id":"~3.31.3","@tiptap/extension-text-align":"~3.31.3","@tiptap/extension-text-style":"~3.31.3","@tiptap/extension-typography":"~3.31.3","@tiptap/extension-horizontal-rule":"~3.31.3","@tiptap/extension-drag-handle-react":"~3.31.3","@tiptap/extension-table-of-contents":"~3.31.3"},"_npmOperationalInternal":{"tmp":"tmp/kinkin-editor_0.5.5_1788843816399_0.2823669264274873","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@blakaa/kinkin-editor","version":"0.6.0","keywords":["rich-text-editor","react-rich-text-editor","wysiwyg","wysiwyg-editor","react","react-editor","tiptap","tiptap-react","prosemirror","markdown","markdown-editor","block-editor","notion","notion-like","slash-commands","text-editor","editor","ai","typescript"],"license":"MIT","_id":"@blakaa/kinkin-editor@0.6.0","maintainers":[{"name":"dqhuy","email":"dqhuy9@gmail.com"}],"homepage":"https://github.com/blakaalab/kinkin-editor#readme","bugs":{"url":"https://github.com/blakaalab/kinkin-editor/issues"},"dist":{"shasum":"b4db2fa1fa5fa6db08da3d6346be0017276d55c6","tarball":"https://registry.npmjs.org/@blakaa/kinkin-editor/-/kinkin-editor-0.6.0.tgz","fileCount":115,"integrity":"sha512-RDxgMBMy8T28mdvWmbt9H81JOH57+nTSHfLZfj5ev1jS64zi8L383YYvppEVnwL/A7hyb94C2R8sAFCXyqgP5A==","signatures":[{"sig":"MEUCIC+ZvhFA0quH8P9vbc4J9askd0TtYOjwXD01FdDGHi1ZAiEAkruTu4At0+1nVslMzL6Ax/snGMrg1ozwSkzr3sNlCGk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIC1g1uv4wEg2XVs+HXmI2RNDFQtV6hDj2/96XEJUBYRhAiBxqxKJn0cah8z554eytubPfUjRSzLA+BuY+B0bIMMksw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2729447},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./content":{"types":"./dist/content.d.ts","import":"./dist/content.js"},"./style.css":"./dist/style.css","./content.css":"./dist/content.css","./package.json":"./package.json"},"gitHead":"b0360d724de27e7413ec95ff06a528290c7a5a6e","scripts":{"dev":"vite","knip":"knip","lint":"biome lint","build":"tsc --noEmit && vite build --mode lib && node scripts/build-content-css.mjs","check":"biome check","format":"biome format --write","prepare":"npm run build","preview":"vite preview","check:fix":"biome check --fix","type-check":"tsc --noEmit","build:playground":"vite build"},"_npmUser":{"name":"dqhuy","email":"dqhuy9@gmail.com"},"overrides":{"@tiptap/pm":"3.31.3","@tiptap/core":"3.31.3","@tiptap/react":"3.31.3","@tiptap/markdown":"3.31.3","@tiptap/extensions":"3.31.3","@tiptap/suggestion":"3.31.3","@tiptap/starter-kit":"3.31.3","@tiptap/extension-bold":"3.31.3","@tiptap/extension-code":"3.31.3","@tiptap/extension-link":"3.31.3","@tiptap/extension-list":"3.31.3","@tiptap/extension-text":"3.31.3","@tiptap/extension-emoji":"3.31.3","@tiptap/extension-image":"3.31.3","@tiptap/extension-table":"3.31.3","@tiptap/extension-italic":"3.31.3","@tiptap/extension-strike":"3.31.3","@tiptap/extension-heading":"3.31.3","@tiptap/extension-history":"3.31.3","@tiptap/extension-mention":"3.31.3","@tiptap/extension-document":"3.31.3","@tiptap/extension-gapcursor":"3.31.3","@tiptap/extension-highlight":"3.31.3","@tiptap/extension-list-item":"3.31.3","@tiptap/extension-paragraph":"3.31.3","@tiptap/extension-underline":"3.31.3","@tiptap/extension-unique-id":"3.31.3","@tiptap/extension-blockquote":"3.31.3","@tiptap/extension-code-block":"3.31.3","@tiptap/extension-dropcursor":"3.31.3","@tiptap/extension-hard-break":"3.31.3","@tiptap/extension-node-range":"3.31.3","@tiptap/extension-text-align":"3.31.3","@tiptap/extension-text-style":"3.31.3","@tiptap/extension-typography":"3.31.3","@tiptap/extension-bubble-menu":"3.31.3","@tiptap/extension-bullet-list":"3.31.3","@tiptap/extension-drag-handle":"3.31.3","@tiptap/extension-list-keymap":"3.31.3","@tiptap/extension-ordered-list":"3.31.3","@tiptap/extension-collaboration":"3.31.3","@tiptap/extension-floating-menu":"3.31.3","@tiptap/extension-horizontal-rule":"3.31.3","@tiptap/extension-drag-handle-react":"3.31.3","@tiptap/extension-table-of-contents":"3.31.3"},"repository":{"url":"git+https://github.com/blakaalab/kinkin-editor.git","type":"git"},"_npmVersion":"11.17.0","description":"A drop-in rich text editor for React - a Notion-style WYSIWYG built on Tiptap, with slash commands, tables, images, markdown I/O and streaming AI Assist.","directories":{},"sideEffects":["**/*.css","**/*.scss"],"_nodeVersion":"24.19.0","dependencies":{"clsx":"2.1.1","dompurify":"3.4.0","es-toolkit":"1.40.0","lucide-react":"0.563.0","@ariakit/react":"0.4.15","tailwind-merge":"3.5.0","@floating-ui/react":"0.27.5","react-hotkeys-hook":"4.6.1","@radix-ui/react-slot":"1.2.0","@radix-ui/react-tooltip":"1.2.0","class-variance-authority":"0.7.1","@radix-ui/react-separator":"1.1.7"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"knip":"6.34.0","vite":"^7.3.6","react":"19.2.3","motion":"^13.2.0","react-dom":"19.2.3","@tiptap/pm":"3.31.3","typescript":"5.9.2","tailwindcss":"4.2.4","@tiptap/core":"3.31.3","@types/react":"19.2.7","@tiptap/react":"3.31.3","sass-embedded":"1.99.0","@biomejs/biome":"^2.4.12","vite-plugin-dts":"^5.1.0","@tiptap/markdown":"3.31.3","@types/react-dom":"19.2.3","@tailwindcss/vite":"4.2.4","@tiptap/extensions":"3.31.3","@tiptap/suggestion":"3.31.3","@tiptap/starter-kit":"3.31.3","@vitejs/plugin-react":"5.1.3","@tiptap/extension-list":"3.31.3","@tiptap/extension-emoji":"3.31.3","@tiptap/extension-image":"3.31.3","@tiptap/extension-table":"3.31.3","postcss-prefix-selector":"^2.2.0","@tiptap/extension-strike":"3.31.3","@tiptap/extension-history":"3.31.3","@tiptap/extension-mention":"3.31.3","@tiptap/extension-highlight":"3.31.3","@tiptap/extension-unique-id":"3.31.3","@tiptap/extension-text-align":"3.31.3","@tiptap/extension-text-style":"3.31.3","@tiptap/extension-typography":"3.31.3","@tiptap/extension-horizontal-rule":"3.31.3","@tiptap/extension-drag-handle-react":"3.31.3","@tiptap/extension-table-of-contents":"3.31.3"},"peerDependencies":{"react":">=18","react-dom":">=18","@tiptap/pm":"~3.31.3","@tiptap/core":"~3.31.3","@tiptap/react":"~3.31.3","@tiptap/markdown":"~3.31.3","@tiptap/extensions":"~3.31.3","@tiptap/suggestion":"~3.31.3","@tiptap/starter-kit":"~3.31.3","@tiptap/extension-list":"~3.31.3","@tiptap/extension-emoji":"~3.31.3","@tiptap/extension-image":"~3.31.3","@tiptap/extension-table":"~3.31.3","@tiptap/extension-strike":"~3.31.3","@tiptap/extension-history":"~3.31.3","@tiptap/extension-mention":"~3.31.3","@tiptap/extension-highlight":"~3.31.3","@tiptap/extension-unique-id":"~3.31.3","@tiptap/extension-text-align":"~3.31.3","@tiptap/extension-text-style":"~3.31.3","@tiptap/extension-typography":"~3.31.3","@tiptap/extension-horizontal-rule":"~3.31.3","@tiptap/extension-drag-handle-react":"~3.31.3","@tiptap/extension-table-of-contents":"~3.31.3"},"_npmOperationalInternal":{"tmp":"tmp/kinkin-editor_0.6.0_1788867076231_0.3464690324972024","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"@blakaa/kinkin-editor","version":"0.6.1","keywords":["rich-text-editor","react-rich-text-editor","wysiwyg","wysiwyg-editor","react","react-editor","tiptap","tiptap-react","prosemirror","markdown","markdown-editor","block-editor","notion","notion-like","slash-commands","text-editor","editor","ai","typescript"],"license":"MIT","_id":"@blakaa/kinkin-editor@0.6.1","maintainers":[{"name":"dqhuy","email":"dqhuy9@gmail.com"}],"homepage":"https://github.com/blakaalab/kinkin-editor#readme","bugs":{"url":"https://github.com/blakaalab/kinkin-editor/issues"},"dist":{"shasum":"13186a3ac4de2b0d6759fa47738c6ea75cf9c02e","tarball":"https://registry.npmjs.org/@blakaa/kinkin-editor/-/kinkin-editor-0.6.1.tgz","fileCount":115,"integrity":"sha512-cn/Nx4X+kh0ds6LFqGYVh2WHbyn0+qqn7N7or/QpnqZFWGNBSqYDemFdGl1j+nxwBbAQGHC/RNa+BxZ3BUBHVQ==","signatures":[{"sig":"MEUCIQDGwK0dAPKtp8P7w4y5UgTNl5xPOzfPJFj6DSWntIm6cwIgaARE+sVnWbLUj+YsLdYKJZhEfo4ApkQrTj5i4Lae5ds=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCMwu+5KkixdJDVb7XCSI5PEV37HKar19JwoYNwGJ4FuwIgWoH2FEoo5IRB3S08dRV5Kh20+VFrQvxKbcgvMXYJZpM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2729575},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./content":{"types":"./dist/content.d.ts","import":"./dist/content.js"},"./style.css":"./dist/style.css","./content.css":"./dist/content.css","./package.json":"./package.json"},"gitHead":"569370ded89bfaf6dfe96c4ff4dcbdde0187e51a","scripts":{"dev":"vite","knip":"knip","lint":"biome lint","build":"tsc --noEmit && vite build --mode lib && node scripts/build-content-css.mjs","check":"biome check","format":"biome format --write","prepare":"npm run build","preview":"vite preview","check:fix":"biome check --fix","type-check":"tsc --noEmit","build:playground":"vite build"},"_npmUser":{"name":"dqhuy","email":"dqhuy9@gmail.com"},"overrides":{"@tiptap/pm":"3.31.3","@tiptap/core":"3.31.3","@tiptap/react":"3.31.3","@tiptap/markdown":"3.31.3","@tiptap/extensions":"3.31.3","@tiptap/suggestion":"3.31.3","@tiptap/starter-kit":"3.31.3","@tiptap/extension-bold":"3.31.3","@tiptap/extension-code":"3.31.3","@tiptap/extension-link":"3.31.3","@tiptap/extension-list":"3.31.3","@tiptap/extension-text":"3.31.3","@tiptap/extension-emoji":"3.31.3","@tiptap/extension-image":"3.31.3","@tiptap/extension-table":"3.31.3","@tiptap/extension-italic":"3.31.3","@tiptap/extension-strike":"3.31.3","@tiptap/extension-heading":"3.31.3","@tiptap/extension-history":"3.31.3","@tiptap/extension-mention":"3.31.3","@tiptap/extension-document":"3.31.3","@tiptap/extension-gapcursor":"3.31.3","@tiptap/extension-highlight":"3.31.3","@tiptap/extension-list-item":"3.31.3","@tiptap/extension-paragraph":"3.31.3","@tiptap/extension-underline":"3.31.3","@tiptap/extension-unique-id":"3.31.3","@tiptap/extension-blockquote":"3.31.3","@tiptap/extension-code-block":"3.31.3","@tiptap/extension-dropcursor":"3.31.3","@tiptap/extension-hard-break":"3.31.3","@tiptap/extension-node-range":"3.31.3","@tiptap/extension-text-align":"3.31.3","@tiptap/extension-text-style":"3.31.3","@tiptap/extension-typography":"3.31.3","@tiptap/extension-bubble-menu":"3.31.3","@tiptap/extension-bullet-list":"3.31.3","@tiptap/extension-drag-handle":"3.31.3","@tiptap/extension-list-keymap":"3.31.3","@tiptap/extension-ordered-list":"3.31.3","@tiptap/extension-collaboration":"3.31.3","@tiptap/extension-floating-menu":"3.31.3","@tiptap/extension-horizontal-rule":"3.31.3","@tiptap/extension-drag-handle-react":"3.31.3","@tiptap/extension-table-of-contents":"3.31.3"},"repository":{"url":"git+https://github.com/blakaalab/kinkin-editor.git","type":"git"},"_npmVersion":"11.17.0","description":"A drop-in rich text editor for React - a Notion-style WYSIWYG built on Tiptap, with slash commands, tables, images, markdown I/O and streaming AI Assist.","directories":{},"sideEffects":["**/*.css","**/*.scss"],"_nodeVersion":"24.19.0","dependencies":{"clsx":"2.1.1","dompurify":"3.4.0","es-toolkit":"1.40.0","lucide-react":"0.563.0","@ariakit/react":"0.4.15","tailwind-merge":"3.5.0","@floating-ui/react":"0.27.5","react-hotkeys-hook":"4.6.1","@radix-ui/react-slot":"1.2.0","@radix-ui/react-tooltip":"1.2.0","class-variance-authority":"0.7.1","@radix-ui/react-separator":"1.1.7"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"knip":"6.34.0","vite":"^7.3.6","react":"19.2.3","motion":"^13.2.0","react-dom":"19.2.3","@tiptap/pm":"3.31.3","typescript":"5.9.2","tailwindcss":"4.2.4","@tiptap/core":"3.31.3","@types/react":"19.2.7","@tiptap/react":"3.31.3","sass-embedded":"1.99.0","@biomejs/biome":"^2.4.12","vite-plugin-dts":"^5.1.0","@tiptap/markdown":"3.31.3","@types/react-dom":"19.2.3","@tailwindcss/vite":"4.2.4","@tiptap/extensions":"3.31.3","@tiptap/suggestion":"3.31.3","@tiptap/starter-kit":"3.31.3","@vitejs/plugin-react":"5.1.3","@tiptap/extension-list":"3.31.3","@tiptap/extension-emoji":"3.31.3","@tiptap/extension-image":"3.31.3","@tiptap/extension-table":"3.31.3","postcss-prefix-selector":"^2.2.0","@tiptap/extension-strike":"3.31.3","@tiptap/extension-history":"3.31.3","@tiptap/extension-mention":"3.31.3","@tiptap/extension-highlight":"3.31.3","@tiptap/extension-unique-id":"3.31.3","@tiptap/extension-text-align":"3.31.3","@tiptap/extension-text-style":"3.31.3","@tiptap/extension-typography":"3.31.3","@tiptap/extension-horizontal-rule":"3.31.3","@tiptap/extension-drag-handle-react":"3.31.3","@tiptap/extension-table-of-contents":"3.31.3"},"peerDependencies":{"react":">=18","react-dom":">=18","@tiptap/pm":"~3.31.3","@tiptap/core":"~3.31.3","@tiptap/react":"~3.31.3","@tiptap/markdown":"~3.31.3","@tiptap/extensions":"~3.31.3","@tiptap/suggestion":"~3.31.3","@tiptap/starter-kit":"~3.31.3","@tiptap/extension-list":"~3.31.3","@tiptap/extension-emoji":"~3.31.3","@tiptap/extension-image":"~3.31.3","@tiptap/extension-table":"~3.31.3","@tiptap/extension-strike":"~3.31.3","@tiptap/extension-history":"~3.31.3","@tiptap/extension-mention":"~3.31.3","@tiptap/extension-highlight":"~3.31.3","@tiptap/extension-unique-id":"~3.31.3","@tiptap/extension-text-align":"~3.31.3","@tiptap/extension-text-style":"~3.31.3","@tiptap/extension-typography":"~3.31.3","@tiptap/extension-horizontal-rule":"~3.31.3","@tiptap/extension-drag-handle-react":"~3.31.3","@tiptap/extension-table-of-contents":"~3.31.3"},"_npmOperationalInternal":{"tmp":"tmp/kinkin-editor_0.6.1_1788867859964_0.28608595507369405","host":"s3://npm-registry-packages-npm-production"}},"0.6.2":{"name":"@blakaa/kinkin-editor","version":"0.6.2","keywords":["rich-text-editor","react-rich-text-editor","wysiwyg","wysiwyg-editor","react","react-editor","tiptap","tiptap-react","prosemirror","markdown","markdown-editor","block-editor","notion","notion-like","slash-commands","text-editor","editor","ai","typescript"],"license":"MIT","_id":"@blakaa/kinkin-editor@0.6.2","maintainers":[{"name":"dqhuy","email":"dqhuy9@gmail.com"}],"homepage":"https://github.com/blakaalab/kinkin-editor#readme","bugs":{"url":"https://github.com/blakaalab/kinkin-editor/issues"},"dist":{"shasum":"28c44b6f1ec8ceea059b83be4f7f8bd0055fcd9a","tarball":"https://registry.npmjs.org/@blakaa/kinkin-editor/-/kinkin-editor-0.6.2.tgz","fileCount":115,"integrity":"sha512-8HCwfaVXIsLPeIck1w5Cb4Ria8ETDzt6ATu1mxbfuphwuVylIx5yHMwU2C6AESPddUu28TLyqFRSW0pmz4Kqgg==","signatures":[{"sig":"MEUCIDCByKIjMAvzj0kM/NZmbcpJxXooh/waXy1/I2dx1DzoAiEArnjc7qMUO8FvnZLuEWp3TY++7sCymD8F3h/DdwHPmao=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIBUKvkEsAGlgeP/z3FYUYahXStOYrCH8DPO9KFa+LakiAiEApNUAK+G1U8SQDlF1l9LTMmI5L7o8DSRuPC2Wpbr96V4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2729711},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./content":{"types":"./dist/content.d.ts","import":"./dist/content.js"},"./style.css":"./dist/style.css","./content.css":"./dist/content.css","./package.json":"./package.json"},"gitHead":"9dfd3d664d188581af577b3df96e0d3d49e79b7d","scripts":{"dev":"vite","knip":"knip","lint":"biome lint","build":"tsc --noEmit && vite build --mode lib && node scripts/build-content-css.mjs","check":"biome check","format":"biome format --write","prepare":"npm run build","preview":"vite preview","check:fix":"biome check --fix","type-check":"tsc --noEmit","build:playground":"vite build"},"_npmUser":{"name":"dqhuy","email":"dqhuy9@gmail.com"},"overrides":{"@tiptap/pm":"3.31.3","@tiptap/core":"3.31.3","@tiptap/react":"3.31.3","@tiptap/markdown":"3.31.3","@tiptap/extensions":"3.31.3","@tiptap/suggestion":"3.31.3","@tiptap/starter-kit":"3.31.3","@tiptap/extension-bold":"3.31.3","@tiptap/extension-code":"3.31.3","@tiptap/extension-link":"3.31.3","@tiptap/extension-list":"3.31.3","@tiptap/extension-text":"3.31.3","@tiptap/extension-emoji":"3.31.3","@tiptap/extension-image":"3.31.3","@tiptap/extension-table":"3.31.3","@tiptap/extension-italic":"3.31.3","@tiptap/extension-strike":"3.31.3","@tiptap/extension-heading":"3.31.3","@tiptap/extension-history":"3.31.3","@tiptap/extension-mention":"3.31.3","@tiptap/extension-document":"3.31.3","@tiptap/extension-gapcursor":"3.31.3","@tiptap/extension-highlight":"3.31.3","@tiptap/extension-list-item":"3.31.3","@tiptap/extension-paragraph":"3.31.3","@tiptap/extension-underline":"3.31.3","@tiptap/extension-unique-id":"3.31.3","@tiptap/extension-blockquote":"3.31.3","@tiptap/extension-code-block":"3.31.3","@tiptap/extension-dropcursor":"3.31.3","@tiptap/extension-hard-break":"3.31.3","@tiptap/extension-node-range":"3.31.3","@tiptap/extension-text-align":"3.31.3","@tiptap/extension-text-style":"3.31.3","@tiptap/extension-typography":"3.31.3","@tiptap/extension-bubble-menu":"3.31.3","@tiptap/extension-bullet-list":"3.31.3","@tiptap/extension-drag-handle":"3.31.3","@tiptap/extension-list-keymap":"3.31.3","@tiptap/extension-ordered-list":"3.31.3","@tiptap/extension-collaboration":"3.31.3","@tiptap/extension-floating-menu":"3.31.3","@tiptap/extension-horizontal-rule":"3.31.3","@tiptap/extension-drag-handle-react":"3.31.3","@tiptap/extension-table-of-contents":"3.31.3"},"repository":{"url":"git+https://github.com/blakaalab/kinkin-editor.git","type":"git"},"_npmVersion":"11.17.0","description":"A drop-in rich text editor for React - a Notion-style WYSIWYG built on Tiptap, with slash commands, tables, images, markdown I/O and streaming AI Assist.","directories":{},"sideEffects":["**/*.css","**/*.scss"],"_nodeVersion":"24.19.0","dependencies":{"clsx":"2.1.1","dompurify":"3.4.0","es-toolkit":"1.40.0","lucide-react":"0.563.0","@ariakit/react":"0.4.15","tailwind-merge":"3.5.0","@floating-ui/react":"0.27.5","react-hotkeys-hook":"4.6.1","@radix-ui/react-slot":"1.2.0","@radix-ui/react-tooltip":"1.2.0","class-variance-authority":"0.7.1","@radix-ui/react-separator":"1.1.7"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"knip":"6.34.0","vite":"^7.3.6","react":"19.2.3","motion":"^13.2.0","react-dom":"19.2.3","@tiptap/pm":"3.31.3","typescript":"5.9.2","tailwindcss":"4.2.4","@tiptap/core":"3.31.3","@types/react":"19.2.7","@tiptap/react":"3.31.3","sass-embedded":"1.99.0","@biomejs/biome":"^2.4.12","vite-plugin-dts":"^5.1.0","@tiptap/markdown":"3.31.3","@types/react-dom":"19.2.3","@tailwindcss/vite":"4.2.4","@tiptap/extensions":"3.31.3","@tiptap/suggestion":"3.31.3","@tiptap/starter-kit":"3.31.3","@vitejs/plugin-react":"5.1.3","@tiptap/extension-list":"3.31.3","@tiptap/extension-emoji":"3.31.3","@tiptap/extension-image":"3.31.3","@tiptap/extension-table":"3.31.3","postcss-prefix-selector":"^2.2.0","@tiptap/extension-strike":"3.31.3","@tiptap/extension-history":"3.31.3","@tiptap/extension-mention":"3.31.3","@tiptap/extension-highlight":"3.31.3","@tiptap/extension-unique-id":"3.31.3","@tiptap/extension-text-align":"3.31.3","@tiptap/extension-text-style":"3.31.3","@tiptap/extension-typography":"3.31.3","@tiptap/extension-horizontal-rule":"3.31.3","@tiptap/extension-drag-handle-react":"3.31.3","@tiptap/extension-table-of-contents":"3.31.3"},"peerDependencies":{"react":">=18","react-dom":">=18","@tiptap/pm":"~3.31.3","@tiptap/core":"~3.31.3","@tiptap/react":"~3.31.3","@tiptap/markdown":"~3.31.3","@tiptap/extensions":"~3.31.3","@tiptap/suggestion":"~3.31.3","@tiptap/starter-kit":"~3.31.3","@tiptap/extension-list":"~3.31.3","@tiptap/extension-emoji":"~3.31.3","@tiptap/extension-image":"~3.31.3","@tiptap/extension-table":"~3.31.3","@tiptap/extension-strike":"~3.31.3","@tiptap/extension-history":"~3.31.3","@tiptap/extension-mention":"~3.31.3","@tiptap/extension-highlight":"~3.31.3","@tiptap/extension-unique-id":"~3.31.3","@tiptap/extension-text-align":"~3.31.3","@tiptap/extension-text-style":"~3.31.3","@tiptap/extension-typography":"~3.31.3","@tiptap/extension-horizontal-rule":"~3.31.3","@tiptap/extension-drag-handle-react":"~3.31.3","@tiptap/extension-table-of-contents":"~3.31.3"},"_npmOperationalInternal":{"tmp":"tmp/kinkin-editor_0.6.2_1788927045463_0.9230914341569485","host":"s3://npm-registry-packages-npm-production"}},"0.6.3":{"name":"@blakaa/kinkin-editor","version":"0.6.3","keywords":["rich-text-editor","react-rich-text-editor","wysiwyg","wysiwyg-editor","react","react-editor","tiptap","tiptap-react","prosemirror","markdown","markdown-editor","block-editor","notion","notion-like","slash-commands","text-editor","editor","ai","typescript"],"license":"MIT","_id":"@blakaa/kinkin-editor@0.6.3","maintainers":[{"name":"dqhuy","email":"dqhuy9@gmail.com"}],"homepage":"https://github.com/blakaalab/kinkin-editor#readme","bugs":{"url":"https://github.com/blakaalab/kinkin-editor/issues"},"dist":{"shasum":"eb2a9e5be578d999ffccd061cf1da37bff91ee42","tarball":"https://registry.npmjs.org/@blakaa/kinkin-editor/-/kinkin-editor-0.6.3.tgz","fileCount":116,"integrity":"sha512-aL4xCN2kXSVdwQ8WqwXfqfGqYKHXsifTpkVKekQNmr8PmQ8ZKeizV1jFituCu5WaymNmuv9To7E4gDAz/FNQdw==","signatures":[{"sig":"MEUCIBQj5asT3rjQSoWkqtPe0QtzKA7Gsyf3kaC3bdZiDAVgAiEAo/cc+QJ9jWMji5eUbIT9FCadm9mgCgypPqIWC4zLR4Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCzwOF8Q8W07FFJts1qbW6Giy9N6kHh7hsvqClaAZLHxAIgavKYRnkpoCJPCTbwbw0obVi90ltERipZYFEST/7XYPs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2736243},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./content":{"types":"./dist/content.d.ts","import":"./dist/content.js"},"./style.css":"./dist/style.css","./content.css":"./dist/content.css","./package.json":"./package.json"},"gitHead":"be30a51c380b94f1a799e9556acb8ead9106baea","scripts":{"dev":"vite","knip":"knip","lint":"biome lint","build":"tsc --noEmit && vite build --mode lib && node scripts/build-content-css.mjs","check":"biome check","format":"biome format --write","prepare":"npm run build","preview":"vite preview","check:fix":"biome check --fix","type-check":"tsc --noEmit","build:playground":"vite build"},"_npmUser":{"name":"dqhuy","email":"dqhuy9@gmail.com"},"overrides":{"@tiptap/pm":"3.31.3","@tiptap/core":"3.31.3","@tiptap/react":"3.31.3","@tiptap/markdown":"3.31.3","@tiptap/extensions":"3.31.3","@tiptap/suggestion":"3.31.3","@tiptap/starter-kit":"3.31.3","@tiptap/extension-bold":"3.31.3","@tiptap/extension-code":"3.31.3","@tiptap/extension-link":"3.31.3","@tiptap/extension-list":"3.31.3","@tiptap/extension-text":"3.31.3","@tiptap/extension-emoji":"3.31.3","@tiptap/extension-image":"3.31.3","@tiptap/extension-table":"3.31.3","@tiptap/extension-italic":"3.31.3","@tiptap/extension-strike":"3.31.3","@tiptap/extension-heading":"3.31.3","@tiptap/extension-history":"3.31.3","@tiptap/extension-mention":"3.31.3","@tiptap/extension-document":"3.31.3","@tiptap/extension-gapcursor":"3.31.3","@tiptap/extension-highlight":"3.31.3","@tiptap/extension-list-item":"3.31.3","@tiptap/extension-paragraph":"3.31.3","@tiptap/extension-underline":"3.31.3","@tiptap/extension-unique-id":"3.31.3","@tiptap/extension-blockquote":"3.31.3","@tiptap/extension-code-block":"3.31.3","@tiptap/extension-dropcursor":"3.31.3","@tiptap/extension-hard-break":"3.31.3","@tiptap/extension-node-range":"3.31.3","@tiptap/extension-text-align":"3.31.3","@tiptap/extension-text-style":"3.31.3","@tiptap/extension-typography":"3.31.3","@tiptap/extension-bubble-menu":"3.31.3","@tiptap/extension-bullet-list":"3.31.3","@tiptap/extension-drag-handle":"3.31.3","@tiptap/extension-list-keymap":"3.31.3","@tiptap/extension-ordered-list":"3.31.3","@tiptap/extension-collaboration":"3.31.3","@tiptap/extension-floating-menu":"3.31.3","@tiptap/extension-horizontal-rule":"3.31.3","@tiptap/extension-drag-handle-react":"3.31.3","@tiptap/extension-table-of-contents":"3.31.3"},"repository":{"url":"git+https://github.com/blakaalab/kinkin-editor.git","type":"git"},"_npmVersion":"11.17.0","description":"A drop-in rich text editor for React - a Notion-style WYSIWYG built on Tiptap, with slash commands, tables, images, markdown I/O and streaming AI Assist.","directories":{},"sideEffects":["**/*.css","**/*.scss"],"_nodeVersion":"24.19.0","dependencies":{"clsx":"2.1.1","dompurify":"3.4.0","es-toolkit":"1.40.0","lucide-react":"0.563.0","@ariakit/react":"0.4.15","tailwind-merge":"3.5.0","@floating-ui/react":"0.27.5","react-hotkeys-hook":"4.6.1","@radix-ui/react-slot":"1.2.0","@radix-ui/react-tooltip":"1.2.0","class-variance-authority":"0.7.1","@radix-ui/react-separator":"1.1.7"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"knip":"6.34.0","vite":"^7.3.6","react":"19.2.3","motion":"^13.2.0","react-dom":"19.2.3","@tiptap/pm":"3.31.3","typescript":"5.9.2","tailwindcss":"4.2.4","@tiptap/core":"3.31.3","@types/react":"19.2.7","@tiptap/react":"3.31.3","sass-embedded":"1.99.0","@biomejs/biome":"^2.4.12","vite-plugin-dts":"^5.1.0","@tiptap/markdown":"3.31.3","@types/react-dom":"19.2.3","@tailwindcss/vite":"4.2.4","@tiptap/extensions":"3.31.3","@tiptap/suggestion":"3.31.3","@tiptap/starter-kit":"3.31.3","@vitejs/plugin-react":"5.1.3","@tiptap/extension-list":"3.31.3","@tiptap/extension-emoji":"3.31.3","@tiptap/extension-image":"3.31.3","@tiptap/extension-table":"3.31.3","postcss-prefix-selector":"^2.2.0","@tiptap/extension-strike":"3.31.3","@tiptap/extension-history":"3.31.3","@tiptap/extension-mention":"3.31.3","@tiptap/extension-highlight":"3.31.3","@tiptap/extension-unique-id":"3.31.3","@tiptap/extension-text-align":"3.31.3","@tiptap/extension-text-style":"3.31.3","@tiptap/extension-typography":"3.31.3","@tiptap/extension-horizontal-rule":"3.31.3","@tiptap/extension-drag-handle-react":"3.31.3","@tiptap/extension-table-of-contents":"3.31.3"},"peerDependencies":{"react":">=18","react-dom":">=18","@tiptap/pm":"~3.31.3","@tiptap/core":"~3.31.3","@tiptap/react":"~3.31.3","@tiptap/markdown":"~3.31.3","@tiptap/extensions":"~3.31.3","@tiptap/suggestion":"~3.31.3","@tiptap/starter-kit":"~3.31.3","@tiptap/extension-list":"~3.31.3","@tiptap/extension-emoji":"~3.31.3","@tiptap/extension-image":"~3.31.3","@tiptap/extension-table":"~3.31.3","@tiptap/extension-strike":"~3.31.3","@tiptap/extension-history":"~3.31.3","@tiptap/extension-mention":"~3.31.3","@tiptap/extension-highlight":"~3.31.3","@tiptap/extension-unique-id":"~3.31.3","@tiptap/extension-text-align":"~3.31.3","@tiptap/extension-text-style":"~3.31.3","@tiptap/extension-typography":"~3.31.3","@tiptap/extension-horizontal-rule":"~3.31.3","@tiptap/extension-drag-handle-react":"~3.31.3","@tiptap/extension-table-of-contents":"~3.31.3"},"_npmOperationalInternal":{"tmp":"tmp/kinkin-editor_0.6.3_1788946597393_0.7942307789877265","host":"s3://npm-registry-packages-npm-production"}},"0.6.4":{"name":"@blakaa/kinkin-editor","version":"0.6.4","keywords":["rich-text-editor","react-rich-text-editor","wysiwyg","wysiwyg-editor","react","react-editor","tiptap","tiptap-react","prosemirror","markdown","markdown-editor","block-editor","notion","notion-like","slash-commands","text-editor","editor","ai","typescript"],"license":"MIT","_id":"@blakaa/kinkin-editor@0.6.4","maintainers":[{"name":"dqhuy","email":"dqhuy9@gmail.com"}],"homepage":"https://github.com/blakaalab/kinkin-editor#readme","bugs":{"url":"https://github.com/blakaalab/kinkin-editor/issues"},"dist":{"shasum":"4d4aff820568cd0bd4be8774dd4f7ca556f4da3e","tarball":"https://registry.npmjs.org/@blakaa/kinkin-editor/-/kinkin-editor-0.6.4.tgz","fileCount":116,"integrity":"sha512-uuc58fjMJIiKtSMxFeLm7JMvaMzubqLh/6OSSz+uZZrjysS2Qly7yf59MfJF97gkKeeTpMTkEP/LUpZ8L9TVag==","signatures":[{"sig":"MEQCIH6w7GyBW4Fzk+gZQKjTt5Zyp5iowBcYNjI4spUkeKHFAiBwIPoHwx9y57YeuATVXL09Le4Iq7WnoMHO9MwDMZHmAA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQC0M+VUmHzHtiXegdoNiMrY/cIzdKGQ9DO8oZbBE0qmqwIhANwb621krC/fcTduQfuDyBb/K0xadP+BQcXdmssfK12c","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2737907},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./content":{"types":"./dist/content.d.ts","import":"./dist/content.js"},"./style.css":"./dist/style.css","./content.css":"./dist/content.css","./package.json":"./package.json"},"gitHead":"031125f188f727e9452ddd1a837151a69e79e053","scripts":{"dev":"vite","knip":"knip","lint":"biome lint","build":"tsc --noEmit && vite build --mode lib && node scripts/build-content-css.mjs","check":"biome check","format":"biome format --write","prepare":"npm run build","preview":"vite preview","check:fix":"biome check --fix","type-check":"tsc --noEmit","build:playground":"vite build"},"_npmUser":{"name":"dqhuy","email":"dqhuy9@gmail.com"},"overrides":{"@tiptap/pm":"3.31.3","@tiptap/core":"3.31.3","@tiptap/react":"3.31.3","@tiptap/markdown":"3.31.3","@tiptap/extensions":"3.31.3","@tiptap/suggestion":"3.31.3","@tiptap/starter-kit":"3.31.3","@tiptap/extension-bold":"3.31.3","@tiptap/extension-code":"3.31.3","@tiptap/extension-link":"3.31.3","@tiptap/extension-list":"3.31.3","@tiptap/extension-text":"3.31.3","@tiptap/extension-emoji":"3.31.3","@tiptap/extension-image":"3.31.3","@tiptap/extension-table":"3.31.3","@tiptap/extension-italic":"3.31.3","@tiptap/extension-strike":"3.31.3","@tiptap/extension-heading":"3.31.3","@tiptap/extension-history":"3.31.3","@tiptap/extension-mention":"3.31.3","@tiptap/extension-document":"3.31.3","@tiptap/extension-gapcursor":"3.31.3","@tiptap/extension-highlight":"3.31.3","@tiptap/extension-list-item":"3.31.3","@tiptap/extension-paragraph":"3.31.3","@tiptap/extension-underline":"3.31.3","@tiptap/extension-unique-id":"3.31.3","@tiptap/extension-blockquote":"3.31.3","@tiptap/extension-code-block":"3.31.3","@tiptap/extension-dropcursor":"3.31.3","@tiptap/extension-hard-break":"3.31.3","@tiptap/extension-node-range":"3.31.3","@tiptap/extension-text-align":"3.31.3","@tiptap/extension-text-style":"3.31.3","@tiptap/extension-typography":"3.31.3","@tiptap/extension-bubble-menu":"3.31.3","@tiptap/extension-bullet-list":"3.31.3","@tiptap/extension-drag-handle":"3.31.3","@tiptap/extension-list-keymap":"3.31.3","@tiptap/extension-ordered-list":"3.31.3","@tiptap/extension-collaboration":"3.31.3","@tiptap/extension-floating-menu":"3.31.3","@tiptap/extension-horizontal-rule":"3.31.3","@tiptap/extension-drag-handle-react":"3.31.3","@tiptap/extension-table-of-contents":"3.31.3"},"repository":{"url":"git+https://github.com/blakaalab/kinkin-editor.git","type":"git"},"_npmVersion":"11.17.0","description":"A drop-in rich text editor for React - a Notion-style WYSIWYG built on Tiptap, with slash commands, tables, images, markdown I/O and streaming AI Assist.","directories":{},"sideEffects":["**/*.css","**/*.scss"],"_nodeVersion":"24.19.0","dependencies":{"clsx":"2.1.1","dompurify":"3.4.0","es-toolkit":"1.40.0","lucide-react":"0.563.0","@ariakit/react":"0.4.15","tailwind-merge":"3.5.0","@floating-ui/react":"0.27.5","react-hotkeys-hook":"4.6.1","@radix-ui/react-slot":"1.2.0","@radix-ui/react-tooltip":"1.2.0","class-variance-authority":"0.7.1","@radix-ui/react-separator":"1.1.7"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"knip":"6.34.0","vite":"^7.3.6","react":"19.2.3","motion":"^13.2.0","react-dom":"19.2.3","@tiptap/pm":"3.31.3","typescript":"5.9.2","tailwindcss":"4.2.4","@tiptap/core":"3.31.3","@types/react":"19.2.7","@tiptap/react":"3.31.3","sass-embedded":"1.99.0","@biomejs/biome":"^2.4.12","vite-plugin-dts":"^5.1.0","@tiptap/markdown":"3.31.3","@types/react-dom":"19.2.3","@tailwindcss/vite":"4.2.4","@tiptap/extensions":"3.31.3","@tiptap/suggestion":"3.31.3","@tiptap/starter-kit":"3.31.3","@vitejs/plugin-react":"5.1.3","@tiptap/extension-list":"3.31.3","@tiptap/extension-emoji":"3.31.3","@tiptap/extension-image":"3.31.3","@tiptap/extension-table":"3.31.3","postcss-prefix-selector":"^2.2.0","@tiptap/extension-strike":"3.31.3","@tiptap/extension-history":"3.31.3","@tiptap/extension-mention":"3.31.3","@tiptap/extension-highlight":"3.31.3","@tiptap/extension-unique-id":"3.31.3","@tiptap/extension-text-align":"3.31.3","@tiptap/extension-text-style":"3.31.3","@tiptap/extension-typography":"3.31.3","@tiptap/extension-horizontal-rule":"3.31.3","@tiptap/extension-drag-handle-react":"3.31.3","@tiptap/extension-table-of-contents":"3.31.3"},"peerDependencies":{"react":">=18","react-dom":">=18","@tiptap/pm":"~3.31.3","@tiptap/core":"~3.31.3","@tiptap/react":"~3.31.3","@tiptap/markdown":"~3.31.3","@tiptap/extensions":"~3.31.3","@tiptap/suggestion":"~3.31.3","@tiptap/starter-kit":"~3.31.3","@tiptap/extension-list":"~3.31.3","@tiptap/extension-emoji":"~3.31.3","@tiptap/extension-image":"~3.31.3","@tiptap/extension-table":"~3.31.3","@tiptap/extension-strike":"~3.31.3","@tiptap/extension-history":"~3.31.3","@tiptap/extension-mention":"~3.31.3","@tiptap/extension-highlight":"~3.31.3","@tiptap/extension-unique-id":"~3.31.3","@tiptap/extension-text-align":"~3.31.3","@tiptap/extension-text-style":"~3.31.3","@tiptap/extension-typography":"~3.31.3","@tiptap/extension-horizontal-rule":"~3.31.3","@tiptap/extension-drag-handle-react":"~3.31.3","@tiptap/extension-table-of-contents":"~3.31.3"},"_npmOperationalInternal":{"tmp":"tmp/kinkin-editor_0.6.4_1788951204674_0.09656003322020545","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@blakaa/kinkin-editor","version":"0.7.0","keywords":["rich-text-editor","react-rich-text-editor","wysiwyg","wysiwyg-editor","react","react-editor","tiptap","tiptap-react","prosemirror","markdown","markdown-editor","block-editor","notion","notion-like","slash-commands","text-editor","editor","ai","typescript"],"license":"MIT","_id":"@blakaa/kinkin-editor@0.7.0","maintainers":[{"name":"dqhuy","email":"dqhuy9@gmail.com"}],"homepage":"https://github.com/blakaalab/kinkin-editor#readme","bugs":{"url":"https://github.com/blakaalab/kinkin-editor/issues"},"dist":{"shasum":"3d1960277ccbf3adc58fa6926fa153e4a7a5bbf5","tarball":"https://registry.npmjs.org/@blakaa/kinkin-editor/-/kinkin-editor-0.7.0.tgz","fileCount":130,"integrity":"sha512-xLw62jNFHP37uzTEL5IWFPGKpJNp4bo1KhxdlUpkFP9ttkSvSooDO9aBTUygB7mPEljWza8BdG8mm3BkbTz+og==","signatures":[{"sig":"MEQCIFPCQU48zQ/frA/UGyNAk6AYhT83t2SBEwwTdSmAcbL+AiA/JD+FaUiQ0Jr4YAjdO8lb3xIrErP9Lg8OCAd9PmnDeQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIHqoHmXZtKSnq0rkxzIJRh7xGSDZIs5tKZYo2qykLVvmAiB9aTgP69VVGXYrIPNiLqFyKEWv+lj3JWV06Q03ZXwATQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2863202},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./content":{"types":"./dist/content.d.ts","import":"./dist/content.js"},"./style.css":"./dist/style.css","./content.css":"./dist/content.css","./package.json":"./package.json"},"gitHead":"e97be4fe3415aa2ade4fed2b8d8db086445fbf46","scripts":{"dev":"vite","knip":"knip","lint":"biome lint","build":"tsc --noEmit && vite build --mode lib && node scripts/build-content-css.mjs","check":"biome check","format":"biome format --write","prepare":"npm run build","preview":"vite preview","check:fix":"biome check --fix","type-check":"tsc --noEmit","build:playground":"vite build"},"_npmUser":{"name":"dqhuy","email":"dqhuy9@gmail.com"},"overrides":{"@tiptap/pm":"3.31.3","@tiptap/core":"3.31.3","@tiptap/react":"3.31.3","@tiptap/markdown":"3.31.3","@tiptap/extensions":"3.31.3","@tiptap/suggestion":"3.31.3","@tiptap/starter-kit":"3.31.3","@tiptap/extension-bold":"3.31.3","@tiptap/extension-code":"3.31.3","@tiptap/extension-link":"3.31.3","@tiptap/extension-list":"3.31.3","@tiptap/extension-text":"3.31.3","@tiptap/extension-emoji":"3.31.3","@tiptap/extension-image":"3.31.3","@tiptap/extension-table":"3.31.3","@tiptap/extension-italic":"3.31.3","@tiptap/extension-strike":"3.31.3","@tiptap/extension-heading":"3.31.3","@tiptap/extension-history":"3.31.3","@tiptap/extension-mention":"3.31.3","@tiptap/extension-document":"3.31.3","@tiptap/extension-gapcursor":"3.31.3","@tiptap/extension-highlight":"3.31.3","@tiptap/extension-list-item":"3.31.3","@tiptap/extension-paragraph":"3.31.3","@tiptap/extension-underline":"3.31.3","@tiptap/extension-unique-id":"3.31.3","@tiptap/extension-blockquote":"3.31.3","@tiptap/extension-code-block":"3.31.3","@tiptap/extension-dropcursor":"3.31.3","@tiptap/extension-hard-break":"3.31.3","@tiptap/extension-node-range":"3.31.3","@tiptap/extension-text-align":"3.31.3","@tiptap/extension-text-style":"3.31.3","@tiptap/extension-typography":"3.31.3","@tiptap/extension-bubble-menu":"3.31.3","@tiptap/extension-bullet-list":"3.31.3","@tiptap/extension-drag-handle":"3.31.3","@tiptap/extension-list-keymap":"3.31.3","@tiptap/extension-ordered-list":"3.31.3","@tiptap/extension-collaboration":"3.31.3","@tiptap/extension-floating-menu":"3.31.3","@tiptap/extension-horizontal-rule":"3.31.3","@tiptap/extension-drag-handle-react":"3.31.3","@tiptap/extension-table-of-contents":"3.31.3"},"repository":{"url":"git+https://github.com/blakaalab/kinkin-editor.git","type":"git"},"_npmVersion":"11.17.0","description":"A drop-in rich text editor for React - a Notion-style WYSIWYG built on Tiptap, with slash commands, tables, images, markdown I/O and streaming AI Assist.","directories":{},"sideEffects":["**/*.css","**/*.scss"],"_nodeVersion":"24.19.0","dependencies":{"clsx":"2.1.1","dompurify":"3.4.0","es-toolkit":"1.40.0","lucide-react":"0.563.0","@ariakit/react":"0.4.15","tailwind-merge":"3.5.0","@floating-ui/react":"0.27.5","react-hotkeys-hook":"4.6.1","@radix-ui/react-slot":"1.2.0","@radix-ui/react-tooltip":"1.2.0","class-variance-authority":"0.7.1","@radix-ui/react-separator":"1.1.7"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"knip":"6.34.0","vite":"^7.3.6","react":"19.2.3","motion":"^13.2.0","react-dom":"19.2.3","@tiptap/pm":"3.31.3","typescript":"5.9.2","tailwindcss":"4.2.4","@tiptap/core":"3.31.3","@types/react":"19.2.7","@tiptap/react":"3.31.3","sass-embedded":"1.99.0","@biomejs/biome":"^2.4.12","vite-plugin-dts":"^5.1.0","@tiptap/markdown":"3.31.3","@types/react-dom":"19.2.3","@tailwindcss/vite":"4.2.4","@tiptap/extensions":"3.31.3","@tiptap/suggestion":"3.31.3","@tiptap/starter-kit":"3.31.3","@vitejs/plugin-react":"5.1.3","@tiptap/extension-list":"3.31.3","@tiptap/extension-emoji":"3.31.3","@tiptap/extension-image":"3.31.3","@tiptap/extension-table":"3.31.3","postcss-prefix-selector":"^2.2.0","@tiptap/extension-strike":"3.31.3","@tiptap/extension-history":"3.31.3","@tiptap/extension-mention":"3.31.3","@tiptap/extension-highlight":"3.31.3","@tiptap/extension-unique-id":"3.31.3","@tiptap/extension-text-align":"3.31.3","@tiptap/extension-text-style":"3.31.3","@tiptap/extension-typography":"3.31.3","@tiptap/extension-horizontal-rule":"3.31.3","@tiptap/extension-drag-handle-react":"3.31.3","@tiptap/extension-table-of-contents":"3.31.3"},"peerDependencies":{"react":">=18","react-dom":">=18","@tiptap/pm":"~3.31.3","@tiptap/core":"~3.31.3","@tiptap/react":"~3.31.3","@tiptap/markdown":"~3.31.3","@tiptap/extensions":"~3.31.3","@tiptap/suggestion":"~3.31.3","@tiptap/starter-kit":"~3.31.3","@tiptap/extension-list":"~3.31.3","@tiptap/extension-emoji":"~3.31.3","@tiptap/extension-image":"~3.31.3","@tiptap/extension-table":"~3.31.3","@tiptap/extension-strike":"~3.31.3","@tiptap/extension-history":"~3.31.3","@tiptap/extension-mention":"~3.31.3","@tiptap/extension-highlight":"~3.31.3","@tiptap/extension-unique-id":"~3.31.3","@tiptap/extension-text-align":"~3.31.3","@tiptap/extension-text-style":"~3.31.3","@tiptap/extension-typography":"~3.31.3","@tiptap/extension-horizontal-rule":"~3.31.3","@tiptap/extension-drag-handle-react":"~3.31.3","@tiptap/extension-table-of-contents":"~3.31.3"},"_npmOperationalInternal":{"tmp":"tmp/kinkin-editor_0.7.0_1789118999922_0.5093310815170333","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@blakaa/kinkin-editor","version":"0.8.0","keywords":["rich-text-editor","react-rich-text-editor","wysiwyg","wysiwyg-editor","react","react-editor","tiptap","tiptap-react","prosemirror","markdown","markdown-editor","block-editor","notion","notion-like","slash-commands","text-editor","editor","ai","typescript"],"license":"MIT","_id":"@blakaa/kinkin-editor@0.8.0","maintainers":[{"name":"dqhuy","email":"dqhuy9@gmail.com"}],"homepage":"https://github.com/blakaalab/kinkin-editor#readme","bugs":{"url":"https://github.com/blakaalab/kinkin-editor/issues"},"dist":{"shasum":"c3e26eaa5ba59ce775d749c962e21af0253d8496","tarball":"https://registry.npmjs.org/@blakaa/kinkin-editor/-/kinkin-editor-0.8.0.tgz","fileCount":133,"integrity":"sha512-zCDWZdCNBADSLXv33R/cfi1XpDRjHKIzon494XxpLGCcze/2mtq1ubBHHjuPkYAC4znPzG1dkeu7/m+y7xstkg==","signatures":[{"sig":"MEYCIQC4dtKHobi+qBxCI9Fp8NPsJVhjmVpuJEKNRfwBjhA9ZQIhAN4MM3ZigvCw3LL+jN2xZ2xpkOAd9rN4RHrF8Zw/Qte1","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDBihjBMnUnsB/tFeQzsJNH8e5nVWosVX/eTKvAa6Yd4AIhANyeG4mQdaQgAcG4+7a+Z7iY7nX5ilcz0/HzB5rrxDTe","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2887946},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./content":{"types":"./dist/content.d.ts","import":"./dist/content.js"},"./style.css":"./dist/style.css","./content.css":"./dist/content.css","./package.json":"./package.json"},"gitHead":"b39ae11834c102ccf4dcf1c89911fecdf42e3b45","scripts":{"dev":"vite","knip":"knip","lint":"biome lint","build":"tsc --noEmit && vite build --mode lib && node scripts/build-content-css.mjs","check":"biome check","format":"biome format --write","prepare":"npm run build","preview":"vite preview","check:fix":"biome check --fix","type-check":"tsc --noEmit","build:playground":"vite build"},"_npmUser":{"name":"dqhuy","email":"dqhuy9@gmail.com"},"overrides":{"@tiptap/pm":"3.31.3","@tiptap/core":"3.31.3","@tiptap/react":"3.31.3","@tiptap/markdown":"3.31.3","@tiptap/extensions":"3.31.3","@tiptap/suggestion":"3.31.3","@tiptap/starter-kit":"3.31.3","@tiptap/extension-bold":"3.31.3","@tiptap/extension-code":"3.31.3","@tiptap/extension-link":"3.31.3","@tiptap/extension-list":"3.31.3","@tiptap/extension-text":"3.31.3","@tiptap/extension-emoji":"3.31.3","@tiptap/extension-image":"3.31.3","@tiptap/extension-table":"3.31.3","@tiptap/extension-italic":"3.31.3","@tiptap/extension-strike":"3.31.3","@tiptap/extension-heading":"3.31.3","@tiptap/extension-history":"3.31.3","@tiptap/extension-mention":"3.31.3","@tiptap/extension-document":"3.31.3","@tiptap/extension-gapcursor":"3.31.3","@tiptap/extension-highlight":"3.31.3","@tiptap/extension-list-item":"3.31.3","@tiptap/extension-paragraph":"3.31.3","@tiptap/extension-underline":"3.31.3","@tiptap/extension-unique-id":"3.31.3","@tiptap/extension-blockquote":"3.31.3","@tiptap/extension-code-block":"3.31.3","@tiptap/extension-dropcursor":"3.31.3","@tiptap/extension-hard-break":"3.31.3","@tiptap/extension-node-range":"3.31.3","@tiptap/extension-text-align":"3.31.3","@tiptap/extension-text-style":"3.31.3","@tiptap/extension-typography":"3.31.3","@tiptap/extension-bubble-menu":"3.31.3","@tiptap/extension-bullet-list":"3.31.3","@tiptap/extension-drag-handle":"3.31.3","@tiptap/extension-list-keymap":"3.31.3","@tiptap/extension-ordered-list":"3.31.3","@tiptap/extension-collaboration":"3.31.3","@tiptap/extension-floating-menu":"3.31.3","@tiptap/extension-horizontal-rule":"3.31.3","@tiptap/extension-drag-handle-react":"3.31.3","@tiptap/extension-table-of-contents":"3.31.3","@tiptap/extension-code-block-lowlight":"3.31.3"},"repository":{"url":"git+https://github.com/blakaalab/kinkin-editor.git","type":"git"},"_npmVersion":"11.17.0","description":"A drop-in rich text editor for React - a Notion-style WYSIWYG built on Tiptap, with slash commands, tables, images, markdown I/O and streaming AI Assist.","directories":{},"sideEffects":["**/*.css","**/*.scss"],"_nodeVersion":"24.19.0","dependencies":{"clsx":"2.1.1","lowlight":"3.3.0","dompurify":"3.4.0","es-toolkit":"1.40.0","highlight.js":"11.11.1","lucide-react":"0.563.0","@ariakit/react":"0.4.15","tailwind-merge":"3.5.0","@floating-ui/react":"0.27.5","react-hotkeys-hook":"4.6.1","@radix-ui/react-slot":"1.2.0","@radix-ui/react-tooltip":"1.2.0","class-variance-authority":"0.7.1","@radix-ui/react-separator":"1.1.7"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"knip":"6.34.0","vite":"^7.3.6","react":"19.2.3","motion":"^13.2.0","react-dom":"19.2.3","@tiptap/pm":"3.31.3","typescript":"5.9.2","tailwindcss":"4.2.4","@tiptap/core":"3.31.3","@types/react":"19.2.7","@tiptap/react":"3.31.3","sass-embedded":"1.99.0","@biomejs/biome":"^2.4.12","vite-plugin-dts":"^5.1.0","@tiptap/markdown":"3.31.3","@types/react-dom":"19.2.3","@tailwindcss/vite":"4.2.4","@tiptap/extensions":"3.31.3","@tiptap/suggestion":"3.31.3","@tiptap/starter-kit":"3.31.3","@vitejs/plugin-react":"5.1.3","@tiptap/extension-list":"3.31.3","@tiptap/extension-emoji":"3.31.3","@tiptap/extension-image":"3.31.3","@tiptap/extension-table":"3.31.3","postcss-prefix-selector":"^2.2.0","@tiptap/extension-strike":"3.31.3","@tiptap/extension-history":"3.31.3","@tiptap/extension-mention":"3.31.3","@tiptap/extension-highlight":"3.31.3","@tiptap/extension-unique-id":"3.31.3","@tiptap/extension-code-block":"3.31.3","@tiptap/extension-text-align":"3.31.3","@tiptap/extension-text-style":"3.31.3","@tiptap/extension-typography":"3.31.3","@tiptap/extension-horizontal-rule":"3.31.3","@tiptap/extension-drag-handle-react":"3.31.3","@tiptap/extension-table-of-contents":"3.31.3","@tiptap/extension-code-block-lowlight":"3.31.3"},"peerDependencies":{"react":">=18","react-dom":">=18","@tiptap/pm":"~3.31.3","@tiptap/core":"~3.31.3","@tiptap/react":"~3.31.3","@tiptap/markdown":"~3.31.3","@tiptap/extensions":"~3.31.3","@tiptap/suggestion":"~3.31.3","@tiptap/starter-kit":"~3.31.3","@tiptap/extension-list":"~3.31.3","@tiptap/extension-emoji":"~3.31.3","@tiptap/extension-image":"~3.31.3","@tiptap/extension-table":"~3.31.3","@tiptap/extension-strike":"~3.31.3","@tiptap/extension-history":"~3.31.3","@tiptap/extension-mention":"~3.31.3","@tiptap/extension-highlight":"~3.31.3","@tiptap/extension-unique-id":"~3.31.3","@tiptap/extension-code-block":"~3.31.3","@tiptap/extension-text-align":"~3.31.3","@tiptap/extension-text-style":"~3.31.3","@tiptap/extension-typography":"~3.31.3","@tiptap/extension-horizontal-rule":"~3.31.3","@tiptap/extension-drag-handle-react":"~3.31.3","@tiptap/extension-table-of-contents":"~3.31.3","@tiptap/extension-code-block-lowlight":"~3.31.3"},"_npmOperationalInternal":{"tmp":"tmp/kinkin-editor_0.8.0_1790677975027_0.16383539977109307","host":"s3://npm-registry-packages-npm-production"}},"0.8.1":{"_id":"@blakaa/kinkin-editor@0.8.1","bugs":{"url":"https://github.com/blakaalab/kinkin-editor/issues"},"dist":{"shasum":"8fa14fdde2e84694f516b1d900ef9abaec019d5a","tarball":"https://registry.npmjs.org/@blakaa/kinkin-editor/-/kinkin-editor-0.8.1.tgz","fileCount":139,"integrity":"sha512-nL3WJ/QzFstYKQYoBjvCoUtS2NMa90ILsnS7IcA/lRDy3JpxirOiJK+QNr0d7LliUy9/RgX/+gYkTbyaIlkMKQ==","signatures":[{"sig":"MEQCICdsuVs43Tm8XVvlsDBsnOEMc/M9I6ALZ48pT0qTx+rgAiA+5lKWt+aCQE4Zf8UwTv7ZOVQNjO1ccLAPXiP7Om8ZRA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCp+Xu2JXJWMz87lQoRoSTR3XpEUdg5GWVLZ24a5vzW7wIhANyYSWFlrCZAmP2tbOwwcxUdhK5LPnQaJPd/8kCTLfA6"}],"unpackedSize":2931976},"main":"./dist/index.js","name":"@blakaa/kinkin-editor","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./content":{"types":"./dist/content.d.ts","import":"./dist/content.js"},"./style.css":"./dist/style.css","./content.css":"./dist/content.css","./package.json":"./package.json"},"gitHead":"9e5a88ed8ee3d2ab5c9cf267df1d5c502c360212","license":"MIT","scripts":{"dev":"vite","knip":"knip","lint":"biome lint","build":"tsc --noEmit && vite build --mode lib && node scripts/build-content-css.mjs","check":"biome check","format":"biome format --write","prepare":"npm run build","preview":"vite preview","check:fix":"biome check --fix","type-check":"tsc --noEmit","build:playground":"vite build"},"version":"0.8.1","_npmUser":{"name":"dqhuy","email":"dqhuy9@gmail.com"},"homepage":"https://github.com/blakaalab/kinkin-editor#readme","keywords":["rich-text-editor","react-rich-text-editor","wysiwyg","wysiwyg-editor","react","react-editor","tiptap","tiptap-react","prosemirror","markdown","markdown-editor","block-editor","notion","notion-like","slash-commands","text-editor","editor","ai","typescript"],"overrides":{"@tiptap/pm":"3.31.3","@tiptap/core":"3.31.3","@tiptap/react":"3.31.3","@tiptap/markdown":"3.31.3","@tiptap/extensions":"3.31.3","@tiptap/suggestion":"3.31.3","@tiptap/starter-kit":"3.31.3","@tiptap/extension-bold":"3.31.3","@tiptap/extension-code":"3.31.3","@tiptap/extension-link":"3.31.3","@tiptap/extension-list":"3.31.3","@tiptap/extension-text":"3.31.3","@tiptap/extension-emoji":"3.31.3","@tiptap/extension-image":"3.31.3","@tiptap/extension-table":"3.31.3","@tiptap/extension-italic":"3.31.3","@tiptap/extension-strike":"3.31.3","@tiptap/extension-heading":"3.31.3","@tiptap/extension-history":"3.31.3","@tiptap/extension-mention":"3.31.3","@tiptap/extension-document":"3.31.3","@tiptap/extension-gapcursor":"3.31.3","@tiptap/extension-highlight":"3.31.3","@tiptap/extension-list-item":"3.31.3","@tiptap/extension-paragraph":"3.31.3","@tiptap/extension-underline":"3.31.3","@tiptap/extension-unique-id":"3.31.3","@tiptap/extension-blockquote":"3.31.3","@tiptap/extension-code-block":"3.31.3","@tiptap/extension-dropcursor":"3.31.3","@tiptap/extension-hard-break":"3.31.3","@tiptap/extension-node-range":"3.31.3","@tiptap/extension-text-align":"3.31.3","@tiptap/extension-text-style":"3.31.3","@tiptap/extension-typography":"3.31.3","@tiptap/extension-bubble-menu":"3.31.3","@tiptap/extension-bullet-list":"3.31.3","@tiptap/extension-drag-handle":"3.31.3","@tiptap/extension-list-keymap":"3.31.3","@tiptap/extension-ordered-list":"3.31.3","@tiptap/extension-collaboration":"3.31.3","@tiptap/extension-floating-menu":"3.31.3","@tiptap/extension-horizontal-rule":"3.31.3","@tiptap/extension-drag-handle-react":"3.31.3","@tiptap/extension-table-of-contents":"3.31.3","@tiptap/extension-code-block-lowlight":"3.31.3"},"repository":{"url":"git+https://github.com/blakaalab/kinkin-editor.git","type":"git"},"_npmVersion":"11.19.0","description":"A drop-in rich text editor for React - a Notion-style WYSIWYG built on Tiptap, with slash commands, tables, images, markdown I/O and streaming AI Assist.","directories":{},"maintainers":[{"name":"dqhuy","email":"dqhuy9@gmail.com"}],"sideEffects":["**/*.css","**/*.scss"],"_nodeVersion":"24.21.0","dependencies":{"clsx":"2.1.1","lowlight":"3.3.0","dompurify":"3.4.0","es-toolkit":"1.40.0","highlight.js":"11.11.1","lucide-react":"0.563.0","@ariakit/react":"0.4.15","tailwind-merge":"3.5.0","@floating-ui/react":"0.27.5","react-hotkeys-hook":"4.6.1","@radix-ui/react-slot":"1.2.0","@radix-ui/react-tooltip":"1.2.0","class-variance-authority":"0.7.1","@radix-ui/react-separator":"1.1.7"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"knip":"6.34.0","vite":"^7.3.6","react":"19.2.3","motion":"^13.2.0","react-dom":"19.2.3","@tiptap/pm":"3.31.3","typescript":"5.9.2","tailwindcss":"4.2.4","@tiptap/core":"3.31.3","@types/react":"19.2.7","@tiptap/react":"3.31.3","sass-embedded":"1.99.0","@biomejs/biome":"^2.4.12","vite-plugin-dts":"^5.1.0","@tiptap/markdown":"3.31.3","@types/react-dom":"19.2.3","@tailwindcss/vite":"4.2.4","@tiptap/extensions":"3.31.3","@tiptap/suggestion":"3.31.3","@tiptap/starter-kit":"3.31.3","@vitejs/plugin-react":"5.1.3","@tiptap/extension-list":"3.31.3","@tiptap/extension-emoji":"3.31.3","@tiptap/extension-image":"3.31.3","@tiptap/extension-table":"3.31.3","postcss-prefix-selector":"^2.2.0","@tiptap/extension-strike":"3.31.3","@tiptap/extension-history":"3.31.3","@tiptap/extension-mention":"3.31.3","@tiptap/extension-highlight":"3.31.3","@tiptap/extension-unique-id":"3.31.3","@tiptap/extension-code-block":"3.31.3","@tiptap/extension-text-align":"3.31.3","@tiptap/extension-text-style":"3.31.3","@tiptap/extension-typography":"3.31.3","@tiptap/extension-horizontal-rule":"3.31.3","@tiptap/extension-drag-handle-react":"3.31.3","@tiptap/extension-table-of-contents":"3.31.3","@tiptap/extension-code-block-lowlight":"3.31.3"},"peerDependencies":{"react":">=18","react-dom":">=18","@tiptap/pm":"~3.31.3","@tiptap/core":"~3.31.3","@tiptap/react":"~3.31.3","@tiptap/markdown":"~3.31.3","@tiptap/extensions":"~3.31.3","@tiptap/suggestion":"~3.31.3","@tiptap/starter-kit":"~3.31.3","@tiptap/extension-list":"~3.31.3","@tiptap/extension-emoji":"~3.31.3","@tiptap/extension-image":"~3.31.3","@tiptap/extension-table":"~3.31.3","@tiptap/extension-strike":"~3.31.3","@tiptap/extension-history":"~3.31.3","@tiptap/extension-mention":"~3.31.3","@tiptap/extension-highlight":"~3.31.3","@tiptap/extension-unique-id":"~3.31.3","@tiptap/extension-code-block":"~3.31.3","@tiptap/extension-text-align":"~3.31.3","@tiptap/extension-text-style":"~3.31.3","@tiptap/extension-typography":"~3.31.3","@tiptap/extension-horizontal-rule":"~3.31.3","@tiptap/extension-drag-handle-react":"~3.31.3","@tiptap/extension-table-of-contents":"~3.31.3","@tiptap/extension-code-block-lowlight":"~3.31.3"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/kinkin-editor_0.8.1_1790911091728_0.2777655425946459"}}},"time":{"created":"2026-09-05T03:35:00.309Z","modified":"2026-10-02T03:18:12.051Z","0.1.0":"2026-09-05T03:35:00.713Z","0.2.0":"2026-09-07T06:36:16.208Z","0.5.0":"2026-09-08T03:03:19.171Z","0.5.1":"2026-09-08T04:03:40.423Z","0.5.5":"2026-09-08T05:03:36.508Z","0.6.0":"2026-09-08T11:31:16.341Z","0.6.1":"2026-09-08T11:44:20.079Z","0.6.2":"2026-09-09T04:10:45.573Z","0.6.3":"2026-09-09T09:36:37.515Z","0.6.4":"2026-09-09T10:53:24.833Z","0.7.0":"2026-09-11T09:30:00.032Z","0.8.0":"2026-09-29T10:32:55.151Z","0.8.1":"2026-10-02T03:18:11.895Z"},"bugs":{"url":"https://github.com/blakaalab/kinkin-editor/issues"},"license":"MIT","homepage":"https://github.com/blakaalab/kinkin-editor#readme","keywords":["rich-text-editor","react-rich-text-editor","wysiwyg","wysiwyg-editor","react","react-editor","tiptap","tiptap-react","prosemirror","markdown","markdown-editor","block-editor","notion","notion-like","slash-commands","text-editor","editor","ai","typescript"],"repository":{"url":"git+https://github.com/blakaalab/kinkin-editor.git","type":"git"},"description":"A drop-in rich text editor for React - a Notion-style WYSIWYG built on Tiptap, with slash commands, tables, images, markdown I/O and streaming AI Assist.","maintainers":[{"name":"dqhuy","email":"dqhuy9@gmail.com"}],"readme":"<p align=\"center\">\n  <img src=\"assets/banner.svg\" alt=\"Kinkin Editor - a drop-in rich text editor for React, built on Tiptap and ProseMirror\" width=\"100%\">\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/@blakaa/kinkin-editor\"><img src=\"https://img.shields.io/npm/v/@blakaa/kinkin-editor?color=green\" alt=\"npm version\"></a>\n  <a href=\"LICENSE\"><img src=\"https://img.shields.io/badge/license-MIT-blue.svg\" alt=\"MIT License\"></a>\n  <a href=\"https://react.dev\"><img src=\"https://img.shields.io/badge/react-18%20%7C%2019-149eca.svg\" alt=\"React 18 and 19\"></a>\n  <a href=\"https://tiptap.dev\"><img src=\"https://img.shields.io/badge/tiptap-3.31-000000.svg\" alt=\"Tiptap 3.31\"></a>\n  <a href=\"#api-reference\"><img src=\"https://img.shields.io/badge/types-included-3178c6.svg\" alt=\"TypeScript types included\"></a>\n</p>\n\n<p align=\"center\">\n  <strong>Languages:</strong>\n  English ·\n  <a href=\"docs/README.vi.md\">Tiếng Việt</a> ·\n  <a href=\"docs/README.zh-CN.md\">简体中文</a> ·\n  <a href=\"docs/README.ja.md\">日本語</a> ·\n  <a href=\"docs/README.ko.md\">한국어</a> ·\n  <a href=\"docs/README.es.md\">Español</a> ·\n  <a href=\"docs/README.pt-BR.md\">Português (Brasil)</a> ·\n  <a href=\"docs/README.fr.md\">Français</a> ·\n  <a href=\"docs/README.de.md\">Deutsch</a>\n</p>\n\n# Kinkin Editor\n\n**A drop-in rich text editor for React.** A Notion-style WYSIWYG built on\n[Tiptap](https://tiptap.dev) and ProseMirror: markdown in, markdown out (or\nHTML/JSON), with slash commands, tables, images, emoji, drag-to-reorder blocks, a\ntable of contents, and an AI Assist panel that streams from whatever LLM you\npoint it at.\n\n```bash\nnpm install @blakaa/kinkin-editor\n```\n\nIt's designed to go into a React app you already have: no global CSS reset, no\nrequired Tailwind setup, no provider to mount, and no backend assumptions — image\nupload and AI are plain callbacks you supply, or leave out.\n\n**[Live demo and playground →](https://blakaalab.github.io/kinkin-editor/)** ·\n[Setup guide](https://blakaalab.github.io/kinkin-editor/#/docs) ·\n[Releases](https://github.com/blakaalab/kinkin-editor/releases)\n\n- [Features](#features)\n- [Install](#install)\n- [Quick start](#quick-start)\n- [Using it with your own Tailwind CSS](#using-it-with-your-own-tailwind-css)\n- [Theming](#theming)\n- [API reference](#api-reference)\n- [Recipes](#recipes)\n- [Troubleshooting](#troubleshooting)\n- [Licence](#licence)\n- [Local development](#local-development)\n\n---\n\n## Features\n\n**Slash menu** (type `/`): Paragraph, Heading 1–4, Bullet list, Numbered list,\nTask list, Quote, Code, Emoji, Table, Image, Video, X post, Columns (2–4), Horizontal line.\n\n**Also built in**\n\n- Markdown in and markdown out — and paste markdown to convert it to rich content\n- Emoji picker on `:`\n- Drag handle on each block to reorder; `Mod-Shift-↑/↓` to move, `Mod-Shift-D` to duplicate\n- Tables with column/row controls and drag-to-reorder\n- Columns — 2 to 4 side by side, holding any block, stacking on narrow screens\n- Link editing, code blocks, task lists, highlights, typography substitutions\n- Text alignment, text colour and highlight colour, from the toolbar or the\n  selection toolbar\n- Image upload through a callback you supply\n- YouTube and TikTok embeds — from the slash menu, or paste a video link on an\n  empty line. Shorts and TikToks embed upright at 9:16. Saved as the link, in\n  markdown as `:::videoEmbed {src=\"…\"} :::`; the iframe is rebuilt from the\n  video id on every render, so a document can't carry any other iframe\n- X (Twitter) post embeds — `/x post` from the slash menu, paste a post link on\n  an empty line, or paste the embed code X gives you. Saved as the link, in\n  markdown as `:::tweetEmbed {src=\"…\"} :::`; like videos, the iframe is rebuilt\n  from the post id, and X's `widgets.js` never runs on your page\n- Video upload through a callback you supply — drop or paste a video file, or\n  use \"Upload file\" in the `/video` field. It plays in the browser's own player\n- Resizable images and videos — drag the handle on either side; the media\n  stays centred. The width is a percentage of the column, so it holds on a\n  narrower page, and markdown keeps it: `![alt](src){width=50%}` for images,\n  `width=\"50%\"` inside a video's `{…}`\n- Streaming AI Assist — improve, continue, summarize, fix grammar, simplify,\n  shorten, extend, translate, change tone, or a custom prompt\n- Table of contents via `onTocItemsChange`\n- Render saved documents without the editor — a schema-only extension list\n  and a display-only stylesheet, both published separately\n- Fixed, floating-selection and mobile toolbars\n- TypeScript types included; React 18 and 19\n\n---\n\n## Install\n\n```bash\nnpm install @blakaa/kinkin-editor    # or: pnpm add @blakaa/kinkin-editor\n```\n\nThat's the whole command on npm 7+ and pnpm: both read `peerDependencies` and\ninstall React and all 24 `@tiptap/*` packages for you — you don't list them.\n\n### Yarn\n\nYarn does **not** auto-install peer dependencies — neither Classic nor Berry. You\nneed them explicitly (brace expansion keeps it to two lines):\n\n```bash\nyarn add @blakaa/kinkin-editor\nyarn add react react-dom \\\n  @tiptap/{core,react,pm,starter-kit,extensions,markdown,suggestion,extension-code-block,extension-code-block-lowlight,extension-emoji,extension-highlight,extension-history,extension-horizontal-rule,extension-image,extension-list,extension-mention,extension-strike,extension-table,extension-table-of-contents,extension-text-align,extension-text-style,extension-typography,extension-unique-id,extension-drag-handle-react}\n```\n\n### Why peer dependencies at all\n\nReact and ProseMirror must be **single instances**. Two copies of React gives you\n\"Invalid hook call\"; two copies of ProseMirror gives you `RangeError: Invalid\ncontent` and plugin-key collisions, because `prosemirror-model` relies on\n`instanceof` checks and a shared schema registry. Declaring them as peers is what\nmakes package managers dedupe to one copy.\n\nEvery `@tiptap/*` peer is pinned to `~3.31.3` — the version this library is built\nand tested against. Mixed Tiptap minors fail at build time, so the range stays\ndeliberately narrow and moves as a whole on each verified Tiptap upgrade.\n\n---\n\n## Quick start\n\n```tsx\nimport { useState } from \"react\";\nimport { FixedToolbar, RichTextEditor } from \"@blakaa/kinkin-editor\";\nimport \"@blakaa/kinkin-editor/style.css\";\n\nexport function Editor() {\n  const [markdown, setMarkdown] = useState(\"# Hello\\n\\nStart typing.\");\n\n  return (\n    <div style={{ height: \"100vh\" }}>\n      <RichTextEditor\n        initialContent={markdown}\n        contentType=\"markdown\"\n        outputContentType=\"markdown\"\n        onChange={(value) => setMarkdown(value as string)}\n        toolbar={<FixedToolbar />}\n      />\n    </div>\n  );\n}\n```\n\nTwo things that trip people up:\n\n1. **Import the stylesheet.** `import \"@blakaa/kinkin-editor/style.css\"` once, anywhere\n   in your app. Without it the editor renders unstyled.\n2. **Give it a height.** The editor fills its container (`height: 100%`). In a\n   container with no height it collapses to nothing. Use a parent with an\n   explicit height, or `min-height: 0` if it's a flex child.\n\nThe toolbar is optional — omit `toolbar` for a chromeless editor, still driven by\nslash commands and the selection toolbar.\n\n---\n\n## Using it with your own Tailwind CSS\n\n**Short version: nothing to configure. It cannot collide with your styles.**\n\nShipping Tailwind from a library normally causes three problems. All three are\nhandled at build time:\n\n| Problem | How it's avoided |\n| --- | --- |\n| Utility collisions — the library's `.text-sm` silently restyling *your* app | Every rule is nested under `.kinkin-editor`, so it only applies inside the editor |\n| Token leakage — the library's `--color-*` overriding your theme on `:root` | `:root` is rewritten to `.kinkin-editor`; nothing lands on the document root |\n| Duplicate preflight — two base resets fighting | The stylesheet is built with **no preflight** |\n\nThe library's `.text-gray-500` and yours can hold completely different values and\nneither is disturbed. You don't need Tailwind at all — what ships is plain\ncompiled CSS.\n\nPortalled UI (menus, tooltips, drag previews, the mobile toolbar) would normally\nescape that scope by rendering into `document.body`. It's portalled into a\ncontainer that also carries the class, exposed as `getEditorPortalRoot()`.\n\n---\n\n## Theming\n\nOverride the design tokens on the scope class — they cascade to everything\ninside:\n\n```css\n.kinkin-editor {\n  --color-background: #ffffff;        /* surfaces: toolbar, menus, dialogs */\n  --color-foreground: #1f2937;        /* primary text */\n  --color-control: #4b5563;           /* toolbar and menu labels, icons */\n  --color-muted-foreground: #6b7280;  /* secondary text */\n  --color-placeholder: #9ca3af;       /* placeholders, hint icons */\n  --color-accent: #f3f4f6;            /* hover surfaces */\n  --color-accent-foreground: #111827; /* label on a button that is switched on */\n  --color-selected: #ede9fe;          /* surface of a button that is switched on */\n  --color-border: #e5e7eb;            /* dividers, colour-swatch outlines */\n  --color-border-subtle: #f3f4f6;     /* hairlines framing the chrome */\n  --color-ring: #7c3aed;              /* focus ring */\n  --color-primary-700: #7c3aed;       /* accent ramp: AI, upload, links */\n  --color-brand: #7c3aed;             /* table-of-contents active item */\n  --font-sans: \"Inter\", system-ui, sans-serif;\n}\n```\n\n`--tt-core-selection` and `--tt-core-selection-text` are a pair — theme both or\nneither. The text colour defaults to `currentColor`, so selected text keeps\nwhatever colour the surrounding text has; the background does not follow\nanything, so a dark theme that retints the text but leaves the default pale blue\nbackground will put light text on it. Setting the two together is the safe move:\n\n```css\nhtml.dark .kinkin-editor {\n  --tt-core-selection: #1e3a5f;\n  /* --tt-core-selection-text follows the editor's text colour on its own */\n}\n```\n\nA colour an author picks from the text-colour or highlight menu is **not** part\nof the theme: it is written into the document itself (`<span style=\"color: …\">`),\nso it renders the same everywhere and does not follow a consumer into a dark\ntheme. Theme tokens style the chrome and the content the author did not colour.\n\nEditor *content* styling (code blocks, tables, task lists, blockquotes) uses a\nseparate `--tt-core-*` namespace, overridable the same way:\n\n```css\n.kinkin-editor {\n  --tt-core-code-bg: #f5f5f5;\n  --tt-core-table-header-bg: #fafafa;\n  --tt-core-link: #2563eb;\n  --tt-core-selection: #dbeafe;\n  --tt-core-selection-text: #1f2937;  /* selected text; defaults to currentColor, i.e. the text's own colour */\n}\n```\n\n---\n\n## Rendering saved content without the editor\n\nA saved document is Tiptap JSON, and rendering it on a public page needs two\nthings the editor bundle is the wrong place to get: the schema, and the content\nCSS. Both ship separately.\n\n```tsx\n// A server component. No React editor, no editor stylesheet, no browser APIs.\nimport { generateHTML } from \"@tiptap/core\";\nimport { CONTENT_SCOPE_CLASS, createContentExtensions } from \"@blakaa/kinkin-editor/content\";\nimport \"@blakaa/kinkin-editor/content.css\";\n\nexport function Post({ doc }: { doc: JSONContent }) {\n  const html = generateHTML(doc, createContentExtensions());\n\n  return (\n    <article\n      className={CONTENT_SCOPE_CLASS}\n      dangerouslySetInnerHTML={{ __html: html }}\n    />\n  );\n}\n```\n\n### `createContentExtensions()`\n\nEvery extension that shapes the document — nodes, marks, and the attributes on\nthem — and nothing that only exists to make editing work. `<RichTextEditor />`\nbuilds its own list on top of this one, attaching node views and commands by\nname, so the two cannot drift: a node added for the editor is a node this list\nalready renders.\n\nIt is the list to pass to `generateHTML`, `generateJSON` or `getSchema`.\nHand-mirroring the editor's extensions is the thing to avoid — a document\ncontaining a node your list doesn't know throws\n`RangeError: Unknown node type`, and it throws for readers, in production, on\nwhichever post happened to use the new node.\n\nThree entries look surprising and are all load-bearing:\n\n| Entry | Why it's here |\n| --- | --- |\n| `ContentTable` | Emits `.table-node-wrapper > .table-scroll-container` around the table, matching what the node view builds while editing. Without it a wide table overflows the page and none of the table CSS applies. |\n| `ImageUploadNode` | The placeholder for an upload that never finished. Rare in saved content, and hidden on the page by `content.css`, but a document containing one still has to parse. |\n| `TableOfContents` | Owns the `id` and `data-toc-id` attributes on headings. Leave it out and every heading loses its anchor, breaking in-page links and any table of contents you render alongside. |\n\n`generateHTML` serializes through the DOM, so on a server it needs one —\ninstall `jsdom` or `happy-dom` and set `globalThis.document` before calling it.\nThat is a Tiptap requirement, not a kinkin one. (With jsdom you'll see one\n`HTMLCanvasElement's getContext() method` warning: it comes from the emoji\nextension's support probe, which correctly falls back to image emoji.)\n\n### Syntax highlighting\n\nThe editor colours code blocks with [lowlight](https://github.com/wooorm/lowlight)\n(highlight.js's `common` set, ~35 languages), and each block has a language\npicker; with none picked, the language is auto-detected, and \"Plain text\" turns\ncolouring off. The language is saved as `<code class=\"language-…\">` and as the\nfence in markdown.\n\nThe colours themselves are editor decorations, so they never reach the saved\ndocument — `generateHTML` gives you plain code. Colour it once the HTML is in a\nDOM with `highlightCodeBlocks`, which applies the same rules the editor does:\n\n```tsx\n\"use client\";\nimport { highlightCodeBlocks } from \"@blakaa/kinkin-editor/content\";\n\nconst ref = useRef<HTMLElement>(null);\nuseEffect(() => {\n  if (ref.current) highlightCodeBlocks(ref.current);\n}, [html]);\n\n<article ref={ref} className={CONTENT_SCOPE_CLASS} dangerouslySetInnerHTML={{ __html: html }} />\n```\n\nOn a server, run it on the same jsdom / happy-dom tree `generateHTML` needs, and\nserialise that tree's `innerHTML` instead. Running it twice is harmless.\n\n### X posts\n\nAn embedded post only knows its height once it has loaded, and reports it to\nthe page in a message. The editor listens for that; on a rendered page, call\n`resizeTweetEmbeds` once the HTML is in the DOM, or each post keeps\n`content.css`'s fixed stand-in height and may be cut off:\n\n```tsx\nimport { resizeTweetEmbeds } from \"@blakaa/kinkin-editor/content\";\n\nuseEffect(() => {\n  if (ref.current) return resizeTweetEmbeds(ref.current);\n}, []);\n```\n\nIt returns the function that stops listening. Posts added to the element later\nare picked up without calling it again.\n\n### `content.css`\n\nThe display half. Content rules only — no toolbars, menus, selection or drag\naffordances, no Tailwind utilities, no `@theme` block and no reset — and every\nrule comes from the same source as the editor's, so a rendered page and the\neditor cannot look different.\n\nThree properties worth knowing:\n\n**It is scoped to one opt-in class.** Nothing is styled until you put\n`kinkin-content` (exported as `CONTENT_SCOPE_CLASS`) on the element. Font size,\nfamily and text colour are inherited, never set — every measurement is in `em`,\nso the content scales with whatever your page gives it.\n\n**It sits in a cascade layer.** Everything is inside `@layer kinkin-content`.\nUnlayered CSS beats a layer regardless of specificity, so your own rules win\nwithout `!important` or specificity games:\n\n```css\n/* No layer, so this wins over content.css — the selector doesn't have to be\n   more specific than the one it's overriding. */\n.kinkin-content h1 { font-size: 2.5rem; }\n```\n\n**Every colour is a `--tt-core-*` variable, and the sheet declares none of\nthem.** Each is a `var()` with its default as the fallback, so setting a token\nanywhere above the content element themes it — including a dark mode:\n\n```css\nhtml.dark {\n  --tt-core-code-bg: #232733;\n  --tt-core-code-text: #e6e8ec;\n  --tt-core-codeblock-bg: #1b1f27;\n  --tt-core-blockquote: #5b6472;\n  --tt-core-link: #7ebcfd;\n  --tt-core-horizontal-line: #2b303a;\n  --tt-core-table-border: #2b303a;\n  --tt-core-table-header-bg: #1b1f27;\n  --tt-core-table-stripe-bg: #191c23;\n  --tt-core-tasklist-bg: #232733;\n  --tt-core-tasklist-border: #5b6472;\n  --tt-core-syntax-comment: #8b949e;\n  --tt-core-syntax-keyword: #ff7b72;\n  --tt-core-syntax-string: #a5d6ff;\n  --tt-core-syntax-constant: #79c0ff;\n  --tt-core-syntax-function: #d2a8ff;\n  --tt-core-syntax-builtin: #ffa657;\n  --tt-core-syntax-tag: #7ee787;\n  --tt-core-syntax-addition: #aff5b4;\n  --tt-core-syntax-deletion: #ffa198;\n}\n```\n\n(This is why the sheet declares no defaults on `.kinkin-content` itself: an\ninherited custom property is resolved by proximity, not specificity, so a\ndeclaration on the content element would silently beat one on `html.dark`.)\n\nTwo display-only decisions: task-list checkboxes are rendered but not\nclickable — a page has nowhere to save the click — and the `imageUpload`\nplaceholder is hidden, as are a video embed that never got its link and a\nvideo upload that never finished.\n\nOne constraint: the scope element is `white-space: pre-wrap`, matching the\neditor, so runs of spaces the author typed survive. Don't pretty-print or\nindent the generated HTML inside it — that indentation would render.\n\n---\n\n## API reference\n\n### `<RichTextEditor />`\n\n| Prop | Type | Default | Description |\n| --- | --- | --- | --- |\n| `initialContent` | `Content` | — | Starting content: a markdown/HTML string, or a Tiptap JSON doc. Changing it after mount replaces the content and clears undo history. |\n| `contentType` | `\"markdown\" \\| \"html\" \\| \"json\"` | `\"markdown\"` | How to interpret `initialContent`. |\n| `outputContentType` | `\"markdown\" \\| \"html\" \\| \"json\" \\| \"text\"` | `\"markdown\"` | What `onChange` emits. |\n| `onChange` | `(value, meta?) => void` | — | Fires on edit. `value` is a string, or `JSONContent` when output is `\"json\"`. Suppressed while AI is streaming. |\n| `editable` | `boolean` | `true` | `false` renders read-only — toolbars hide, content stays selectable. |\n| `toolbar` | `ReactNode` | — | Rendered above the content, inside the editor context. Pass `<FixedToolbar />`. |\n| `imageUploadHandler` | `EditorImageUploadHandler` | — | Enables image upload. Omit to disable. |\n| `videoUploadHandler` | `EditorVideoUploadHandler` | — | Enables video file upload. Omit to disable; YouTube and TikTok embeds work either way. |\n| `streamCompletion` | `StreamCompletionFn` | — | Enables AI Assist. Omit to disable. |\n| `aiMode` | `\"assist\" \\| \"chat\"` | — | Which AI button the selection toolbar shows. |\n| `onAiChatRequest` | `(message, selectedText) => void` | — | Called by the chat button when `aiMode=\"chat\"`. |\n| `onTocItemsChange` | `(items) => void` | — | Fires when headings change. Feed into `<ToC />`. |\n| `editorRef` | `RefObject<Editor \\| null>` | — | Escape hatch to the underlying Tiptap instance. |\n| `pageTitle` | `string` | — | Included as context in AI Assist prompts. |\n| `placeholder` | `string` | — | Empty-document placeholder. |\n\n`onChange`'s `meta.source` is `\"manual\"` for user typing and `\"conversation\"` for\nprogrammatic edits — useful for skipping autosave on non-user changes.\n\n### Toolbars\n\n| Export | Behaviour |\n| --- | --- |\n| `<FixedToolbar showAiAssist? className? />` | Persistent bar. Pass via the `toolbar` prop. Undo/redo, block type (paragraph, H1–H4), lists (bullet/numbered/task), bold/italic/underline/strike/code, text colour, highlight, alignment, blockquote, code block, horizontal rule, link, table, image, columns, slash trigger, AI Assist. |\n| `<SelectionToolbar />` | Floats over selected text on desktop. Rendered automatically. |\n| `<MobileToolbar />` | Docks to the bottom under 480px. Rendered automatically. |\n\nOnly `FixedToolbar` needs mounting; the other two are already wired in.\n\n### `<ToC />`\n\n```tsx\nconst [items, setItems] = useState([]);\nconst editorRef = useRef(null);\n\n<RichTextEditor editorRef={editorRef} onTocItemsChange={setItems} {...rest} />\n<ToC items={items} editor={editorRef.current} trackScroll />\n```\n\n| Prop | Type | Default | Description |\n| --- | --- | --- | --- |\n| `items` | `TableOfContentDataItem[]` | `[]` | From `onTocItemsChange`. |\n| `editor` | `Editor \\| null` | — | From `editorRef`. Needed to scroll to headings. |\n| `trackScroll` | `boolean` | `true` | Highlight the heading currently in view. It listens on *window* scroll, so turn it off if the editor sits in a scroll container of your own. |\n\n### `imageUploadHandler` — image uploads\n\nCalled for images dropped, pasted, or picked via the toolbar. Return the URL to\nembed; throwing marks the upload failed in the UI.\n\n```ts\nimport type { EditorImageUploadHandler } from \"@blakaa/kinkin-editor\";\n\nconst imageUploadHandler: EditorImageUploadHandler = {\n  upload: async (file: File, onProgress: (percent: number) => void) => {\n    const form = new FormData();\n    form.append(\"file\", file);\n\n    const res = await fetch(\"/api/upload\", { method: \"POST\", body: form });\n    if (!res.ok) throw new Error(\"Upload failed\");\n\n    onProgress(100);\n    return (await res.json()).url;\n  },\n};\n```\n\n### `videoUploadHandler` — video uploads\n\nCalled for video files dropped, pasted, or picked with \"Upload file\" in the\n`/video` field. Same contract as images: return the URL to play the video from,\nor throw to mark the upload failed. Two optional limits are checked before\n`upload` is called — a file outside them gets a block saying why, rather than\ndisappearing:\n\n```ts\nimport type { EditorVideoUploadHandler } from \"@blakaa/kinkin-editor\";\n\nconst videoUploadHandler: EditorVideoUploadHandler = {\n  upload: async (file, onProgress) => {\n    // Large files: prefer a signed URL and upload straight to storage, so the\n    // video never passes through your server.\n    const { uploadUrl, publicUrl } = await fetch(\"/api/video-upload-url\", {\n      method: \"POST\",\n      body: JSON.stringify({ name: file.name, type: file.type }),\n    }).then((res) => res.json());\n\n    const res = await fetch(uploadUrl, { method: \"PUT\", body: file });\n    if (!res.ok) throw new Error(\"Upload failed\");\n\n    onProgress(100);\n    return publicUrl;\n  },\n  maxSize: 200 * 1024 * 1024, // default 100 MB\n  accept: [\"video/mp4\", \"video/webm\"], // default MP4, WebM and Ogg\n};\n```\n\n`fetch` reports no upload progress; for a live progress bar, upload with\n`XMLHttpRequest` and call `onProgress` from `xhr.upload.onprogress`.\n\nQuickTime (`.mov`) is off by default: it uploads fine and then plays as a black\nbox in any browser without the codec inside it. Add `\"video/quicktime\"` to\n`accept` if you transcode on upload.\n\nThe returned URL may be absolute, a path on your own site, or a `blob:` URL.\n`javascript:` and other schemes are refused. In markdown a video is\n`:::video {src=\"…\"} :::`.\n\n### `streamCompletion` — streaming AI Assist\n\nPowers AI Assist. The library builds the prompt from the user's chosen action\n(`improve`, `continue`, `summarize`, `fix-grammar`, `simplify`, `shorten`,\n`extend`, `translate`, `tone`, `custom`) plus surrounding context. You own the\ntransport: call `onChunk` per token, `onComplete` when done, `onError` on\nfailure, and respect `signal` so the stop button works.\n\n```ts\nimport type { StreamCompletionFn } from \"@blakaa/kinkin-editor\";\n\nconst streamCompletion: StreamCompletionFn = async ({\n  message,\n  signal,\n  onChunk,\n  onComplete,\n  onError,\n}) => {\n  try {\n    const res = await fetch(\"/api/llm\", {\n      method: \"POST\",\n      body: JSON.stringify({ prompt: message }),\n      signal,\n    });\n\n    const reader = res.body!.getReader();\n    const decoder = new TextDecoder();\n\n    while (true) {\n      const { done, value } = await reader.read();\n      if (done) break;\n      onChunk(decoder.decode(value, { stream: true }));\n    }\n\n    onComplete();\n  } catch (e) {\n    if (!signal?.aborted) onError(e instanceof Error ? e.message : \"Failed\");\n  }\n};\n```\n\nOmit it and the AI buttons become no-ops, with a console warning.\n\n### Other exports\n\n| Export | Purpose |\n| --- | --- |\n| `useAiAssistStream(editor, options)` | The hook behind AI Assist, if you're composing your own editor. |\n| `getEditorPortalRoot()` | The scoped container portalled UI renders into. |\n| `EDITOR_SCOPE_CLASS` | `\"kinkin-editor\"` — the scope class, for tagging your own portals. |\n| `createContentExtensions()` | The schema-only extension list, for rendering saved documents. Also at `@blakaa/kinkin-editor/content`. |\n| `CONTENT_SCOPE_CLASS` | `\"kinkin-content\"` — the class `content.css` scopes to. |\n| `highlightCodeBlocks(element)` | Colours the code blocks of rendered HTML, the way the editor does. Also at `@blakaa/kinkin-editor/content`. |\n| `resizeTweetEmbeds(element)` | Lets the X posts in rendered HTML grow to fit; returns a cleanup function. Also at `@blakaa/kinkin-editor/content`. |\n| `<ToCItem />`, `<ToCEmptyState />` | The pieces `<ToC />` is built from, if you want your own outline layout. |\n| Types | `RichTextEditorProps`, `EditorImageUploadHandler`, `EditorVideoUploadHandler`, `StreamCompletionFn`, `StreamCompletionParams` |\n\n---\n\n## Recipes\n\n**Autosave, skipping programmatic edits**\n\n```tsx\n<RichTextEditor\n  onChange={(value, meta) => {\n    if (meta?.source === \"manual\") debouncedSave(value as string);\n  }}\n  {...rest}\n/>\n```\n\n**Read-only preview**\n\n```tsx\n<RichTextEditor initialContent={doc} editable={false} contentType=\"markdown\" />\n```\n\n**Reach the Tiptap instance**\n\n```tsx\nconst editorRef = useRef(null);\n<RichTextEditor editorRef={editorRef} {...rest} />;\n// later: editorRef.current?.commands.focus()\n```\n\n**HTML instead of markdown**\n\n```tsx\n<RichTextEditor contentType=\"html\" outputContentType=\"html\" {...rest} />\n```\n\n---\n\n## Troubleshooting\n\n### The editor renders unstyled\n\nYou didn't `import \"@blakaa/kinkin-editor/style.css\"`.\n\n### The editor has zero height\n\nIt fills its container. Give the parent an explicit height, or `min-height: 0` if\nit's a flex child.\n\n### Duplicate `@tiptap/core`, or `getPreviousBlockSibling is not exported`\n\nMore than one Tiptap version in your tree. Tiptap's own transitive `^3.31.3` ranges\ncan resolve to a newer minor and pull in a second copy of `@tiptap/core`. Pin the\nscope in your app's `package.json`:\n\n```json\n{\n  \"overrides\": {\n    \"@tiptap/core\": \"3.31.3\",\n    \"@tiptap/pm\": \"3.31.3\"\n  }\n}\n```\n\n(Yarn calls this `resolutions`.) Move the whole scope together when upgrading —\nmixed Tiptap minors fail at build time, not runtime.\n\n### Menus or tooltips appear unstyled\n\nSomething is rendering them outside the scoped container. Portal them into\n`getEditorPortalRoot()`.\n\n### My app's styles changed after adding the editor\n\nThey shouldn't — that's what the scoping prevents. If it happens, it's a bug\nworth reporting.\n\n### `RangeError: Unknown node type` when rendering saved JSON\n\nThe extension list you passed to `generateHTML` doesn't cover the document.\nPass `createContentExtensions()` from `@blakaa/kinkin-editor/content` rather\nthan a hand-written list — it is the same schema the editor runs, so it stays\ncorrect as the editor gains nodes. See\n[Rendering saved content without the editor](#rendering-saved-content-without-the-editor).\n\n### Rendered content is unstyled, or tables overflow the page\n\nImport `@blakaa/kinkin-editor/content.css` and put `kinkin-content` on the\nelement the HTML goes into — nothing in that sheet applies without the class.\nIf tables specifically overflow, the HTML was generated with a plain `Table`\nextension instead of the one in `createContentExtensions()`, which emits the\nscroll container the CSS needs.\n\n---\n\n## Licence\n\n[MIT](LICENSE). Use it, fork it, ship it commercially — just keep the copyright\nnotice.\n\n---\n\n## Local development\n\n```bash\ngit clone https://github.com/blakaalab/kinkin-editor.git\ncd kinkin-editor\nnpm install\n\nnpm run dev               # marketing site + docs + playground, with HMR\nnpm run build             # library → dist/\nnpm run build:playground  # the site → dist-playground/\nnpm run type-check\nnpm run check             # Biome lint + format\nnpm run check:fix\nnpm run knip              # unused files, exports and dependencies\n```\n\n`src/site/` is the public site — a landing page (`/`), a playground\n(`#/playground`) and the setup guide (`#/docs`), on a dependency-free hash\nrouter so it deploys to any static host without rewrite rules. Its demo\n`imageUploadHandler` (a local data-URL \"upload\") and `streamCompletion` (a fake\ntoken stream) live in `src/site/demo.ts` — reference only, not for shipping.\n\n### Layout\n\n```\nsrc/\n├── index.ts                     # library entry (public API)\n├── content.ts                   # entry for rendering saved documents\n├── lib.css                      # published stylesheet (no preflight, scoped)\n├── editor/\n│   ├── rich-text-editor.tsx     # the main component\n│   ├── content-extensions.ts    # the shared schema — both lists come from it\n│   ├── content-scope.ts         # the content.css scope class\n│   ├── fixed-toolbar.tsx        # persistent toolbar\n│   ├── selection-toolbar.tsx    # floating toolbar (desktop)\n│   ├── mobile-toolbar.tsx       # bottom toolbar (mobile)\n│   ├── toc.tsx                  # table of contents\n│   ├── portal-root.ts           # scoped container for portalled UI\n│   ├── use-ai-assist-stream.ts  # AI prompt building + streaming glue\n│   └── tiptap-cores/            # the editor engine (93 files)\n├── components/ui/               # shadcn primitives the engine uses\n├── lib/utils.ts                 # cn()\n├── styles/global.css            # site-only styles (has preflight)\n├── site/                        # the public site (not published)\n│   ├── router.tsx               # hash router, no dependencies\n│   ├── layout.tsx               # header, footer, page shell\n│   ├── code-block.tsx           # snippet rendering + copy button\n│   ├── logo-mark.tsx            # the K mark, traced to SVG paths\n│   ├── doc-parts.tsx            # docs primitives (tables, tabs, callouts)\n│   ├── demo.ts                  # demo upload/AI callbacks + sample content\n│   ├── magicui/                 # vendored MagicUI components (site-only)\n│   └── pages/                   # home.tsx, playground.tsx, docs.tsx\n└── app.tsx                      # route switch\n\nscripts/build-content-css.mjs    # compiles dist/content.css (see Build notes)\n```\n\n`tiptap-cores` is the bulk of it: extensions, node views, slash commands, the\nemoji picker, tables, drag handles, AI Assist UI, and markdown serialization.\n\n### Conventions\n\n- **Biome** for formatting, linting and import order. File names are kebab-case,\n  enforced by `useFilenamingConvention`.\n- `biome.json`'s `$schema` points into `node_modules` so editors resolve it\n  offline — it only works after `npm install`.\n- Two a11y rules are off (`useSemanticElements`, `noStaticElementInteractions`);\n  both flag correct ARIA in the toolbar and menu primitives. A clean lint run is\n  not evidence of full a11y coverage.\n- `useExhaustiveDependencies` is a warning. The remaining ones are all in\n  `tiptap-cores`; adding the missing deps changes when effects re-run, so they\n  need testing rather than a blind fix. `ui/ai-chat-button/index.tsx` omits\n  `editor.state.selection.from` and is the one worth investigating.\n\n### Build notes\n\n- The library build (`--mode lib`) externalises React and all `@tiptap/*`, then\n  scopes the CSS with `postcss-prefix-selector`. Both live in `vite.config.ts`.\n  It has two entries: `index.ts`, and `content.ts` for rendering saved documents\n  without the editor. What they share lands in a chunk both import.\n- `dist/content.css` is built by `scripts/build-content-css.mjs` rather than by\n  Vite, because the library build runs every stylesheet through\n  `postcss-prefix-selector` — which would nest the display rules under\n  `.kinkin-editor`, the one thing that sheet must not be. It has no Tailwind in\n  it, so Sass is the whole toolchain. It runs after `vite build`, which empties\n  `dist/`.\n- The content rules live in `@mixin content` blocks in the node stylesheets, so\n  `styles/index.scss` (the editor) and `styles/content.scss` (the page) include\n  the same rules rather than keeping two copies. `styles/_tokens.scss` holds\n  every `--tt-core-*` default: the editor sheet declares them on the scope\n  element, the display sheet inlines them as `var()` fallbacks so any ancestor\n  can theme it.\n- `lib.css` ends its `@source \"./\"` with `@source not \"./site\"`. Without it\n  Tailwind scans the site too and every site-only utility lands in the published\n  stylesheet — that alone was 31 kB of the 82 kB it used to be.\n- The landing page uses a few [MagicUI](https://magicui.design) components,\n  vendored into `src/site/magicui/` the way the project intends (copy-in, MIT).\n  Their keyframes live in `styles/global.css`, never in `lib.css`. `motion` is a\n  devDependency for the same reason: the site uses it, the package doesn't.\n- Two of them (Marquee, ShimmerButton) do **not** use MagicUI's Tailwind-v4\n  `--animate-*` theme variable, and must not. A custom property is substituted\n  where it is *declared* — on `:root` — and those values reference a\n  per-instance `--duration` / `--speed` that does not exist there, so the whole\n  declaration computes to the guaranteed-invalid value and the animation never\n  runs, silently. They carry `animate-[...]` arbitrary values instead, which put\n  the shorthand on the element where those variables are in scope.\n- `knip.config.ts` names the two entry points knip cannot infer — `src/content.ts`,\n  reached only through package.json's `exports` map, and `content.scss`, which\n  its build script names as a path rather than importing — and teaches it to\n  resolve Sass partials (`@use \"tokens\"` → `_tokens.scss`). Without that last\n  part knip skips stylesheets entirely and an orphaned partial goes unnoticed.\n- The playground builds to `dist-playground/` specifically so it can't overwrite\n  the `dist/` that gets published.\n- `.github/workflows/deploy-pages.yml` publishes `dist-playground/` to GitHub\n  Pages on every push to `main`. A project page is served from `/<repo>/`, so\n  the site build sets `base: \"/kinkin-editor/\"` — only for `command === \"build\"`,\n  which leaves `npm run dev` on `/`.\n- This repo pins `@tiptap/*` to exactly 3.31.3 via `overrides` to keep one copy\n  in its own tree. `overrides` are ignored when the package is installed\n  elsewhere, which is why the troubleshooting note above exists.\n\n### Stack\n\nReact 19, Vite 7, Tailwind 4, TypeScript 5.9, Tiptap 3.31. The site adds\n`motion` and vendored MagicUI components — neither ships in the package.\n","readmeFilename":"README.md"}