{"_id":"@drozd-red/strapi-plugin-copy-any-component","_rev":"2-a2bdfaa01c1813e014c0463bf9440010","name":"@drozd-red/strapi-plugin-copy-any-component","dist-tags":{"latest":"1.1.2"},"versions":{"1.1.1":{"name":"@drozd-red/strapi-plugin-copy-any-component","version":"1.1.1","keywords":["strapi","strapi-plugin","component","copy","drag-and-drop","dynamic-zone","content-management","cms","strapi-v5"],"author":"","license":"MIT","_id":"@drozd-red/strapi-plugin-copy-any-component@1.1.1","maintainers":[{"name":"anna_andreeva","email":"andreeva.anna2909@gmail.com"},{"name":"r3g3m8","email":"futb.kirill8888@yandex.ru"}],"homepage":"https://strapi-plugin-copy-component.web.app","dist":{"shasum":"83b7e017f1c52aadce683fe1c0ae004fd0d82695","tarball":"https://registry.npmjs.org/@drozd-red/strapi-plugin-copy-any-component/-/strapi-plugin-copy-any-component-1.1.1.tgz","fileCount":10,"integrity":"sha512-34mgX0+epQwfSr7nfeM6p4cwmKDLqGxS10M4NG7E7XA09KkvzOn7Bkfb8vdw9RhiWPfXYqPlou/Rnv4VI4PiMg==","signatures":[{"sig":"MEUCIQDDU0KziqmBBrvl1D03uny7wKRBJ5f2An49DoC/ucKa6wIgO02J2EDAJ0DbTRqFIiybnPosUColpL0DW3GC/WG2fQE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":102466},"main":"./strapi-server.js","strapi":{"kind":"plugin","name":"copy-any-component","description":"A powerful Strapi plugin that allows you to copy and reorder components between pages","displayName":"Copy Any Component"},"engines":{"npm":">=6.0.0","node":">=18.0.0 <=24.x.x"},"exports":{"./package.json":"./package.json","./strapi-admin":"./strapi-admin.js","./strapi-server":"./strapi-server.js"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"anna_andreeva","email":"andreeva.anna2909@gmail.com"},"_npmVersion":"10.8.2","description":"A powerful Strapi plugin that allows you to copy and reorder components (sections) between pages using an intuitive drag-and-drop interface. Works with any content type and dynamic zone - no code required!","directories":{},"_nodeVersion":"20.18.1","_hasShrinkwrap":false,"packageManager":"pnpm@10.14.0+sha512.ad27a79641b49c3e481a16a805baa71817a04bbe06a38d17e60e2eaee83f6a146c6a688125f5792e48dd5ba30e7da52a5cda4c3992b9ccf333f9ce223af84748","devDependencies":{},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0","@strapi/icons":"^2.0.0-rc.1 || ^2.0.0","@strapi/strapi":"^5.0.0","@strapi/design-system":"^2.0.0-rc.1 || ^2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/strapi-plugin-copy-any-component_1.1.1_1773843182326_0.32132399072392004","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@drozd-red/strapi-plugin-copy-any-component","version":"1.1.2","description":"A powerful Strapi plugin that allows you to copy and reorder components (sections) between pages using an intuitive drag-and-drop interface. Works with any content type and dynamic zone - no code required!","keywords":["strapi","strapi-plugin","component","copy","drag-and-drop","dynamic-zone","content-management","cms","strapi-v5"],"strapi":{"name":"copy-any-component","description":"A powerful Strapi plugin that allows you to copy and reorder components between pages","kind":"plugin","displayName":"Copy Any Component"},"main":"./strapi-server.js","exports":{"./package.json":"./package.json","./strapi-admin":"./strapi-admin.js","./strapi-server":"./strapi-server.js"},"homepage":"https://strapi-plugin-copy-component.web.app","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"peerDependencies":{"@strapi/strapi":"^5.0.0","@strapi/design-system":"^2.0.0-rc.1 || ^2.0.0","@strapi/icons":"^2.0.0-rc.1 || ^2.0.0","react":"^18.0.0","react-dom":"^18.0.0"},"license":"MIT","engines":{"node":">=18.0.0 <=24.x.x","npm":">=6.0.0"},"packageManager":"pnpm@10.14.0+sha512.ad27a79641b49c3e481a16a805baa71817a04bbe06a38d17e60e2eaee83f6a146c6a688125f5792e48dd5ba30e7da52a5cda4c3992b9ccf333f9ce223af84748","devDependencies":{},"author":"","_id":"@drozd-red/strapi-plugin-copy-any-component@1.1.2","_nodeVersion":"20.18.1","_npmVersion":"10.8.2","dist":{"integrity":"sha512-dcMxZIBZdCYt9oEHkuUtP86vkgcSn/HPjmRNkKYflisTQ9vdpswcqnYpfKfv8T8gaqghnbaaNlQDQHanmT5vzQ==","shasum":"99a2b2a136ef77fcb47e0b2a6887581f1c911b84","tarball":"https://registry.npmjs.org/@drozd-red/strapi-plugin-copy-any-component/-/strapi-plugin-copy-any-component-1.1.2.tgz","fileCount":10,"unpackedSize":102396,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIEWxFWETAdU8q5gWs821c3c/QYg65kLR1wbZpyjhgvbdAiEAxb2m+H3ruEhM9aJQ70mLlAEaEtMCDUmnfr8b2z+cbdQ="}]},"_npmUser":{"name":"anna_andreeva","email":"andreeva.anna2909@gmail.com"},"directories":{},"maintainers":[{"name":"anna_andreeva","email":"andreeva.anna2909@gmail.com"},{"name":"r3g3m8","email":"futb.kirill8888@yandex.ru"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/strapi-plugin-copy-any-component_1.1.2_1773845663165_0.13587343690257603"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-18T14:13:02.200Z","modified":"2026-03-18T14:54:23.455Z","1.1.1":"2026-03-18T14:13:02.480Z","1.1.2":"2026-03-18T14:54:23.293Z"},"license":"MIT","homepage":"https://strapi-plugin-copy-component.web.app","keywords":["strapi","strapi-plugin","component","copy","drag-and-drop","dynamic-zone","content-management","cms","strapi-v5"],"description":"A powerful Strapi plugin that allows you to copy and reorder components (sections) between pages using an intuitive drag-and-drop interface. Works with any content type and dynamic zone - no code required!","maintainers":[{"name":"anna_andreeva","email":"andreeva.anna2909@gmail.com"},{"name":"r3g3m8","email":"futb.kirill8888@yandex.ru"}],"readme":"# Copy Any Component (Strapi v5)\r\n\r\nThis Strapi Admin plugin allows you to:\r\n\r\n- copy components between entries;\r\n- move blocks with drag-and-drop;\r\n- reorder blocks inside the target entry;\r\n- save changes as draft (without auto-publish);\r\n- work with locales and dynamic zones `blocks` / `content`.\r\n\r\n## Requirements\r\n\r\n- Node.js `>=18`\r\n- Strapi v5\r\n- React 18 in Strapi Admin\r\n\r\nFor local development, make sure these packages are available in your backend project:\r\n\r\n- `@strapi/design-system`\r\n- `@strapi/icons`\r\n\r\n## Plugin structure\r\n\r\nKey files:\r\n\r\n- `strapi-server.js` - plugin server side (bootstrap, routes, controllers)\r\n- `strapi-admin.js` - plugin admin entry point\r\n- `admin/src/*` - plugin admin UI\r\n- `server/src/services/advanced-controller.js` - main copy/validation logic\r\n- `server/src/services/component-copy.js` - legacy service (compatibility)\r\n\r\n## Enable in current project (local resolve mode)\r\n\r\n`backend/config/plugins.ts`:\r\n\r\n```ts\r\nexport default () => ({\r\n  \"copy-any-component\": {\r\n    enabled: true,\r\n    resolve: \"./src/plugins/copy-any-component\",\r\n  },\r\n});\r\n```\r\n\r\n## Enable as an npm package\r\n\r\nAfter publishing to npm:\r\n\r\n1. Install the package in `backend`:\r\n\r\n```bash\r\npnpm add @drozd-red/strapi-plugin-copy-any-component\r\n```\r\n\r\n2. Update `backend/config/plugins.ts`:\r\n\r\n```ts\r\nexport default () => ({\r\n  \"copy-any-component\": {\r\n    enabled: true,\r\n    config: {\r\n      // optional initial values\r\n      // contentType: \"api::page.page\",\r\n      // dynamicZoneField: \"blocks\",\r\n    },\r\n  },\r\n});\r\n```\r\n\r\n3. Restart Strapi:\r\n\r\n```bash\r\npnpm develop\r\n```\r\n\r\n## Save and publish behavior\r\n\r\n- The plugin updates sections in the target entry.\r\n- The plugin publish endpoint intentionally returns success with `skippedPublish: true`.\r\n- This means the entry stays in draft/modified state until you publish it manually in Content Manager.\r\n\r\n## Constraints and validation\r\n\r\n- Only `blocks` and `content` zones are allowed.\r\n- Component compatibility is validated:\r\n  - `blocks` -> component uid must start with `epic.`\r\n  - `content` -> component uid must start with `content-blocks.`\r\n- The plugin removes component system fields (`id`, `documentId`, `createdAt`, etc.) before saving.\r\n\r\n## Plugin endpoints\r\n\r\nAdmin routes:\r\n\r\n- `GET /copy-any-component/content-types`\r\n- `PUT /copy-any-component/config`\r\n- `GET /copy-any-component/pages`\r\n- `GET /copy-any-component/pages/:pageId/sections`\r\n- `POST /copy-any-component/pages/:sourcePageId/copy-to/:targetPageId`\r\n- `PUT /copy-any-component/pages/:pageId/sections`\r\n- `POST /copy-any-component/pages/:pageId/publish`\r\n\r\n## Troubleshooting\r\n\r\n### `Failed to fetch dynamically imported module ... HomePage.tsx`\r\n\r\nCheck that:\r\n\r\n- you use the current `strapi-admin.js` without `.ts` extension imports;\r\n- `@strapi/design-system` and `@strapi/icons` are installed in `backend`;\r\n- you fully restarted Strapi after changes (`pnpm develop`).\r\n\r\n### Out of memory during `strapi build`\r\n\r\nIncrease Node.js memory:\r\n\r\n```powershell\r\n$env:NODE_OPTIONS=\"--max-old-space-size=6144\"; pnpm build\r\n```\r\n\r\n## License\r\n\r\nMIT\r\n\r\n","readmeFilename":"README.md"}