diff --git a/package-lock.json b/package-lock.json index 1539ce1..706d24e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,8 +22,13 @@ "formidable": "^3.5.2", "lucide-react": "^0.461.0", "multer": "^1.4.5-lts.1", + "nanoid": "^5.0.9", "next": "15.0.3", - "prosekit": "^0.10.2", + "prosekit": "^0.10.4", + "prosemirror-commands": "^1.6.2", + "prosemirror-model": "^1.24.0", + "prosemirror-state": "^1.4.3", + "prosemirror-view": "^1.37.0", "react": "^18.3.1", "react-dom": "^18.3.1", "react-draggable": "^4.4.6", @@ -124,24 +129,6 @@ "nanoid": "^5.0.8" } }, - "node_modules/@aria-ui/menu/node_modules/nanoid": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.0.8.tgz", - "integrity": "sha512-TcJPw+9RV9dibz1hHUzlLVy8N4X9TnwirAjrU08Juo6BNKggzVfP2ZJ/3ZUSq15Xl5i85i+Z89XBO90pB2PghQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.js" - }, - "engines": { - "node": "^18 || >=20" - } - }, "node_modules/@aria-ui/overlay": { "version": "0.0.21", "resolved": "https://registry.npmjs.org/@aria-ui/overlay/-/overlay-0.0.21.tgz", @@ -196,24 +183,6 @@ "nanoid": "^5.0.8" } }, - "node_modules/@aria-ui/tooltip/node_modules/nanoid": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.0.8.tgz", - "integrity": "sha512-TcJPw+9RV9dibz1hHUzlLVy8N4X9TnwirAjrU08Juo6BNKggzVfP2ZJ/3ZUSq15Xl5i85i+Z89XBO90pB2PghQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.js" - }, - "engines": { - "node": "^18 || >=20" - } - }, "node_modules/@ariatype/aria-attributes": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@ariatype/aria-attributes/-/aria-attributes-1.0.1.tgz", @@ -2141,13 +2110,13 @@ } }, "node_modules/@prosekit/basic": { - "version": "0.3.32", - "resolved": "https://registry.npmjs.org/@prosekit/basic/-/basic-0.3.32.tgz", - "integrity": "sha512-8d0vtrHYJ986rlCK9K8NGwQwsNZ/FFGAdK7cy1jcWJanJ/qpQKcIU/jmA/bHCPUg45v/9FCBqSyuDDjtcwjmOQ==", + "version": "0.3.33", + "resolved": "https://registry.npmjs.org/@prosekit/basic/-/basic-0.3.33.tgz", + "integrity": "sha512-+2bW1oN4TXddBAqdoGy4S1fTszdtl0VxgSBM1thwYVlDC0dh4gyGob4jiqh/2en69rW5myRNxwnVRZLuTnUIAw==", "license": "MIT", "dependencies": { "@prosekit/core": "^0.7.12", - "@prosekit/extensions": "^0.7.20", + "@prosekit/extensions": "^0.7.21", "@prosekit/pm": "^0.1.8" }, "funding": { @@ -2226,222 +2195,17 @@ } }, "node_modules/@prosekit/lit": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@prosekit/lit/-/lit-0.4.2.tgz", - "integrity": "sha512-0EvU464jwb/AnLIESLlEy4yhv5uyibJYI54OoeoU7Lr6F2TIxs2GeLuOcv2J25Vfxoh4hp4yxYoiEDGCBoOC8Q==", + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@prosekit/lit/-/lit-0.4.4.tgz", + "integrity": "sha512-7iGvU3VWuYiK0ad1dg8xXo2jFSkeaoUxrkuQuw6YQh9yQTpfk1HudAD66nKWc68ELP9f+HlfnBtTY/tO91efwg==", "license": "MIT", "dependencies": { - "@prosekit/web": "^0.4.2" + "@prosekit/web": "^0.5.0" }, "funding": { "url": "https://github.com/sponsors/ocavue" } }, - "node_modules/@prosekit/lit/node_modules/@aria-ui/listbox": { - "version": "0.0.19", - "resolved": "https://registry.npmjs.org/@aria-ui/listbox/-/listbox-0.0.19.tgz", - "integrity": "sha512-pBuuUcssYAbxmnR0rTUKFR2dXUys8E/9AV1LyMZ14zuZmESD6S1xCv5RAcDwJnblOItgAryoB+ed2vkE1719DA==", - "dependencies": { - "@aria-ui/collection": "^0.0.4", - "@aria-ui/core": "^0.0.19", - "@aria-ui/presence": "^0.0.15", - "immer": "^10.1.1" - } - }, - "node_modules/@prosekit/lit/node_modules/@aria-ui/menu": { - "version": "0.0.13", - "resolved": "https://registry.npmjs.org/@aria-ui/menu/-/menu-0.0.13.tgz", - "integrity": "sha512-vjUQrj3yPptMIB2NQtbfGvIKL9E/XoBCZWIZ6KhGM4/lJabXSnBejXYn0SHfIwBkCkD+mPEXMCwCh94s2HY1aQ==", - "dependencies": { - "@aria-ui/collection": "^0.0.4", - "@aria-ui/core": "^0.0.19", - "@aria-ui/overlay": "^0.0.20", - "@aria-ui/popover": "^0.0.21", - "@aria-ui/presence": "^0.0.15", - "nanoid": "^5.0.7" - } - }, - "node_modules/@prosekit/lit/node_modules/@aria-ui/overlay": { - "version": "0.0.20", - "resolved": "https://registry.npmjs.org/@aria-ui/overlay/-/overlay-0.0.20.tgz", - "integrity": "sha512-y+qax+YRueWRhkqs5jAd7OaQxILqWXxGP/085ENZexyZlv38BesCxqjMR6rbKfJjKTDp9cZIc3JdzZqzEHdSwA==", - "dependencies": { - "@aria-ui/core": "^0.0.19", - "@floating-ui/dom": "^1.6.11", - "@zag-js/dom-query": "^0.74.2" - } - }, - "node_modules/@prosekit/lit/node_modules/@aria-ui/overlay/node_modules/@zag-js/dom-query": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-0.74.2.tgz", - "integrity": "sha512-g+7wIdhT1nlY5yhQWoMDzin8uYoBXeQk8TNUj3GZH/1dTX9YC0vs7vz7rotzunLkEA7nEGfLNzdO5CRQBhGp0w==", - "license": "MIT" - }, - "node_modules/@prosekit/lit/node_modules/@aria-ui/popover": { - "version": "0.0.21", - "resolved": "https://registry.npmjs.org/@aria-ui/popover/-/popover-0.0.21.tgz", - "integrity": "sha512-Gh4pLjjH/3YZ7b1SzOUAJwof/Xw2WZNVLC//fZ9xT8b1ojA8ETYJ59hrw14VbvtYBsIO6GvogYEhJGFm23Nokg==", - "dependencies": { - "@aria-ui/core": "^0.0.19", - "@aria-ui/overlay": "^0.0.20", - "@aria-ui/presence": "^0.0.15", - "@zag-js/dismissable": "^0.74.2", - "@zag-js/tabbable": "^0.49.0" - } - }, - "node_modules/@prosekit/lit/node_modules/@aria-ui/presence": { - "version": "0.0.15", - "resolved": "https://registry.npmjs.org/@aria-ui/presence/-/presence-0.0.15.tgz", - "integrity": "sha512-by+KVcjuOGxu1PommpyFLfSTd0i/5Ee9kgvT+caObU8H2HK+sKZA00nCfKHhVNEWMjguKhaHu9g8P7Qa6mkgQw==", - "dependencies": { - "@aria-ui/core": "^0.0.19", - "@zag-js/dom-query": "^0.74.2" - } - }, - "node_modules/@prosekit/lit/node_modules/@aria-ui/presence/node_modules/@zag-js/dom-query": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-0.74.2.tgz", - "integrity": "sha512-g+7wIdhT1nlY5yhQWoMDzin8uYoBXeQk8TNUj3GZH/1dTX9YC0vs7vz7rotzunLkEA7nEGfLNzdO5CRQBhGp0w==", - "license": "MIT" - }, - "node_modules/@prosekit/lit/node_modules/@aria-ui/tooltip": { - "version": "0.0.23", - "resolved": "https://registry.npmjs.org/@aria-ui/tooltip/-/tooltip-0.0.23.tgz", - "integrity": "sha512-+Ide+mzWzp9Zlf5xgSveraZ8jCpkrjD6wzITYvIp4oApfZ87/Z7ZnQKIV94EzwRjp0atTJR0DG+M062i7tMrlA==", - "dependencies": { - "@aria-ui/core": "^0.0.19", - "@aria-ui/overlay": "^0.0.20", - "@aria-ui/presence": "^0.0.15", - "nanoid": "^5.0.7" - } - }, - "node_modules/@prosekit/lit/node_modules/@prosekit/web": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@prosekit/web/-/web-0.4.3.tgz", - "integrity": "sha512-X/D+Ys9Au9GOOXz9lF6uOExcdcmqsRPALu9bNLNWaj2oZLjt1Yz1WbuhYNlwgO9IOXAVAh/vWJwMGJLm7GJTjg==", - "license": "MIT", - "dependencies": { - "@aria-ui/collection": "^0.0.4", - "@aria-ui/core": "^0.0.19", - "@aria-ui/listbox": "^0.0.19", - "@aria-ui/menu": "^0.0.13", - "@aria-ui/overlay": "^0.0.20", - "@aria-ui/popover": "^0.0.21", - "@aria-ui/presence": "^0.0.15", - "@aria-ui/tooltip": "^0.0.23", - "@floating-ui/dom": "^1.6.11", - "@prosekit/core": "^0.7.12", - "@prosekit/extensions": "^0.7.21", - "@prosekit/pm": "^0.1.8", - "@zag-js/dom-query": "^0.76.0", - "just-map-values": "^3.2.0", - "just-omit": "^2.2.0", - "prosemirror-tables": "^1.6.0" - }, - "funding": { - "url": "https://github.com/sponsors/ocavue" - } - }, - "node_modules/@prosekit/lit/node_modules/@zag-js/dismissable": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/dismissable/-/dismissable-0.74.2.tgz", - "integrity": "sha512-Wl6n1lW1eTKKu5Kg+6jum9nZDXYGA86XL24Rip2aOScrAo2UGCA+nSIgg7GGO5qGs52iawITba38tAe6maZQLw==", - "license": "MIT", - "dependencies": { - "@zag-js/dom-event": "0.74.2", - "@zag-js/dom-query": "0.74.2", - "@zag-js/interact-outside": "0.74.2", - "@zag-js/utils": "0.74.2" - } - }, - "node_modules/@prosekit/lit/node_modules/@zag-js/dismissable/node_modules/@zag-js/dom-query": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-0.74.2.tgz", - "integrity": "sha512-g+7wIdhT1nlY5yhQWoMDzin8uYoBXeQk8TNUj3GZH/1dTX9YC0vs7vz7rotzunLkEA7nEGfLNzdO5CRQBhGp0w==", - "license": "MIT" - }, - "node_modules/@prosekit/lit/node_modules/@zag-js/dom-event": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/dom-event/-/dom-event-0.74.2.tgz", - "integrity": "sha512-duuwxowflkY7UUI+1vHr9ttzqn2JtJ+mgAS0cBeNmqtvK6XrNaHSrm0B4u4R/KIJ73Tx8TZGbmgN9Vwj/U2FrA==", - "license": "MIT", - "dependencies": { - "@zag-js/dom-query": "0.74.2", - "@zag-js/text-selection": "0.74.2", - "@zag-js/types": "0.74.2" - } - }, - "node_modules/@prosekit/lit/node_modules/@zag-js/dom-event/node_modules/@zag-js/dom-query": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-0.74.2.tgz", - "integrity": "sha512-g+7wIdhT1nlY5yhQWoMDzin8uYoBXeQk8TNUj3GZH/1dTX9YC0vs7vz7rotzunLkEA7nEGfLNzdO5CRQBhGp0w==", - "license": "MIT" - }, - "node_modules/@prosekit/lit/node_modules/@zag-js/interact-outside": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/interact-outside/-/interact-outside-0.74.2.tgz", - "integrity": "sha512-58ilkSC2UQw9PsFo4HKBrYcWC1+WRA8M6MqNf9MnxxOvAq+Y8APH0I6ExxAfUhLsk9v+6kPf0txM9MDoB0iNFA==", - "license": "MIT", - "dependencies": { - "@zag-js/dom-event": "0.74.2", - "@zag-js/dom-query": "0.74.2", - "@zag-js/utils": "0.74.2" - } - }, - "node_modules/@prosekit/lit/node_modules/@zag-js/interact-outside/node_modules/@zag-js/dom-query": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-0.74.2.tgz", - "integrity": "sha512-g+7wIdhT1nlY5yhQWoMDzin8uYoBXeQk8TNUj3GZH/1dTX9YC0vs7vz7rotzunLkEA7nEGfLNzdO5CRQBhGp0w==", - "license": "MIT" - }, - "node_modules/@prosekit/lit/node_modules/@zag-js/text-selection": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/text-selection/-/text-selection-0.74.2.tgz", - "integrity": "sha512-c7fLss1VyFnQzs5f5HNMD3qyJczH+SNzOgqMwU6apKpgYRLMMI0S4F03I/cyDQrCPZMcy6F/bl6zlQmdqb6WLQ==", - "license": "MIT", - "dependencies": { - "@zag-js/dom-query": "0.74.2" - } - }, - "node_modules/@prosekit/lit/node_modules/@zag-js/text-selection/node_modules/@zag-js/dom-query": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-0.74.2.tgz", - "integrity": "sha512-g+7wIdhT1nlY5yhQWoMDzin8uYoBXeQk8TNUj3GZH/1dTX9YC0vs7vz7rotzunLkEA7nEGfLNzdO5CRQBhGp0w==", - "license": "MIT" - }, - "node_modules/@prosekit/lit/node_modules/@zag-js/types": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/types/-/types-0.74.2.tgz", - "integrity": "sha512-UYdHh5Jj2LZZwP8Amm9YEoj9f/zYNWuuw+HRGCLZew6moHvKj/HHKJHLooPPjGztFIeRsnicE1mJ9E2bDllBaw==", - "license": "MIT", - "dependencies": { - "csstype": "3.1.3" - } - }, - "node_modules/@prosekit/lit/node_modules/@zag-js/utils": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/utils/-/utils-0.74.2.tgz", - "integrity": "sha512-WtIsNyDvnslCjtIIP/bRzx3bJMaT0cIgI3f+TgiFWhtQMlUZMpBkwkKVfvUwI5qcZ+ZOMeoonAWFqFECCb3h3g==", - "license": "MIT" - }, - "node_modules/@prosekit/lit/node_modules/nanoid": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.0.8.tgz", - "integrity": "sha512-TcJPw+9RV9dibz1hHUzlLVy8N4X9TnwirAjrU08Juo6BNKggzVfP2ZJ/3ZUSq15Xl5i85i+Z89XBO90pB2PghQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.js" - }, - "engines": { - "node": "^18 || >=20" - } - }, "node_modules/@prosekit/pm": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/@prosekit/pm/-/pm-0.1.8.tgz", @@ -2462,14 +2226,14 @@ } }, "node_modules/@prosekit/preact": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@prosekit/preact/-/preact-0.4.2.tgz", - "integrity": "sha512-25P+9x4IkCSSCw6WVNVkkiWkDOU5YDLNJ7UkV8tW7Q8y0T2zDEaWgmTlcvazuwIUgPhyIs2+AsFSf8wzGnl7dw==", + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@prosekit/preact/-/preact-0.4.4.tgz", + "integrity": "sha512-rnPBfTiz36/OvlZSNQC7KgnFfxSYlLc9jI7Kf0RrL7aeDdAyPOE5Hq9kdk7o2CdP4HaAKfB9MY5V95n9ZeR9Hg==", "license": "MIT", "dependencies": { "@prosekit/core": "^0.7.12", "@prosekit/pm": "^0.1.8", - "@prosekit/web": "^0.4.2", + "@prosekit/web": "^0.5.0", "react-merge-refs": "^2.1.1" }, "funding": { @@ -2484,211 +2248,6 @@ } } }, - "node_modules/@prosekit/preact/node_modules/@aria-ui/listbox": { - "version": "0.0.19", - "resolved": "https://registry.npmjs.org/@aria-ui/listbox/-/listbox-0.0.19.tgz", - "integrity": "sha512-pBuuUcssYAbxmnR0rTUKFR2dXUys8E/9AV1LyMZ14zuZmESD6S1xCv5RAcDwJnblOItgAryoB+ed2vkE1719DA==", - "dependencies": { - "@aria-ui/collection": "^0.0.4", - "@aria-ui/core": "^0.0.19", - "@aria-ui/presence": "^0.0.15", - "immer": "^10.1.1" - } - }, - "node_modules/@prosekit/preact/node_modules/@aria-ui/menu": { - "version": "0.0.13", - "resolved": "https://registry.npmjs.org/@aria-ui/menu/-/menu-0.0.13.tgz", - "integrity": "sha512-vjUQrj3yPptMIB2NQtbfGvIKL9E/XoBCZWIZ6KhGM4/lJabXSnBejXYn0SHfIwBkCkD+mPEXMCwCh94s2HY1aQ==", - "dependencies": { - "@aria-ui/collection": "^0.0.4", - "@aria-ui/core": "^0.0.19", - "@aria-ui/overlay": "^0.0.20", - "@aria-ui/popover": "^0.0.21", - "@aria-ui/presence": "^0.0.15", - "nanoid": "^5.0.7" - } - }, - "node_modules/@prosekit/preact/node_modules/@aria-ui/overlay": { - "version": "0.0.20", - "resolved": "https://registry.npmjs.org/@aria-ui/overlay/-/overlay-0.0.20.tgz", - "integrity": "sha512-y+qax+YRueWRhkqs5jAd7OaQxILqWXxGP/085ENZexyZlv38BesCxqjMR6rbKfJjKTDp9cZIc3JdzZqzEHdSwA==", - "dependencies": { - "@aria-ui/core": "^0.0.19", - "@floating-ui/dom": "^1.6.11", - "@zag-js/dom-query": "^0.74.2" - } - }, - "node_modules/@prosekit/preact/node_modules/@aria-ui/overlay/node_modules/@zag-js/dom-query": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-0.74.2.tgz", - "integrity": "sha512-g+7wIdhT1nlY5yhQWoMDzin8uYoBXeQk8TNUj3GZH/1dTX9YC0vs7vz7rotzunLkEA7nEGfLNzdO5CRQBhGp0w==", - "license": "MIT" - }, - "node_modules/@prosekit/preact/node_modules/@aria-ui/popover": { - "version": "0.0.21", - "resolved": "https://registry.npmjs.org/@aria-ui/popover/-/popover-0.0.21.tgz", - "integrity": "sha512-Gh4pLjjH/3YZ7b1SzOUAJwof/Xw2WZNVLC//fZ9xT8b1ojA8ETYJ59hrw14VbvtYBsIO6GvogYEhJGFm23Nokg==", - "dependencies": { - "@aria-ui/core": "^0.0.19", - "@aria-ui/overlay": "^0.0.20", - "@aria-ui/presence": "^0.0.15", - "@zag-js/dismissable": "^0.74.2", - "@zag-js/tabbable": "^0.49.0" - } - }, - "node_modules/@prosekit/preact/node_modules/@aria-ui/presence": { - "version": "0.0.15", - "resolved": "https://registry.npmjs.org/@aria-ui/presence/-/presence-0.0.15.tgz", - "integrity": "sha512-by+KVcjuOGxu1PommpyFLfSTd0i/5Ee9kgvT+caObU8H2HK+sKZA00nCfKHhVNEWMjguKhaHu9g8P7Qa6mkgQw==", - "dependencies": { - "@aria-ui/core": "^0.0.19", - "@zag-js/dom-query": "^0.74.2" - } - }, - "node_modules/@prosekit/preact/node_modules/@aria-ui/presence/node_modules/@zag-js/dom-query": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-0.74.2.tgz", - "integrity": "sha512-g+7wIdhT1nlY5yhQWoMDzin8uYoBXeQk8TNUj3GZH/1dTX9YC0vs7vz7rotzunLkEA7nEGfLNzdO5CRQBhGp0w==", - "license": "MIT" - }, - "node_modules/@prosekit/preact/node_modules/@aria-ui/tooltip": { - "version": "0.0.23", - "resolved": "https://registry.npmjs.org/@aria-ui/tooltip/-/tooltip-0.0.23.tgz", - "integrity": "sha512-+Ide+mzWzp9Zlf5xgSveraZ8jCpkrjD6wzITYvIp4oApfZ87/Z7ZnQKIV94EzwRjp0atTJR0DG+M062i7tMrlA==", - "dependencies": { - "@aria-ui/core": "^0.0.19", - "@aria-ui/overlay": "^0.0.20", - "@aria-ui/presence": "^0.0.15", - "nanoid": "^5.0.7" - } - }, - "node_modules/@prosekit/preact/node_modules/@prosekit/web": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@prosekit/web/-/web-0.4.3.tgz", - "integrity": "sha512-X/D+Ys9Au9GOOXz9lF6uOExcdcmqsRPALu9bNLNWaj2oZLjt1Yz1WbuhYNlwgO9IOXAVAh/vWJwMGJLm7GJTjg==", - "license": "MIT", - "dependencies": { - "@aria-ui/collection": "^0.0.4", - "@aria-ui/core": "^0.0.19", - "@aria-ui/listbox": "^0.0.19", - "@aria-ui/menu": "^0.0.13", - "@aria-ui/overlay": "^0.0.20", - "@aria-ui/popover": "^0.0.21", - "@aria-ui/presence": "^0.0.15", - "@aria-ui/tooltip": "^0.0.23", - "@floating-ui/dom": "^1.6.11", - "@prosekit/core": "^0.7.12", - "@prosekit/extensions": "^0.7.21", - "@prosekit/pm": "^0.1.8", - "@zag-js/dom-query": "^0.76.0", - "just-map-values": "^3.2.0", - "just-omit": "^2.2.0", - "prosemirror-tables": "^1.6.0" - }, - "funding": { - "url": "https://github.com/sponsors/ocavue" - } - }, - "node_modules/@prosekit/preact/node_modules/@zag-js/dismissable": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/dismissable/-/dismissable-0.74.2.tgz", - "integrity": "sha512-Wl6n1lW1eTKKu5Kg+6jum9nZDXYGA86XL24Rip2aOScrAo2UGCA+nSIgg7GGO5qGs52iawITba38tAe6maZQLw==", - "license": "MIT", - "dependencies": { - "@zag-js/dom-event": "0.74.2", - "@zag-js/dom-query": "0.74.2", - "@zag-js/interact-outside": "0.74.2", - "@zag-js/utils": "0.74.2" - } - }, - "node_modules/@prosekit/preact/node_modules/@zag-js/dismissable/node_modules/@zag-js/dom-query": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-0.74.2.tgz", - "integrity": "sha512-g+7wIdhT1nlY5yhQWoMDzin8uYoBXeQk8TNUj3GZH/1dTX9YC0vs7vz7rotzunLkEA7nEGfLNzdO5CRQBhGp0w==", - "license": "MIT" - }, - "node_modules/@prosekit/preact/node_modules/@zag-js/dom-event": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/dom-event/-/dom-event-0.74.2.tgz", - "integrity": "sha512-duuwxowflkY7UUI+1vHr9ttzqn2JtJ+mgAS0cBeNmqtvK6XrNaHSrm0B4u4R/KIJ73Tx8TZGbmgN9Vwj/U2FrA==", - "license": "MIT", - "dependencies": { - "@zag-js/dom-query": "0.74.2", - "@zag-js/text-selection": "0.74.2", - "@zag-js/types": "0.74.2" - } - }, - "node_modules/@prosekit/preact/node_modules/@zag-js/dom-event/node_modules/@zag-js/dom-query": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-0.74.2.tgz", - "integrity": "sha512-g+7wIdhT1nlY5yhQWoMDzin8uYoBXeQk8TNUj3GZH/1dTX9YC0vs7vz7rotzunLkEA7nEGfLNzdO5CRQBhGp0w==", - "license": "MIT" - }, - "node_modules/@prosekit/preact/node_modules/@zag-js/interact-outside": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/interact-outside/-/interact-outside-0.74.2.tgz", - "integrity": "sha512-58ilkSC2UQw9PsFo4HKBrYcWC1+WRA8M6MqNf9MnxxOvAq+Y8APH0I6ExxAfUhLsk9v+6kPf0txM9MDoB0iNFA==", - "license": "MIT", - "dependencies": { - "@zag-js/dom-event": "0.74.2", - "@zag-js/dom-query": "0.74.2", - "@zag-js/utils": "0.74.2" - } - }, - "node_modules/@prosekit/preact/node_modules/@zag-js/interact-outside/node_modules/@zag-js/dom-query": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-0.74.2.tgz", - "integrity": "sha512-g+7wIdhT1nlY5yhQWoMDzin8uYoBXeQk8TNUj3GZH/1dTX9YC0vs7vz7rotzunLkEA7nEGfLNzdO5CRQBhGp0w==", - "license": "MIT" - }, - "node_modules/@prosekit/preact/node_modules/@zag-js/text-selection": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/text-selection/-/text-selection-0.74.2.tgz", - "integrity": "sha512-c7fLss1VyFnQzs5f5HNMD3qyJczH+SNzOgqMwU6apKpgYRLMMI0S4F03I/cyDQrCPZMcy6F/bl6zlQmdqb6WLQ==", - "license": "MIT", - "dependencies": { - "@zag-js/dom-query": "0.74.2" - } - }, - "node_modules/@prosekit/preact/node_modules/@zag-js/text-selection/node_modules/@zag-js/dom-query": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-0.74.2.tgz", - "integrity": "sha512-g+7wIdhT1nlY5yhQWoMDzin8uYoBXeQk8TNUj3GZH/1dTX9YC0vs7vz7rotzunLkEA7nEGfLNzdO5CRQBhGp0w==", - "license": "MIT" - }, - "node_modules/@prosekit/preact/node_modules/@zag-js/types": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/types/-/types-0.74.2.tgz", - "integrity": "sha512-UYdHh5Jj2LZZwP8Amm9YEoj9f/zYNWuuw+HRGCLZew6moHvKj/HHKJHLooPPjGztFIeRsnicE1mJ9E2bDllBaw==", - "license": "MIT", - "dependencies": { - "csstype": "3.1.3" - } - }, - "node_modules/@prosekit/preact/node_modules/@zag-js/utils": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/utils/-/utils-0.74.2.tgz", - "integrity": "sha512-WtIsNyDvnslCjtIIP/bRzx3bJMaT0cIgI3f+TgiFWhtQMlUZMpBkwkKVfvUwI5qcZ+ZOMeoonAWFqFECCb3h3g==", - "license": "MIT" - }, - "node_modules/@prosekit/preact/node_modules/nanoid": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.0.8.tgz", - "integrity": "sha512-TcJPw+9RV9dibz1hHUzlLVy8N4X9TnwirAjrU08Juo6BNKggzVfP2ZJ/3ZUSq15Xl5i85i+Z89XBO90pB2PghQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.js" - }, - "engines": { - "node": "^18 || >=20" - } - }, "node_modules/@prosekit/react": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/@prosekit/react/-/react-0.4.4.tgz", @@ -2718,14 +2277,14 @@ } }, "node_modules/@prosekit/solid": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@prosekit/solid/-/solid-0.4.2.tgz", - "integrity": "sha512-MGWcFlqqGPdHM6B/+2JhrqAbkhQp64hpyLB9lK0HUVfj+wCNnO6Q8hihwsdLjIrp0k7Gkfsg7+cEXLOzcubJgQ==", + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@prosekit/solid/-/solid-0.4.4.tgz", + "integrity": "sha512-dsyqUkiSscj4LQueh+b8qdQ2bmCHhe7YVxl7QuM58ISxFWuhKW0v8F96epvPsviyMSVVLrUc58chMWeSIy2vEA==", "license": "MIT", "dependencies": { "@prosekit/core": "^0.7.12", "@prosekit/pm": "^0.1.8", - "@prosekit/web": "^0.4.2", + "@prosekit/web": "^0.5.0", "@prosemirror-adapter/solid": "^0.2.6" }, "funding": { @@ -2740,220 +2299,15 @@ } } }, - "node_modules/@prosekit/solid/node_modules/@aria-ui/listbox": { - "version": "0.0.19", - "resolved": "https://registry.npmjs.org/@aria-ui/listbox/-/listbox-0.0.19.tgz", - "integrity": "sha512-pBuuUcssYAbxmnR0rTUKFR2dXUys8E/9AV1LyMZ14zuZmESD6S1xCv5RAcDwJnblOItgAryoB+ed2vkE1719DA==", - "dependencies": { - "@aria-ui/collection": "^0.0.4", - "@aria-ui/core": "^0.0.19", - "@aria-ui/presence": "^0.0.15", - "immer": "^10.1.1" - } - }, - "node_modules/@prosekit/solid/node_modules/@aria-ui/menu": { - "version": "0.0.13", - "resolved": "https://registry.npmjs.org/@aria-ui/menu/-/menu-0.0.13.tgz", - "integrity": "sha512-vjUQrj3yPptMIB2NQtbfGvIKL9E/XoBCZWIZ6KhGM4/lJabXSnBejXYn0SHfIwBkCkD+mPEXMCwCh94s2HY1aQ==", - "dependencies": { - "@aria-ui/collection": "^0.0.4", - "@aria-ui/core": "^0.0.19", - "@aria-ui/overlay": "^0.0.20", - "@aria-ui/popover": "^0.0.21", - "@aria-ui/presence": "^0.0.15", - "nanoid": "^5.0.7" - } - }, - "node_modules/@prosekit/solid/node_modules/@aria-ui/overlay": { - "version": "0.0.20", - "resolved": "https://registry.npmjs.org/@aria-ui/overlay/-/overlay-0.0.20.tgz", - "integrity": "sha512-y+qax+YRueWRhkqs5jAd7OaQxILqWXxGP/085ENZexyZlv38BesCxqjMR6rbKfJjKTDp9cZIc3JdzZqzEHdSwA==", - "dependencies": { - "@aria-ui/core": "^0.0.19", - "@floating-ui/dom": "^1.6.11", - "@zag-js/dom-query": "^0.74.2" - } - }, - "node_modules/@prosekit/solid/node_modules/@aria-ui/overlay/node_modules/@zag-js/dom-query": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-0.74.2.tgz", - "integrity": "sha512-g+7wIdhT1nlY5yhQWoMDzin8uYoBXeQk8TNUj3GZH/1dTX9YC0vs7vz7rotzunLkEA7nEGfLNzdO5CRQBhGp0w==", - "license": "MIT" - }, - "node_modules/@prosekit/solid/node_modules/@aria-ui/popover": { - "version": "0.0.21", - "resolved": "https://registry.npmjs.org/@aria-ui/popover/-/popover-0.0.21.tgz", - "integrity": "sha512-Gh4pLjjH/3YZ7b1SzOUAJwof/Xw2WZNVLC//fZ9xT8b1ojA8ETYJ59hrw14VbvtYBsIO6GvogYEhJGFm23Nokg==", - "dependencies": { - "@aria-ui/core": "^0.0.19", - "@aria-ui/overlay": "^0.0.20", - "@aria-ui/presence": "^0.0.15", - "@zag-js/dismissable": "^0.74.2", - "@zag-js/tabbable": "^0.49.0" - } - }, - "node_modules/@prosekit/solid/node_modules/@aria-ui/presence": { - "version": "0.0.15", - "resolved": "https://registry.npmjs.org/@aria-ui/presence/-/presence-0.0.15.tgz", - "integrity": "sha512-by+KVcjuOGxu1PommpyFLfSTd0i/5Ee9kgvT+caObU8H2HK+sKZA00nCfKHhVNEWMjguKhaHu9g8P7Qa6mkgQw==", - "dependencies": { - "@aria-ui/core": "^0.0.19", - "@zag-js/dom-query": "^0.74.2" - } - }, - "node_modules/@prosekit/solid/node_modules/@aria-ui/presence/node_modules/@zag-js/dom-query": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-0.74.2.tgz", - "integrity": "sha512-g+7wIdhT1nlY5yhQWoMDzin8uYoBXeQk8TNUj3GZH/1dTX9YC0vs7vz7rotzunLkEA7nEGfLNzdO5CRQBhGp0w==", - "license": "MIT" - }, - "node_modules/@prosekit/solid/node_modules/@aria-ui/tooltip": { - "version": "0.0.23", - "resolved": "https://registry.npmjs.org/@aria-ui/tooltip/-/tooltip-0.0.23.tgz", - "integrity": "sha512-+Ide+mzWzp9Zlf5xgSveraZ8jCpkrjD6wzITYvIp4oApfZ87/Z7ZnQKIV94EzwRjp0atTJR0DG+M062i7tMrlA==", - "dependencies": { - "@aria-ui/core": "^0.0.19", - "@aria-ui/overlay": "^0.0.20", - "@aria-ui/presence": "^0.0.15", - "nanoid": "^5.0.7" - } - }, - "node_modules/@prosekit/solid/node_modules/@prosekit/web": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@prosekit/web/-/web-0.4.3.tgz", - "integrity": "sha512-X/D+Ys9Au9GOOXz9lF6uOExcdcmqsRPALu9bNLNWaj2oZLjt1Yz1WbuhYNlwgO9IOXAVAh/vWJwMGJLm7GJTjg==", - "license": "MIT", - "dependencies": { - "@aria-ui/collection": "^0.0.4", - "@aria-ui/core": "^0.0.19", - "@aria-ui/listbox": "^0.0.19", - "@aria-ui/menu": "^0.0.13", - "@aria-ui/overlay": "^0.0.20", - "@aria-ui/popover": "^0.0.21", - "@aria-ui/presence": "^0.0.15", - "@aria-ui/tooltip": "^0.0.23", - "@floating-ui/dom": "^1.6.11", - "@prosekit/core": "^0.7.12", - "@prosekit/extensions": "^0.7.21", - "@prosekit/pm": "^0.1.8", - "@zag-js/dom-query": "^0.76.0", - "just-map-values": "^3.2.0", - "just-omit": "^2.2.0", - "prosemirror-tables": "^1.6.0" - }, - "funding": { - "url": "https://github.com/sponsors/ocavue" - } - }, - "node_modules/@prosekit/solid/node_modules/@zag-js/dismissable": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/dismissable/-/dismissable-0.74.2.tgz", - "integrity": "sha512-Wl6n1lW1eTKKu5Kg+6jum9nZDXYGA86XL24Rip2aOScrAo2UGCA+nSIgg7GGO5qGs52iawITba38tAe6maZQLw==", - "license": "MIT", - "dependencies": { - "@zag-js/dom-event": "0.74.2", - "@zag-js/dom-query": "0.74.2", - "@zag-js/interact-outside": "0.74.2", - "@zag-js/utils": "0.74.2" - } - }, - "node_modules/@prosekit/solid/node_modules/@zag-js/dismissable/node_modules/@zag-js/dom-query": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-0.74.2.tgz", - "integrity": "sha512-g+7wIdhT1nlY5yhQWoMDzin8uYoBXeQk8TNUj3GZH/1dTX9YC0vs7vz7rotzunLkEA7nEGfLNzdO5CRQBhGp0w==", - "license": "MIT" - }, - "node_modules/@prosekit/solid/node_modules/@zag-js/dom-event": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/dom-event/-/dom-event-0.74.2.tgz", - "integrity": "sha512-duuwxowflkY7UUI+1vHr9ttzqn2JtJ+mgAS0cBeNmqtvK6XrNaHSrm0B4u4R/KIJ73Tx8TZGbmgN9Vwj/U2FrA==", - "license": "MIT", - "dependencies": { - "@zag-js/dom-query": "0.74.2", - "@zag-js/text-selection": "0.74.2", - "@zag-js/types": "0.74.2" - } - }, - "node_modules/@prosekit/solid/node_modules/@zag-js/dom-event/node_modules/@zag-js/dom-query": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-0.74.2.tgz", - "integrity": "sha512-g+7wIdhT1nlY5yhQWoMDzin8uYoBXeQk8TNUj3GZH/1dTX9YC0vs7vz7rotzunLkEA7nEGfLNzdO5CRQBhGp0w==", - "license": "MIT" - }, - "node_modules/@prosekit/solid/node_modules/@zag-js/interact-outside": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/interact-outside/-/interact-outside-0.74.2.tgz", - "integrity": "sha512-58ilkSC2UQw9PsFo4HKBrYcWC1+WRA8M6MqNf9MnxxOvAq+Y8APH0I6ExxAfUhLsk9v+6kPf0txM9MDoB0iNFA==", - "license": "MIT", - "dependencies": { - "@zag-js/dom-event": "0.74.2", - "@zag-js/dom-query": "0.74.2", - "@zag-js/utils": "0.74.2" - } - }, - "node_modules/@prosekit/solid/node_modules/@zag-js/interact-outside/node_modules/@zag-js/dom-query": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-0.74.2.tgz", - "integrity": "sha512-g+7wIdhT1nlY5yhQWoMDzin8uYoBXeQk8TNUj3GZH/1dTX9YC0vs7vz7rotzunLkEA7nEGfLNzdO5CRQBhGp0w==", - "license": "MIT" - }, - "node_modules/@prosekit/solid/node_modules/@zag-js/text-selection": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/text-selection/-/text-selection-0.74.2.tgz", - "integrity": "sha512-c7fLss1VyFnQzs5f5HNMD3qyJczH+SNzOgqMwU6apKpgYRLMMI0S4F03I/cyDQrCPZMcy6F/bl6zlQmdqb6WLQ==", - "license": "MIT", - "dependencies": { - "@zag-js/dom-query": "0.74.2" - } - }, - "node_modules/@prosekit/solid/node_modules/@zag-js/text-selection/node_modules/@zag-js/dom-query": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-0.74.2.tgz", - "integrity": "sha512-g+7wIdhT1nlY5yhQWoMDzin8uYoBXeQk8TNUj3GZH/1dTX9YC0vs7vz7rotzunLkEA7nEGfLNzdO5CRQBhGp0w==", - "license": "MIT" - }, - "node_modules/@prosekit/solid/node_modules/@zag-js/types": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/types/-/types-0.74.2.tgz", - "integrity": "sha512-UYdHh5Jj2LZZwP8Amm9YEoj9f/zYNWuuw+HRGCLZew6moHvKj/HHKJHLooPPjGztFIeRsnicE1mJ9E2bDllBaw==", - "license": "MIT", - "dependencies": { - "csstype": "3.1.3" - } - }, - "node_modules/@prosekit/solid/node_modules/@zag-js/utils": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/utils/-/utils-0.74.2.tgz", - "integrity": "sha512-WtIsNyDvnslCjtIIP/bRzx3bJMaT0cIgI3f+TgiFWhtQMlUZMpBkwkKVfvUwI5qcZ+ZOMeoonAWFqFECCb3h3g==", - "license": "MIT" - }, - "node_modules/@prosekit/solid/node_modules/nanoid": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.0.8.tgz", - "integrity": "sha512-TcJPw+9RV9dibz1hHUzlLVy8N4X9TnwirAjrU08Juo6BNKggzVfP2ZJ/3ZUSq15Xl5i85i+Z89XBO90pB2PghQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.js" - }, - "engines": { - "node": "^18 || >=20" - } - }, "node_modules/@prosekit/svelte": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@prosekit/svelte/-/svelte-0.5.2.tgz", - "integrity": "sha512-bmXmDr+QxIO6GkbwS7kp3M1IWm69pLwzTjttaAsnCwW6m09Bwxik796kSut7dKYr0hVzDdrN8LOrAowd8d1zbQ==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@prosekit/svelte/-/svelte-0.5.4.tgz", + "integrity": "sha512-10w1ZLbCQ38nV3480gm34B0DXKFDLqMUzoL20NrmtYaTz/7jvBMaWZTlzrrD1QaIRYQfW28SGhZFC6JxQ2QQLw==", "license": "MIT", "dependencies": { "@prosekit/core": "^0.7.12", "@prosekit/pm": "^0.1.8", - "@prosekit/web": "^0.4.2", + "@prosekit/web": "^0.5.0", "@prosemirror-adapter/svelte": "^0.2.6" }, "funding": { @@ -2968,220 +2322,15 @@ } } }, - "node_modules/@prosekit/svelte/node_modules/@aria-ui/listbox": { - "version": "0.0.19", - "resolved": "https://registry.npmjs.org/@aria-ui/listbox/-/listbox-0.0.19.tgz", - "integrity": "sha512-pBuuUcssYAbxmnR0rTUKFR2dXUys8E/9AV1LyMZ14zuZmESD6S1xCv5RAcDwJnblOItgAryoB+ed2vkE1719DA==", - "dependencies": { - "@aria-ui/collection": "^0.0.4", - "@aria-ui/core": "^0.0.19", - "@aria-ui/presence": "^0.0.15", - "immer": "^10.1.1" - } - }, - "node_modules/@prosekit/svelte/node_modules/@aria-ui/menu": { - "version": "0.0.13", - "resolved": "https://registry.npmjs.org/@aria-ui/menu/-/menu-0.0.13.tgz", - "integrity": "sha512-vjUQrj3yPptMIB2NQtbfGvIKL9E/XoBCZWIZ6KhGM4/lJabXSnBejXYn0SHfIwBkCkD+mPEXMCwCh94s2HY1aQ==", - "dependencies": { - "@aria-ui/collection": "^0.0.4", - "@aria-ui/core": "^0.0.19", - "@aria-ui/overlay": "^0.0.20", - "@aria-ui/popover": "^0.0.21", - "@aria-ui/presence": "^0.0.15", - "nanoid": "^5.0.7" - } - }, - "node_modules/@prosekit/svelte/node_modules/@aria-ui/overlay": { - "version": "0.0.20", - "resolved": "https://registry.npmjs.org/@aria-ui/overlay/-/overlay-0.0.20.tgz", - "integrity": "sha512-y+qax+YRueWRhkqs5jAd7OaQxILqWXxGP/085ENZexyZlv38BesCxqjMR6rbKfJjKTDp9cZIc3JdzZqzEHdSwA==", - "dependencies": { - "@aria-ui/core": "^0.0.19", - "@floating-ui/dom": "^1.6.11", - "@zag-js/dom-query": "^0.74.2" - } - }, - "node_modules/@prosekit/svelte/node_modules/@aria-ui/overlay/node_modules/@zag-js/dom-query": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-0.74.2.tgz", - "integrity": "sha512-g+7wIdhT1nlY5yhQWoMDzin8uYoBXeQk8TNUj3GZH/1dTX9YC0vs7vz7rotzunLkEA7nEGfLNzdO5CRQBhGp0w==", - "license": "MIT" - }, - "node_modules/@prosekit/svelte/node_modules/@aria-ui/popover": { - "version": "0.0.21", - "resolved": "https://registry.npmjs.org/@aria-ui/popover/-/popover-0.0.21.tgz", - "integrity": "sha512-Gh4pLjjH/3YZ7b1SzOUAJwof/Xw2WZNVLC//fZ9xT8b1ojA8ETYJ59hrw14VbvtYBsIO6GvogYEhJGFm23Nokg==", - "dependencies": { - "@aria-ui/core": "^0.0.19", - "@aria-ui/overlay": "^0.0.20", - "@aria-ui/presence": "^0.0.15", - "@zag-js/dismissable": "^0.74.2", - "@zag-js/tabbable": "^0.49.0" - } - }, - "node_modules/@prosekit/svelte/node_modules/@aria-ui/presence": { - "version": "0.0.15", - "resolved": "https://registry.npmjs.org/@aria-ui/presence/-/presence-0.0.15.tgz", - "integrity": "sha512-by+KVcjuOGxu1PommpyFLfSTd0i/5Ee9kgvT+caObU8H2HK+sKZA00nCfKHhVNEWMjguKhaHu9g8P7Qa6mkgQw==", - "dependencies": { - "@aria-ui/core": "^0.0.19", - "@zag-js/dom-query": "^0.74.2" - } - }, - "node_modules/@prosekit/svelte/node_modules/@aria-ui/presence/node_modules/@zag-js/dom-query": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-0.74.2.tgz", - "integrity": "sha512-g+7wIdhT1nlY5yhQWoMDzin8uYoBXeQk8TNUj3GZH/1dTX9YC0vs7vz7rotzunLkEA7nEGfLNzdO5CRQBhGp0w==", - "license": "MIT" - }, - "node_modules/@prosekit/svelte/node_modules/@aria-ui/tooltip": { - "version": "0.0.23", - "resolved": "https://registry.npmjs.org/@aria-ui/tooltip/-/tooltip-0.0.23.tgz", - "integrity": "sha512-+Ide+mzWzp9Zlf5xgSveraZ8jCpkrjD6wzITYvIp4oApfZ87/Z7ZnQKIV94EzwRjp0atTJR0DG+M062i7tMrlA==", - "dependencies": { - "@aria-ui/core": "^0.0.19", - "@aria-ui/overlay": "^0.0.20", - "@aria-ui/presence": "^0.0.15", - "nanoid": "^5.0.7" - } - }, - "node_modules/@prosekit/svelte/node_modules/@prosekit/web": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@prosekit/web/-/web-0.4.3.tgz", - "integrity": "sha512-X/D+Ys9Au9GOOXz9lF6uOExcdcmqsRPALu9bNLNWaj2oZLjt1Yz1WbuhYNlwgO9IOXAVAh/vWJwMGJLm7GJTjg==", - "license": "MIT", - "dependencies": { - "@aria-ui/collection": "^0.0.4", - "@aria-ui/core": "^0.0.19", - "@aria-ui/listbox": "^0.0.19", - "@aria-ui/menu": "^0.0.13", - "@aria-ui/overlay": "^0.0.20", - "@aria-ui/popover": "^0.0.21", - "@aria-ui/presence": "^0.0.15", - "@aria-ui/tooltip": "^0.0.23", - "@floating-ui/dom": "^1.6.11", - "@prosekit/core": "^0.7.12", - "@prosekit/extensions": "^0.7.21", - "@prosekit/pm": "^0.1.8", - "@zag-js/dom-query": "^0.76.0", - "just-map-values": "^3.2.0", - "just-omit": "^2.2.0", - "prosemirror-tables": "^1.6.0" - }, - "funding": { - "url": "https://github.com/sponsors/ocavue" - } - }, - "node_modules/@prosekit/svelte/node_modules/@zag-js/dismissable": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/dismissable/-/dismissable-0.74.2.tgz", - "integrity": "sha512-Wl6n1lW1eTKKu5Kg+6jum9nZDXYGA86XL24Rip2aOScrAo2UGCA+nSIgg7GGO5qGs52iawITba38tAe6maZQLw==", - "license": "MIT", - "dependencies": { - "@zag-js/dom-event": "0.74.2", - "@zag-js/dom-query": "0.74.2", - "@zag-js/interact-outside": "0.74.2", - "@zag-js/utils": "0.74.2" - } - }, - "node_modules/@prosekit/svelte/node_modules/@zag-js/dismissable/node_modules/@zag-js/dom-query": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-0.74.2.tgz", - "integrity": "sha512-g+7wIdhT1nlY5yhQWoMDzin8uYoBXeQk8TNUj3GZH/1dTX9YC0vs7vz7rotzunLkEA7nEGfLNzdO5CRQBhGp0w==", - "license": "MIT" - }, - "node_modules/@prosekit/svelte/node_modules/@zag-js/dom-event": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/dom-event/-/dom-event-0.74.2.tgz", - "integrity": "sha512-duuwxowflkY7UUI+1vHr9ttzqn2JtJ+mgAS0cBeNmqtvK6XrNaHSrm0B4u4R/KIJ73Tx8TZGbmgN9Vwj/U2FrA==", - "license": "MIT", - "dependencies": { - "@zag-js/dom-query": "0.74.2", - "@zag-js/text-selection": "0.74.2", - "@zag-js/types": "0.74.2" - } - }, - "node_modules/@prosekit/svelte/node_modules/@zag-js/dom-event/node_modules/@zag-js/dom-query": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-0.74.2.tgz", - "integrity": "sha512-g+7wIdhT1nlY5yhQWoMDzin8uYoBXeQk8TNUj3GZH/1dTX9YC0vs7vz7rotzunLkEA7nEGfLNzdO5CRQBhGp0w==", - "license": "MIT" - }, - "node_modules/@prosekit/svelte/node_modules/@zag-js/interact-outside": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/interact-outside/-/interact-outside-0.74.2.tgz", - "integrity": "sha512-58ilkSC2UQw9PsFo4HKBrYcWC1+WRA8M6MqNf9MnxxOvAq+Y8APH0I6ExxAfUhLsk9v+6kPf0txM9MDoB0iNFA==", - "license": "MIT", - "dependencies": { - "@zag-js/dom-event": "0.74.2", - "@zag-js/dom-query": "0.74.2", - "@zag-js/utils": "0.74.2" - } - }, - "node_modules/@prosekit/svelte/node_modules/@zag-js/interact-outside/node_modules/@zag-js/dom-query": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-0.74.2.tgz", - "integrity": "sha512-g+7wIdhT1nlY5yhQWoMDzin8uYoBXeQk8TNUj3GZH/1dTX9YC0vs7vz7rotzunLkEA7nEGfLNzdO5CRQBhGp0w==", - "license": "MIT" - }, - "node_modules/@prosekit/svelte/node_modules/@zag-js/text-selection": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/text-selection/-/text-selection-0.74.2.tgz", - "integrity": "sha512-c7fLss1VyFnQzs5f5HNMD3qyJczH+SNzOgqMwU6apKpgYRLMMI0S4F03I/cyDQrCPZMcy6F/bl6zlQmdqb6WLQ==", - "license": "MIT", - "dependencies": { - "@zag-js/dom-query": "0.74.2" - } - }, - "node_modules/@prosekit/svelte/node_modules/@zag-js/text-selection/node_modules/@zag-js/dom-query": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-0.74.2.tgz", - "integrity": "sha512-g+7wIdhT1nlY5yhQWoMDzin8uYoBXeQk8TNUj3GZH/1dTX9YC0vs7vz7rotzunLkEA7nEGfLNzdO5CRQBhGp0w==", - "license": "MIT" - }, - "node_modules/@prosekit/svelte/node_modules/@zag-js/types": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/types/-/types-0.74.2.tgz", - "integrity": "sha512-UYdHh5Jj2LZZwP8Amm9YEoj9f/zYNWuuw+HRGCLZew6moHvKj/HHKJHLooPPjGztFIeRsnicE1mJ9E2bDllBaw==", - "license": "MIT", - "dependencies": { - "csstype": "3.1.3" - } - }, - "node_modules/@prosekit/svelte/node_modules/@zag-js/utils": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/utils/-/utils-0.74.2.tgz", - "integrity": "sha512-WtIsNyDvnslCjtIIP/bRzx3bJMaT0cIgI3f+TgiFWhtQMlUZMpBkwkKVfvUwI5qcZ+ZOMeoonAWFqFECCb3h3g==", - "license": "MIT" - }, - "node_modules/@prosekit/svelte/node_modules/nanoid": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.0.8.tgz", - "integrity": "sha512-TcJPw+9RV9dibz1hHUzlLVy8N4X9TnwirAjrU08Juo6BNKggzVfP2ZJ/3ZUSq15Xl5i85i+Z89XBO90pB2PghQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.js" - }, - "engines": { - "node": "^18 || >=20" - } - }, "node_modules/@prosekit/vue": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@prosekit/vue/-/vue-0.4.2.tgz", - "integrity": "sha512-EMeeTjrqwfybTI0TeGtpE0nW/W9+kZABWKoJkhbnTjYMKIF6DmIGV9rDsF6hSL6cZaZm6VHPsH132aURwuuItQ==", + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@prosekit/vue/-/vue-0.4.4.tgz", + "integrity": "sha512-pmaTz6T+8KvV/31Td48Y2+2skN3o79+wqFqzse5yEODFugj26bUrlXYsG4Isnl/v2jhnGgJgrScULN9HDPWHuQ==", "license": "MIT", "dependencies": { "@prosekit/core": "^0.7.12", "@prosekit/pm": "^0.1.8", - "@prosekit/web": "^0.4.2", + "@prosekit/web": "^0.5.0", "@prosemirror-adapter/vue": "^0.2.6" }, "funding": { @@ -3196,211 +2345,6 @@ } } }, - "node_modules/@prosekit/vue/node_modules/@aria-ui/listbox": { - "version": "0.0.19", - "resolved": "https://registry.npmjs.org/@aria-ui/listbox/-/listbox-0.0.19.tgz", - "integrity": "sha512-pBuuUcssYAbxmnR0rTUKFR2dXUys8E/9AV1LyMZ14zuZmESD6S1xCv5RAcDwJnblOItgAryoB+ed2vkE1719DA==", - "dependencies": { - "@aria-ui/collection": "^0.0.4", - "@aria-ui/core": "^0.0.19", - "@aria-ui/presence": "^0.0.15", - "immer": "^10.1.1" - } - }, - "node_modules/@prosekit/vue/node_modules/@aria-ui/menu": { - "version": "0.0.13", - "resolved": "https://registry.npmjs.org/@aria-ui/menu/-/menu-0.0.13.tgz", - "integrity": "sha512-vjUQrj3yPptMIB2NQtbfGvIKL9E/XoBCZWIZ6KhGM4/lJabXSnBejXYn0SHfIwBkCkD+mPEXMCwCh94s2HY1aQ==", - "dependencies": { - "@aria-ui/collection": "^0.0.4", - "@aria-ui/core": "^0.0.19", - "@aria-ui/overlay": "^0.0.20", - "@aria-ui/popover": "^0.0.21", - "@aria-ui/presence": "^0.0.15", - "nanoid": "^5.0.7" - } - }, - "node_modules/@prosekit/vue/node_modules/@aria-ui/overlay": { - "version": "0.0.20", - "resolved": "https://registry.npmjs.org/@aria-ui/overlay/-/overlay-0.0.20.tgz", - "integrity": "sha512-y+qax+YRueWRhkqs5jAd7OaQxILqWXxGP/085ENZexyZlv38BesCxqjMR6rbKfJjKTDp9cZIc3JdzZqzEHdSwA==", - "dependencies": { - "@aria-ui/core": "^0.0.19", - "@floating-ui/dom": "^1.6.11", - "@zag-js/dom-query": "^0.74.2" - } - }, - "node_modules/@prosekit/vue/node_modules/@aria-ui/overlay/node_modules/@zag-js/dom-query": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-0.74.2.tgz", - "integrity": "sha512-g+7wIdhT1nlY5yhQWoMDzin8uYoBXeQk8TNUj3GZH/1dTX9YC0vs7vz7rotzunLkEA7nEGfLNzdO5CRQBhGp0w==", - "license": "MIT" - }, - "node_modules/@prosekit/vue/node_modules/@aria-ui/popover": { - "version": "0.0.21", - "resolved": "https://registry.npmjs.org/@aria-ui/popover/-/popover-0.0.21.tgz", - "integrity": "sha512-Gh4pLjjH/3YZ7b1SzOUAJwof/Xw2WZNVLC//fZ9xT8b1ojA8ETYJ59hrw14VbvtYBsIO6GvogYEhJGFm23Nokg==", - "dependencies": { - "@aria-ui/core": "^0.0.19", - "@aria-ui/overlay": "^0.0.20", - "@aria-ui/presence": "^0.0.15", - "@zag-js/dismissable": "^0.74.2", - "@zag-js/tabbable": "^0.49.0" - } - }, - "node_modules/@prosekit/vue/node_modules/@aria-ui/presence": { - "version": "0.0.15", - "resolved": "https://registry.npmjs.org/@aria-ui/presence/-/presence-0.0.15.tgz", - "integrity": "sha512-by+KVcjuOGxu1PommpyFLfSTd0i/5Ee9kgvT+caObU8H2HK+sKZA00nCfKHhVNEWMjguKhaHu9g8P7Qa6mkgQw==", - "dependencies": { - "@aria-ui/core": "^0.0.19", - "@zag-js/dom-query": "^0.74.2" - } - }, - "node_modules/@prosekit/vue/node_modules/@aria-ui/presence/node_modules/@zag-js/dom-query": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-0.74.2.tgz", - "integrity": "sha512-g+7wIdhT1nlY5yhQWoMDzin8uYoBXeQk8TNUj3GZH/1dTX9YC0vs7vz7rotzunLkEA7nEGfLNzdO5CRQBhGp0w==", - "license": "MIT" - }, - "node_modules/@prosekit/vue/node_modules/@aria-ui/tooltip": { - "version": "0.0.23", - "resolved": "https://registry.npmjs.org/@aria-ui/tooltip/-/tooltip-0.0.23.tgz", - "integrity": "sha512-+Ide+mzWzp9Zlf5xgSveraZ8jCpkrjD6wzITYvIp4oApfZ87/Z7ZnQKIV94EzwRjp0atTJR0DG+M062i7tMrlA==", - "dependencies": { - "@aria-ui/core": "^0.0.19", - "@aria-ui/overlay": "^0.0.20", - "@aria-ui/presence": "^0.0.15", - "nanoid": "^5.0.7" - } - }, - "node_modules/@prosekit/vue/node_modules/@prosekit/web": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@prosekit/web/-/web-0.4.3.tgz", - "integrity": "sha512-X/D+Ys9Au9GOOXz9lF6uOExcdcmqsRPALu9bNLNWaj2oZLjt1Yz1WbuhYNlwgO9IOXAVAh/vWJwMGJLm7GJTjg==", - "license": "MIT", - "dependencies": { - "@aria-ui/collection": "^0.0.4", - "@aria-ui/core": "^0.0.19", - "@aria-ui/listbox": "^0.0.19", - "@aria-ui/menu": "^0.0.13", - "@aria-ui/overlay": "^0.0.20", - "@aria-ui/popover": "^0.0.21", - "@aria-ui/presence": "^0.0.15", - "@aria-ui/tooltip": "^0.0.23", - "@floating-ui/dom": "^1.6.11", - "@prosekit/core": "^0.7.12", - "@prosekit/extensions": "^0.7.21", - "@prosekit/pm": "^0.1.8", - "@zag-js/dom-query": "^0.76.0", - "just-map-values": "^3.2.0", - "just-omit": "^2.2.0", - "prosemirror-tables": "^1.6.0" - }, - "funding": { - "url": "https://github.com/sponsors/ocavue" - } - }, - "node_modules/@prosekit/vue/node_modules/@zag-js/dismissable": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/dismissable/-/dismissable-0.74.2.tgz", - "integrity": "sha512-Wl6n1lW1eTKKu5Kg+6jum9nZDXYGA86XL24Rip2aOScrAo2UGCA+nSIgg7GGO5qGs52iawITba38tAe6maZQLw==", - "license": "MIT", - "dependencies": { - "@zag-js/dom-event": "0.74.2", - "@zag-js/dom-query": "0.74.2", - "@zag-js/interact-outside": "0.74.2", - "@zag-js/utils": "0.74.2" - } - }, - "node_modules/@prosekit/vue/node_modules/@zag-js/dismissable/node_modules/@zag-js/dom-query": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-0.74.2.tgz", - "integrity": "sha512-g+7wIdhT1nlY5yhQWoMDzin8uYoBXeQk8TNUj3GZH/1dTX9YC0vs7vz7rotzunLkEA7nEGfLNzdO5CRQBhGp0w==", - "license": "MIT" - }, - "node_modules/@prosekit/vue/node_modules/@zag-js/dom-event": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/dom-event/-/dom-event-0.74.2.tgz", - "integrity": "sha512-duuwxowflkY7UUI+1vHr9ttzqn2JtJ+mgAS0cBeNmqtvK6XrNaHSrm0B4u4R/KIJ73Tx8TZGbmgN9Vwj/U2FrA==", - "license": "MIT", - "dependencies": { - "@zag-js/dom-query": "0.74.2", - "@zag-js/text-selection": "0.74.2", - "@zag-js/types": "0.74.2" - } - }, - "node_modules/@prosekit/vue/node_modules/@zag-js/dom-event/node_modules/@zag-js/dom-query": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-0.74.2.tgz", - "integrity": "sha512-g+7wIdhT1nlY5yhQWoMDzin8uYoBXeQk8TNUj3GZH/1dTX9YC0vs7vz7rotzunLkEA7nEGfLNzdO5CRQBhGp0w==", - "license": "MIT" - }, - "node_modules/@prosekit/vue/node_modules/@zag-js/interact-outside": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/interact-outside/-/interact-outside-0.74.2.tgz", - "integrity": "sha512-58ilkSC2UQw9PsFo4HKBrYcWC1+WRA8M6MqNf9MnxxOvAq+Y8APH0I6ExxAfUhLsk9v+6kPf0txM9MDoB0iNFA==", - "license": "MIT", - "dependencies": { - "@zag-js/dom-event": "0.74.2", - "@zag-js/dom-query": "0.74.2", - "@zag-js/utils": "0.74.2" - } - }, - "node_modules/@prosekit/vue/node_modules/@zag-js/interact-outside/node_modules/@zag-js/dom-query": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-0.74.2.tgz", - "integrity": "sha512-g+7wIdhT1nlY5yhQWoMDzin8uYoBXeQk8TNUj3GZH/1dTX9YC0vs7vz7rotzunLkEA7nEGfLNzdO5CRQBhGp0w==", - "license": "MIT" - }, - "node_modules/@prosekit/vue/node_modules/@zag-js/text-selection": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/text-selection/-/text-selection-0.74.2.tgz", - "integrity": "sha512-c7fLss1VyFnQzs5f5HNMD3qyJczH+SNzOgqMwU6apKpgYRLMMI0S4F03I/cyDQrCPZMcy6F/bl6zlQmdqb6WLQ==", - "license": "MIT", - "dependencies": { - "@zag-js/dom-query": "0.74.2" - } - }, - "node_modules/@prosekit/vue/node_modules/@zag-js/text-selection/node_modules/@zag-js/dom-query": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-0.74.2.tgz", - "integrity": "sha512-g+7wIdhT1nlY5yhQWoMDzin8uYoBXeQk8TNUj3GZH/1dTX9YC0vs7vz7rotzunLkEA7nEGfLNzdO5CRQBhGp0w==", - "license": "MIT" - }, - "node_modules/@prosekit/vue/node_modules/@zag-js/types": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/types/-/types-0.74.2.tgz", - "integrity": "sha512-UYdHh5Jj2LZZwP8Amm9YEoj9f/zYNWuuw+HRGCLZew6moHvKj/HHKJHLooPPjGztFIeRsnicE1mJ9E2bDllBaw==", - "license": "MIT", - "dependencies": { - "csstype": "3.1.3" - } - }, - "node_modules/@prosekit/vue/node_modules/@zag-js/utils": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/utils/-/utils-0.74.2.tgz", - "integrity": "sha512-WtIsNyDvnslCjtIIP/bRzx3bJMaT0cIgI3f+TgiFWhtQMlUZMpBkwkKVfvUwI5qcZ+ZOMeoonAWFqFECCb3h3g==", - "license": "MIT" - }, - "node_modules/@prosekit/vue/node_modules/nanoid": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.0.8.tgz", - "integrity": "sha512-TcJPw+9RV9dibz1hHUzlLVy8N4X9TnwirAjrU08Juo6BNKggzVfP2ZJ/3ZUSq15Xl5i85i+Z89XBO90pB2PghQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.js" - }, - "engines": { - "node": "^18 || >=20" - } - }, "node_modules/@prosekit/web": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/@prosekit/web/-/web-0.5.0.tgz", @@ -3484,24 +2428,6 @@ "solid-js": "^1.8.22" } }, - "node_modules/@prosemirror-adapter/solid/node_modules/nanoid": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.0.8.tgz", - "integrity": "sha512-TcJPw+9RV9dibz1hHUzlLVy8N4X9TnwirAjrU08Juo6BNKggzVfP2ZJ/3ZUSq15Xl5i85i+Z89XBO90pB2PghQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.js" - }, - "engines": { - "node": "^18 || >=20" - } - }, "node_modules/@prosemirror-adapter/svelte": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/@prosemirror-adapter/svelte/-/svelte-0.2.6.tgz", @@ -5126,14 +4052,14 @@ "license": "ISC" }, "node_modules/@vue/compiler-core": { - "version": "3.5.12", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.12.tgz", - "integrity": "sha512-ISyBTRMmMYagUxhcpyEH0hpXRd/KqDU4ymofPgl2XAkY9ZhQ+h0ovEZJIiPop13UmR/54oA2cgMDjgroRelaEw==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.13.tgz", + "integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==", "license": "MIT", "peer": true, "dependencies": { "@babel/parser": "^7.25.3", - "@vue/shared": "3.5.12", + "@vue/shared": "3.5.13", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.0" @@ -5147,31 +4073,31 @@ "peer": true }, "node_modules/@vue/compiler-dom": { - "version": "3.5.12", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.12.tgz", - "integrity": "sha512-9G6PbJ03uwxLHKQ3P42cMTi85lDRvGLB2rSGOiQqtXELat6uI4n8cNz9yjfVHRPIu+MsK6TE418Giruvgptckg==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz", + "integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==", "license": "MIT", "peer": true, "dependencies": { - "@vue/compiler-core": "3.5.12", - "@vue/shared": "3.5.12" + "@vue/compiler-core": "3.5.13", + "@vue/shared": "3.5.13" } }, "node_modules/@vue/compiler-sfc": { - "version": "3.5.12", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.12.tgz", - "integrity": "sha512-2k973OGo2JuAa5+ZlekuQJtitI5CgLMOwgl94BzMCsKZCX/xiqzJYzapl4opFogKHqwJk34vfsaKpfEhd1k5nw==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz", + "integrity": "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==", "license": "MIT", "peer": true, "dependencies": { "@babel/parser": "^7.25.3", - "@vue/compiler-core": "3.5.12", - "@vue/compiler-dom": "3.5.12", - "@vue/compiler-ssr": "3.5.12", - "@vue/shared": "3.5.12", + "@vue/compiler-core": "3.5.13", + "@vue/compiler-dom": "3.5.13", + "@vue/compiler-ssr": "3.5.13", + "@vue/shared": "3.5.13", "estree-walker": "^2.0.2", "magic-string": "^0.30.11", - "postcss": "^8.4.47", + "postcss": "^8.4.48", "source-map-js": "^1.2.0" } }, @@ -5183,68 +4109,68 @@ "peer": true }, "node_modules/@vue/compiler-ssr": { - "version": "3.5.12", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.12.tgz", - "integrity": "sha512-eLwc7v6bfGBSM7wZOGPmRavSWzNFF6+PdRhE+VFJhNCgHiF8AM7ccoqcv5kBXA2eWUfigD7byekvf/JsOfKvPA==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz", + "integrity": "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==", "license": "MIT", "peer": true, "dependencies": { - "@vue/compiler-dom": "3.5.12", - "@vue/shared": "3.5.12" + "@vue/compiler-dom": "3.5.13", + "@vue/shared": "3.5.13" } }, "node_modules/@vue/reactivity": { - "version": "3.5.12", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.12.tgz", - "integrity": "sha512-UzaN3Da7xnJXdz4Okb/BGbAaomRHc3RdoWqTzlvd9+WBR5m3J39J1fGcHes7U3za0ruYn/iYy/a1euhMEHvTAg==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.13.tgz", + "integrity": "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==", "license": "MIT", "peer": true, "dependencies": { - "@vue/shared": "3.5.12" + "@vue/shared": "3.5.13" } }, "node_modules/@vue/runtime-core": { - "version": "3.5.12", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.12.tgz", - "integrity": "sha512-hrMUYV6tpocr3TL3Ad8DqxOdpDe4zuQY4HPY3X/VRh+L2myQO8MFXPAMarIOSGNu0bFAjh1yBkMPXZBqCk62Uw==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.13.tgz", + "integrity": "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==", "license": "MIT", "peer": true, "dependencies": { - "@vue/reactivity": "3.5.12", - "@vue/shared": "3.5.12" + "@vue/reactivity": "3.5.13", + "@vue/shared": "3.5.13" } }, "node_modules/@vue/runtime-dom": { - "version": "3.5.12", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.12.tgz", - "integrity": "sha512-q8VFxR9A2MRfBr6/55Q3umyoN7ya836FzRXajPB6/Vvuv0zOPL+qltd9rIMzG/DbRLAIlREmnLsplEF/kotXKA==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz", + "integrity": "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==", "license": "MIT", "peer": true, "dependencies": { - "@vue/reactivity": "3.5.12", - "@vue/runtime-core": "3.5.12", - "@vue/shared": "3.5.12", + "@vue/reactivity": "3.5.13", + "@vue/runtime-core": "3.5.13", + "@vue/shared": "3.5.13", "csstype": "^3.1.3" } }, "node_modules/@vue/server-renderer": { - "version": "3.5.12", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.12.tgz", - "integrity": "sha512-I3QoeDDeEPZm8yR28JtY+rk880Oqmj43hreIBVTicisFTx/Dl7JpG72g/X7YF8hnQD3IFhkky5i2bPonwrTVPg==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.13.tgz", + "integrity": "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==", "license": "MIT", "peer": true, "dependencies": { - "@vue/compiler-ssr": "3.5.12", - "@vue/shared": "3.5.12" + "@vue/compiler-ssr": "3.5.13", + "@vue/shared": "3.5.13" }, "peerDependencies": { - "vue": "3.5.12" + "vue": "3.5.13" } }, "node_modules/@vue/shared": { - "version": "3.5.12", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.12.tgz", - "integrity": "sha512-L2RPSAwUFbgZH20etwrXyVyCBu9OxRSi8T/38QsvnkJyvq2LufW2lDCOzm7t/U9C1mkhJGWYfCuFBCmIuNivrg==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz", + "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==", "license": "MIT", "peer": true }, @@ -8399,13 +7325,13 @@ } }, "node_modules/is-reference": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", - "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz", + "integrity": "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==", "license": "MIT", "peer": true, "dependencies": { - "@types/estree": "*" + "@types/estree": "^1.0.6" } }, "node_modules/is-regex": { @@ -8823,9 +7749,9 @@ } }, "node_modules/magic-string": { - "version": "0.30.12", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.12.tgz", - "integrity": "sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==", + "version": "0.30.14", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.14.tgz", + "integrity": "sha512-5c99P1WKTed11ZC0HMJOj6CDIue6F8ySu+bJL+85q1zBEIY8IklrJ1eiKC2NDRh3Ct3FcvmJPyQHb9erXMTJNw==", "license": "MIT", "peer": true, "dependencies": { @@ -9114,9 +8040,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.0.9.tgz", + "integrity": "sha512-Aooyr6MXU6HpvvWXKoVoXwKMs/KyVakWwg7xQfv5/S/RIgJMy0Ifa45H9qqYy7pTCszrHzP21Uk4PZq2HpEM8Q==", "funding": [ { "type": "github", @@ -9125,10 +8051,10 @@ ], "license": "MIT", "bin": { - "nanoid": "bin/nanoid.cjs" + "nanoid": "bin/nanoid.js" }, "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "node": "^18 || >=20" } }, "node_modules/natural-compare": { @@ -9201,6 +8127,24 @@ } } }, + "node_modules/next/node_modules/nanoid": { + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, "node_modules/next/node_modules/postcss": { "version": "8.4.31", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", @@ -9766,6 +8710,24 @@ "dev": true, "license": "MIT" }, + "node_modules/postcss/node_modules/nanoid": { + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -9804,22 +8766,22 @@ } }, "node_modules/prosekit": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/prosekit/-/prosekit-0.10.2.tgz", - "integrity": "sha512-dpXfMeJDTZ8kl9GKVSvsO9mwGKfx9A7WA8x5w5Jsh5LBCnLHkKe7t8jUR82D+GbcWu1Gz5ixwyjb2OEm/T9W3A==", + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/prosekit/-/prosekit-0.10.4.tgz", + "integrity": "sha512-6vXaOpp4nb4VMcs+qsaL1Y255O0EGgax0XWAgGX1YOEDZbFzFMG79fLGjt4n8Sn2vgjiPJJY8GVtLy4W74suKw==", "license": "MIT", "dependencies": { - "@prosekit/basic": "0.3.32", + "@prosekit/basic": "0.3.33", "@prosekit/core": "0.7.12", - "@prosekit/extensions": "0.7.20", - "@prosekit/lit": "0.4.2", + "@prosekit/extensions": "0.7.21", + "@prosekit/lit": "0.4.4", "@prosekit/pm": "0.1.8", - "@prosekit/preact": "0.4.2", - "@prosekit/react": "0.4.2", - "@prosekit/solid": "0.4.2", - "@prosekit/svelte": "0.5.2", - "@prosekit/vue": "0.4.2", - "@prosekit/web": "0.4.2" + "@prosekit/preact": "0.4.4", + "@prosekit/react": "0.4.4", + "@prosekit/solid": "0.4.4", + "@prosekit/svelte": "0.5.4", + "@prosekit/vue": "0.4.4", + "@prosekit/web": "0.5.0" }, "funding": { "url": "https://github.com/sponsors/ocavue" @@ -9869,286 +8831,6 @@ } } }, - "node_modules/prosekit/node_modules/@aria-ui/listbox": { - "version": "0.0.19", - "resolved": "https://registry.npmjs.org/@aria-ui/listbox/-/listbox-0.0.19.tgz", - "integrity": "sha512-pBuuUcssYAbxmnR0rTUKFR2dXUys8E/9AV1LyMZ14zuZmESD6S1xCv5RAcDwJnblOItgAryoB+ed2vkE1719DA==", - "dependencies": { - "@aria-ui/collection": "^0.0.4", - "@aria-ui/core": "^0.0.19", - "@aria-ui/presence": "^0.0.15", - "immer": "^10.1.1" - } - }, - "node_modules/prosekit/node_modules/@aria-ui/menu": { - "version": "0.0.13", - "resolved": "https://registry.npmjs.org/@aria-ui/menu/-/menu-0.0.13.tgz", - "integrity": "sha512-vjUQrj3yPptMIB2NQtbfGvIKL9E/XoBCZWIZ6KhGM4/lJabXSnBejXYn0SHfIwBkCkD+mPEXMCwCh94s2HY1aQ==", - "dependencies": { - "@aria-ui/collection": "^0.0.4", - "@aria-ui/core": "^0.0.19", - "@aria-ui/overlay": "^0.0.20", - "@aria-ui/popover": "^0.0.21", - "@aria-ui/presence": "^0.0.15", - "nanoid": "^5.0.7" - } - }, - "node_modules/prosekit/node_modules/@aria-ui/overlay": { - "version": "0.0.20", - "resolved": "https://registry.npmjs.org/@aria-ui/overlay/-/overlay-0.0.20.tgz", - "integrity": "sha512-y+qax+YRueWRhkqs5jAd7OaQxILqWXxGP/085ENZexyZlv38BesCxqjMR6rbKfJjKTDp9cZIc3JdzZqzEHdSwA==", - "dependencies": { - "@aria-ui/core": "^0.0.19", - "@floating-ui/dom": "^1.6.11", - "@zag-js/dom-query": "^0.74.2" - } - }, - "node_modules/prosekit/node_modules/@aria-ui/overlay/node_modules/@zag-js/dom-query": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-0.74.2.tgz", - "integrity": "sha512-g+7wIdhT1nlY5yhQWoMDzin8uYoBXeQk8TNUj3GZH/1dTX9YC0vs7vz7rotzunLkEA7nEGfLNzdO5CRQBhGp0w==", - "license": "MIT" - }, - "node_modules/prosekit/node_modules/@aria-ui/popover": { - "version": "0.0.21", - "resolved": "https://registry.npmjs.org/@aria-ui/popover/-/popover-0.0.21.tgz", - "integrity": "sha512-Gh4pLjjH/3YZ7b1SzOUAJwof/Xw2WZNVLC//fZ9xT8b1ojA8ETYJ59hrw14VbvtYBsIO6GvogYEhJGFm23Nokg==", - "dependencies": { - "@aria-ui/core": "^0.0.19", - "@aria-ui/overlay": "^0.0.20", - "@aria-ui/presence": "^0.0.15", - "@zag-js/dismissable": "^0.74.2", - "@zag-js/tabbable": "^0.49.0" - } - }, - "node_modules/prosekit/node_modules/@aria-ui/presence": { - "version": "0.0.15", - "resolved": "https://registry.npmjs.org/@aria-ui/presence/-/presence-0.0.15.tgz", - "integrity": "sha512-by+KVcjuOGxu1PommpyFLfSTd0i/5Ee9kgvT+caObU8H2HK+sKZA00nCfKHhVNEWMjguKhaHu9g8P7Qa6mkgQw==", - "dependencies": { - "@aria-ui/core": "^0.0.19", - "@zag-js/dom-query": "^0.74.2" - } - }, - "node_modules/prosekit/node_modules/@aria-ui/presence/node_modules/@zag-js/dom-query": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-0.74.2.tgz", - "integrity": "sha512-g+7wIdhT1nlY5yhQWoMDzin8uYoBXeQk8TNUj3GZH/1dTX9YC0vs7vz7rotzunLkEA7nEGfLNzdO5CRQBhGp0w==", - "license": "MIT" - }, - "node_modules/prosekit/node_modules/@aria-ui/tooltip": { - "version": "0.0.23", - "resolved": "https://registry.npmjs.org/@aria-ui/tooltip/-/tooltip-0.0.23.tgz", - "integrity": "sha512-+Ide+mzWzp9Zlf5xgSveraZ8jCpkrjD6wzITYvIp4oApfZ87/Z7ZnQKIV94EzwRjp0atTJR0DG+M062i7tMrlA==", - "dependencies": { - "@aria-ui/core": "^0.0.19", - "@aria-ui/overlay": "^0.0.20", - "@aria-ui/presence": "^0.0.15", - "nanoid": "^5.0.7" - } - }, - "node_modules/prosekit/node_modules/@prosekit/extensions": { - "version": "0.7.20", - "resolved": "https://registry.npmjs.org/@prosekit/extensions/-/extensions-0.7.20.tgz", - "integrity": "sha512-97QffYM6Q2d+vLyWsbywC/akZd9M/lrj5a75YHhbFAbUjpvdOH5t4pp2Hu4YeWYdDGa8xCX7fxH/882RT0rzwg==", - "license": "MIT", - "dependencies": { - "@prosekit/core": "^0.7.12", - "@prosekit/pm": "^0.1.8", - "prosemirror-changeset": "^2.2.1", - "prosemirror-dropcursor": "^1.8.1", - "prosemirror-flat-list": "^0.5.4", - "prosemirror-gapcursor": "^1.3.2", - "prosemirror-highlight": "^0.9.0", - "prosemirror-search": "^1.0.0", - "prosemirror-tables": "^1.5.1", - "shiki": "^1.22.0" - }, - "funding": { - "url": "https://github.com/sponsors/ocavue" - }, - "peerDependencies": { - "loro-crdt": ">= 0.16.7", - "loro-prosemirror": ">= 0.0.7", - "y-prosemirror": ">= 1.2.9", - "yjs": ">= 13.6.18" - }, - "peerDependenciesMeta": { - "loro-crdt": { - "optional": true - }, - "loro-prosemirror": { - "optional": true - }, - "y-prosemirror": { - "optional": true - }, - "yjs": { - "optional": true - } - } - }, - "node_modules/prosekit/node_modules/@prosekit/react": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@prosekit/react/-/react-0.4.2.tgz", - "integrity": "sha512-hhB/ixGAG+/Fd4u5IwWCpWF3jUBGGLTJGzypMPGq2V8dHnZ2rgly5Rko1IiQrw3nRCPJ8nmC8rccsADsaZseeQ==", - "license": "MIT", - "dependencies": { - "@prosekit/core": "^0.7.12", - "@prosekit/pm": "^0.1.8", - "@prosekit/web": "^0.4.2", - "@prosemirror-adapter/react": "^0.2.6", - "react-merge-refs": "^2.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ocavue" - }, - "peerDependencies": { - "react": ">= 18.2.0", - "react-dom": ">= 18.2.0" - }, - "peerDependenciesMeta": { - "react": { - "optional": true - }, - "react-dom": { - "optional": true - } - } - }, - "node_modules/prosekit/node_modules/@prosekit/web": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@prosekit/web/-/web-0.4.2.tgz", - "integrity": "sha512-kuoC0rE95TNOuxL32Wc5TDvaDIGZ6rdeHw+P/fEgSuYG7YuQN9sWuMWvKZa/iwzLxgPpsrTXnt0GuqSmweyELw==", - "license": "MIT", - "dependencies": { - "@aria-ui/collection": "^0.0.4", - "@aria-ui/core": "^0.0.19", - "@aria-ui/listbox": "^0.0.19", - "@aria-ui/menu": "^0.0.13", - "@aria-ui/overlay": "^0.0.20", - "@aria-ui/popover": "^0.0.21", - "@aria-ui/presence": "^0.0.15", - "@aria-ui/tooltip": "^0.0.23", - "@floating-ui/dom": "^1.6.11", - "@prosekit/core": "^0.7.12", - "@prosekit/extensions": "^0.7.20", - "@prosekit/pm": "^0.1.8", - "@zag-js/dom-query": "^0.75.0", - "just-map-values": "^3.2.0", - "just-omit": "^2.2.0", - "prosemirror-tables": "^1.5.1" - }, - "funding": { - "url": "https://github.com/sponsors/ocavue" - } - }, - "node_modules/prosekit/node_modules/@zag-js/dismissable": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/dismissable/-/dismissable-0.74.2.tgz", - "integrity": "sha512-Wl6n1lW1eTKKu5Kg+6jum9nZDXYGA86XL24Rip2aOScrAo2UGCA+nSIgg7GGO5qGs52iawITba38tAe6maZQLw==", - "license": "MIT", - "dependencies": { - "@zag-js/dom-event": "0.74.2", - "@zag-js/dom-query": "0.74.2", - "@zag-js/interact-outside": "0.74.2", - "@zag-js/utils": "0.74.2" - } - }, - "node_modules/prosekit/node_modules/@zag-js/dismissable/node_modules/@zag-js/dom-query": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-0.74.2.tgz", - "integrity": "sha512-g+7wIdhT1nlY5yhQWoMDzin8uYoBXeQk8TNUj3GZH/1dTX9YC0vs7vz7rotzunLkEA7nEGfLNzdO5CRQBhGp0w==", - "license": "MIT" - }, - "node_modules/prosekit/node_modules/@zag-js/dom-event": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/dom-event/-/dom-event-0.74.2.tgz", - "integrity": "sha512-duuwxowflkY7UUI+1vHr9ttzqn2JtJ+mgAS0cBeNmqtvK6XrNaHSrm0B4u4R/KIJ73Tx8TZGbmgN9Vwj/U2FrA==", - "license": "MIT", - "dependencies": { - "@zag-js/dom-query": "0.74.2", - "@zag-js/text-selection": "0.74.2", - "@zag-js/types": "0.74.2" - } - }, - "node_modules/prosekit/node_modules/@zag-js/dom-event/node_modules/@zag-js/dom-query": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-0.74.2.tgz", - "integrity": "sha512-g+7wIdhT1nlY5yhQWoMDzin8uYoBXeQk8TNUj3GZH/1dTX9YC0vs7vz7rotzunLkEA7nEGfLNzdO5CRQBhGp0w==", - "license": "MIT" - }, - "node_modules/prosekit/node_modules/@zag-js/dom-query": { - "version": "0.75.0", - "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-0.75.0.tgz", - "integrity": "sha512-PrCX29VbxKW4YQCAo6juttlwW563Os03dId/0V7WCN4daj+ocpI169mMm/XxgXfI9kgebZuYvY9ngIJeHdJHSA==", - "license": "MIT" - }, - "node_modules/prosekit/node_modules/@zag-js/interact-outside": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/interact-outside/-/interact-outside-0.74.2.tgz", - "integrity": "sha512-58ilkSC2UQw9PsFo4HKBrYcWC1+WRA8M6MqNf9MnxxOvAq+Y8APH0I6ExxAfUhLsk9v+6kPf0txM9MDoB0iNFA==", - "license": "MIT", - "dependencies": { - "@zag-js/dom-event": "0.74.2", - "@zag-js/dom-query": "0.74.2", - "@zag-js/utils": "0.74.2" - } - }, - "node_modules/prosekit/node_modules/@zag-js/interact-outside/node_modules/@zag-js/dom-query": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-0.74.2.tgz", - "integrity": "sha512-g+7wIdhT1nlY5yhQWoMDzin8uYoBXeQk8TNUj3GZH/1dTX9YC0vs7vz7rotzunLkEA7nEGfLNzdO5CRQBhGp0w==", - "license": "MIT" - }, - "node_modules/prosekit/node_modules/@zag-js/text-selection": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/text-selection/-/text-selection-0.74.2.tgz", - "integrity": "sha512-c7fLss1VyFnQzs5f5HNMD3qyJczH+SNzOgqMwU6apKpgYRLMMI0S4F03I/cyDQrCPZMcy6F/bl6zlQmdqb6WLQ==", - "license": "MIT", - "dependencies": { - "@zag-js/dom-query": "0.74.2" - } - }, - "node_modules/prosekit/node_modules/@zag-js/text-selection/node_modules/@zag-js/dom-query": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-0.74.2.tgz", - "integrity": "sha512-g+7wIdhT1nlY5yhQWoMDzin8uYoBXeQk8TNUj3GZH/1dTX9YC0vs7vz7rotzunLkEA7nEGfLNzdO5CRQBhGp0w==", - "license": "MIT" - }, - "node_modules/prosekit/node_modules/@zag-js/types": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/types/-/types-0.74.2.tgz", - "integrity": "sha512-UYdHh5Jj2LZZwP8Amm9YEoj9f/zYNWuuw+HRGCLZew6moHvKj/HHKJHLooPPjGztFIeRsnicE1mJ9E2bDllBaw==", - "license": "MIT", - "dependencies": { - "csstype": "3.1.3" - } - }, - "node_modules/prosekit/node_modules/@zag-js/utils": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/@zag-js/utils/-/utils-0.74.2.tgz", - "integrity": "sha512-WtIsNyDvnslCjtIIP/bRzx3bJMaT0cIgI3f+TgiFWhtQMlUZMpBkwkKVfvUwI5qcZ+ZOMeoonAWFqFECCb3h3g==", - "license": "MIT" - }, - "node_modules/prosekit/node_modules/nanoid": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.0.8.tgz", - "integrity": "sha512-TcJPw+9RV9dibz1hHUzlLVy8N4X9TnwirAjrU08Juo6BNKggzVfP2ZJ/3ZUSq15Xl5i85i+Z89XBO90pB2PghQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.js" - }, - "engines": { - "node": "^18 || >=20" - } - }, "node_modules/prosemirror-changeset": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/prosemirror-changeset/-/prosemirror-changeset-2.2.1.tgz", @@ -10296,9 +8978,9 @@ } }, "node_modules/prosemirror-model": { - "version": "1.23.0", - "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.23.0.tgz", - "integrity": "sha512-Q/fgsgl/dlOAW9ILu4OOhYWQbc7TQd4BwKH/RwmUjyVf8682Be4zj3rOYdLnYEcGzyg8LL9Q5IWYKD8tdToreQ==", + "version": "1.24.0", + "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.24.0.tgz", + "integrity": "sha512-Ft7epNnycoQSM+2ObF35SBbBX+5WY39v8amVlrtlAcpglhlHs2tCTnWl7RX5tbp/PsMKcRcWV9cXPuoBWq0AIQ==", "license": "MIT", "dependencies": { "orderedmap": "^2.0.0" @@ -10387,9 +9069,9 @@ } }, "node_modules/prosemirror-view": { - "version": "1.36.0", - "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.36.0.tgz", - "integrity": "sha512-U0GQd5yFvV5qUtT41X1zCQfbw14vkbbKwLlQXhdylEmgpYVHkefXYcC4HHwWOfZa3x6Y8wxDLUBv7dxN5XQ3nA==", + "version": "1.37.0", + "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.37.0.tgz", + "integrity": "sha512-z2nkKI1sJzyi7T47Ji/ewBPuIma1RNvQCCYVdV+MqWBV7o4Sa1n94UJCJJ1aQRF/xRkFfyqLGlGFWitIcCOtbg==", "license": "MIT", "dependencies": { "prosemirror-model": "^1.20.0", @@ -12185,17 +10867,17 @@ } }, "node_modules/vue": { - "version": "3.5.12", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.12.tgz", - "integrity": "sha512-CLVZtXtn2ItBIi/zHZ0Sg1Xkb7+PU32bJJ8Bmy7ts3jxXTcbfsEfBivFYYWz1Hur+lalqGAh65Coin0r+HRUfg==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.13.tgz", + "integrity": "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==", "license": "MIT", "peer": true, "dependencies": { - "@vue/compiler-dom": "3.5.12", - "@vue/compiler-sfc": "3.5.12", - "@vue/runtime-dom": "3.5.12", - "@vue/server-renderer": "3.5.12", - "@vue/shared": "3.5.12" + "@vue/compiler-dom": "3.5.13", + "@vue/compiler-sfc": "3.5.13", + "@vue/runtime-dom": "3.5.13", + "@vue/server-renderer": "3.5.13", + "@vue/shared": "3.5.13" }, "peerDependencies": { "typescript": "*" diff --git a/package.json b/package.json index a4bc9e2..ddba705 100644 --- a/package.json +++ b/package.json @@ -23,8 +23,13 @@ "formidable": "^3.5.2", "lucide-react": "^0.461.0", "multer": "^1.4.5-lts.1", + "nanoid": "^5.0.9", "next": "15.0.3", - "prosekit": "^0.10.2", + "prosekit": "^0.10.4", + "prosemirror-commands": "^1.6.2", + "prosemirror-model": "^1.24.0", + "prosemirror-state": "^1.4.3", + "prosemirror-view": "^1.37.0", "react": "^18.3.1", "react-dom": "^18.3.1", "react-draggable": "^4.4.6", @@ -47,5 +52,6 @@ "tailwindcss": "^3.4.1", "tailwindcss-animate": "^1.0.7", "typescript": "^5" - } + }, + "packageManager": "pnpm@9.9.0+sha512.60c18acd138bff695d339be6ad13f7e936eea6745660d4cc4a776d5247c540d0edee1a563695c183a66eb917ef88f2b4feb1fc25f32a7adcadc7aaf3438e99c1" } diff --git a/public/uploads/Screenshot from 2024-11-28 12-42-08.png b/public/uploads/Screenshot from 2024-11-28 12-42-08.png new file mode 100644 index 0000000..d4e3018 Binary files /dev/null and b/public/uploads/Screenshot from 2024-11-28 12-42-08.png differ diff --git a/public/uploads/Screenshot from 2024-11-28 12-45-46.png b/public/uploads/Screenshot from 2024-11-28 12-45-46.png new file mode 100644 index 0000000..738bb72 Binary files /dev/null and b/public/uploads/Screenshot from 2024-11-28 12-45-46.png differ diff --git a/public/uploads/image.png b/public/uploads/image.png new file mode 100644 index 0000000..e3752ee Binary files /dev/null and b/public/uploads/image.png differ diff --git a/src/components/extension/extension.ts b/src/components/extension/extension.ts index 7b667f2..2f26839 100644 --- a/src/components/extension/extension.ts +++ b/src/components/extension/extension.ts @@ -1,16 +1,20 @@ // extension.ts import { defineBasicExtension } from 'prosekit/basic'; -import { union } from 'prosekit/core'; -import { defineImage } from './image'; // Assuming this already exists +import { union , type Extension} from 'prosekit/core'; +import { defineImage } from './imgextension/image'; // Assuming this already exists import { definesignature } from './signature/signature'; // Import the signature node -import { definePlaceholder } from './signature/signature-spec'; // Import the placeholder node +import { definePlaceholder } from './signature/placeholder'; // Import the placeholder node +import { placeholderInteractionPlugin } from './signature/placeholder-plugin'; + export function defineExtension() { + + return union([ defineBasicExtension(), // Adds basic functionality (e.g., text, paragraphs) - defineImage(), // Adds image handling + defineImage(), // Adds image handling :insert image definesignature(), // Adds the signature node - definePlaceholder(), // Adds the placeholder node + definePlaceholder(), // placeholder extension ]); } diff --git a/src/components/extension/image-commands.ts b/src/components/extension/imgextension/image-commands.ts similarity index 87% rename from src/components/extension/image-commands.ts rename to src/components/extension/imgextension/image-commands.ts index 38cb981..75336d3 100644 --- a/src/components/extension/image-commands.ts +++ b/src/components/extension/imgextension/image-commands.ts @@ -1,5 +1,5 @@ import { Extension, defineCommands,insertNode } from "prosekit/core"; -import { ImageAttrs } from "./image-spec"; +import { ImageAttrs } from "../imgextension/image-spec"; export type ImageCommandsExtension = Extension <{ Commands: { diff --git a/src/components/extension/image-spec.ts b/src/components/extension/imgextension/image-spec.ts similarity index 93% rename from src/components/extension/image-spec.ts rename to src/components/extension/imgextension/image-spec.ts index d1d3483..c668516 100644 --- a/src/components/extension/image-spec.ts +++ b/src/components/extension/imgextension/image-spec.ts @@ -24,8 +24,8 @@ export function defineImageSpec(): ImageSpecExtension { attrs: { src: { default: null }, alt: { default: '' }, - width: { default: null }, - height: { default: null }, + width: { default: 200 }, + height: { default: 200 }, }, group: 'block', defining: true, @@ -69,7 +69,7 @@ export function defineImageSpec(): ImageSpecExtension { if (width) attrs.width = width.toString() if(height) attrs.height = height.toString() - return ['img', attrs] ; + return ['img', { src, alt, width: `${width}`, height: `${height}` }] }, }); } diff --git a/src/components/extension/image.ts b/src/components/extension/imgextension/image.ts similarity index 100% rename from src/components/extension/image.ts rename to src/components/extension/imgextension/image.ts diff --git a/src/components/extension/signature/placeholder-command.ts b/src/components/extension/signature/placeholder-command.ts new file mode 100644 index 0000000..1c1aa9d --- /dev/null +++ b/src/components/extension/signature/placeholder-command.ts @@ -0,0 +1,51 @@ +import { defineCommands, insertNode, type Extension } from "prosekit/core"; +import { PlaceholderAttrs } from "./placeholder-spec"; + +export type PlaceholderCommandsExtension = Extension<{ + Commands: { + insertPlaceholder: [attrs?: PlaceholderAttrs]; + insertSignatureInPlaceholder: [src: string, attrs?: Partial] + }; +}>; + +export function definePlaceholderCommands(): PlaceholderCommandsExtension { + return defineCommands({ + insertPlaceholder: (attrs?: PlaceholderAttrs) => { + return insertNode({ + type: 'placeholder', + attrs: { + id: attrs?.id || `placeholder-${Math.random().toString(36).substr(2, 9)}`, + ...attrs + } + }); + }, + insertSignatureInPlaceholder: (src: string, attrs?: Partial) => { + return (state, dispatch) => { + let placeholderPos = -1; + + // Find the first placeholder with matching party that doesn't have a signature + state.doc.descendants((node, pos) => { + if (node.type.name === 'placeholder' && + node.attrs.party === attrs?.party && + !node.attrs.signatureSrc) { + placeholderPos = pos; + return false; + } + }); + + if (placeholderPos !== -1) { + const tr = state.tr.setNodeMarkup(placeholderPos, undefined, { + ...state.doc.nodeAt(placeholderPos)?.attrs, + signatureSrc: src, + ...attrs + }); + + if (dispatch) dispatch(tr); + return true; + } + return false; + }; + } + }); +} + diff --git a/src/components/extension/signature/placeholder-plugin.ts b/src/components/extension/signature/placeholder-plugin.ts new file mode 100644 index 0000000..f8b1ab7 --- /dev/null +++ b/src/components/extension/signature/placeholder-plugin.ts @@ -0,0 +1,70 @@ +// placeholder-plugin.ts +import { Plugin, PluginKey } from 'prosemirror-state'; + +export const placeholderInteractionPlugin = new Plugin({ + key: new PluginKey('placeholderInteraction'), + state: { + init() { + return { + dragging: null, + resizing: null, + activePlaceholderId: null + }; + }, + apply(tr, value) { + // Update active placeholder ID if set in transaction metadata + const placeholderId = tr.getMeta('activePlaceholder'); + return placeholderId !== undefined + ? { ...value, activePlaceholderId: placeholderId } + : value; + } + }, + + props: { + handleDOMEvents: { + mousedown(view, event) { + const target = event.target as HTMLElement; + + // Check for resize handle + if (target.classList.contains('resize-handle')) { + const placeholder = target.closest('.signature-placeholder'); + if (!placeholder) return false; + + const startX = event.clientX; + const startY = event.clientY; + const startWidth = placeholder.clientWidth; + const startHeight = placeholder.clientHeight; + + const mouseMoveHandler = (moveEvent: MouseEvent) => { + const deltaX = moveEvent.clientX - startX; + const deltaY = moveEvent.clientY - startY; + + const newWidth = Math.max(50, startWidth + deltaX); + const newHeight = Math.max(50, startHeight + deltaY); + + // Find the node position + const pos = view.posAtDOM(placeholder, 0); + view.dispatch( + view.state.tr.setMeta('resize', { + width: newWidth, + height: newHeight, + pos + }) + ); + }; + + const mouseUpHandler = () => { + document.removeEventListener('mousemove', mouseMoveHandler); + document.removeEventListener('mouseup', mouseUpHandler); + }; + + document.addEventListener('mousemove', mouseMoveHandler); + document.addEventListener('mouseup', mouseUpHandler); + + return true; + } + return false; + } + } + } +}); \ No newline at end of file diff --git a/src/components/extension/signature/placeholder-spec.ts b/src/components/extension/signature/placeholder-spec.ts new file mode 100644 index 0000000..e747140 --- /dev/null +++ b/src/components/extension/signature/placeholder-spec.ts @@ -0,0 +1,93 @@ +import { defineNodeSpec, type Extension } from 'prosekit/core'; + +export interface PlaceholderAttrs { + id?: string | null; + width?: number | null; + height?: number | null; + signatureSrc?: string | null; + resizable?: boolean; + party?: 'first' | 'second' | null; + + +} + +export type PlaceholderSpecExtension = Extension<{ + Nodes: { + placeholder: PlaceholderAttrs + } +}>; + +export function definePlaceholderSpec(): PlaceholderSpecExtension { + return defineNodeSpec({ + name: 'placeholder', + group: 'block', + content: 'inline*', + attrs: { + id: { default: null }, + width: { default: 200 }, + height: { default: 100 }, + signatureSrc: { default: null }, + resizable: { default: true }, + party: { default: null } + }, + parseDOM: [ + { + tag: 'div[data-placeholder]', + getAttrs: (element): PlaceholderAttrs => { + if (!(element instanceof HTMLElement)) return { id: null }; + + return { + id: element.getAttribute('data-id'), + width: parseInt(element.getAttribute('data-width') || '200', 10), + height: parseInt(element.getAttribute('data-height') || '100', 10), + signatureSrc: element.getAttribute('data-signature-src'), + resizable: element.getAttribute('data-resizable') !== 'false', + party: element.getAttribute('data-party') as 'first' | 'second' | null + }; + }, + }, + ], + + toDOM(node) { + const { width, height, signatureSrc, resizable, party } = node.attrs as PlaceholderAttrs; + const borderStyle = signatureSrc + ? 'border: 2px solid ;' + : (party === 'first' + ? 'border: 2px dashed grey;' + : 'border: 2px dashed grey;'); + const resizeStyle = resizable ? 'resize: both; overflow: auto;' : ''; + + return [ + 'div', + { + 'data-placeholder': '', + 'data-id': node.attrs.id, + 'data-width': width, + 'data-height': height, + 'data-signature-src': signatureSrc, + 'data-resizable': resizable, + 'data-party': party, + style: ` + width: ${width}px; + height: ${height}px; + ${borderStyle} + ${resizeStyle} + position: relative; + display: flex; + justify-content: center; + align-items: center; + cursor: move; + `, + draggable: 'true' + }, + signatureSrc ? [ + 'img', + { + src: signatureSrc, + style: 'max-width: 100%; max-height: 100%; object-fit: contain;' + } + ] : (party === 'first' ? 'First Party Signature' : 'Second Party Signature') + ]; + }, + }); +} \ No newline at end of file diff --git a/src/components/extension/signature/placeholder.ts b/src/components/extension/signature/placeholder.ts new file mode 100644 index 0000000..e8075c5 --- /dev/null +++ b/src/components/extension/signature/placeholder.ts @@ -0,0 +1,9 @@ +import { union, type Union } from "prosekit/core"; +import { definePlaceholderSpec, type PlaceholderSpecExtension } from "./placeholder-spec"; +import { definePlaceholderCommands, type PlaceholderCommandsExtension } from "./placeholder-command"; + +export type PlaceholderExtension = Union<[PlaceholderSpecExtension, PlaceholderCommandsExtension]>; + +export function definePlaceholder(): PlaceholderExtension { + return union([definePlaceholderSpec(), definePlaceholderCommands()]); +} \ No newline at end of file diff --git a/src/components/extension/signature/signature-spec.ts b/src/components/extension/signature/signature-spec.ts deleted file mode 100644 index 35b6b38..0000000 --- a/src/components/extension/signature/signature-spec.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { defineNodeSpec } from 'prosekit/core'; - -export function definePlaceholder() { - return defineNodeSpec({ - name: 'placeholder', - group: 'block', - content: 'inline*', // Allows inline content - attrs: { - id: { default: null }, // Unique identifier - width: { default: 200 }, - height: { default: 100 }, - }, - parseDOM: [ - { - tag: 'div[data-placeholder]', - getAttrs: (dom) => ({ - id: dom.getAttribute('data-id'), - width: parseInt(dom.style.width) || 200, - height: parseInt(dom.style.height) || 100, - }), - }, - ], - toDOM(node) { - return [ - 'div', - { - 'data-placeholder': '', - 'data-id': node.attrs.id, - style: `border: 1px dashed gray; padding: 10px; width: ${node.attrs.width}px; height: ${node.attrs.height}px;`, - }, - 0, // Indicates the node can have children - ]; - }, - }); -} diff --git a/src/components/extension/signature/signature.ts b/src/components/extension/signature/signature.ts index 11e57e1..34813c6 100644 --- a/src/components/extension/signature/signature.ts +++ b/src/components/extension/signature/signature.ts @@ -1,4 +1,3 @@ -import { DraggableSignature } from "@/components/ui/dragSize"; import { defineNodeSpec } from "prosekit/core"; export function definesignature(){ diff --git a/src/components/image-Upload.tsx b/src/components/image-Upload.tsx index e031df6..93f24db 100644 --- a/src/components/image-Upload.tsx +++ b/src/components/image-Upload.tsx @@ -1,84 +1,22 @@ +import React, { useEffect, useState, FC, ReactNode } from 'react'; import { useEditor } from 'prosekit/react'; import { PopoverContent, PopoverRoot, PopoverTrigger } from 'prosekit/react/popover'; -import { useEffect, useState, FC, ReactNode } from 'react'; import Button from './ui/button'; import type { EditorExtension } from '../components/extension/extension'; -// Image handling service with direct URL storage -const imageService = { - // Upload image and return direct URL - uploadImage: async (file: File): Promise => { - try { - // Create FormData for file upload - const formData = new FormData(); - formData.append('image', file); - - // Simulate API call - replace with your actual API endpoint - await new Promise(resolve => setTimeout(resolve, 500)); - - // Return a direct URL that doesn't require signing - return `/uploads/${file.name}`; - } catch (error) { - console.error('Upload failed:', error); - throw error; - } - }, - - // Store image metadata in local storage - storeImageMetadata: (imageUrl: string, metadata: ImageMetadata) => { - localStorage.setItem(`image-metadata-${imageUrl}`, JSON.stringify(metadata)); - }, - - // Retrieve image metadata from local storage - getImageMetadata: (imageUrl: string): ImageMetadata | null => { - const stored = localStorage.getItem(`image-metadata-${imageUrl}`); - return stored ? JSON.parse(stored) : null; - } -}; - -interface ImageMetadata { - url: string; - originalName: string; - uploadedAt: number; - size?: number; -} - -const ImageComponent: FC<{ url: string }> = ({ url }) => { - const [metadata, setMetadata] = useState(() => { - return imageService.getImageMetadata(url); - }); - - useEffect(() => { - if (!metadata) { - // If metadata doesn't exist, create and store it - const newMetadata: ImageMetadata = { - url, - originalName: url.split('/').pop() || '', - uploadedAt: Date.now() - }; - imageService.storeImageMetadata(url, newMetadata); - setMetadata(newMetadata); - } - }, [url, metadata]); - - return ( - {metadata?.originalName - ); -}; - -export const ImageUploadPopover: FC<{ +interface ImageUploadPopoverProps { tooltip: string; disabled: boolean; children: ReactNode; -}> = ({ tooltip, disabled, children }) => { +} + +export const ImageUploadPopover: FC = ({ tooltip, disabled, children }) => { const [open, setOpen] = useState(false); const [webUrl, setWebUrl] = useState(''); const [isUploading, setIsUploading] = useState(false); - const [uploadedUrl, setUploadedUrl] = useState(''); + const [uploadedUrl, setUploadedUrl] = useState(''); + const [imageWidth, setImageWidth] = useState(150); + const [imageHeight, setImageHeight] = useState(150); const editor = useEditor(); const handleFileChange = async (event: React.ChangeEvent) => { @@ -87,29 +25,14 @@ export const ImageUploadPopover: FC<{ setIsUploading(true); try { - const url = await imageService.uploadImage(file); - - // Store metadata - const metadata: ImageMetadata = { - url, - originalName: file.name, - uploadedAt: Date.now(), - size: file.size - }; - imageService.storeImageMetadata(url, metadata); - + // Simulated upload + const url = `/uploads/${file.name}`; setUploadedUrl(url); - } catch (error) { - console.error('Upload failed:', error); } finally { setIsUploading(false); } }; - const handleWebUrlChange = (event: React.ChangeEvent) => { - setWebUrl(event.target.value); - }; - const handleSubmit = () => { if (!editor) return; @@ -117,51 +40,47 @@ export const ImageUploadPopover: FC<{ if (imageUrl) { editor.commands.insertImage({ src: imageUrl, - alt: imageService.getImageMetadata(imageUrl)?.originalName || 'image', + alt: 'Uploaded Image', + width: imageWidth, + height: imageHeight, }); } setOpen(false); setWebUrl(''); setUploadedUrl(''); - }; - - const handleOpenChange = (open: boolean) => { - if (!open) { - setTimeout(() => { - setWebUrl(''); - setUploadedUrl(''); - }, 300); - } - setOpen(open); + setImageWidth(150); + setImageHeight(150); }; return ( - + - + {!uploadedUrl && ( <> - + setWebUrl(e.target.value)} /> )} {!webUrl && ( <> - + )} - {(webUrl || uploadedUrl) && ( -
-
- Preview -
- -
+ )}
); -}; \ No newline at end of file +}; diff --git a/src/components/ui/dragSize.tsx b/src/components/ui/dragSize.tsx deleted file mode 100644 index 6e73852..0000000 --- a/src/components/ui/dragSize.tsx +++ /dev/null @@ -1,97 +0,0 @@ -import React, { useState } from 'react'; -import Draggable from 'react-draggable'; - -interface DraggableSignatureProps { - src: string; - onClose: () => void; // Add onClose as a prop -} - -export const DraggableSignature: React.FC = ({ src, onClose }) => { - const [size, setSize] = useState({ width: 100, height: 50 }); - const [isResizing, setIsResizing] = useState(false); - const [startPosition, setStartPosition] = useState({ x: 0, y: 0 }); - - const handleMouseDown = (e: React.MouseEvent) => { - e.preventDefault(); - setIsResizing(true); - setStartPosition({ x: e.clientX, y: e.clientY }); - }; - - const handleMouseMove = (e: MouseEvent) => { - if (isResizing) { - const dx = e.clientX - startPosition.x; - const dy = e.clientY - startPosition.y; - - setSize((prevSize) => ({ - width: Math.max(50, prevSize.width + dx), - height: Math.max(25, prevSize.height + dy), - })); - - setStartPosition({ x: e.clientX, y: e.clientY }); - } - }; - - const handleMouseUp = () => { - setIsResizing(false); - }; - - React.useEffect(() => { - if (isResizing) { - window.addEventListener('mousemove', handleMouseMove); - window.addEventListener('mouseup', handleMouseUp); - } else { - window.removeEventListener('mousemove', handleMouseMove); - window.removeEventListener('mouseup', handleMouseUp); - } - return () => { - window.removeEventListener('mousemove', handleMouseMove); - window.removeEventListener('mouseup', handleMouseUp); - }; - }, [isResizing]); - - return ( - -
- Signature -
- {/* Close Button */} - -
-
- ); -}; diff --git a/src/components/ui/editor.tsx b/src/components/ui/editor.tsx index c30b453..e64665b 100644 --- a/src/components/ui/editor.tsx +++ b/src/components/ui/editor.tsx @@ -2,23 +2,24 @@ import 'prosekit/basic/style.css'; import { createEditor } from 'prosekit/core'; import { ProseKit } from 'prosekit/react'; import { useEffect, useMemo, useState } from 'react'; -import Draggable from 'react-draggable'; import Toolbar from '../ui/toolbars'; import Button from './button'; import { defineExtension } from '../extension/extension'; import { SignatureModal } from './signatureModal'; export default function Editor() { - const [selectedSignature, setSelectedSignature] = useState(null); - const [isModalOpen, setModalOpen] = useState(false); - const [placeholderSize, setPlaceholderSize] = useState({ width: 200, height: 100 }); - // Initialize editor with extensions const editor = useMemo(() => { const extension = defineExtension(); return createEditor({ extension }); }, []); + // State for signature modal + const [isSignatureModalOpen, setSignatureModalOpen] = useState(false); + + // Track the current party for signature insertion + const [currentSignatureParty, setCurrentSignatureParty] = useState<'first' | 'second' | null>(null); + // Load saved content on editor mount useEffect(() => { const savedContent = localStorage.getItem('editorContent'); @@ -34,123 +35,83 @@ export default function Editor() { alert('Content saved'); }; - // Handle placeholder resizing and image resizing together - const handleResize = (e: React.MouseEvent) => { - const startX = e.clientX; - const startY = e.clientY; - - const onMouseMove = (event: MouseEvent) => { - const dx = event.clientX - startX; - const dy = event.clientY - startY; - - setPlaceholderSize((prevSize) => ({ - width: Math.max(100, prevSize.width + dx), - height: Math.max(50, prevSize.height + dy), - })); - }; - - const onMouseUp = () => { - window.removeEventListener('mousemove', onMouseMove); - window.removeEventListener('mouseup', onMouseUp); - }; - - window.addEventListener('mousemove', onMouseMove); - window.addEventListener('mouseup', onMouseUp); - }; - - // Handle signature selection and render inside the placeholder - const handleSignatureSelect = (src: string) => { - setSelectedSignature(src); - setModalOpen(false); - }; - - // Handle image removal - const handleRemoveImage = () => { - setSelectedSignature(null); + // Handle signature selection + const handleSignatureSelect = (src: string, name: string) => { + if (currentSignatureParty) { + const tr = editor.state.tr; + + editor.state.doc.descendants((node, pos) => { + if (node.type.name === 'placeholder' && node.attrs.party === currentSignatureParty) { + const nodesToInsert = []; + + // Add the custom name heading + if (name) { + const customHeading = editor.schema.nodes.heading.create( + { level: 1 }, + editor.schema.text(name) + ); + nodesToInsert.push(customHeading); + } + + // Add the selected signature image + const imageNode = editor.schema.nodes.image.create({ + src, + alt: `${name || currentSignatureParty} Party's Signature`, + }); + nodesToInsert.push(imageNode); + + // Replace the placeholder with the new nodes + tr.replaceWith(pos, pos + node.nodeSize, nodesToInsert); + } + }); + + editor.view.dispatch(tr); + + // Close the modal and reset the party state + setSignatureModalOpen(false); + setCurrentSignatureParty(null); + } }; + return (
- + + - {/* Draggable Placeholder */} - -
!selectedSignature && setModalOpen(true)} - > - {!selectedSignature && Click to add a signature} - - {selectedSignature && ( -
- {/* Image */} - Signature - {/* Close Button */} - -
- )} - - {/* Resize Handle */} -
-
- - {/* Signature Modal */} - {isModalOpen && } + {isSignatureModalOpen && ( + { + setSignatureModalOpen(false); + setCurrentSignatureParty(null); + }} + /> + )} -
+ {/* Editor content mounting point */} +
{ + // Check if clicked element is a placeholder + const placeholderEl = (e.target as HTMLElement).closest('[data-placeholder]'); + if (placeholderEl) { + const party = placeholderEl.getAttribute('data-party'); + if (party === 'first' || party === 'second') { + setCurrentSignatureParty(party as 'first' | 'second'); + setSignatureModalOpen(true); + } + } + }} + >
); -} +} \ No newline at end of file diff --git a/src/components/ui/signatureModal.tsx b/src/components/ui/signatureModal.tsx index afe40af..ec8d42a 100644 --- a/src/components/ui/signatureModal.tsx +++ b/src/components/ui/signatureModal.tsx @@ -1,37 +1,111 @@ import React, { useState } from 'react'; import Modal from 'react-modal'; -export const SignatureModal: React.FC<{ onSelect: (src: string) => void }> = ({ onSelect }) => { - const [isOpen, setIsOpen] = useState(false); +export const SignatureModal: React.FC<{ + party?: 'first' | 'second' | null, + onSelect: (src: string, name: string) => void, + onClose: () => void +}> = ({ party, onSelect, onClose }) => { + const [customName, setCustomName] = useState(''); + const [selectedSignature, setSelectedSignature] = useState(null); const sampleSignatures = [ 'signatures/111.jpg', 'signatures/4153.jpg', - 'signatures/111.jpg', ]; - const handleSelect = (src: string) => { - onSelect(src); - setIsOpen(false); + const handleSelectSignature = (src: string) => { + setSelectedSignature(src); + }; + + const handleConfirm = () => { + if (selectedSignature) { + const defaultName = party === 'first' ? 'First Party' : 'Second Party'; + onSelect( + selectedSignature, + customName || defaultName + ); + } }; return ( - <> - - setIsOpen(false)} contentLabel="Select Signature"> -

Select a Signature

-
- {sampleSignatures.map((src) => ( - Signature handleSelect(src)} - /> - ))} -
-
- + +

Select {party ? party.toUpperCase() : ''} Signature

+ setCustomName(e.target.value)} + style={{ + marginBottom: '20px', + padding: '8px', + width: '100%', + border: '1px solid #ccc', + borderRadius: '4px', + }} + /> +
+ {sampleSignatures.map((src) => ( + {`${party} handleSelectSignature(src)} + /> + ))} +
+
+ + +
+
); -}; +}; \ No newline at end of file diff --git a/src/components/ui/toolbars.tsx b/src/components/ui/toolbars.tsx index 325be99..58ea748 100644 --- a/src/components/ui/toolbars.tsx +++ b/src/components/ui/toolbars.tsx @@ -3,10 +3,58 @@ import { useEditor } from 'prosekit/react' import Button from './button' import type { EditorExtension } from '../extension/extension' import { ImageUploadPopover} from '../image-Upload' +import { useState } from 'react' -export default function Toolbar() { + +export default function Toolbar(){ const editor = useEditor({ update: true }) + const handleAddPlaceholders = () => { + const tr = editor.state.tr; + + // Find the current end position of the document to insert placeholders sequentially + const endPos = editor.state.doc.content.size; + + if (!editor.state.doc.textContent.includes('First Party')) { + // Add the First Party placeholder + const firstHeading = editor.schema.nodes.heading.create( + { level: 1 }, + editor.schema.text('First Party') + ); + const firstPlaceholder = editor.schema.nodes.placeholder.create({ + id: 'first-party-placeholder', + party: 'first', + width: 250, + height: 100, + }); + + // Insert heading and placeholder + tr.insert(endPos, firstHeading); + tr.insert(endPos + firstHeading.nodeSize, firstPlaceholder); + } else if (!editor.state.doc.textContent.includes('Second Party')) { + // Add the Second Party placeholder + const secondHeading = editor.schema.nodes.heading.create( + { level: 1 }, + editor.schema.text('Second Party') + ); + const secondPlaceholder = editor.schema.nodes.placeholder.create({ + id: 'second-party-placeholder', + party: 'second', + width: 250, + height: 100, + }); + + // Insert heading and placeholder + tr.insert(endPos, secondHeading); + tr.insert(endPos + secondHeading.nodeSize, secondPlaceholder); + } + + editor.view.dispatch(tr); +}; + + + + return (
+
- ) + ); + } \ No newline at end of file diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index 61f64e1..09f37d9 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -1,6 +1,12 @@ import "@/styles/globals.css"; import type { AppProps } from "next/app"; +import { useEffect } from "react"; +import Modal from "react-modal"; export default function App({ Component, pageProps }: AppProps) { + useEffect(() => { + Modal.setAppElement("#__next"); // This sets the app element for react-modal + }, []); + return ; -} \ No newline at end of file +} diff --git a/src/pages/index.tsx b/src/pages/index.tsx index b301d88..360e1f0 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -11,6 +11,7 @@ export default function HomePage() {

My Custom Editor

+
); } \ No newline at end of file diff --git a/src/styles/globals.css b/src/styles/globals.css index 54a9f01..f686810 100644 --- a/src/styles/globals.css +++ b/src/styles/globals.css @@ -76,6 +76,7 @@ body { align-items: center; justify-content: center; position: relative; + background-color: #333; } .resize-handle { @@ -100,3 +101,71 @@ button { padding: 10px; margin-top: 20px; } + +input[type='range'] { + width: 100%; + margin: 8px 0; + background: var(--border-color); + height: 4px; + border-radius: 4px; +} + +input[type='range']::-webkit-slider-thumb { + -webkit-appearance: none; + width: 16px; + height: 16px; + background: var(--primary-color); + border-radius: 50%; + cursor: pointer; +} + +/* editor.css */ +.editor-content div[data-placeholder] { + margin: 10px 0; + cursor: pointer; +} + +[data-placeholder] { + transition: box-shadow 0.2s ease; +} + +[data-placeholder]:active { + cursor: grabbing; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); +} + + + +.editor-container { + padding: 20px; + border: 1px solid #ccc; +} + +.modal-backdrop { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.5); + display: flex; + align-items: center; + justify-content: center; +} + +.modal { + background: white; + padding: 20px; + border-radius: 10px; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); +} + +.signature-options img { + border: 1px solid #ccc; + border-radius: 5px; + transition: transform 0.2s ease; +} + +.signature-options img:hover { + transform: scale(1.1); +} \ No newline at end of file