From cf0f252cbccad88cd24592d2e18772b3503ff6fc Mon Sep 17 00:00:00 2001 From: Caio Pizzol Date: Fri, 6 Feb 2026 18:52:01 -0300 Subject: [PATCH 1/3] refactor: move gallery demos to demos/ and flatten structure Move website demo gallery projects from examples/ to a dedicated demos/ folder. Flatten category subfolders (getting-started/, advanced/, etc.) to root level since filtering happens in the gallery UI. Remove AI demos that are no longer maintained. --- demos/.gitignore | 5 + demos/README.md | 5 + .../getting-started => demos}/cdn/README.md | 0 .../cdn/demo-config.json | 0 .../cdn}/demo-thumbnail.png | Bin .../cdn/demo-video.mp4 | Bin .../cdn/file-upload.css | 0 .../cdn/file-upload.js | 0 .../getting-started => demos}/cdn/index.html | 0 .../cdn/package.json | 0 .../public => demos/cdn}/sample.docx | Bin .../chrome-extension/README.md | 0 .../chrome-extension/background.js | 0 .../chrome-extension/content.js | 0 .../dist/docx-validator.bundle.js | 0 .../dist/docx-validator.bundle.js.LICENSE.txt | 0 .../chrome-extension/docx-validator.js | 0 .../icons/icon-128x128-disabled.png | Bin .../chrome-extension/icons/icon-128x128.png | Bin .../icons/icon-16x16-disabled.png | Bin .../chrome-extension/icons/icon-16x16.png | Bin .../icons/icon-19x19-disabled.png | Bin .../chrome-extension/icons/icon-19x19.png | Bin .../icons/icon-48x48-disabled.png | Bin .../chrome-extension/icons/icon-48x48.png | Bin .../chrome-extension/icons}/logo.webp | Bin .../chrome-extension/lib/style.css | 0 .../chrome-extension/lib/superdoc.umd.js | 0 .../chrome-extension/manifest.json | 0 .../chrome-extension/modal.css | 0 .../chrome-extension/modal.html | 0 .../chrome-extension/package.json | 0 .../chrome-extension/popup.html | 0 .../chrome-extension/popup.js | 0 .../test_docs/Lunch Haiku (5).docx | Bin .../test_docs/Mutual NDA_draft (1).docx | Bin .../test_docs/Nda Formatted Doc MS WORD.docx | Bin .../test_docs/Nda Formatted Doc.docx | Bin .../test_docs/nda_formatted_doc (1).md | 0 .../chrome-extension/test_docs/sdpr (23).docx | Bin .../chrome-extension/tester.html | 0 .../chrome-extension/webpack.config.js | 0 .../chrome-extension/demo-config.json | 0 .../chrome-extension/demo-thumbnail.png | Bin .../chrome-extension/demo-video.mp4 | Bin .../custom-mark}/.gitignore | 0 .../custom-mark/README.md | 0 .../custom-mark/assets}/sample-document.docx | Bin .../custom-mark/demo-config.json | 0 .../custom-mark/demo-thumbnail.png | Bin .../custom-mark/demo-video.mp4 | Bin .../custom-mark/index.html | 0 .../custom-mark}/package.json | 0 .../public/circle-chevron-down-solid.svg | 0 .../custom-mark/public/headphones-solid.svg | 0 .../custom-mark}/public/logo.webp | Bin .../custom-mark}/public/superdoc-logo.png | Bin .../custom-mark/src/App.vue | 0 .../custom-mark}/src/UploadFile.vue | 0 .../custom-mark/src/custom-mark.js | 0 .../custom-mark}/src/main.js | 0 .../custom-mark}/src/style.css | 0 .../custom-mark}/vite.config.js | 0 .../fields => demos/custom-node}/.gitignore | 0 .../custom-node/README.md | 0 .../custom-node/demo-config.json | 0 .../custom-node}/demo-thumbnail.png | Bin .../custom-node}/demo-video.mp4 | Bin .../fields => demos/custom-node}/index.html | 0 .../fields => demos/custom-node}/package.json | 0 .../custom-node}/public/logo.webp | Bin .../custom-node}/public/sample-document.docx | Bin .../custom-node/src/App.vue | 0 .../custom-node}/src/UploadFile.vue | 0 .../custom-node/src/custom-node.js | 0 .../fields => demos/custom-node}/src/main.js | 0 .../custom-node}/src/style.css | 0 .../custom-node}/vite.config.js | 0 .../docx-from-html}/.gitignore | 0 .../docx-from-html/README.md | 0 .../docx-from-html/demo-config.json | 0 .../docx-from-html}/demo-thumbnail.png | Bin .../docx-from-html/demo-video.mp4 | Bin .../docx-from-html/index.html | 0 .../docx-from-html}/package.json | 0 .../docx-from-html}/public/logo.webp | Bin .../public}/sample-document.docx | Bin .../docx-from-html}/public/superdoc-logo.png | Bin .../docx-from-html/src/App.vue | 0 .../docx-from-html}/src/main.js | 0 .../docx-from-html/src/style.css | 0 .../docx-from-html}/vite.config.js | 0 .../docxtemplater/README.md | 0 .../docxtemplater/demo-config.json | 0 .../docxtemplater/demo-thumbnail.png | Bin .../docxtemplater/demo-video.mp4 | Bin .../advanced => demos}/docxtemplater/demo.gif | Bin .../docxtemplater/index.html | 0 .../docxtemplater/jsconfig.json | 0 .../docxtemplater/package.json | 0 .../docxtemplater/public/favicon.ico | Bin .../docxtemplater/src/App.vue | 0 .../docxtemplater/src/assets/template.docx | Bin .../src/components/DocumentTab.vue | 0 .../docxtemplater/src/fileProcessing.js | 0 .../docxtemplater/src/main.js | 0 .../docxtemplater/src/utils.js | 0 .../docxtemplater/vite.config.js | 0 .../fields}/.gitignore | 0 {examples/advanced => demos}/fields/README.md | 0 .../fields/demo-config.json | 0 .../fields}/demo-thumbnail.png | Bin .../fields}/demo-video.mp4 | Bin .../fields}/index.html | 0 .../custom-mark => demos/fields}/package.json | 0 .../fields}/public/logo.webp | Bin .../fields}/public/sample-document.docx | Bin .../advanced => demos}/fields/src/App.vue | 0 .../fields}/src/UploadFile.vue | 0 .../fields}/src/main.js | 0 .../fields}/src/style.css | 0 .../fields}/vite.config.js | 0 .../grading-papers/.gitignore | 0 .../grading-papers/README.md | 0 .../grading-papers/app/globals.css | 0 .../app/grading/[id]/_doc-links.js | 0 .../app/grading/[id]/loading.tsx | 0 .../grading-papers/app/grading/[id]/page.tsx | 0 .../grading-papers/app/layout.tsx | 0 .../grading-papers/app/loading.tsx | 0 .../grading-papers/app/page.tsx | 0 .../grading-papers/assets/docs/assign-1.docx | Bin .../grading-papers/assets/docs/assign-1.js | 0 .../grading-papers/assets/docs/assign-2.docx | Bin .../grading-papers/assets/docs/assign-2.js | 0 .../grading-papers/assets/docs/assign-3.docx | Bin .../grading-papers/assets/docs/assign-3.js | 0 .../grading-papers/assets/docs/assign-4.docx | Bin .../grading-papers/assets/docs/assign-4.js | 0 .../grading-papers/assets/docs/assign-5.docx | Bin .../grading-papers/assets/docs/assign-5.js | 0 .../grading-papers/components.json | 0 .../components/theme-provider.tsx | 0 .../components/ui/accordion.tsx | 0 .../components/ui/alert-dialog.tsx | 0 .../grading-papers/components/ui/alert.tsx | 0 .../components/ui/aspect-ratio.tsx | 0 .../grading-papers/components/ui/avatar.tsx | 0 .../grading-papers/components/ui/badge.tsx | 0 .../components/ui/breadcrumb.tsx | 0 .../grading-papers/components/ui/button.tsx | 0 .../grading-papers/components/ui/calendar.tsx | 0 .../grading-papers/components/ui/card.tsx | 0 .../grading-papers/components/ui/carousel.tsx | 0 .../grading-papers/components/ui/chart.tsx | 0 .../grading-papers/components/ui/checkbox.tsx | 0 .../components/ui/collapsible.tsx | 0 .../grading-papers/components/ui/command.tsx | 0 .../components/ui/context-menu.tsx | 0 .../grading-papers/components/ui/dialog.tsx | 0 .../grading-papers/components/ui/drawer.tsx | 0 .../components/ui/dropdown-menu.tsx | 0 .../grading-papers/components/ui/form.tsx | 0 .../components/ui/hover-card.tsx | 0 .../components/ui/input-otp.tsx | 0 .../grading-papers/components/ui/input.tsx | 0 .../grading-papers/components/ui/label.tsx | 0 .../grading-papers/components/ui/menubar.tsx | 0 .../components/ui/navigation-menu.tsx | 0 .../components/ui/pagination.tsx | 0 .../grading-papers/components/ui/popover.tsx | 0 .../grading-papers/components/ui/progress.tsx | 0 .../components/ui/radio-group.tsx | 0 .../components/ui/resizable.tsx | 0 .../components/ui/scroll-area.tsx | 0 .../grading-papers/components/ui/select.tsx | 0 .../components/ui/separator.tsx | 0 .../grading-papers/components/ui/sheet.tsx | 0 .../grading-papers/components/ui/sidebar.tsx | 0 .../grading-papers/components/ui/skeleton.tsx | 0 .../grading-papers/components/ui/slider.tsx | 0 .../grading-papers/components/ui/sonner.tsx | 0 .../grading-papers/components/ui/switch.tsx | 0 .../grading-papers/components/ui/table.tsx | 0 .../grading-papers/components/ui/tabs.tsx | 0 .../grading-papers/components/ui/textarea.tsx | 0 .../grading-papers/components/ui/toast.tsx | 0 .../grading-papers/components/ui/toaster.tsx | 0 .../components/ui/toggle-group.tsx | 0 .../grading-papers/components/ui/toggle.tsx | 0 .../grading-papers/components/ui/tooltip.tsx | 0 .../components/ui/use-mobile.tsx | 0 .../grading-papers/components/ui/use-toast.ts | 0 .../grading-papers/demo-config.json | 0 .../grading-papers/demo-thumbnail.png | Bin .../grading-papers/hooks/use-mobile.tsx | 0 .../grading-papers/hooks/use-toast.ts | 0 .../grading-papers/lib/utils.ts | 0 .../grading-papers/next.config.mjs | 0 .../grading-papers/package.json | 0 .../grading-papers/pnpm-lock.yaml | 0 .../grading-papers/postcss.config.mjs | 0 .../grading-papers/public/assign-1.docx | Bin .../grading-papers/public/assign-2.docx | Bin .../grading-papers/public/assign-3.docx | Bin .../grading-papers/public/assign-4.docx | Bin .../grading-papers/public/assign-5.docx | Bin .../jamie_smith_bio220_research_proposal.docx | Bin .../public/placeholder-logo.png | Bin .../public/placeholder-logo.svg | 0 .../public/placeholder-user.jpg | Bin .../grading-papers/public/placeholder.jpg | Bin .../grading-papers/public/placeholder.svg | 0 .../grading-papers/public/~$alex.docx | Bin .../grading-papers/styles/globals.css | 0 .../grading-papers/tailwind.config.ts | 0 .../grading-papers/tsconfig.json | 0 .../html-editor}/.gitignore | 0 .../html-editor/.vscode/extensions.json | 0 .../advanced => demos}/html-editor/README.md | 0 .../html-editor/demo-config.json | 0 .../html-editor/demo-thumbnail.png | Bin .../html-editor/demo-video.mp4 | Bin .../advanced => demos}/html-editor/index.html | 0 .../html-editor}/package.json | 0 .../html-editor}/public/superdoc-logo.png | Bin .../html-editor/src/App.vue | 0 .../html-editor}/src/main.js | 0 .../html-editor/src/style.css | 0 .../html-editor}/vite.config.js | 0 .../linked-sections}/.gitignore | 0 .../linked-sections/README.md | 0 .../linked-sections/demo-config.json | 0 .../linked-sections/demo-thumbnail.png | Bin .../linked-sections/demo-video.mp4 | Bin .../linked-sections}/index.html | 0 .../linked-sections/package.json | 0 .../linked-sections}/public/logo.webp | Bin .../linked-sections/src/App.vue | 0 .../linked-sections}/src/UploadFile.vue | 0 .../linked-sections}/src/main.js | 0 .../linked-sections}/src/style.css | 0 .../linked-sections}/vite.config.js | 0 .../loading-from-json/demo-config.json | 0 .../loading-from-json/demo-thumbnail.png | Bin .../loading-from-json/demo-video.mp4 | Bin .../loading-from-json/index.html | 0 .../loading-from-json/package.json | 0 .../loading-from-json/src/main.js | 0 .../loading-from-json/src/style.css | 0 .../loading-from-json/vite.config.js | 0 .../nextjs-ssr/.gitignore | 0 .../nextjs-ssr/README.md | 0 .../nextjs-ssr/demo-config.json | 0 .../nextjs-ssr/demo-thumbnail.png | Bin .../nextjs-ssr/demo-video.mp4 | Bin .../nextjs-ssr/jsconfig.json | 0 .../nextjs-ssr/next.config.mjs | 0 .../nextjs-ssr/package.json | 0 .../nextjs-ssr/public/file.svg | 0 .../nextjs-ssr/public/globe.svg | 0 .../nextjs-ssr/public/next.svg | 0 .../nextjs-ssr}/public/sample-document.docx | Bin .../nextjs-ssr}/public/sample.docx | Bin .../nextjs-ssr/public/vercel.svg | 0 .../nextjs-ssr/public/window.svg | 0 .../nextjs-ssr/src/app/SuperDoc/superdoc.css | 0 .../nextjs-ssr/src/app/SuperDoc/superdoc.js | 0 .../nextjs-ssr/src/app/favicon.ico | Bin .../nextjs-ssr/src/app/globals.css | 0 .../nextjs-ssr/src/app/layout.js | 0 .../nextjs-ssr/src/app/page.js | 0 .../nextjs-ssr/src/app/page.module.css | 0 .../integrations => demos}/nodejs/.gitignore | 0 .../integrations => demos}/nodejs/README.md | 0 .../nodejs/demo-config.json | 0 .../nodejs/demo-thumbnail.png | Bin .../nodejs/demo-video.mp4 | Bin .../nodejs/document-b64.js | 0 .../integrations => demos}/nodejs/document.js | 0 .../nodejs/file-polyfill.js | 0 .../nodejs/package.json | 0 .../nodejs/sample-document.docx | Bin .../integrations => demos}/nodejs/server.js | 0 .../react/demo-config.json | 0 .../react}/demo-thumbnail.png | Bin .../react/demo-video.mp4 | Bin .../react}/index.html | 0 .../react/package.json | 0 .../cdn => demos/react/public}/sample.docx | Bin .../react/src/App.jsx | 0 .../react}/src/components/DocumentEditor.jsx | 0 .../react/src/main.jsx | 0 .../react}/vite.config.js | 0 .../replace-content/README.md | 0 .../replace-content/demo-config.json | 0 .../replace-content}/demo-thumbnail.png | Bin .../replace-content/demo-video.mp4 | Bin .../replace-content}/index.html | 0 .../replace-content/package.json | 0 .../replace-content}/public/sample.docx | Bin .../replace-content/src/App.jsx | 0 .../src/components/DocumentEditor.jsx | 0 .../replace-content/src/main.jsx | 0 .../replace-content/vite.config.js | 0 {examples => demos}/shared/css/style.css | 0 .../shared/data}/sample-document.docx | Bin .../public => demos/shared/images}/logo.webp | Bin .../shared/images}/superdoc-logo.png | Bin .../shared/vue/UploadFile/UploadFile.vue | 0 .../slack-redlining/README.md | 0 .../cloud-function/package.json | 0 .../slack-redlining/cloud-function/server.js | 0 .../slack-redlining/cloud-function/utils.js | 0 .../slack-redlining/demo-config.json | 0 .../slack-redlining/demo-thumbnail.png | Bin .../slack-redlining/demo-video.mp4 | Bin .../slack-redlining/screenshot.png | Bin .../slack-redlining/zap.json | 0 {examples => demos}/tests/.gitignore | 0 {examples => demos}/tests/Dockerfile | 0 {examples => demos}/tests/README.md | 0 {examples => demos}/tests/package.json | 0 .../tests/playwright.config.js | 0 .../tests/scripts/bootstrap.js | 0 {examples => demos}/tests/test-config.js | 0 {examples => demos}/tests/tests.spec.js | 0 ...d-open-the-main-page-1-chromium-darwin.png | Bin ...ld-open-the-main-page-1-chromium-linux.png | Bin ...d-open-the-main-page-1-chromium-darwin.png | Bin ...ld-open-the-main-page-1-chromium-linux.png | Bin ...d-open-the-main-page-1-chromium-darwin.png | Bin ...ld-open-the-main-page-1-chromium-linux.png | Bin ...d-open-the-main-page-1-chromium-darwin.png | Bin ...ld-open-the-main-page-1-chromium-linux.png | Bin ...d-open-the-main-page-1-chromium-darwin.png | Bin ...ld-open-the-main-page-1-chromium-linux.png | Bin ...d-open-the-main-page-1-chromium-darwin.png | Bin ...ld-open-the-main-page-1-chromium-linux.png | Bin ...d-open-the-main-page-1-chromium-darwin.png | Bin ...ld-open-the-main-page-1-chromium-linux.png | Bin ...d-open-the-main-page-1-chromium-darwin.png | Bin ...ld-open-the-main-page-1-chromium-linux.png | Bin ...d-open-the-main-page-1-chromium-darwin.png | Bin ...ld-open-the-main-page-1-chromium-linux.png | Bin ...d-open-the-main-page-1-chromium-darwin.png | Bin ...ld-open-the-main-page-1-chromium-linux.png | Bin ...d-open-the-main-page-1-chromium-darwin.png | Bin ...ld-open-the-main-page-1-chromium-linux.png | Bin ...d-open-the-main-page-1-chromium-darwin.png | Bin ...ld-open-the-main-page-1-chromium-linux.png | Bin .../text-selection/README.md | 0 .../text-selection/demo-config.json | 0 .../text-selection}/demo-thumbnail.png | Bin .../text-selection/demo-video.mp4 | Bin .../react => demos/text-selection}/index.html | 0 .../text-selection/package.json | 0 .../text-selection}/public/sample.docx | Bin .../text-selection/src/App.jsx | 0 .../src/components/DocumentEditor.jsx | 0 .../text-selection/src/main.jsx | 0 .../text-selection}/vite.config.js | 0 .../customization => demos}/toolbar/README.md | 0 .../toolbar/demo-config.json | 0 .../toolbar/demo-thumbnail.png | Bin .../toolbar/demo-video.mp4 | Bin .../toolbar/index.html | 0 .../toolbar/package.json | 0 .../toolbar/src/icon_cat.svg | 0 .../toolbar/src/main.js | 0 .../toolbar/src/style.css | 0 .../toolbar/vite.config.js | 0 .../typescript}/.gitignore | 0 .../typescript/demo-config.json | 0 .../typescript/demo-thumbnail.png | Bin .../typescript/demo-video.mp4 | Bin .../typescript/eslint.config.js | 0 .../typescript/index.html | 0 .../typescript/package.json | 0 .../typescript/src/App.tsx | 0 .../src/components/DocumentEditor.tsx | 0 .../typescript/src/main.tsx | 0 .../typescript/src/vite-env.d.ts | 0 .../typescript/tsconfig.app.json | 0 .../typescript/tsconfig.json | 0 .../typescript/tsconfig.node.json | 0 .../typescript/vite.config.ts | 0 .../vanilla/demo-config.json | 0 .../vanilla/demo-thumbnail.png | Bin .../vanilla/demo-video.mp4 | Bin .../vanilla/index.html | 0 .../vanilla/package.json | 0 .../vanilla/src/main.js | 0 .../vanilla/src/style.css | 0 .../vanilla/vite.config.js | 0 .../vue/demo-config.json | 0 .../vue/demo-thumbnail.png | Bin .../vue/demo-video.mp4 | Bin .../getting-started => demos}/vue/index.html | 0 .../vue/package.json | 0 .../getting-started => demos}/vue/src/App.vue | 0 .../vue/src/components/DocumentEditor.vue | 0 .../getting-started => demos}/vue/src/main.js | 0 .../vue/vite.config.js | 0 .../word-addin/.gitignore | 0 .../MS-Word-Add-in-Sample.code-workspace | 0 .../word-addin/README.md | 0 .../word-addin/assets/icon-128.png | Bin .../word-addin/assets/icon-128x128.png | Bin .../word-addin/assets/icon-16.png | Bin .../word-addin/assets/icon-16x16.png | Bin .../word-addin/assets/icon-32.png | Bin .../word-addin/assets/icon-32x32.png | Bin .../word-addin/assets/icon-64.png | Bin .../word-addin/assets/icon-64x64.png | Bin .../word-addin/assets/icon-80.png | Bin .../word-addin/assets/icon-80x80.png | Bin .../word-addin/assets/logo-filled.png | Bin .../word-addin/assets/logo.png | Bin .../word-addin/assets/sample-document.docx | Bin .../word-addin/babel.config.json | 0 .../word-addin/demo-config.json | 0 .../word-addin/demo-thumbnail.png | Bin .../word-addin/demo-video.mp4 | Bin .../word-addin/manifest.xml | 0 .../word-addin/package.json | 0 .../word-addin/server/.env.example | 0 .../word-addin/server/package.json | 0 .../word-addin/server/public/editor.css | 0 .../word-addin/server/public/editor.html | 0 .../word-addin/server/public/editor.js | 0 .../word-addin/server/server.js | 0 .../src/auth-dialog/auth-dialog.css | 0 .../src/auth-dialog/auth-dialog.html | 0 .../word-addin/src/auth-dialog/auth-dialog.js | 0 .../word-addin/src/auth0-config.js.example | 0 .../word-addin/src/server-domain.js.example | 0 .../word-addin/src/taskpane/taskpane.css | 0 .../word-addin/src/taskpane/taskpane.html | 0 .../word-addin/src/taskpane/taskpane.js | 0 .../word-addin/webpack.config.js | 0 examples/advanced/README.md | 26 - examples/ai/README.md | 18 - examples/ai/prompts/claude/prompt.txt | 84 --- examples/ai/tool-calls/.env.example | 4 - examples/ai/tool-calls/README.md | 57 -- examples/ai/tool-calls/demo-config.json | 9 - examples/ai/tool-calls/demo-thumbnail.png | Bin 70634 -> 0 bytes examples/ai/tool-calls/demo-video.mp4 | 0 examples/ai/tool-calls/index.html | 16 - examples/ai/tool-calls/package.json | 20 - examples/ai/tool-calls/public/default.docx | Bin 18748 -> 0 bytes examples/ai/tool-calls/src/App.vue | 359 ------------- examples/ai/tool-calls/src/actions.js | 220 -------- .../ai/tool-calls/src/components/Sidebar.vue | 169 ------ examples/ai/tool-calls/src/logging.js | 95 ---- examples/ai/tool-calls/src/main.js | 4 - examples/ai/tool-calls/src/style.css | 501 ------------------ examples/ai/tool-calls/vite.config.js | 9 - .../typescript => custom-plugin}/.gitignore | 0 .../custom-plugin/README.md | 0 .../custom-plugin/custom-plugin-extension.js | 0 .../custom-plugin/demo-config.json | 0 .../custom-plugin/index.html | 0 .../custom-plugin/package.json | 0 .../icons => custom-plugin/public}/logo.webp | Bin .../public}/sample-document.docx | Bin .../custom-plugin/src/App.vue | 0 .../src/custom-plugin-extension.js | 0 .../custom-plugin/src/main.js | 0 .../custom-plugin/src/style.css | 0 .../custom-plugin/vite.config.js | 0 examples/customization/README.md | 21 - .../dynamic-content/.gitignore | 0 .../dynamic-content/README.md | 0 .../dynamic-content/index.html | 0 .../dynamic-content/package.json | 0 .../plugins/document-map/document-map.js | 0 .../plugins/document-map/index.js | 0 .../public/generic-license.docx | Bin .../public}/logo.webp | Bin .../public}/superdoc-logo.png | Bin .../dynamic-content/src/App.vue | 0 .../src/components/DocumentMap.vue | 0 .../src/components/DocumentMapItem.vue | 0 .../dynamic-content/src/main.js | 0 .../dynamic-content/src/style.css | 0 .../dynamic-content/vite.config.js | 0 examples/getting-started/README.md | 21 - .../headless-converter/README.md | 0 .../headless-converter/package.json | 0 .../headless-converter/sample.docx | Bin .../headless-converter/src/index.ts | 0 examples/integrations/README.md | 23 - 494 files changed, 10 insertions(+), 1656 deletions(-) create mode 100644 demos/.gitignore create mode 100644 demos/README.md rename {examples/getting-started => demos}/cdn/README.md (100%) rename {examples/getting-started => demos}/cdn/demo-config.json (100%) rename {examples/advanced/docx-from-html => demos/cdn}/demo-thumbnail.png (100%) rename {examples/getting-started => demos}/cdn/demo-video.mp4 (100%) rename {examples/getting-started => demos}/cdn/file-upload.css (100%) rename {examples/getting-started => demos}/cdn/file-upload.js (100%) rename {examples/getting-started => demos}/cdn/index.html (100%) rename {examples/getting-started => demos}/cdn/package.json (100%) rename {examples/advanced/replace-content/public => demos/cdn}/sample.docx (100%) rename {examples/integrations => demos}/chrome-extension/chrome-extension/README.md (100%) rename {examples/integrations => demos}/chrome-extension/chrome-extension/background.js (100%) rename {examples/integrations => demos}/chrome-extension/chrome-extension/content.js (100%) rename {examples/integrations => demos}/chrome-extension/chrome-extension/dist/docx-validator.bundle.js (100%) rename {examples/integrations => demos}/chrome-extension/chrome-extension/dist/docx-validator.bundle.js.LICENSE.txt (100%) rename {examples/integrations => demos}/chrome-extension/chrome-extension/docx-validator.js (100%) rename {examples/integrations => demos}/chrome-extension/chrome-extension/icons/icon-128x128-disabled.png (100%) rename {examples/integrations => demos}/chrome-extension/chrome-extension/icons/icon-128x128.png (100%) rename {examples/integrations => demos}/chrome-extension/chrome-extension/icons/icon-16x16-disabled.png (100%) rename {examples/integrations => demos}/chrome-extension/chrome-extension/icons/icon-16x16.png (100%) rename {examples/integrations => demos}/chrome-extension/chrome-extension/icons/icon-19x19-disabled.png (100%) rename {examples/integrations => demos}/chrome-extension/chrome-extension/icons/icon-19x19.png (100%) rename {examples/integrations => demos}/chrome-extension/chrome-extension/icons/icon-48x48-disabled.png (100%) rename {examples/integrations => demos}/chrome-extension/chrome-extension/icons/icon-48x48.png (100%) rename {examples/advanced/docx-from-html/public => demos/chrome-extension/chrome-extension/icons}/logo.webp (100%) rename {examples/integrations => demos}/chrome-extension/chrome-extension/lib/style.css (100%) rename {examples/integrations => demos}/chrome-extension/chrome-extension/lib/superdoc.umd.js (100%) rename {examples/integrations => demos}/chrome-extension/chrome-extension/manifest.json (100%) rename {examples/integrations => demos}/chrome-extension/chrome-extension/modal.css (100%) rename {examples/integrations => demos}/chrome-extension/chrome-extension/modal.html (100%) rename {examples/integrations => demos}/chrome-extension/chrome-extension/package.json (100%) rename {examples/integrations => demos}/chrome-extension/chrome-extension/popup.html (100%) rename {examples/integrations => demos}/chrome-extension/chrome-extension/popup.js (100%) rename {examples/integrations => demos}/chrome-extension/chrome-extension/test_docs/Lunch Haiku (5).docx (100%) rename {examples/integrations => demos}/chrome-extension/chrome-extension/test_docs/Mutual NDA_draft (1).docx (100%) rename {examples/integrations => demos}/chrome-extension/chrome-extension/test_docs/Nda Formatted Doc MS WORD.docx (100%) rename {examples/integrations => demos}/chrome-extension/chrome-extension/test_docs/Nda Formatted Doc.docx (100%) rename {examples/integrations => demos}/chrome-extension/chrome-extension/test_docs/nda_formatted_doc (1).md (100%) rename {examples/integrations => demos}/chrome-extension/chrome-extension/test_docs/sdpr (23).docx (100%) rename {examples/integrations => demos}/chrome-extension/chrome-extension/tester.html (100%) rename {examples/integrations => demos}/chrome-extension/chrome-extension/webpack.config.js (100%) rename {examples/integrations => demos}/chrome-extension/demo-config.json (100%) rename {examples/integrations => demos}/chrome-extension/demo-thumbnail.png (100%) rename {examples/integrations => demos}/chrome-extension/demo-video.mp4 (100%) rename {examples/advanced/docx-from-html => demos/custom-mark}/.gitignore (100%) rename {examples/customization => demos}/custom-mark/README.md (100%) rename {examples/advanced/docx-from-html/public => demos/custom-mark/assets}/sample-document.docx (100%) rename {examples/customization => demos}/custom-mark/demo-config.json (100%) rename {examples/customization => demos}/custom-mark/demo-thumbnail.png (100%) rename {examples/customization => demos}/custom-mark/demo-video.mp4 (100%) rename {examples/customization => demos}/custom-mark/index.html (100%) rename {examples/advanced/docx-from-html => demos/custom-mark}/package.json (100%) rename {examples/customization => demos}/custom-mark/public/circle-chevron-down-solid.svg (100%) rename {examples/customization => demos}/custom-mark/public/headphones-solid.svg (100%) rename {examples/advanced/fields => demos/custom-mark}/public/logo.webp (100%) rename {examples/advanced/docx-from-html => demos/custom-mark}/public/superdoc-logo.png (100%) rename {examples/customization => demos}/custom-mark/src/App.vue (100%) rename {examples/advanced/fields => demos/custom-mark}/src/UploadFile.vue (100%) rename {examples/customization => demos}/custom-mark/src/custom-mark.js (100%) rename {examples/advanced/docx-from-html => demos/custom-mark}/src/main.js (100%) rename {examples/advanced/fields => demos/custom-mark}/src/style.css (100%) rename {examples/advanced/docx-from-html => demos/custom-mark}/vite.config.js (100%) rename {examples/advanced/fields => demos/custom-node}/.gitignore (100%) rename {examples/customization => demos}/custom-node/README.md (100%) rename {examples/customization => demos}/custom-node/demo-config.json (100%) rename {examples/advanced/fields => demos/custom-node}/demo-thumbnail.png (100%) rename {examples/advanced/fields => demos/custom-node}/demo-video.mp4 (100%) rename {examples/advanced/fields => demos/custom-node}/index.html (100%) rename {examples/advanced/fields => demos/custom-node}/package.json (100%) rename {examples/advanced/linked-sections => demos/custom-node}/public/logo.webp (100%) rename {examples/advanced/fields => demos/custom-node}/public/sample-document.docx (100%) rename {examples/customization => demos}/custom-node/src/App.vue (100%) rename {examples/advanced/linked-sections => demos/custom-node}/src/UploadFile.vue (100%) rename {examples/customization => demos}/custom-node/src/custom-node.js (100%) rename {examples/advanced/fields => demos/custom-node}/src/main.js (100%) rename {examples/advanced/linked-sections => demos/custom-node}/src/style.css (100%) rename {examples/advanced/fields => demos/custom-node}/vite.config.js (100%) rename {examples/advanced/html-editor => demos/docx-from-html}/.gitignore (100%) rename {examples/advanced => demos}/docx-from-html/README.md (100%) rename {examples/advanced => demos}/docx-from-html/demo-config.json (100%) rename {examples/getting-started/cdn => demos/docx-from-html}/demo-thumbnail.png (100%) rename {examples/advanced => demos}/docx-from-html/demo-video.mp4 (100%) rename {examples/advanced => demos}/docx-from-html/index.html (100%) rename {examples/advanced/html-editor => demos/docx-from-html}/package.json (100%) rename {examples/customization/custom-mark => demos/docx-from-html}/public/logo.webp (100%) rename {examples/customization/custom-mark/assets => demos/docx-from-html/public}/sample-document.docx (100%) rename {examples/advanced/html-editor => demos/docx-from-html}/public/superdoc-logo.png (100%) rename {examples/advanced => demos}/docx-from-html/src/App.vue (100%) rename {examples/advanced/html-editor => demos/docx-from-html}/src/main.js (100%) rename {examples/advanced => demos}/docx-from-html/src/style.css (100%) rename {examples/advanced/html-editor => demos/docx-from-html}/vite.config.js (100%) rename {examples/advanced => demos}/docxtemplater/README.md (100%) rename {examples/advanced => demos}/docxtemplater/demo-config.json (100%) rename {examples/advanced => demos}/docxtemplater/demo-thumbnail.png (100%) rename {examples/advanced => demos}/docxtemplater/demo-video.mp4 (100%) rename {examples/advanced => demos}/docxtemplater/demo.gif (100%) rename {examples/advanced => demos}/docxtemplater/index.html (100%) rename {examples/advanced => demos}/docxtemplater/jsconfig.json (100%) rename {examples/advanced => demos}/docxtemplater/package.json (100%) rename {examples/advanced => demos}/docxtemplater/public/favicon.ico (100%) rename {examples/advanced => demos}/docxtemplater/src/App.vue (100%) rename {examples/advanced => demos}/docxtemplater/src/assets/template.docx (100%) rename {examples/advanced => demos}/docxtemplater/src/components/DocumentTab.vue (100%) rename {examples/advanced => demos}/docxtemplater/src/fileProcessing.js (100%) rename {examples/advanced => demos}/docxtemplater/src/main.js (100%) rename {examples/advanced => demos}/docxtemplater/src/utils.js (100%) rename {examples/advanced => demos}/docxtemplater/vite.config.js (100%) rename {examples/advanced/linked-sections => demos/fields}/.gitignore (100%) rename {examples/advanced => demos}/fields/README.md (100%) rename {examples/advanced => demos}/fields/demo-config.json (100%) rename {examples/customization/custom-node => demos/fields}/demo-thumbnail.png (100%) rename {examples/customization/custom-node => demos/fields}/demo-video.mp4 (100%) rename {examples/advanced/linked-sections => demos/fields}/index.html (100%) rename {examples/customization/custom-mark => demos/fields}/package.json (100%) rename {examples/customization/custom-node => demos/fields}/public/logo.webp (100%) rename {examples/customization/custom-node => demos/fields}/public/sample-document.docx (100%) rename {examples/advanced => demos}/fields/src/App.vue (100%) rename {examples/customization/custom-mark => demos/fields}/src/UploadFile.vue (100%) rename {examples/advanced/linked-sections => demos/fields}/src/main.js (100%) rename {examples/customization/custom-mark => demos/fields}/src/style.css (100%) rename {examples/advanced/linked-sections => demos/fields}/vite.config.js (100%) rename {examples/advanced => demos}/grading-papers/.gitignore (100%) rename {examples/advanced => demos}/grading-papers/README.md (100%) rename {examples/advanced => demos}/grading-papers/app/globals.css (100%) rename {examples/advanced => demos}/grading-papers/app/grading/[id]/_doc-links.js (100%) rename {examples/advanced => demos}/grading-papers/app/grading/[id]/loading.tsx (100%) rename {examples/advanced => demos}/grading-papers/app/grading/[id]/page.tsx (100%) rename {examples/advanced => demos}/grading-papers/app/layout.tsx (100%) rename {examples/advanced => demos}/grading-papers/app/loading.tsx (100%) rename {examples/advanced => demos}/grading-papers/app/page.tsx (100%) rename {examples/advanced => demos}/grading-papers/assets/docs/assign-1.docx (100%) rename {examples/advanced => demos}/grading-papers/assets/docs/assign-1.js (100%) rename {examples/advanced => demos}/grading-papers/assets/docs/assign-2.docx (100%) rename {examples/advanced => demos}/grading-papers/assets/docs/assign-2.js (100%) rename {examples/advanced => demos}/grading-papers/assets/docs/assign-3.docx (100%) rename {examples/advanced => demos}/grading-papers/assets/docs/assign-3.js (100%) rename {examples/advanced => demos}/grading-papers/assets/docs/assign-4.docx (100%) rename {examples/advanced => demos}/grading-papers/assets/docs/assign-4.js (100%) rename {examples/advanced => demos}/grading-papers/assets/docs/assign-5.docx (100%) rename {examples/advanced => demos}/grading-papers/assets/docs/assign-5.js (100%) rename {examples/advanced => demos}/grading-papers/components.json (100%) rename {examples/advanced => demos}/grading-papers/components/theme-provider.tsx (100%) rename {examples/advanced => demos}/grading-papers/components/ui/accordion.tsx (100%) rename {examples/advanced => demos}/grading-papers/components/ui/alert-dialog.tsx (100%) rename {examples/advanced => demos}/grading-papers/components/ui/alert.tsx (100%) rename {examples/advanced => demos}/grading-papers/components/ui/aspect-ratio.tsx (100%) rename {examples/advanced => demos}/grading-papers/components/ui/avatar.tsx (100%) rename {examples/advanced => demos}/grading-papers/components/ui/badge.tsx (100%) rename {examples/advanced => demos}/grading-papers/components/ui/breadcrumb.tsx (100%) rename {examples/advanced => demos}/grading-papers/components/ui/button.tsx (100%) rename {examples/advanced => demos}/grading-papers/components/ui/calendar.tsx (100%) rename {examples/advanced => demos}/grading-papers/components/ui/card.tsx (100%) rename {examples/advanced => demos}/grading-papers/components/ui/carousel.tsx (100%) rename {examples/advanced => demos}/grading-papers/components/ui/chart.tsx (100%) rename {examples/advanced => demos}/grading-papers/components/ui/checkbox.tsx (100%) rename {examples/advanced => demos}/grading-papers/components/ui/collapsible.tsx (100%) rename {examples/advanced => demos}/grading-papers/components/ui/command.tsx (100%) rename {examples/advanced => demos}/grading-papers/components/ui/context-menu.tsx (100%) rename {examples/advanced => demos}/grading-papers/components/ui/dialog.tsx (100%) rename {examples/advanced => demos}/grading-papers/components/ui/drawer.tsx (100%) rename {examples/advanced => demos}/grading-papers/components/ui/dropdown-menu.tsx (100%) rename {examples/advanced => demos}/grading-papers/components/ui/form.tsx (100%) rename {examples/advanced => demos}/grading-papers/components/ui/hover-card.tsx (100%) rename {examples/advanced => demos}/grading-papers/components/ui/input-otp.tsx (100%) rename {examples/advanced => demos}/grading-papers/components/ui/input.tsx (100%) rename {examples/advanced => demos}/grading-papers/components/ui/label.tsx (100%) rename {examples/advanced => demos}/grading-papers/components/ui/menubar.tsx (100%) rename {examples/advanced => demos}/grading-papers/components/ui/navigation-menu.tsx (100%) rename {examples/advanced => demos}/grading-papers/components/ui/pagination.tsx (100%) rename {examples/advanced => demos}/grading-papers/components/ui/popover.tsx (100%) rename {examples/advanced => demos}/grading-papers/components/ui/progress.tsx (100%) rename {examples/advanced => demos}/grading-papers/components/ui/radio-group.tsx (100%) rename {examples/advanced => demos}/grading-papers/components/ui/resizable.tsx (100%) rename {examples/advanced => demos}/grading-papers/components/ui/scroll-area.tsx (100%) rename {examples/advanced => demos}/grading-papers/components/ui/select.tsx (100%) rename {examples/advanced => demos}/grading-papers/components/ui/separator.tsx (100%) rename {examples/advanced => demos}/grading-papers/components/ui/sheet.tsx (100%) rename {examples/advanced => demos}/grading-papers/components/ui/sidebar.tsx (100%) rename {examples/advanced => demos}/grading-papers/components/ui/skeleton.tsx (100%) rename {examples/advanced => demos}/grading-papers/components/ui/slider.tsx (100%) rename {examples/advanced => demos}/grading-papers/components/ui/sonner.tsx (100%) rename {examples/advanced => demos}/grading-papers/components/ui/switch.tsx (100%) rename {examples/advanced => demos}/grading-papers/components/ui/table.tsx (100%) rename {examples/advanced => demos}/grading-papers/components/ui/tabs.tsx (100%) rename {examples/advanced => demos}/grading-papers/components/ui/textarea.tsx (100%) rename {examples/advanced => demos}/grading-papers/components/ui/toast.tsx (100%) rename {examples/advanced => demos}/grading-papers/components/ui/toaster.tsx (100%) rename {examples/advanced => demos}/grading-papers/components/ui/toggle-group.tsx (100%) rename {examples/advanced => demos}/grading-papers/components/ui/toggle.tsx (100%) rename {examples/advanced => demos}/grading-papers/components/ui/tooltip.tsx (100%) rename {examples/advanced => demos}/grading-papers/components/ui/use-mobile.tsx (100%) rename {examples/advanced => demos}/grading-papers/components/ui/use-toast.ts (100%) rename {examples/advanced => demos}/grading-papers/demo-config.json (100%) rename {examples/advanced => demos}/grading-papers/demo-thumbnail.png (100%) rename {examples/advanced => demos}/grading-papers/hooks/use-mobile.tsx (100%) rename {examples/advanced => demos}/grading-papers/hooks/use-toast.ts (100%) rename {examples/advanced => demos}/grading-papers/lib/utils.ts (100%) rename {examples/advanced => demos}/grading-papers/next.config.mjs (100%) rename {examples/advanced => demos}/grading-papers/package.json (100%) rename {examples/advanced => demos}/grading-papers/pnpm-lock.yaml (100%) rename {examples/advanced => demos}/grading-papers/postcss.config.mjs (100%) rename {examples/advanced => demos}/grading-papers/public/assign-1.docx (100%) rename {examples/advanced => demos}/grading-papers/public/assign-2.docx (100%) rename {examples/advanced => demos}/grading-papers/public/assign-3.docx (100%) rename {examples/advanced => demos}/grading-papers/public/assign-4.docx (100%) rename {examples/advanced => demos}/grading-papers/public/assign-5.docx (100%) rename {examples/advanced => demos}/grading-papers/public/jamie_smith_bio220_research_proposal.docx (100%) rename {examples/advanced => demos}/grading-papers/public/placeholder-logo.png (100%) rename {examples/advanced => demos}/grading-papers/public/placeholder-logo.svg (100%) rename {examples/advanced => demos}/grading-papers/public/placeholder-user.jpg (100%) rename {examples/advanced => demos}/grading-papers/public/placeholder.jpg (100%) rename {examples/advanced => demos}/grading-papers/public/placeholder.svg (100%) rename {examples/advanced => demos}/grading-papers/public/~$alex.docx (100%) rename {examples/advanced => demos}/grading-papers/styles/globals.css (100%) rename {examples/advanced => demos}/grading-papers/tailwind.config.ts (100%) rename {examples/advanced => demos}/grading-papers/tsconfig.json (100%) rename {examples/customization/custom-mark => demos/html-editor}/.gitignore (100%) rename {examples/advanced => demos}/html-editor/.vscode/extensions.json (100%) rename {examples/advanced => demos}/html-editor/README.md (100%) rename {examples/advanced => demos}/html-editor/demo-config.json (100%) rename {examples/advanced => demos}/html-editor/demo-thumbnail.png (100%) rename {examples/advanced => demos}/html-editor/demo-video.mp4 (100%) rename {examples/advanced => demos}/html-editor/index.html (100%) rename {examples/customization/custom-node => demos/html-editor}/package.json (100%) rename {examples/customization/custom-mark => demos/html-editor}/public/superdoc-logo.png (100%) rename {examples/advanced => demos}/html-editor/src/App.vue (100%) rename {examples/customization/custom-mark => demos/html-editor}/src/main.js (100%) rename {examples/advanced => demos}/html-editor/src/style.css (100%) rename {examples/customization/custom-mark => demos/html-editor}/vite.config.js (100%) rename {examples/customization/custom-node => demos/linked-sections}/.gitignore (100%) rename {examples/advanced => demos}/linked-sections/README.md (100%) rename {examples/advanced => demos}/linked-sections/demo-config.json (100%) rename {examples/advanced => demos}/linked-sections/demo-thumbnail.png (100%) rename {examples/advanced => demos}/linked-sections/demo-video.mp4 (100%) rename {examples/customization/custom-node => demos/linked-sections}/index.html (100%) rename {examples/advanced => demos}/linked-sections/package.json (100%) rename {examples/customization/custom-plugin => demos/linked-sections}/public/logo.webp (100%) rename {examples/advanced => demos}/linked-sections/src/App.vue (100%) rename {examples/customization/custom-node => demos/linked-sections}/src/UploadFile.vue (100%) rename {examples/customization/custom-node => demos/linked-sections}/src/main.js (100%) rename {examples/customization/custom-node => demos/linked-sections}/src/style.css (100%) rename {examples/customization/custom-node => demos/linked-sections}/vite.config.js (100%) rename {examples/advanced => demos}/loading-from-json/demo-config.json (100%) rename {examples/advanced => demos}/loading-from-json/demo-thumbnail.png (100%) rename {examples/advanced => demos}/loading-from-json/demo-video.mp4 (100%) rename {examples/advanced => demos}/loading-from-json/index.html (100%) rename {examples/advanced => demos}/loading-from-json/package.json (100%) rename {examples/advanced => demos}/loading-from-json/src/main.js (100%) rename {examples/advanced => demos}/loading-from-json/src/style.css (100%) rename {examples/advanced => demos}/loading-from-json/vite.config.js (100%) rename {examples/integrations => demos}/nextjs-ssr/.gitignore (100%) rename {examples/integrations => demos}/nextjs-ssr/README.md (100%) rename {examples/integrations => demos}/nextjs-ssr/demo-config.json (100%) rename {examples/integrations => demos}/nextjs-ssr/demo-thumbnail.png (100%) rename {examples/integrations => demos}/nextjs-ssr/demo-video.mp4 (100%) rename {examples/integrations => demos}/nextjs-ssr/jsconfig.json (100%) rename {examples/integrations => demos}/nextjs-ssr/next.config.mjs (100%) rename {examples/integrations => demos}/nextjs-ssr/package.json (100%) rename {examples/integrations => demos}/nextjs-ssr/public/file.svg (100%) rename {examples/integrations => demos}/nextjs-ssr/public/globe.svg (100%) rename {examples/integrations => demos}/nextjs-ssr/public/next.svg (100%) rename {examples/customization/custom-plugin => demos/nextjs-ssr}/public/sample-document.docx (100%) rename {examples/advanced/text-selection => demos/nextjs-ssr}/public/sample.docx (100%) rename {examples/integrations => demos}/nextjs-ssr/public/vercel.svg (100%) rename {examples/integrations => demos}/nextjs-ssr/public/window.svg (100%) rename {examples/integrations => demos}/nextjs-ssr/src/app/SuperDoc/superdoc.css (100%) rename {examples/integrations => demos}/nextjs-ssr/src/app/SuperDoc/superdoc.js (100%) rename {examples/integrations => demos}/nextjs-ssr/src/app/favicon.ico (100%) rename {examples/integrations => demos}/nextjs-ssr/src/app/globals.css (100%) rename {examples/integrations => demos}/nextjs-ssr/src/app/layout.js (100%) rename {examples/integrations => demos}/nextjs-ssr/src/app/page.js (100%) rename {examples/integrations => demos}/nextjs-ssr/src/app/page.module.css (100%) rename {examples/integrations => demos}/nodejs/.gitignore (100%) rename {examples/integrations => demos}/nodejs/README.md (100%) rename {examples/integrations => demos}/nodejs/demo-config.json (100%) rename {examples/integrations => demos}/nodejs/demo-thumbnail.png (100%) rename {examples/integrations => demos}/nodejs/demo-video.mp4 (100%) rename {examples/integrations => demos}/nodejs/document-b64.js (100%) rename {examples/integrations => demos}/nodejs/document.js (100%) rename {examples/integrations => demos}/nodejs/file-polyfill.js (100%) rename {examples/integrations => demos}/nodejs/package.json (100%) rename {examples/integrations => demos}/nodejs/sample-document.docx (100%) rename {examples/integrations => demos}/nodejs/server.js (100%) rename {examples/getting-started => demos}/react/demo-config.json (100%) rename {examples/advanced/replace-content => demos/react}/demo-thumbnail.png (100%) rename {examples/getting-started => demos}/react/demo-video.mp4 (100%) rename {examples/advanced/replace-content => demos/react}/index.html (100%) rename {examples/getting-started => demos}/react/package.json (100%) rename {examples/getting-started/cdn => demos/react/public}/sample.docx (100%) rename {examples/getting-started => demos}/react/src/App.jsx (100%) rename {examples/advanced/text-selection => demos/react}/src/components/DocumentEditor.jsx (100%) rename {examples/getting-started => demos}/react/src/main.jsx (100%) rename {examples/advanced/text-selection => demos/react}/vite.config.js (100%) rename {examples/advanced => demos}/replace-content/README.md (100%) rename {examples/advanced => demos}/replace-content/demo-config.json (100%) rename {examples/advanced/text-selection => demos/replace-content}/demo-thumbnail.png (100%) rename {examples/advanced => demos}/replace-content/demo-video.mp4 (100%) rename {examples/advanced/text-selection => demos/replace-content}/index.html (100%) rename {examples/advanced => demos}/replace-content/package.json (100%) rename {examples/getting-started/react => demos/replace-content}/public/sample.docx (100%) rename {examples/advanced => demos}/replace-content/src/App.jsx (100%) rename {examples/advanced => demos}/replace-content/src/components/DocumentEditor.jsx (100%) rename {examples/advanced => demos}/replace-content/src/main.jsx (100%) rename {examples/advanced => demos}/replace-content/vite.config.js (100%) rename {examples => demos}/shared/css/style.css (100%) rename {examples/integrations/nextjs-ssr/public => demos/shared/data}/sample-document.docx (100%) rename {examples/customization/dynamic-content/public => demos/shared/images}/logo.webp (100%) rename {examples/customization/dynamic-content/public => demos/shared/images}/superdoc-logo.png (100%) rename {examples => demos}/shared/vue/UploadFile/UploadFile.vue (100%) rename {examples/integrations => demos}/slack-redlining/README.md (100%) rename {examples/integrations => demos}/slack-redlining/cloud-function/package.json (100%) rename {examples/integrations => demos}/slack-redlining/cloud-function/server.js (100%) rename {examples/integrations => demos}/slack-redlining/cloud-function/utils.js (100%) rename {examples/integrations => demos}/slack-redlining/demo-config.json (100%) rename {examples/integrations => demos}/slack-redlining/demo-thumbnail.png (100%) rename {examples/integrations => demos}/slack-redlining/demo-video.mp4 (100%) rename {examples/integrations => demos}/slack-redlining/screenshot.png (100%) rename {examples/integrations => demos}/slack-redlining/zap.json (100%) rename {examples => demos}/tests/.gitignore (100%) rename {examples => demos}/tests/Dockerfile (100%) rename {examples => demos}/tests/README.md (100%) rename {examples => demos}/tests/package.json (100%) rename {examples => demos}/tests/playwright.config.js (100%) rename {examples => demos}/tests/scripts/bootstrap.js (100%) rename {examples => demos}/tests/test-config.js (100%) rename {examples => demos}/tests/tests.spec.js (100%) rename {examples => demos}/tests/tests.spec.js-snapshots/cdn-should-open-the-main-page-1-chromium-darwin.png (100%) rename {examples => demos}/tests/tests.spec.js-snapshots/cdn-should-open-the-main-page-1-chromium-linux.png (100%) rename {examples => demos}/tests/tests.spec.js-snapshots/custom-mark-should-open-the-main-page-1-chromium-darwin.png (100%) rename {examples => demos}/tests/tests.spec.js-snapshots/custom-mark-should-open-the-main-page-1-chromium-linux.png (100%) rename {examples => demos}/tests/tests.spec.js-snapshots/docx-from-html-should-open-the-main-page-1-chromium-darwin.png (100%) rename {examples => demos}/tests/tests.spec.js-snapshots/docx-from-html-should-open-the-main-page-1-chromium-linux.png (100%) rename {examples => demos}/tests/tests.spec.js-snapshots/dynamic-content-should-open-the-main-page-1-chromium-darwin.png (100%) rename {examples => demos}/tests/tests.spec.js-snapshots/dynamic-content-should-open-the-main-page-1-chromium-linux.png (100%) rename {examples => demos}/tests/tests.spec.js-snapshots/fields-should-open-the-main-page-1-chromium-darwin.png (100%) rename {examples => demos}/tests/tests.spec.js-snapshots/fields-should-open-the-main-page-1-chromium-linux.png (100%) rename {examples => demos}/tests/tests.spec.js-snapshots/linked-sections-should-open-the-main-page-1-chromium-darwin.png (100%) rename {examples => demos}/tests/tests.spec.js-snapshots/linked-sections-should-open-the-main-page-1-chromium-linux.png (100%) rename {examples => demos}/tests/tests.spec.js-snapshots/nextjs-ssr-should-open-the-main-page-1-chromium-darwin.png (100%) rename {examples => demos}/tests/tests.spec.js-snapshots/nextjs-ssr-should-open-the-main-page-1-chromium-linux.png (100%) rename {examples => demos}/tests/tests.spec.js-snapshots/react-should-open-the-main-page-1-chromium-darwin.png (100%) rename {examples => demos}/tests/tests.spec.js-snapshots/react-should-open-the-main-page-1-chromium-linux.png (100%) rename {examples => demos}/tests/tests.spec.js-snapshots/text-selection-should-open-the-main-page-1-chromium-darwin.png (100%) rename {examples => demos}/tests/tests.spec.js-snapshots/text-selection-should-open-the-main-page-1-chromium-linux.png (100%) rename {examples => demos}/tests/tests.spec.js-snapshots/typescript-should-open-the-main-page-1-chromium-darwin.png (100%) rename {examples => demos}/tests/tests.spec.js-snapshots/typescript-should-open-the-main-page-1-chromium-linux.png (100%) rename {examples => demos}/tests/tests.spec.js-snapshots/vanilla-should-open-the-main-page-1-chromium-darwin.png (100%) rename {examples => demos}/tests/tests.spec.js-snapshots/vanilla-should-open-the-main-page-1-chromium-linux.png (100%) rename {examples => demos}/tests/tests.spec.js-snapshots/vue-should-open-the-main-page-1-chromium-darwin.png (100%) rename {examples => demos}/tests/tests.spec.js-snapshots/vue-should-open-the-main-page-1-chromium-linux.png (100%) rename {examples/advanced => demos}/text-selection/README.md (100%) rename {examples/advanced => demos}/text-selection/demo-config.json (100%) rename {examples/getting-started/react => demos/text-selection}/demo-thumbnail.png (100%) rename {examples/advanced => demos}/text-selection/demo-video.mp4 (100%) rename {examples/getting-started/react => demos/text-selection}/index.html (100%) rename {examples/advanced => demos}/text-selection/package.json (100%) rename {examples/integrations/nextjs-ssr => demos/text-selection}/public/sample.docx (100%) rename {examples/advanced => demos}/text-selection/src/App.jsx (100%) rename {examples/getting-started/react => demos/text-selection}/src/components/DocumentEditor.jsx (100%) rename {examples/advanced => demos}/text-selection/src/main.jsx (100%) rename {examples/getting-started/react => demos/text-selection}/vite.config.js (100%) rename {examples/customization => demos}/toolbar/README.md (100%) rename {examples/customization => demos}/toolbar/demo-config.json (100%) rename {examples/customization => demos}/toolbar/demo-thumbnail.png (100%) rename {examples/customization => demos}/toolbar/demo-video.mp4 (100%) rename {examples/customization => demos}/toolbar/index.html (100%) rename {examples/customization => demos}/toolbar/package.json (100%) rename {examples/customization => demos}/toolbar/src/icon_cat.svg (100%) rename {examples/customization => demos}/toolbar/src/main.js (100%) rename {examples/customization => demos}/toolbar/src/style.css (100%) rename {examples/customization => demos}/toolbar/vite.config.js (100%) rename {examples/customization/custom-plugin => demos/typescript}/.gitignore (100%) rename {examples/getting-started => demos}/typescript/demo-config.json (100%) rename {examples/getting-started => demos}/typescript/demo-thumbnail.png (100%) rename {examples/getting-started => demos}/typescript/demo-video.mp4 (100%) rename {examples/getting-started => demos}/typescript/eslint.config.js (100%) rename {examples/getting-started => demos}/typescript/index.html (100%) rename {examples/getting-started => demos}/typescript/package.json (100%) rename {examples/getting-started => demos}/typescript/src/App.tsx (100%) rename {examples/getting-started => demos}/typescript/src/components/DocumentEditor.tsx (100%) rename {examples/getting-started => demos}/typescript/src/main.tsx (100%) rename {examples/getting-started => demos}/typescript/src/vite-env.d.ts (100%) rename {examples/getting-started => demos}/typescript/tsconfig.app.json (100%) rename {examples/getting-started => demos}/typescript/tsconfig.json (100%) rename {examples/getting-started => demos}/typescript/tsconfig.node.json (100%) rename {examples/getting-started => demos}/typescript/vite.config.ts (100%) rename {examples/getting-started => demos}/vanilla/demo-config.json (100%) rename {examples/getting-started => demos}/vanilla/demo-thumbnail.png (100%) rename {examples/getting-started => demos}/vanilla/demo-video.mp4 (100%) rename {examples/getting-started => demos}/vanilla/index.html (100%) rename {examples/getting-started => demos}/vanilla/package.json (100%) rename {examples/getting-started => demos}/vanilla/src/main.js (100%) rename {examples/getting-started => demos}/vanilla/src/style.css (100%) rename {examples/getting-started => demos}/vanilla/vite.config.js (100%) rename {examples/getting-started => demos}/vue/demo-config.json (100%) rename {examples/getting-started => demos}/vue/demo-thumbnail.png (100%) rename {examples/getting-started => demos}/vue/demo-video.mp4 (100%) rename {examples/getting-started => demos}/vue/index.html (100%) rename {examples/getting-started => demos}/vue/package.json (100%) rename {examples/getting-started => demos}/vue/src/App.vue (100%) rename {examples/getting-started => demos}/vue/src/components/DocumentEditor.vue (100%) rename {examples/getting-started => demos}/vue/src/main.js (100%) rename {examples/getting-started => demos}/vue/vite.config.js (100%) rename {examples/integrations => demos}/word-addin/.gitignore (100%) rename {examples/integrations => demos}/word-addin/MS-Word-Add-in-Sample.code-workspace (100%) rename {examples/integrations => demos}/word-addin/README.md (100%) rename {examples/integrations => demos}/word-addin/assets/icon-128.png (100%) rename {examples/integrations => demos}/word-addin/assets/icon-128x128.png (100%) rename {examples/integrations => demos}/word-addin/assets/icon-16.png (100%) rename {examples/integrations => demos}/word-addin/assets/icon-16x16.png (100%) rename {examples/integrations => demos}/word-addin/assets/icon-32.png (100%) rename {examples/integrations => demos}/word-addin/assets/icon-32x32.png (100%) rename {examples/integrations => demos}/word-addin/assets/icon-64.png (100%) rename {examples/integrations => demos}/word-addin/assets/icon-64x64.png (100%) rename {examples/integrations => demos}/word-addin/assets/icon-80.png (100%) rename {examples/integrations => demos}/word-addin/assets/icon-80x80.png (100%) rename {examples/integrations => demos}/word-addin/assets/logo-filled.png (100%) rename {examples/integrations => demos}/word-addin/assets/logo.png (100%) rename {examples/integrations => demos}/word-addin/assets/sample-document.docx (100%) rename {examples/integrations => demos}/word-addin/babel.config.json (100%) rename {examples/integrations => demos}/word-addin/demo-config.json (100%) rename {examples/integrations => demos}/word-addin/demo-thumbnail.png (100%) rename {examples/integrations => demos}/word-addin/demo-video.mp4 (100%) rename {examples/integrations => demos}/word-addin/manifest.xml (100%) rename {examples/integrations => demos}/word-addin/package.json (100%) rename {examples/integrations => demos}/word-addin/server/.env.example (100%) rename {examples/integrations => demos}/word-addin/server/package.json (100%) rename {examples/integrations => demos}/word-addin/server/public/editor.css (100%) rename {examples/integrations => demos}/word-addin/server/public/editor.html (100%) rename {examples/integrations => demos}/word-addin/server/public/editor.js (100%) rename {examples/integrations => demos}/word-addin/server/server.js (100%) rename {examples/integrations => demos}/word-addin/src/auth-dialog/auth-dialog.css (100%) rename {examples/integrations => demos}/word-addin/src/auth-dialog/auth-dialog.html (100%) rename {examples/integrations => demos}/word-addin/src/auth-dialog/auth-dialog.js (100%) rename {examples/integrations => demos}/word-addin/src/auth0-config.js.example (100%) rename {examples/integrations => demos}/word-addin/src/server-domain.js.example (100%) rename {examples/integrations => demos}/word-addin/src/taskpane/taskpane.css (100%) rename {examples/integrations => demos}/word-addin/src/taskpane/taskpane.html (100%) rename {examples/integrations => demos}/word-addin/src/taskpane/taskpane.js (100%) rename {examples/integrations => demos}/word-addin/webpack.config.js (100%) delete mode 100644 examples/advanced/README.md delete mode 100644 examples/ai/README.md delete mode 100644 examples/ai/prompts/claude/prompt.txt delete mode 100644 examples/ai/tool-calls/.env.example delete mode 100644 examples/ai/tool-calls/README.md delete mode 100644 examples/ai/tool-calls/demo-config.json delete mode 100644 examples/ai/tool-calls/demo-thumbnail.png delete mode 100644 examples/ai/tool-calls/demo-video.mp4 delete mode 100644 examples/ai/tool-calls/index.html delete mode 100644 examples/ai/tool-calls/package.json delete mode 100644 examples/ai/tool-calls/public/default.docx delete mode 100644 examples/ai/tool-calls/src/App.vue delete mode 100644 examples/ai/tool-calls/src/actions.js delete mode 100644 examples/ai/tool-calls/src/components/Sidebar.vue delete mode 100644 examples/ai/tool-calls/src/logging.js delete mode 100644 examples/ai/tool-calls/src/main.js delete mode 100644 examples/ai/tool-calls/src/style.css delete mode 100644 examples/ai/tool-calls/vite.config.js rename examples/{getting-started/typescript => custom-plugin}/.gitignore (100%) rename examples/{customization => }/custom-plugin/README.md (100%) rename examples/{customization => }/custom-plugin/custom-plugin-extension.js (100%) rename examples/{customization => }/custom-plugin/demo-config.json (100%) rename examples/{customization => }/custom-plugin/index.html (100%) rename examples/{customization => }/custom-plugin/package.json (100%) rename examples/{integrations/chrome-extension/chrome-extension/icons => custom-plugin/public}/logo.webp (100%) rename examples/{shared/data => custom-plugin/public}/sample-document.docx (100%) rename examples/{customization => }/custom-plugin/src/App.vue (100%) rename examples/{customization => }/custom-plugin/src/custom-plugin-extension.js (100%) rename examples/{customization => }/custom-plugin/src/main.js (100%) rename examples/{customization => }/custom-plugin/src/style.css (100%) rename examples/{customization => }/custom-plugin/vite.config.js (100%) delete mode 100644 examples/customization/README.md rename examples/{customization => }/dynamic-content/.gitignore (100%) rename examples/{customization => }/dynamic-content/README.md (100%) rename examples/{customization => }/dynamic-content/index.html (100%) rename examples/{customization => }/dynamic-content/package.json (100%) rename examples/{customization => }/dynamic-content/plugins/document-map/document-map.js (100%) rename examples/{customization => }/dynamic-content/plugins/document-map/index.js (100%) rename examples/{customization => }/dynamic-content/public/generic-license.docx (100%) rename examples/{shared/images => dynamic-content/public}/logo.webp (100%) rename examples/{shared/images => dynamic-content/public}/superdoc-logo.png (100%) rename examples/{customization => }/dynamic-content/src/App.vue (100%) rename examples/{customization => }/dynamic-content/src/components/DocumentMap.vue (100%) rename examples/{customization => }/dynamic-content/src/components/DocumentMapItem.vue (100%) rename examples/{customization => }/dynamic-content/src/main.js (100%) rename examples/{customization => }/dynamic-content/src/style.css (100%) rename examples/{customization => }/dynamic-content/vite.config.js (100%) delete mode 100644 examples/getting-started/README.md rename examples/{advanced => }/headless-converter/README.md (100%) rename examples/{advanced => }/headless-converter/package.json (100%) rename examples/{advanced => }/headless-converter/sample.docx (100%) rename examples/{advanced => }/headless-converter/src/index.ts (100%) delete mode 100644 examples/integrations/README.md diff --git a/demos/.gitignore b/demos/.gitignore new file mode 100644 index 0000000000..934668777a --- /dev/null +++ b/demos/.gitignore @@ -0,0 +1,5 @@ +# Ignore lock files +*-lock* + +# Ignore npmrc files +*.npmrc \ No newline at end of file diff --git a/demos/README.md b/demos/README.md new file mode 100644 index 0000000000..ce39947df6 --- /dev/null +++ b/demos/README.md @@ -0,0 +1,5 @@ +# SuperDoc Demos + +Feature demos used by the [SuperDoc demo gallery](https://superdoc.dev). Each demo includes a thumbnail, optional video, and is embeddable via StackBlitz. + +> **Looking for getting-started examples?** See the [`examples/`](../examples/) folder instead. diff --git a/examples/getting-started/cdn/README.md b/demos/cdn/README.md similarity index 100% rename from examples/getting-started/cdn/README.md rename to demos/cdn/README.md diff --git a/examples/getting-started/cdn/demo-config.json b/demos/cdn/demo-config.json similarity index 100% rename from examples/getting-started/cdn/demo-config.json rename to demos/cdn/demo-config.json diff --git a/examples/advanced/docx-from-html/demo-thumbnail.png b/demos/cdn/demo-thumbnail.png similarity index 100% rename from examples/advanced/docx-from-html/demo-thumbnail.png rename to demos/cdn/demo-thumbnail.png diff --git a/examples/getting-started/cdn/demo-video.mp4 b/demos/cdn/demo-video.mp4 similarity index 100% rename from examples/getting-started/cdn/demo-video.mp4 rename to demos/cdn/demo-video.mp4 diff --git a/examples/getting-started/cdn/file-upload.css b/demos/cdn/file-upload.css similarity index 100% rename from examples/getting-started/cdn/file-upload.css rename to demos/cdn/file-upload.css diff --git a/examples/getting-started/cdn/file-upload.js b/demos/cdn/file-upload.js similarity index 100% rename from examples/getting-started/cdn/file-upload.js rename to demos/cdn/file-upload.js diff --git a/examples/getting-started/cdn/index.html b/demos/cdn/index.html similarity index 100% rename from examples/getting-started/cdn/index.html rename to demos/cdn/index.html diff --git a/examples/getting-started/cdn/package.json b/demos/cdn/package.json similarity index 100% rename from examples/getting-started/cdn/package.json rename to demos/cdn/package.json diff --git a/examples/advanced/replace-content/public/sample.docx b/demos/cdn/sample.docx similarity index 100% rename from examples/advanced/replace-content/public/sample.docx rename to demos/cdn/sample.docx diff --git a/examples/integrations/chrome-extension/chrome-extension/README.md b/demos/chrome-extension/chrome-extension/README.md similarity index 100% rename from examples/integrations/chrome-extension/chrome-extension/README.md rename to demos/chrome-extension/chrome-extension/README.md diff --git a/examples/integrations/chrome-extension/chrome-extension/background.js b/demos/chrome-extension/chrome-extension/background.js similarity index 100% rename from examples/integrations/chrome-extension/chrome-extension/background.js rename to demos/chrome-extension/chrome-extension/background.js diff --git a/examples/integrations/chrome-extension/chrome-extension/content.js b/demos/chrome-extension/chrome-extension/content.js similarity index 100% rename from examples/integrations/chrome-extension/chrome-extension/content.js rename to demos/chrome-extension/chrome-extension/content.js diff --git a/examples/integrations/chrome-extension/chrome-extension/dist/docx-validator.bundle.js b/demos/chrome-extension/chrome-extension/dist/docx-validator.bundle.js similarity index 100% rename from examples/integrations/chrome-extension/chrome-extension/dist/docx-validator.bundle.js rename to demos/chrome-extension/chrome-extension/dist/docx-validator.bundle.js diff --git a/examples/integrations/chrome-extension/chrome-extension/dist/docx-validator.bundle.js.LICENSE.txt b/demos/chrome-extension/chrome-extension/dist/docx-validator.bundle.js.LICENSE.txt similarity index 100% rename from examples/integrations/chrome-extension/chrome-extension/dist/docx-validator.bundle.js.LICENSE.txt rename to demos/chrome-extension/chrome-extension/dist/docx-validator.bundle.js.LICENSE.txt diff --git a/examples/integrations/chrome-extension/chrome-extension/docx-validator.js b/demos/chrome-extension/chrome-extension/docx-validator.js similarity index 100% rename from examples/integrations/chrome-extension/chrome-extension/docx-validator.js rename to demos/chrome-extension/chrome-extension/docx-validator.js diff --git a/examples/integrations/chrome-extension/chrome-extension/icons/icon-128x128-disabled.png b/demos/chrome-extension/chrome-extension/icons/icon-128x128-disabled.png similarity index 100% rename from examples/integrations/chrome-extension/chrome-extension/icons/icon-128x128-disabled.png rename to demos/chrome-extension/chrome-extension/icons/icon-128x128-disabled.png diff --git a/examples/integrations/chrome-extension/chrome-extension/icons/icon-128x128.png b/demos/chrome-extension/chrome-extension/icons/icon-128x128.png similarity index 100% rename from examples/integrations/chrome-extension/chrome-extension/icons/icon-128x128.png rename to demos/chrome-extension/chrome-extension/icons/icon-128x128.png diff --git a/examples/integrations/chrome-extension/chrome-extension/icons/icon-16x16-disabled.png b/demos/chrome-extension/chrome-extension/icons/icon-16x16-disabled.png similarity index 100% rename from examples/integrations/chrome-extension/chrome-extension/icons/icon-16x16-disabled.png rename to demos/chrome-extension/chrome-extension/icons/icon-16x16-disabled.png diff --git a/examples/integrations/chrome-extension/chrome-extension/icons/icon-16x16.png b/demos/chrome-extension/chrome-extension/icons/icon-16x16.png similarity index 100% rename from examples/integrations/chrome-extension/chrome-extension/icons/icon-16x16.png rename to demos/chrome-extension/chrome-extension/icons/icon-16x16.png diff --git a/examples/integrations/chrome-extension/chrome-extension/icons/icon-19x19-disabled.png b/demos/chrome-extension/chrome-extension/icons/icon-19x19-disabled.png similarity index 100% rename from examples/integrations/chrome-extension/chrome-extension/icons/icon-19x19-disabled.png rename to demos/chrome-extension/chrome-extension/icons/icon-19x19-disabled.png diff --git a/examples/integrations/chrome-extension/chrome-extension/icons/icon-19x19.png b/demos/chrome-extension/chrome-extension/icons/icon-19x19.png similarity index 100% rename from examples/integrations/chrome-extension/chrome-extension/icons/icon-19x19.png rename to demos/chrome-extension/chrome-extension/icons/icon-19x19.png diff --git a/examples/integrations/chrome-extension/chrome-extension/icons/icon-48x48-disabled.png b/demos/chrome-extension/chrome-extension/icons/icon-48x48-disabled.png similarity index 100% rename from examples/integrations/chrome-extension/chrome-extension/icons/icon-48x48-disabled.png rename to demos/chrome-extension/chrome-extension/icons/icon-48x48-disabled.png diff --git a/examples/integrations/chrome-extension/chrome-extension/icons/icon-48x48.png b/demos/chrome-extension/chrome-extension/icons/icon-48x48.png similarity index 100% rename from examples/integrations/chrome-extension/chrome-extension/icons/icon-48x48.png rename to demos/chrome-extension/chrome-extension/icons/icon-48x48.png diff --git a/examples/advanced/docx-from-html/public/logo.webp b/demos/chrome-extension/chrome-extension/icons/logo.webp similarity index 100% rename from examples/advanced/docx-from-html/public/logo.webp rename to demos/chrome-extension/chrome-extension/icons/logo.webp diff --git a/examples/integrations/chrome-extension/chrome-extension/lib/style.css b/demos/chrome-extension/chrome-extension/lib/style.css similarity index 100% rename from examples/integrations/chrome-extension/chrome-extension/lib/style.css rename to demos/chrome-extension/chrome-extension/lib/style.css diff --git a/examples/integrations/chrome-extension/chrome-extension/lib/superdoc.umd.js b/demos/chrome-extension/chrome-extension/lib/superdoc.umd.js similarity index 100% rename from examples/integrations/chrome-extension/chrome-extension/lib/superdoc.umd.js rename to demos/chrome-extension/chrome-extension/lib/superdoc.umd.js diff --git a/examples/integrations/chrome-extension/chrome-extension/manifest.json b/demos/chrome-extension/chrome-extension/manifest.json similarity index 100% rename from examples/integrations/chrome-extension/chrome-extension/manifest.json rename to demos/chrome-extension/chrome-extension/manifest.json diff --git a/examples/integrations/chrome-extension/chrome-extension/modal.css b/demos/chrome-extension/chrome-extension/modal.css similarity index 100% rename from examples/integrations/chrome-extension/chrome-extension/modal.css rename to demos/chrome-extension/chrome-extension/modal.css diff --git a/examples/integrations/chrome-extension/chrome-extension/modal.html b/demos/chrome-extension/chrome-extension/modal.html similarity index 100% rename from examples/integrations/chrome-extension/chrome-extension/modal.html rename to demos/chrome-extension/chrome-extension/modal.html diff --git a/examples/integrations/chrome-extension/chrome-extension/package.json b/demos/chrome-extension/chrome-extension/package.json similarity index 100% rename from examples/integrations/chrome-extension/chrome-extension/package.json rename to demos/chrome-extension/chrome-extension/package.json diff --git a/examples/integrations/chrome-extension/chrome-extension/popup.html b/demos/chrome-extension/chrome-extension/popup.html similarity index 100% rename from examples/integrations/chrome-extension/chrome-extension/popup.html rename to demos/chrome-extension/chrome-extension/popup.html diff --git a/examples/integrations/chrome-extension/chrome-extension/popup.js b/demos/chrome-extension/chrome-extension/popup.js similarity index 100% rename from examples/integrations/chrome-extension/chrome-extension/popup.js rename to demos/chrome-extension/chrome-extension/popup.js diff --git a/examples/integrations/chrome-extension/chrome-extension/test_docs/Lunch Haiku (5).docx b/demos/chrome-extension/chrome-extension/test_docs/Lunch Haiku (5).docx similarity index 100% rename from examples/integrations/chrome-extension/chrome-extension/test_docs/Lunch Haiku (5).docx rename to demos/chrome-extension/chrome-extension/test_docs/Lunch Haiku (5).docx diff --git a/examples/integrations/chrome-extension/chrome-extension/test_docs/Mutual NDA_draft (1).docx b/demos/chrome-extension/chrome-extension/test_docs/Mutual NDA_draft (1).docx similarity index 100% rename from examples/integrations/chrome-extension/chrome-extension/test_docs/Mutual NDA_draft (1).docx rename to demos/chrome-extension/chrome-extension/test_docs/Mutual NDA_draft (1).docx diff --git a/examples/integrations/chrome-extension/chrome-extension/test_docs/Nda Formatted Doc MS WORD.docx b/demos/chrome-extension/chrome-extension/test_docs/Nda Formatted Doc MS WORD.docx similarity index 100% rename from examples/integrations/chrome-extension/chrome-extension/test_docs/Nda Formatted Doc MS WORD.docx rename to demos/chrome-extension/chrome-extension/test_docs/Nda Formatted Doc MS WORD.docx diff --git a/examples/integrations/chrome-extension/chrome-extension/test_docs/Nda Formatted Doc.docx b/demos/chrome-extension/chrome-extension/test_docs/Nda Formatted Doc.docx similarity index 100% rename from examples/integrations/chrome-extension/chrome-extension/test_docs/Nda Formatted Doc.docx rename to demos/chrome-extension/chrome-extension/test_docs/Nda Formatted Doc.docx diff --git a/examples/integrations/chrome-extension/chrome-extension/test_docs/nda_formatted_doc (1).md b/demos/chrome-extension/chrome-extension/test_docs/nda_formatted_doc (1).md similarity index 100% rename from examples/integrations/chrome-extension/chrome-extension/test_docs/nda_formatted_doc (1).md rename to demos/chrome-extension/chrome-extension/test_docs/nda_formatted_doc (1).md diff --git a/examples/integrations/chrome-extension/chrome-extension/test_docs/sdpr (23).docx b/demos/chrome-extension/chrome-extension/test_docs/sdpr (23).docx similarity index 100% rename from examples/integrations/chrome-extension/chrome-extension/test_docs/sdpr (23).docx rename to demos/chrome-extension/chrome-extension/test_docs/sdpr (23).docx diff --git a/examples/integrations/chrome-extension/chrome-extension/tester.html b/demos/chrome-extension/chrome-extension/tester.html similarity index 100% rename from examples/integrations/chrome-extension/chrome-extension/tester.html rename to demos/chrome-extension/chrome-extension/tester.html diff --git a/examples/integrations/chrome-extension/chrome-extension/webpack.config.js b/demos/chrome-extension/chrome-extension/webpack.config.js similarity index 100% rename from examples/integrations/chrome-extension/chrome-extension/webpack.config.js rename to demos/chrome-extension/chrome-extension/webpack.config.js diff --git a/examples/integrations/chrome-extension/demo-config.json b/demos/chrome-extension/demo-config.json similarity index 100% rename from examples/integrations/chrome-extension/demo-config.json rename to demos/chrome-extension/demo-config.json diff --git a/examples/integrations/chrome-extension/demo-thumbnail.png b/demos/chrome-extension/demo-thumbnail.png similarity index 100% rename from examples/integrations/chrome-extension/demo-thumbnail.png rename to demos/chrome-extension/demo-thumbnail.png diff --git a/examples/integrations/chrome-extension/demo-video.mp4 b/demos/chrome-extension/demo-video.mp4 similarity index 100% rename from examples/integrations/chrome-extension/demo-video.mp4 rename to demos/chrome-extension/demo-video.mp4 diff --git a/examples/advanced/docx-from-html/.gitignore b/demos/custom-mark/.gitignore similarity index 100% rename from examples/advanced/docx-from-html/.gitignore rename to demos/custom-mark/.gitignore diff --git a/examples/customization/custom-mark/README.md b/demos/custom-mark/README.md similarity index 100% rename from examples/customization/custom-mark/README.md rename to demos/custom-mark/README.md diff --git a/examples/advanced/docx-from-html/public/sample-document.docx b/demos/custom-mark/assets/sample-document.docx similarity index 100% rename from examples/advanced/docx-from-html/public/sample-document.docx rename to demos/custom-mark/assets/sample-document.docx diff --git a/examples/customization/custom-mark/demo-config.json b/demos/custom-mark/demo-config.json similarity index 100% rename from examples/customization/custom-mark/demo-config.json rename to demos/custom-mark/demo-config.json diff --git a/examples/customization/custom-mark/demo-thumbnail.png b/demos/custom-mark/demo-thumbnail.png similarity index 100% rename from examples/customization/custom-mark/demo-thumbnail.png rename to demos/custom-mark/demo-thumbnail.png diff --git a/examples/customization/custom-mark/demo-video.mp4 b/demos/custom-mark/demo-video.mp4 similarity index 100% rename from examples/customization/custom-mark/demo-video.mp4 rename to demos/custom-mark/demo-video.mp4 diff --git a/examples/customization/custom-mark/index.html b/demos/custom-mark/index.html similarity index 100% rename from examples/customization/custom-mark/index.html rename to demos/custom-mark/index.html diff --git a/examples/advanced/docx-from-html/package.json b/demos/custom-mark/package.json similarity index 100% rename from examples/advanced/docx-from-html/package.json rename to demos/custom-mark/package.json diff --git a/examples/customization/custom-mark/public/circle-chevron-down-solid.svg b/demos/custom-mark/public/circle-chevron-down-solid.svg similarity index 100% rename from examples/customization/custom-mark/public/circle-chevron-down-solid.svg rename to demos/custom-mark/public/circle-chevron-down-solid.svg diff --git a/examples/customization/custom-mark/public/headphones-solid.svg b/demos/custom-mark/public/headphones-solid.svg similarity index 100% rename from examples/customization/custom-mark/public/headphones-solid.svg rename to demos/custom-mark/public/headphones-solid.svg diff --git a/examples/advanced/fields/public/logo.webp b/demos/custom-mark/public/logo.webp similarity index 100% rename from examples/advanced/fields/public/logo.webp rename to demos/custom-mark/public/logo.webp diff --git a/examples/advanced/docx-from-html/public/superdoc-logo.png b/demos/custom-mark/public/superdoc-logo.png similarity index 100% rename from examples/advanced/docx-from-html/public/superdoc-logo.png rename to demos/custom-mark/public/superdoc-logo.png diff --git a/examples/customization/custom-mark/src/App.vue b/demos/custom-mark/src/App.vue similarity index 100% rename from examples/customization/custom-mark/src/App.vue rename to demos/custom-mark/src/App.vue diff --git a/examples/advanced/fields/src/UploadFile.vue b/demos/custom-mark/src/UploadFile.vue similarity index 100% rename from examples/advanced/fields/src/UploadFile.vue rename to demos/custom-mark/src/UploadFile.vue diff --git a/examples/customization/custom-mark/src/custom-mark.js b/demos/custom-mark/src/custom-mark.js similarity index 100% rename from examples/customization/custom-mark/src/custom-mark.js rename to demos/custom-mark/src/custom-mark.js diff --git a/examples/advanced/docx-from-html/src/main.js b/demos/custom-mark/src/main.js similarity index 100% rename from examples/advanced/docx-from-html/src/main.js rename to demos/custom-mark/src/main.js diff --git a/examples/advanced/fields/src/style.css b/demos/custom-mark/src/style.css similarity index 100% rename from examples/advanced/fields/src/style.css rename to demos/custom-mark/src/style.css diff --git a/examples/advanced/docx-from-html/vite.config.js b/demos/custom-mark/vite.config.js similarity index 100% rename from examples/advanced/docx-from-html/vite.config.js rename to demos/custom-mark/vite.config.js diff --git a/examples/advanced/fields/.gitignore b/demos/custom-node/.gitignore similarity index 100% rename from examples/advanced/fields/.gitignore rename to demos/custom-node/.gitignore diff --git a/examples/customization/custom-node/README.md b/demos/custom-node/README.md similarity index 100% rename from examples/customization/custom-node/README.md rename to demos/custom-node/README.md diff --git a/examples/customization/custom-node/demo-config.json b/demos/custom-node/demo-config.json similarity index 100% rename from examples/customization/custom-node/demo-config.json rename to demos/custom-node/demo-config.json diff --git a/examples/advanced/fields/demo-thumbnail.png b/demos/custom-node/demo-thumbnail.png similarity index 100% rename from examples/advanced/fields/demo-thumbnail.png rename to demos/custom-node/demo-thumbnail.png diff --git a/examples/advanced/fields/demo-video.mp4 b/demos/custom-node/demo-video.mp4 similarity index 100% rename from examples/advanced/fields/demo-video.mp4 rename to demos/custom-node/demo-video.mp4 diff --git a/examples/advanced/fields/index.html b/demos/custom-node/index.html similarity index 100% rename from examples/advanced/fields/index.html rename to demos/custom-node/index.html diff --git a/examples/advanced/fields/package.json b/demos/custom-node/package.json similarity index 100% rename from examples/advanced/fields/package.json rename to demos/custom-node/package.json diff --git a/examples/advanced/linked-sections/public/logo.webp b/demos/custom-node/public/logo.webp similarity index 100% rename from examples/advanced/linked-sections/public/logo.webp rename to demos/custom-node/public/logo.webp diff --git a/examples/advanced/fields/public/sample-document.docx b/demos/custom-node/public/sample-document.docx similarity index 100% rename from examples/advanced/fields/public/sample-document.docx rename to demos/custom-node/public/sample-document.docx diff --git a/examples/customization/custom-node/src/App.vue b/demos/custom-node/src/App.vue similarity index 100% rename from examples/customization/custom-node/src/App.vue rename to demos/custom-node/src/App.vue diff --git a/examples/advanced/linked-sections/src/UploadFile.vue b/demos/custom-node/src/UploadFile.vue similarity index 100% rename from examples/advanced/linked-sections/src/UploadFile.vue rename to demos/custom-node/src/UploadFile.vue diff --git a/examples/customization/custom-node/src/custom-node.js b/demos/custom-node/src/custom-node.js similarity index 100% rename from examples/customization/custom-node/src/custom-node.js rename to demos/custom-node/src/custom-node.js diff --git a/examples/advanced/fields/src/main.js b/demos/custom-node/src/main.js similarity index 100% rename from examples/advanced/fields/src/main.js rename to demos/custom-node/src/main.js diff --git a/examples/advanced/linked-sections/src/style.css b/demos/custom-node/src/style.css similarity index 100% rename from examples/advanced/linked-sections/src/style.css rename to demos/custom-node/src/style.css diff --git a/examples/advanced/fields/vite.config.js b/demos/custom-node/vite.config.js similarity index 100% rename from examples/advanced/fields/vite.config.js rename to demos/custom-node/vite.config.js diff --git a/examples/advanced/html-editor/.gitignore b/demos/docx-from-html/.gitignore similarity index 100% rename from examples/advanced/html-editor/.gitignore rename to demos/docx-from-html/.gitignore diff --git a/examples/advanced/docx-from-html/README.md b/demos/docx-from-html/README.md similarity index 100% rename from examples/advanced/docx-from-html/README.md rename to demos/docx-from-html/README.md diff --git a/examples/advanced/docx-from-html/demo-config.json b/demos/docx-from-html/demo-config.json similarity index 100% rename from examples/advanced/docx-from-html/demo-config.json rename to demos/docx-from-html/demo-config.json diff --git a/examples/getting-started/cdn/demo-thumbnail.png b/demos/docx-from-html/demo-thumbnail.png similarity index 100% rename from examples/getting-started/cdn/demo-thumbnail.png rename to demos/docx-from-html/demo-thumbnail.png diff --git a/examples/advanced/docx-from-html/demo-video.mp4 b/demos/docx-from-html/demo-video.mp4 similarity index 100% rename from examples/advanced/docx-from-html/demo-video.mp4 rename to demos/docx-from-html/demo-video.mp4 diff --git a/examples/advanced/docx-from-html/index.html b/demos/docx-from-html/index.html similarity index 100% rename from examples/advanced/docx-from-html/index.html rename to demos/docx-from-html/index.html diff --git a/examples/advanced/html-editor/package.json b/demos/docx-from-html/package.json similarity index 100% rename from examples/advanced/html-editor/package.json rename to demos/docx-from-html/package.json diff --git a/examples/customization/custom-mark/public/logo.webp b/demos/docx-from-html/public/logo.webp similarity index 100% rename from examples/customization/custom-mark/public/logo.webp rename to demos/docx-from-html/public/logo.webp diff --git a/examples/customization/custom-mark/assets/sample-document.docx b/demos/docx-from-html/public/sample-document.docx similarity index 100% rename from examples/customization/custom-mark/assets/sample-document.docx rename to demos/docx-from-html/public/sample-document.docx diff --git a/examples/advanced/html-editor/public/superdoc-logo.png b/demos/docx-from-html/public/superdoc-logo.png similarity index 100% rename from examples/advanced/html-editor/public/superdoc-logo.png rename to demos/docx-from-html/public/superdoc-logo.png diff --git a/examples/advanced/docx-from-html/src/App.vue b/demos/docx-from-html/src/App.vue similarity index 100% rename from examples/advanced/docx-from-html/src/App.vue rename to demos/docx-from-html/src/App.vue diff --git a/examples/advanced/html-editor/src/main.js b/demos/docx-from-html/src/main.js similarity index 100% rename from examples/advanced/html-editor/src/main.js rename to demos/docx-from-html/src/main.js diff --git a/examples/advanced/docx-from-html/src/style.css b/demos/docx-from-html/src/style.css similarity index 100% rename from examples/advanced/docx-from-html/src/style.css rename to demos/docx-from-html/src/style.css diff --git a/examples/advanced/html-editor/vite.config.js b/demos/docx-from-html/vite.config.js similarity index 100% rename from examples/advanced/html-editor/vite.config.js rename to demos/docx-from-html/vite.config.js diff --git a/examples/advanced/docxtemplater/README.md b/demos/docxtemplater/README.md similarity index 100% rename from examples/advanced/docxtemplater/README.md rename to demos/docxtemplater/README.md diff --git a/examples/advanced/docxtemplater/demo-config.json b/demos/docxtemplater/demo-config.json similarity index 100% rename from examples/advanced/docxtemplater/demo-config.json rename to demos/docxtemplater/demo-config.json diff --git a/examples/advanced/docxtemplater/demo-thumbnail.png b/demos/docxtemplater/demo-thumbnail.png similarity index 100% rename from examples/advanced/docxtemplater/demo-thumbnail.png rename to demos/docxtemplater/demo-thumbnail.png diff --git a/examples/advanced/docxtemplater/demo-video.mp4 b/demos/docxtemplater/demo-video.mp4 similarity index 100% rename from examples/advanced/docxtemplater/demo-video.mp4 rename to demos/docxtemplater/demo-video.mp4 diff --git a/examples/advanced/docxtemplater/demo.gif b/demos/docxtemplater/demo.gif similarity index 100% rename from examples/advanced/docxtemplater/demo.gif rename to demos/docxtemplater/demo.gif diff --git a/examples/advanced/docxtemplater/index.html b/demos/docxtemplater/index.html similarity index 100% rename from examples/advanced/docxtemplater/index.html rename to demos/docxtemplater/index.html diff --git a/examples/advanced/docxtemplater/jsconfig.json b/demos/docxtemplater/jsconfig.json similarity index 100% rename from examples/advanced/docxtemplater/jsconfig.json rename to demos/docxtemplater/jsconfig.json diff --git a/examples/advanced/docxtemplater/package.json b/demos/docxtemplater/package.json similarity index 100% rename from examples/advanced/docxtemplater/package.json rename to demos/docxtemplater/package.json diff --git a/examples/advanced/docxtemplater/public/favicon.ico b/demos/docxtemplater/public/favicon.ico similarity index 100% rename from examples/advanced/docxtemplater/public/favicon.ico rename to demos/docxtemplater/public/favicon.ico diff --git a/examples/advanced/docxtemplater/src/App.vue b/demos/docxtemplater/src/App.vue similarity index 100% rename from examples/advanced/docxtemplater/src/App.vue rename to demos/docxtemplater/src/App.vue diff --git a/examples/advanced/docxtemplater/src/assets/template.docx b/demos/docxtemplater/src/assets/template.docx similarity index 100% rename from examples/advanced/docxtemplater/src/assets/template.docx rename to demos/docxtemplater/src/assets/template.docx diff --git a/examples/advanced/docxtemplater/src/components/DocumentTab.vue b/demos/docxtemplater/src/components/DocumentTab.vue similarity index 100% rename from examples/advanced/docxtemplater/src/components/DocumentTab.vue rename to demos/docxtemplater/src/components/DocumentTab.vue diff --git a/examples/advanced/docxtemplater/src/fileProcessing.js b/demos/docxtemplater/src/fileProcessing.js similarity index 100% rename from examples/advanced/docxtemplater/src/fileProcessing.js rename to demos/docxtemplater/src/fileProcessing.js diff --git a/examples/advanced/docxtemplater/src/main.js b/demos/docxtemplater/src/main.js similarity index 100% rename from examples/advanced/docxtemplater/src/main.js rename to demos/docxtemplater/src/main.js diff --git a/examples/advanced/docxtemplater/src/utils.js b/demos/docxtemplater/src/utils.js similarity index 100% rename from examples/advanced/docxtemplater/src/utils.js rename to demos/docxtemplater/src/utils.js diff --git a/examples/advanced/docxtemplater/vite.config.js b/demos/docxtemplater/vite.config.js similarity index 100% rename from examples/advanced/docxtemplater/vite.config.js rename to demos/docxtemplater/vite.config.js diff --git a/examples/advanced/linked-sections/.gitignore b/demos/fields/.gitignore similarity index 100% rename from examples/advanced/linked-sections/.gitignore rename to demos/fields/.gitignore diff --git a/examples/advanced/fields/README.md b/demos/fields/README.md similarity index 100% rename from examples/advanced/fields/README.md rename to demos/fields/README.md diff --git a/examples/advanced/fields/demo-config.json b/demos/fields/demo-config.json similarity index 100% rename from examples/advanced/fields/demo-config.json rename to demos/fields/demo-config.json diff --git a/examples/customization/custom-node/demo-thumbnail.png b/demos/fields/demo-thumbnail.png similarity index 100% rename from examples/customization/custom-node/demo-thumbnail.png rename to demos/fields/demo-thumbnail.png diff --git a/examples/customization/custom-node/demo-video.mp4 b/demos/fields/demo-video.mp4 similarity index 100% rename from examples/customization/custom-node/demo-video.mp4 rename to demos/fields/demo-video.mp4 diff --git a/examples/advanced/linked-sections/index.html b/demos/fields/index.html similarity index 100% rename from examples/advanced/linked-sections/index.html rename to demos/fields/index.html diff --git a/examples/customization/custom-mark/package.json b/demos/fields/package.json similarity index 100% rename from examples/customization/custom-mark/package.json rename to demos/fields/package.json diff --git a/examples/customization/custom-node/public/logo.webp b/demos/fields/public/logo.webp similarity index 100% rename from examples/customization/custom-node/public/logo.webp rename to demos/fields/public/logo.webp diff --git a/examples/customization/custom-node/public/sample-document.docx b/demos/fields/public/sample-document.docx similarity index 100% rename from examples/customization/custom-node/public/sample-document.docx rename to demos/fields/public/sample-document.docx diff --git a/examples/advanced/fields/src/App.vue b/demos/fields/src/App.vue similarity index 100% rename from examples/advanced/fields/src/App.vue rename to demos/fields/src/App.vue diff --git a/examples/customization/custom-mark/src/UploadFile.vue b/demos/fields/src/UploadFile.vue similarity index 100% rename from examples/customization/custom-mark/src/UploadFile.vue rename to demos/fields/src/UploadFile.vue diff --git a/examples/advanced/linked-sections/src/main.js b/demos/fields/src/main.js similarity index 100% rename from examples/advanced/linked-sections/src/main.js rename to demos/fields/src/main.js diff --git a/examples/customization/custom-mark/src/style.css b/demos/fields/src/style.css similarity index 100% rename from examples/customization/custom-mark/src/style.css rename to demos/fields/src/style.css diff --git a/examples/advanced/linked-sections/vite.config.js b/demos/fields/vite.config.js similarity index 100% rename from examples/advanced/linked-sections/vite.config.js rename to demos/fields/vite.config.js diff --git a/examples/advanced/grading-papers/.gitignore b/demos/grading-papers/.gitignore similarity index 100% rename from examples/advanced/grading-papers/.gitignore rename to demos/grading-papers/.gitignore diff --git a/examples/advanced/grading-papers/README.md b/demos/grading-papers/README.md similarity index 100% rename from examples/advanced/grading-papers/README.md rename to demos/grading-papers/README.md diff --git a/examples/advanced/grading-papers/app/globals.css b/demos/grading-papers/app/globals.css similarity index 100% rename from examples/advanced/grading-papers/app/globals.css rename to demos/grading-papers/app/globals.css diff --git a/examples/advanced/grading-papers/app/grading/[id]/_doc-links.js b/demos/grading-papers/app/grading/[id]/_doc-links.js similarity index 100% rename from examples/advanced/grading-papers/app/grading/[id]/_doc-links.js rename to demos/grading-papers/app/grading/[id]/_doc-links.js diff --git a/examples/advanced/grading-papers/app/grading/[id]/loading.tsx b/demos/grading-papers/app/grading/[id]/loading.tsx similarity index 100% rename from examples/advanced/grading-papers/app/grading/[id]/loading.tsx rename to demos/grading-papers/app/grading/[id]/loading.tsx diff --git a/examples/advanced/grading-papers/app/grading/[id]/page.tsx b/demos/grading-papers/app/grading/[id]/page.tsx similarity index 100% rename from examples/advanced/grading-papers/app/grading/[id]/page.tsx rename to demos/grading-papers/app/grading/[id]/page.tsx diff --git a/examples/advanced/grading-papers/app/layout.tsx b/demos/grading-papers/app/layout.tsx similarity index 100% rename from examples/advanced/grading-papers/app/layout.tsx rename to demos/grading-papers/app/layout.tsx diff --git a/examples/advanced/grading-papers/app/loading.tsx b/demos/grading-papers/app/loading.tsx similarity index 100% rename from examples/advanced/grading-papers/app/loading.tsx rename to demos/grading-papers/app/loading.tsx diff --git a/examples/advanced/grading-papers/app/page.tsx b/demos/grading-papers/app/page.tsx similarity index 100% rename from examples/advanced/grading-papers/app/page.tsx rename to demos/grading-papers/app/page.tsx diff --git a/examples/advanced/grading-papers/assets/docs/assign-1.docx b/demos/grading-papers/assets/docs/assign-1.docx similarity index 100% rename from examples/advanced/grading-papers/assets/docs/assign-1.docx rename to demos/grading-papers/assets/docs/assign-1.docx diff --git a/examples/advanced/grading-papers/assets/docs/assign-1.js b/demos/grading-papers/assets/docs/assign-1.js similarity index 100% rename from examples/advanced/grading-papers/assets/docs/assign-1.js rename to demos/grading-papers/assets/docs/assign-1.js diff --git a/examples/advanced/grading-papers/assets/docs/assign-2.docx b/demos/grading-papers/assets/docs/assign-2.docx similarity index 100% rename from examples/advanced/grading-papers/assets/docs/assign-2.docx rename to demos/grading-papers/assets/docs/assign-2.docx diff --git a/examples/advanced/grading-papers/assets/docs/assign-2.js b/demos/grading-papers/assets/docs/assign-2.js similarity index 100% rename from examples/advanced/grading-papers/assets/docs/assign-2.js rename to demos/grading-papers/assets/docs/assign-2.js diff --git a/examples/advanced/grading-papers/assets/docs/assign-3.docx b/demos/grading-papers/assets/docs/assign-3.docx similarity index 100% rename from examples/advanced/grading-papers/assets/docs/assign-3.docx rename to demos/grading-papers/assets/docs/assign-3.docx diff --git a/examples/advanced/grading-papers/assets/docs/assign-3.js b/demos/grading-papers/assets/docs/assign-3.js similarity index 100% rename from examples/advanced/grading-papers/assets/docs/assign-3.js rename to demos/grading-papers/assets/docs/assign-3.js diff --git a/examples/advanced/grading-papers/assets/docs/assign-4.docx b/demos/grading-papers/assets/docs/assign-4.docx similarity index 100% rename from examples/advanced/grading-papers/assets/docs/assign-4.docx rename to demos/grading-papers/assets/docs/assign-4.docx diff --git a/examples/advanced/grading-papers/assets/docs/assign-4.js b/demos/grading-papers/assets/docs/assign-4.js similarity index 100% rename from examples/advanced/grading-papers/assets/docs/assign-4.js rename to demos/grading-papers/assets/docs/assign-4.js diff --git a/examples/advanced/grading-papers/assets/docs/assign-5.docx b/demos/grading-papers/assets/docs/assign-5.docx similarity index 100% rename from examples/advanced/grading-papers/assets/docs/assign-5.docx rename to demos/grading-papers/assets/docs/assign-5.docx diff --git a/examples/advanced/grading-papers/assets/docs/assign-5.js b/demos/grading-papers/assets/docs/assign-5.js similarity index 100% rename from examples/advanced/grading-papers/assets/docs/assign-5.js rename to demos/grading-papers/assets/docs/assign-5.js diff --git a/examples/advanced/grading-papers/components.json b/demos/grading-papers/components.json similarity index 100% rename from examples/advanced/grading-papers/components.json rename to demos/grading-papers/components.json diff --git a/examples/advanced/grading-papers/components/theme-provider.tsx b/demos/grading-papers/components/theme-provider.tsx similarity index 100% rename from examples/advanced/grading-papers/components/theme-provider.tsx rename to demos/grading-papers/components/theme-provider.tsx diff --git a/examples/advanced/grading-papers/components/ui/accordion.tsx b/demos/grading-papers/components/ui/accordion.tsx similarity index 100% rename from examples/advanced/grading-papers/components/ui/accordion.tsx rename to demos/grading-papers/components/ui/accordion.tsx diff --git a/examples/advanced/grading-papers/components/ui/alert-dialog.tsx b/demos/grading-papers/components/ui/alert-dialog.tsx similarity index 100% rename from examples/advanced/grading-papers/components/ui/alert-dialog.tsx rename to demos/grading-papers/components/ui/alert-dialog.tsx diff --git a/examples/advanced/grading-papers/components/ui/alert.tsx b/demos/grading-papers/components/ui/alert.tsx similarity index 100% rename from examples/advanced/grading-papers/components/ui/alert.tsx rename to demos/grading-papers/components/ui/alert.tsx diff --git a/examples/advanced/grading-papers/components/ui/aspect-ratio.tsx b/demos/grading-papers/components/ui/aspect-ratio.tsx similarity index 100% rename from examples/advanced/grading-papers/components/ui/aspect-ratio.tsx rename to demos/grading-papers/components/ui/aspect-ratio.tsx diff --git a/examples/advanced/grading-papers/components/ui/avatar.tsx b/demos/grading-papers/components/ui/avatar.tsx similarity index 100% rename from examples/advanced/grading-papers/components/ui/avatar.tsx rename to demos/grading-papers/components/ui/avatar.tsx diff --git a/examples/advanced/grading-papers/components/ui/badge.tsx b/demos/grading-papers/components/ui/badge.tsx similarity index 100% rename from examples/advanced/grading-papers/components/ui/badge.tsx rename to demos/grading-papers/components/ui/badge.tsx diff --git a/examples/advanced/grading-papers/components/ui/breadcrumb.tsx b/demos/grading-papers/components/ui/breadcrumb.tsx similarity index 100% rename from examples/advanced/grading-papers/components/ui/breadcrumb.tsx rename to demos/grading-papers/components/ui/breadcrumb.tsx diff --git a/examples/advanced/grading-papers/components/ui/button.tsx b/demos/grading-papers/components/ui/button.tsx similarity index 100% rename from examples/advanced/grading-papers/components/ui/button.tsx rename to demos/grading-papers/components/ui/button.tsx diff --git a/examples/advanced/grading-papers/components/ui/calendar.tsx b/demos/grading-papers/components/ui/calendar.tsx similarity index 100% rename from examples/advanced/grading-papers/components/ui/calendar.tsx rename to demos/grading-papers/components/ui/calendar.tsx diff --git a/examples/advanced/grading-papers/components/ui/card.tsx b/demos/grading-papers/components/ui/card.tsx similarity index 100% rename from examples/advanced/grading-papers/components/ui/card.tsx rename to demos/grading-papers/components/ui/card.tsx diff --git a/examples/advanced/grading-papers/components/ui/carousel.tsx b/demos/grading-papers/components/ui/carousel.tsx similarity index 100% rename from examples/advanced/grading-papers/components/ui/carousel.tsx rename to demos/grading-papers/components/ui/carousel.tsx diff --git a/examples/advanced/grading-papers/components/ui/chart.tsx b/demos/grading-papers/components/ui/chart.tsx similarity index 100% rename from examples/advanced/grading-papers/components/ui/chart.tsx rename to demos/grading-papers/components/ui/chart.tsx diff --git a/examples/advanced/grading-papers/components/ui/checkbox.tsx b/demos/grading-papers/components/ui/checkbox.tsx similarity index 100% rename from examples/advanced/grading-papers/components/ui/checkbox.tsx rename to demos/grading-papers/components/ui/checkbox.tsx diff --git a/examples/advanced/grading-papers/components/ui/collapsible.tsx b/demos/grading-papers/components/ui/collapsible.tsx similarity index 100% rename from examples/advanced/grading-papers/components/ui/collapsible.tsx rename to demos/grading-papers/components/ui/collapsible.tsx diff --git a/examples/advanced/grading-papers/components/ui/command.tsx b/demos/grading-papers/components/ui/command.tsx similarity index 100% rename from examples/advanced/grading-papers/components/ui/command.tsx rename to demos/grading-papers/components/ui/command.tsx diff --git a/examples/advanced/grading-papers/components/ui/context-menu.tsx b/demos/grading-papers/components/ui/context-menu.tsx similarity index 100% rename from examples/advanced/grading-papers/components/ui/context-menu.tsx rename to demos/grading-papers/components/ui/context-menu.tsx diff --git a/examples/advanced/grading-papers/components/ui/dialog.tsx b/demos/grading-papers/components/ui/dialog.tsx similarity index 100% rename from examples/advanced/grading-papers/components/ui/dialog.tsx rename to demos/grading-papers/components/ui/dialog.tsx diff --git a/examples/advanced/grading-papers/components/ui/drawer.tsx b/demos/grading-papers/components/ui/drawer.tsx similarity index 100% rename from examples/advanced/grading-papers/components/ui/drawer.tsx rename to demos/grading-papers/components/ui/drawer.tsx diff --git a/examples/advanced/grading-papers/components/ui/dropdown-menu.tsx b/demos/grading-papers/components/ui/dropdown-menu.tsx similarity index 100% rename from examples/advanced/grading-papers/components/ui/dropdown-menu.tsx rename to demos/grading-papers/components/ui/dropdown-menu.tsx diff --git a/examples/advanced/grading-papers/components/ui/form.tsx b/demos/grading-papers/components/ui/form.tsx similarity index 100% rename from examples/advanced/grading-papers/components/ui/form.tsx rename to demos/grading-papers/components/ui/form.tsx diff --git a/examples/advanced/grading-papers/components/ui/hover-card.tsx b/demos/grading-papers/components/ui/hover-card.tsx similarity index 100% rename from examples/advanced/grading-papers/components/ui/hover-card.tsx rename to demos/grading-papers/components/ui/hover-card.tsx diff --git a/examples/advanced/grading-papers/components/ui/input-otp.tsx b/demos/grading-papers/components/ui/input-otp.tsx similarity index 100% rename from examples/advanced/grading-papers/components/ui/input-otp.tsx rename to demos/grading-papers/components/ui/input-otp.tsx diff --git a/examples/advanced/grading-papers/components/ui/input.tsx b/demos/grading-papers/components/ui/input.tsx similarity index 100% rename from examples/advanced/grading-papers/components/ui/input.tsx rename to demos/grading-papers/components/ui/input.tsx diff --git a/examples/advanced/grading-papers/components/ui/label.tsx b/demos/grading-papers/components/ui/label.tsx similarity index 100% rename from examples/advanced/grading-papers/components/ui/label.tsx rename to demos/grading-papers/components/ui/label.tsx diff --git a/examples/advanced/grading-papers/components/ui/menubar.tsx b/demos/grading-papers/components/ui/menubar.tsx similarity index 100% rename from examples/advanced/grading-papers/components/ui/menubar.tsx rename to demos/grading-papers/components/ui/menubar.tsx diff --git a/examples/advanced/grading-papers/components/ui/navigation-menu.tsx b/demos/grading-papers/components/ui/navigation-menu.tsx similarity index 100% rename from examples/advanced/grading-papers/components/ui/navigation-menu.tsx rename to demos/grading-papers/components/ui/navigation-menu.tsx diff --git a/examples/advanced/grading-papers/components/ui/pagination.tsx b/demos/grading-papers/components/ui/pagination.tsx similarity index 100% rename from examples/advanced/grading-papers/components/ui/pagination.tsx rename to demos/grading-papers/components/ui/pagination.tsx diff --git a/examples/advanced/grading-papers/components/ui/popover.tsx b/demos/grading-papers/components/ui/popover.tsx similarity index 100% rename from examples/advanced/grading-papers/components/ui/popover.tsx rename to demos/grading-papers/components/ui/popover.tsx diff --git a/examples/advanced/grading-papers/components/ui/progress.tsx b/demos/grading-papers/components/ui/progress.tsx similarity index 100% rename from examples/advanced/grading-papers/components/ui/progress.tsx rename to demos/grading-papers/components/ui/progress.tsx diff --git a/examples/advanced/grading-papers/components/ui/radio-group.tsx b/demos/grading-papers/components/ui/radio-group.tsx similarity index 100% rename from examples/advanced/grading-papers/components/ui/radio-group.tsx rename to demos/grading-papers/components/ui/radio-group.tsx diff --git a/examples/advanced/grading-papers/components/ui/resizable.tsx b/demos/grading-papers/components/ui/resizable.tsx similarity index 100% rename from examples/advanced/grading-papers/components/ui/resizable.tsx rename to demos/grading-papers/components/ui/resizable.tsx diff --git a/examples/advanced/grading-papers/components/ui/scroll-area.tsx b/demos/grading-papers/components/ui/scroll-area.tsx similarity index 100% rename from examples/advanced/grading-papers/components/ui/scroll-area.tsx rename to demos/grading-papers/components/ui/scroll-area.tsx diff --git a/examples/advanced/grading-papers/components/ui/select.tsx b/demos/grading-papers/components/ui/select.tsx similarity index 100% rename from examples/advanced/grading-papers/components/ui/select.tsx rename to demos/grading-papers/components/ui/select.tsx diff --git a/examples/advanced/grading-papers/components/ui/separator.tsx b/demos/grading-papers/components/ui/separator.tsx similarity index 100% rename from examples/advanced/grading-papers/components/ui/separator.tsx rename to demos/grading-papers/components/ui/separator.tsx diff --git a/examples/advanced/grading-papers/components/ui/sheet.tsx b/demos/grading-papers/components/ui/sheet.tsx similarity index 100% rename from examples/advanced/grading-papers/components/ui/sheet.tsx rename to demos/grading-papers/components/ui/sheet.tsx diff --git a/examples/advanced/grading-papers/components/ui/sidebar.tsx b/demos/grading-papers/components/ui/sidebar.tsx similarity index 100% rename from examples/advanced/grading-papers/components/ui/sidebar.tsx rename to demos/grading-papers/components/ui/sidebar.tsx diff --git a/examples/advanced/grading-papers/components/ui/skeleton.tsx b/demos/grading-papers/components/ui/skeleton.tsx similarity index 100% rename from examples/advanced/grading-papers/components/ui/skeleton.tsx rename to demos/grading-papers/components/ui/skeleton.tsx diff --git a/examples/advanced/grading-papers/components/ui/slider.tsx b/demos/grading-papers/components/ui/slider.tsx similarity index 100% rename from examples/advanced/grading-papers/components/ui/slider.tsx rename to demos/grading-papers/components/ui/slider.tsx diff --git a/examples/advanced/grading-papers/components/ui/sonner.tsx b/demos/grading-papers/components/ui/sonner.tsx similarity index 100% rename from examples/advanced/grading-papers/components/ui/sonner.tsx rename to demos/grading-papers/components/ui/sonner.tsx diff --git a/examples/advanced/grading-papers/components/ui/switch.tsx b/demos/grading-papers/components/ui/switch.tsx similarity index 100% rename from examples/advanced/grading-papers/components/ui/switch.tsx rename to demos/grading-papers/components/ui/switch.tsx diff --git a/examples/advanced/grading-papers/components/ui/table.tsx b/demos/grading-papers/components/ui/table.tsx similarity index 100% rename from examples/advanced/grading-papers/components/ui/table.tsx rename to demos/grading-papers/components/ui/table.tsx diff --git a/examples/advanced/grading-papers/components/ui/tabs.tsx b/demos/grading-papers/components/ui/tabs.tsx similarity index 100% rename from examples/advanced/grading-papers/components/ui/tabs.tsx rename to demos/grading-papers/components/ui/tabs.tsx diff --git a/examples/advanced/grading-papers/components/ui/textarea.tsx b/demos/grading-papers/components/ui/textarea.tsx similarity index 100% rename from examples/advanced/grading-papers/components/ui/textarea.tsx rename to demos/grading-papers/components/ui/textarea.tsx diff --git a/examples/advanced/grading-papers/components/ui/toast.tsx b/demos/grading-papers/components/ui/toast.tsx similarity index 100% rename from examples/advanced/grading-papers/components/ui/toast.tsx rename to demos/grading-papers/components/ui/toast.tsx diff --git a/examples/advanced/grading-papers/components/ui/toaster.tsx b/demos/grading-papers/components/ui/toaster.tsx similarity index 100% rename from examples/advanced/grading-papers/components/ui/toaster.tsx rename to demos/grading-papers/components/ui/toaster.tsx diff --git a/examples/advanced/grading-papers/components/ui/toggle-group.tsx b/demos/grading-papers/components/ui/toggle-group.tsx similarity index 100% rename from examples/advanced/grading-papers/components/ui/toggle-group.tsx rename to demos/grading-papers/components/ui/toggle-group.tsx diff --git a/examples/advanced/grading-papers/components/ui/toggle.tsx b/demos/grading-papers/components/ui/toggle.tsx similarity index 100% rename from examples/advanced/grading-papers/components/ui/toggle.tsx rename to demos/grading-papers/components/ui/toggle.tsx diff --git a/examples/advanced/grading-papers/components/ui/tooltip.tsx b/demos/grading-papers/components/ui/tooltip.tsx similarity index 100% rename from examples/advanced/grading-papers/components/ui/tooltip.tsx rename to demos/grading-papers/components/ui/tooltip.tsx diff --git a/examples/advanced/grading-papers/components/ui/use-mobile.tsx b/demos/grading-papers/components/ui/use-mobile.tsx similarity index 100% rename from examples/advanced/grading-papers/components/ui/use-mobile.tsx rename to demos/grading-papers/components/ui/use-mobile.tsx diff --git a/examples/advanced/grading-papers/components/ui/use-toast.ts b/demos/grading-papers/components/ui/use-toast.ts similarity index 100% rename from examples/advanced/grading-papers/components/ui/use-toast.ts rename to demos/grading-papers/components/ui/use-toast.ts diff --git a/examples/advanced/grading-papers/demo-config.json b/demos/grading-papers/demo-config.json similarity index 100% rename from examples/advanced/grading-papers/demo-config.json rename to demos/grading-papers/demo-config.json diff --git a/examples/advanced/grading-papers/demo-thumbnail.png b/demos/grading-papers/demo-thumbnail.png similarity index 100% rename from examples/advanced/grading-papers/demo-thumbnail.png rename to demos/grading-papers/demo-thumbnail.png diff --git a/examples/advanced/grading-papers/hooks/use-mobile.tsx b/demos/grading-papers/hooks/use-mobile.tsx similarity index 100% rename from examples/advanced/grading-papers/hooks/use-mobile.tsx rename to demos/grading-papers/hooks/use-mobile.tsx diff --git a/examples/advanced/grading-papers/hooks/use-toast.ts b/demos/grading-papers/hooks/use-toast.ts similarity index 100% rename from examples/advanced/grading-papers/hooks/use-toast.ts rename to demos/grading-papers/hooks/use-toast.ts diff --git a/examples/advanced/grading-papers/lib/utils.ts b/demos/grading-papers/lib/utils.ts similarity index 100% rename from examples/advanced/grading-papers/lib/utils.ts rename to demos/grading-papers/lib/utils.ts diff --git a/examples/advanced/grading-papers/next.config.mjs b/demos/grading-papers/next.config.mjs similarity index 100% rename from examples/advanced/grading-papers/next.config.mjs rename to demos/grading-papers/next.config.mjs diff --git a/examples/advanced/grading-papers/package.json b/demos/grading-papers/package.json similarity index 100% rename from examples/advanced/grading-papers/package.json rename to demos/grading-papers/package.json diff --git a/examples/advanced/grading-papers/pnpm-lock.yaml b/demos/grading-papers/pnpm-lock.yaml similarity index 100% rename from examples/advanced/grading-papers/pnpm-lock.yaml rename to demos/grading-papers/pnpm-lock.yaml diff --git a/examples/advanced/grading-papers/postcss.config.mjs b/demos/grading-papers/postcss.config.mjs similarity index 100% rename from examples/advanced/grading-papers/postcss.config.mjs rename to demos/grading-papers/postcss.config.mjs diff --git a/examples/advanced/grading-papers/public/assign-1.docx b/demos/grading-papers/public/assign-1.docx similarity index 100% rename from examples/advanced/grading-papers/public/assign-1.docx rename to demos/grading-papers/public/assign-1.docx diff --git a/examples/advanced/grading-papers/public/assign-2.docx b/demos/grading-papers/public/assign-2.docx similarity index 100% rename from examples/advanced/grading-papers/public/assign-2.docx rename to demos/grading-papers/public/assign-2.docx diff --git a/examples/advanced/grading-papers/public/assign-3.docx b/demos/grading-papers/public/assign-3.docx similarity index 100% rename from examples/advanced/grading-papers/public/assign-3.docx rename to demos/grading-papers/public/assign-3.docx diff --git a/examples/advanced/grading-papers/public/assign-4.docx b/demos/grading-papers/public/assign-4.docx similarity index 100% rename from examples/advanced/grading-papers/public/assign-4.docx rename to demos/grading-papers/public/assign-4.docx diff --git a/examples/advanced/grading-papers/public/assign-5.docx b/demos/grading-papers/public/assign-5.docx similarity index 100% rename from examples/advanced/grading-papers/public/assign-5.docx rename to demos/grading-papers/public/assign-5.docx diff --git a/examples/advanced/grading-papers/public/jamie_smith_bio220_research_proposal.docx b/demos/grading-papers/public/jamie_smith_bio220_research_proposal.docx similarity index 100% rename from examples/advanced/grading-papers/public/jamie_smith_bio220_research_proposal.docx rename to demos/grading-papers/public/jamie_smith_bio220_research_proposal.docx diff --git a/examples/advanced/grading-papers/public/placeholder-logo.png b/demos/grading-papers/public/placeholder-logo.png similarity index 100% rename from examples/advanced/grading-papers/public/placeholder-logo.png rename to demos/grading-papers/public/placeholder-logo.png diff --git a/examples/advanced/grading-papers/public/placeholder-logo.svg b/demos/grading-papers/public/placeholder-logo.svg similarity index 100% rename from examples/advanced/grading-papers/public/placeholder-logo.svg rename to demos/grading-papers/public/placeholder-logo.svg diff --git a/examples/advanced/grading-papers/public/placeholder-user.jpg b/demos/grading-papers/public/placeholder-user.jpg similarity index 100% rename from examples/advanced/grading-papers/public/placeholder-user.jpg rename to demos/grading-papers/public/placeholder-user.jpg diff --git a/examples/advanced/grading-papers/public/placeholder.jpg b/demos/grading-papers/public/placeholder.jpg similarity index 100% rename from examples/advanced/grading-papers/public/placeholder.jpg rename to demos/grading-papers/public/placeholder.jpg diff --git a/examples/advanced/grading-papers/public/placeholder.svg b/demos/grading-papers/public/placeholder.svg similarity index 100% rename from examples/advanced/grading-papers/public/placeholder.svg rename to demos/grading-papers/public/placeholder.svg diff --git a/examples/advanced/grading-papers/public/~$alex.docx b/demos/grading-papers/public/~$alex.docx similarity index 100% rename from examples/advanced/grading-papers/public/~$alex.docx rename to demos/grading-papers/public/~$alex.docx diff --git a/examples/advanced/grading-papers/styles/globals.css b/demos/grading-papers/styles/globals.css similarity index 100% rename from examples/advanced/grading-papers/styles/globals.css rename to demos/grading-papers/styles/globals.css diff --git a/examples/advanced/grading-papers/tailwind.config.ts b/demos/grading-papers/tailwind.config.ts similarity index 100% rename from examples/advanced/grading-papers/tailwind.config.ts rename to demos/grading-papers/tailwind.config.ts diff --git a/examples/advanced/grading-papers/tsconfig.json b/demos/grading-papers/tsconfig.json similarity index 100% rename from examples/advanced/grading-papers/tsconfig.json rename to demos/grading-papers/tsconfig.json diff --git a/examples/customization/custom-mark/.gitignore b/demos/html-editor/.gitignore similarity index 100% rename from examples/customization/custom-mark/.gitignore rename to demos/html-editor/.gitignore diff --git a/examples/advanced/html-editor/.vscode/extensions.json b/demos/html-editor/.vscode/extensions.json similarity index 100% rename from examples/advanced/html-editor/.vscode/extensions.json rename to demos/html-editor/.vscode/extensions.json diff --git a/examples/advanced/html-editor/README.md b/demos/html-editor/README.md similarity index 100% rename from examples/advanced/html-editor/README.md rename to demos/html-editor/README.md diff --git a/examples/advanced/html-editor/demo-config.json b/demos/html-editor/demo-config.json similarity index 100% rename from examples/advanced/html-editor/demo-config.json rename to demos/html-editor/demo-config.json diff --git a/examples/advanced/html-editor/demo-thumbnail.png b/demos/html-editor/demo-thumbnail.png similarity index 100% rename from examples/advanced/html-editor/demo-thumbnail.png rename to demos/html-editor/demo-thumbnail.png diff --git a/examples/advanced/html-editor/demo-video.mp4 b/demos/html-editor/demo-video.mp4 similarity index 100% rename from examples/advanced/html-editor/demo-video.mp4 rename to demos/html-editor/demo-video.mp4 diff --git a/examples/advanced/html-editor/index.html b/demos/html-editor/index.html similarity index 100% rename from examples/advanced/html-editor/index.html rename to demos/html-editor/index.html diff --git a/examples/customization/custom-node/package.json b/demos/html-editor/package.json similarity index 100% rename from examples/customization/custom-node/package.json rename to demos/html-editor/package.json diff --git a/examples/customization/custom-mark/public/superdoc-logo.png b/demos/html-editor/public/superdoc-logo.png similarity index 100% rename from examples/customization/custom-mark/public/superdoc-logo.png rename to demos/html-editor/public/superdoc-logo.png diff --git a/examples/advanced/html-editor/src/App.vue b/demos/html-editor/src/App.vue similarity index 100% rename from examples/advanced/html-editor/src/App.vue rename to demos/html-editor/src/App.vue diff --git a/examples/customization/custom-mark/src/main.js b/demos/html-editor/src/main.js similarity index 100% rename from examples/customization/custom-mark/src/main.js rename to demos/html-editor/src/main.js diff --git a/examples/advanced/html-editor/src/style.css b/demos/html-editor/src/style.css similarity index 100% rename from examples/advanced/html-editor/src/style.css rename to demos/html-editor/src/style.css diff --git a/examples/customization/custom-mark/vite.config.js b/demos/html-editor/vite.config.js similarity index 100% rename from examples/customization/custom-mark/vite.config.js rename to demos/html-editor/vite.config.js diff --git a/examples/customization/custom-node/.gitignore b/demos/linked-sections/.gitignore similarity index 100% rename from examples/customization/custom-node/.gitignore rename to demos/linked-sections/.gitignore diff --git a/examples/advanced/linked-sections/README.md b/demos/linked-sections/README.md similarity index 100% rename from examples/advanced/linked-sections/README.md rename to demos/linked-sections/README.md diff --git a/examples/advanced/linked-sections/demo-config.json b/demos/linked-sections/demo-config.json similarity index 100% rename from examples/advanced/linked-sections/demo-config.json rename to demos/linked-sections/demo-config.json diff --git a/examples/advanced/linked-sections/demo-thumbnail.png b/demos/linked-sections/demo-thumbnail.png similarity index 100% rename from examples/advanced/linked-sections/demo-thumbnail.png rename to demos/linked-sections/demo-thumbnail.png diff --git a/examples/advanced/linked-sections/demo-video.mp4 b/demos/linked-sections/demo-video.mp4 similarity index 100% rename from examples/advanced/linked-sections/demo-video.mp4 rename to demos/linked-sections/demo-video.mp4 diff --git a/examples/customization/custom-node/index.html b/demos/linked-sections/index.html similarity index 100% rename from examples/customization/custom-node/index.html rename to demos/linked-sections/index.html diff --git a/examples/advanced/linked-sections/package.json b/demos/linked-sections/package.json similarity index 100% rename from examples/advanced/linked-sections/package.json rename to demos/linked-sections/package.json diff --git a/examples/customization/custom-plugin/public/logo.webp b/demos/linked-sections/public/logo.webp similarity index 100% rename from examples/customization/custom-plugin/public/logo.webp rename to demos/linked-sections/public/logo.webp diff --git a/examples/advanced/linked-sections/src/App.vue b/demos/linked-sections/src/App.vue similarity index 100% rename from examples/advanced/linked-sections/src/App.vue rename to demos/linked-sections/src/App.vue diff --git a/examples/customization/custom-node/src/UploadFile.vue b/demos/linked-sections/src/UploadFile.vue similarity index 100% rename from examples/customization/custom-node/src/UploadFile.vue rename to demos/linked-sections/src/UploadFile.vue diff --git a/examples/customization/custom-node/src/main.js b/demos/linked-sections/src/main.js similarity index 100% rename from examples/customization/custom-node/src/main.js rename to demos/linked-sections/src/main.js diff --git a/examples/customization/custom-node/src/style.css b/demos/linked-sections/src/style.css similarity index 100% rename from examples/customization/custom-node/src/style.css rename to demos/linked-sections/src/style.css diff --git a/examples/customization/custom-node/vite.config.js b/demos/linked-sections/vite.config.js similarity index 100% rename from examples/customization/custom-node/vite.config.js rename to demos/linked-sections/vite.config.js diff --git a/examples/advanced/loading-from-json/demo-config.json b/demos/loading-from-json/demo-config.json similarity index 100% rename from examples/advanced/loading-from-json/demo-config.json rename to demos/loading-from-json/demo-config.json diff --git a/examples/advanced/loading-from-json/demo-thumbnail.png b/demos/loading-from-json/demo-thumbnail.png similarity index 100% rename from examples/advanced/loading-from-json/demo-thumbnail.png rename to demos/loading-from-json/demo-thumbnail.png diff --git a/examples/advanced/loading-from-json/demo-video.mp4 b/demos/loading-from-json/demo-video.mp4 similarity index 100% rename from examples/advanced/loading-from-json/demo-video.mp4 rename to demos/loading-from-json/demo-video.mp4 diff --git a/examples/advanced/loading-from-json/index.html b/demos/loading-from-json/index.html similarity index 100% rename from examples/advanced/loading-from-json/index.html rename to demos/loading-from-json/index.html diff --git a/examples/advanced/loading-from-json/package.json b/demos/loading-from-json/package.json similarity index 100% rename from examples/advanced/loading-from-json/package.json rename to demos/loading-from-json/package.json diff --git a/examples/advanced/loading-from-json/src/main.js b/demos/loading-from-json/src/main.js similarity index 100% rename from examples/advanced/loading-from-json/src/main.js rename to demos/loading-from-json/src/main.js diff --git a/examples/advanced/loading-from-json/src/style.css b/demos/loading-from-json/src/style.css similarity index 100% rename from examples/advanced/loading-from-json/src/style.css rename to demos/loading-from-json/src/style.css diff --git a/examples/advanced/loading-from-json/vite.config.js b/demos/loading-from-json/vite.config.js similarity index 100% rename from examples/advanced/loading-from-json/vite.config.js rename to demos/loading-from-json/vite.config.js diff --git a/examples/integrations/nextjs-ssr/.gitignore b/demos/nextjs-ssr/.gitignore similarity index 100% rename from examples/integrations/nextjs-ssr/.gitignore rename to demos/nextjs-ssr/.gitignore diff --git a/examples/integrations/nextjs-ssr/README.md b/demos/nextjs-ssr/README.md similarity index 100% rename from examples/integrations/nextjs-ssr/README.md rename to demos/nextjs-ssr/README.md diff --git a/examples/integrations/nextjs-ssr/demo-config.json b/demos/nextjs-ssr/demo-config.json similarity index 100% rename from examples/integrations/nextjs-ssr/demo-config.json rename to demos/nextjs-ssr/demo-config.json diff --git a/examples/integrations/nextjs-ssr/demo-thumbnail.png b/demos/nextjs-ssr/demo-thumbnail.png similarity index 100% rename from examples/integrations/nextjs-ssr/demo-thumbnail.png rename to demos/nextjs-ssr/demo-thumbnail.png diff --git a/examples/integrations/nextjs-ssr/demo-video.mp4 b/demos/nextjs-ssr/demo-video.mp4 similarity index 100% rename from examples/integrations/nextjs-ssr/demo-video.mp4 rename to demos/nextjs-ssr/demo-video.mp4 diff --git a/examples/integrations/nextjs-ssr/jsconfig.json b/demos/nextjs-ssr/jsconfig.json similarity index 100% rename from examples/integrations/nextjs-ssr/jsconfig.json rename to demos/nextjs-ssr/jsconfig.json diff --git a/examples/integrations/nextjs-ssr/next.config.mjs b/demos/nextjs-ssr/next.config.mjs similarity index 100% rename from examples/integrations/nextjs-ssr/next.config.mjs rename to demos/nextjs-ssr/next.config.mjs diff --git a/examples/integrations/nextjs-ssr/package.json b/demos/nextjs-ssr/package.json similarity index 100% rename from examples/integrations/nextjs-ssr/package.json rename to demos/nextjs-ssr/package.json diff --git a/examples/integrations/nextjs-ssr/public/file.svg b/demos/nextjs-ssr/public/file.svg similarity index 100% rename from examples/integrations/nextjs-ssr/public/file.svg rename to demos/nextjs-ssr/public/file.svg diff --git a/examples/integrations/nextjs-ssr/public/globe.svg b/demos/nextjs-ssr/public/globe.svg similarity index 100% rename from examples/integrations/nextjs-ssr/public/globe.svg rename to demos/nextjs-ssr/public/globe.svg diff --git a/examples/integrations/nextjs-ssr/public/next.svg b/demos/nextjs-ssr/public/next.svg similarity index 100% rename from examples/integrations/nextjs-ssr/public/next.svg rename to demos/nextjs-ssr/public/next.svg diff --git a/examples/customization/custom-plugin/public/sample-document.docx b/demos/nextjs-ssr/public/sample-document.docx similarity index 100% rename from examples/customization/custom-plugin/public/sample-document.docx rename to demos/nextjs-ssr/public/sample-document.docx diff --git a/examples/advanced/text-selection/public/sample.docx b/demos/nextjs-ssr/public/sample.docx similarity index 100% rename from examples/advanced/text-selection/public/sample.docx rename to demos/nextjs-ssr/public/sample.docx diff --git a/examples/integrations/nextjs-ssr/public/vercel.svg b/demos/nextjs-ssr/public/vercel.svg similarity index 100% rename from examples/integrations/nextjs-ssr/public/vercel.svg rename to demos/nextjs-ssr/public/vercel.svg diff --git a/examples/integrations/nextjs-ssr/public/window.svg b/demos/nextjs-ssr/public/window.svg similarity index 100% rename from examples/integrations/nextjs-ssr/public/window.svg rename to demos/nextjs-ssr/public/window.svg diff --git a/examples/integrations/nextjs-ssr/src/app/SuperDoc/superdoc.css b/demos/nextjs-ssr/src/app/SuperDoc/superdoc.css similarity index 100% rename from examples/integrations/nextjs-ssr/src/app/SuperDoc/superdoc.css rename to demos/nextjs-ssr/src/app/SuperDoc/superdoc.css diff --git a/examples/integrations/nextjs-ssr/src/app/SuperDoc/superdoc.js b/demos/nextjs-ssr/src/app/SuperDoc/superdoc.js similarity index 100% rename from examples/integrations/nextjs-ssr/src/app/SuperDoc/superdoc.js rename to demos/nextjs-ssr/src/app/SuperDoc/superdoc.js diff --git a/examples/integrations/nextjs-ssr/src/app/favicon.ico b/demos/nextjs-ssr/src/app/favicon.ico similarity index 100% rename from examples/integrations/nextjs-ssr/src/app/favicon.ico rename to demos/nextjs-ssr/src/app/favicon.ico diff --git a/examples/integrations/nextjs-ssr/src/app/globals.css b/demos/nextjs-ssr/src/app/globals.css similarity index 100% rename from examples/integrations/nextjs-ssr/src/app/globals.css rename to demos/nextjs-ssr/src/app/globals.css diff --git a/examples/integrations/nextjs-ssr/src/app/layout.js b/demos/nextjs-ssr/src/app/layout.js similarity index 100% rename from examples/integrations/nextjs-ssr/src/app/layout.js rename to demos/nextjs-ssr/src/app/layout.js diff --git a/examples/integrations/nextjs-ssr/src/app/page.js b/demos/nextjs-ssr/src/app/page.js similarity index 100% rename from examples/integrations/nextjs-ssr/src/app/page.js rename to demos/nextjs-ssr/src/app/page.js diff --git a/examples/integrations/nextjs-ssr/src/app/page.module.css b/demos/nextjs-ssr/src/app/page.module.css similarity index 100% rename from examples/integrations/nextjs-ssr/src/app/page.module.css rename to demos/nextjs-ssr/src/app/page.module.css diff --git a/examples/integrations/nodejs/.gitignore b/demos/nodejs/.gitignore similarity index 100% rename from examples/integrations/nodejs/.gitignore rename to demos/nodejs/.gitignore diff --git a/examples/integrations/nodejs/README.md b/demos/nodejs/README.md similarity index 100% rename from examples/integrations/nodejs/README.md rename to demos/nodejs/README.md diff --git a/examples/integrations/nodejs/demo-config.json b/demos/nodejs/demo-config.json similarity index 100% rename from examples/integrations/nodejs/demo-config.json rename to demos/nodejs/demo-config.json diff --git a/examples/integrations/nodejs/demo-thumbnail.png b/demos/nodejs/demo-thumbnail.png similarity index 100% rename from examples/integrations/nodejs/demo-thumbnail.png rename to demos/nodejs/demo-thumbnail.png diff --git a/examples/integrations/nodejs/demo-video.mp4 b/demos/nodejs/demo-video.mp4 similarity index 100% rename from examples/integrations/nodejs/demo-video.mp4 rename to demos/nodejs/demo-video.mp4 diff --git a/examples/integrations/nodejs/document-b64.js b/demos/nodejs/document-b64.js similarity index 100% rename from examples/integrations/nodejs/document-b64.js rename to demos/nodejs/document-b64.js diff --git a/examples/integrations/nodejs/document.js b/demos/nodejs/document.js similarity index 100% rename from examples/integrations/nodejs/document.js rename to demos/nodejs/document.js diff --git a/examples/integrations/nodejs/file-polyfill.js b/demos/nodejs/file-polyfill.js similarity index 100% rename from examples/integrations/nodejs/file-polyfill.js rename to demos/nodejs/file-polyfill.js diff --git a/examples/integrations/nodejs/package.json b/demos/nodejs/package.json similarity index 100% rename from examples/integrations/nodejs/package.json rename to demos/nodejs/package.json diff --git a/examples/integrations/nodejs/sample-document.docx b/demos/nodejs/sample-document.docx similarity index 100% rename from examples/integrations/nodejs/sample-document.docx rename to demos/nodejs/sample-document.docx diff --git a/examples/integrations/nodejs/server.js b/demos/nodejs/server.js similarity index 100% rename from examples/integrations/nodejs/server.js rename to demos/nodejs/server.js diff --git a/examples/getting-started/react/demo-config.json b/demos/react/demo-config.json similarity index 100% rename from examples/getting-started/react/demo-config.json rename to demos/react/demo-config.json diff --git a/examples/advanced/replace-content/demo-thumbnail.png b/demos/react/demo-thumbnail.png similarity index 100% rename from examples/advanced/replace-content/demo-thumbnail.png rename to demos/react/demo-thumbnail.png diff --git a/examples/getting-started/react/demo-video.mp4 b/demos/react/demo-video.mp4 similarity index 100% rename from examples/getting-started/react/demo-video.mp4 rename to demos/react/demo-video.mp4 diff --git a/examples/advanced/replace-content/index.html b/demos/react/index.html similarity index 100% rename from examples/advanced/replace-content/index.html rename to demos/react/index.html diff --git a/examples/getting-started/react/package.json b/demos/react/package.json similarity index 100% rename from examples/getting-started/react/package.json rename to demos/react/package.json diff --git a/examples/getting-started/cdn/sample.docx b/demos/react/public/sample.docx similarity index 100% rename from examples/getting-started/cdn/sample.docx rename to demos/react/public/sample.docx diff --git a/examples/getting-started/react/src/App.jsx b/demos/react/src/App.jsx similarity index 100% rename from examples/getting-started/react/src/App.jsx rename to demos/react/src/App.jsx diff --git a/examples/advanced/text-selection/src/components/DocumentEditor.jsx b/demos/react/src/components/DocumentEditor.jsx similarity index 100% rename from examples/advanced/text-selection/src/components/DocumentEditor.jsx rename to demos/react/src/components/DocumentEditor.jsx diff --git a/examples/getting-started/react/src/main.jsx b/demos/react/src/main.jsx similarity index 100% rename from examples/getting-started/react/src/main.jsx rename to demos/react/src/main.jsx diff --git a/examples/advanced/text-selection/vite.config.js b/demos/react/vite.config.js similarity index 100% rename from examples/advanced/text-selection/vite.config.js rename to demos/react/vite.config.js diff --git a/examples/advanced/replace-content/README.md b/demos/replace-content/README.md similarity index 100% rename from examples/advanced/replace-content/README.md rename to demos/replace-content/README.md diff --git a/examples/advanced/replace-content/demo-config.json b/demos/replace-content/demo-config.json similarity index 100% rename from examples/advanced/replace-content/demo-config.json rename to demos/replace-content/demo-config.json diff --git a/examples/advanced/text-selection/demo-thumbnail.png b/demos/replace-content/demo-thumbnail.png similarity index 100% rename from examples/advanced/text-selection/demo-thumbnail.png rename to demos/replace-content/demo-thumbnail.png diff --git a/examples/advanced/replace-content/demo-video.mp4 b/demos/replace-content/demo-video.mp4 similarity index 100% rename from examples/advanced/replace-content/demo-video.mp4 rename to demos/replace-content/demo-video.mp4 diff --git a/examples/advanced/text-selection/index.html b/demos/replace-content/index.html similarity index 100% rename from examples/advanced/text-selection/index.html rename to demos/replace-content/index.html diff --git a/examples/advanced/replace-content/package.json b/demos/replace-content/package.json similarity index 100% rename from examples/advanced/replace-content/package.json rename to demos/replace-content/package.json diff --git a/examples/getting-started/react/public/sample.docx b/demos/replace-content/public/sample.docx similarity index 100% rename from examples/getting-started/react/public/sample.docx rename to demos/replace-content/public/sample.docx diff --git a/examples/advanced/replace-content/src/App.jsx b/demos/replace-content/src/App.jsx similarity index 100% rename from examples/advanced/replace-content/src/App.jsx rename to demos/replace-content/src/App.jsx diff --git a/examples/advanced/replace-content/src/components/DocumentEditor.jsx b/demos/replace-content/src/components/DocumentEditor.jsx similarity index 100% rename from examples/advanced/replace-content/src/components/DocumentEditor.jsx rename to demos/replace-content/src/components/DocumentEditor.jsx diff --git a/examples/advanced/replace-content/src/main.jsx b/demos/replace-content/src/main.jsx similarity index 100% rename from examples/advanced/replace-content/src/main.jsx rename to demos/replace-content/src/main.jsx diff --git a/examples/advanced/replace-content/vite.config.js b/demos/replace-content/vite.config.js similarity index 100% rename from examples/advanced/replace-content/vite.config.js rename to demos/replace-content/vite.config.js diff --git a/examples/shared/css/style.css b/demos/shared/css/style.css similarity index 100% rename from examples/shared/css/style.css rename to demos/shared/css/style.css diff --git a/examples/integrations/nextjs-ssr/public/sample-document.docx b/demos/shared/data/sample-document.docx similarity index 100% rename from examples/integrations/nextjs-ssr/public/sample-document.docx rename to demos/shared/data/sample-document.docx diff --git a/examples/customization/dynamic-content/public/logo.webp b/demos/shared/images/logo.webp similarity index 100% rename from examples/customization/dynamic-content/public/logo.webp rename to demos/shared/images/logo.webp diff --git a/examples/customization/dynamic-content/public/superdoc-logo.png b/demos/shared/images/superdoc-logo.png similarity index 100% rename from examples/customization/dynamic-content/public/superdoc-logo.png rename to demos/shared/images/superdoc-logo.png diff --git a/examples/shared/vue/UploadFile/UploadFile.vue b/demos/shared/vue/UploadFile/UploadFile.vue similarity index 100% rename from examples/shared/vue/UploadFile/UploadFile.vue rename to demos/shared/vue/UploadFile/UploadFile.vue diff --git a/examples/integrations/slack-redlining/README.md b/demos/slack-redlining/README.md similarity index 100% rename from examples/integrations/slack-redlining/README.md rename to demos/slack-redlining/README.md diff --git a/examples/integrations/slack-redlining/cloud-function/package.json b/demos/slack-redlining/cloud-function/package.json similarity index 100% rename from examples/integrations/slack-redlining/cloud-function/package.json rename to demos/slack-redlining/cloud-function/package.json diff --git a/examples/integrations/slack-redlining/cloud-function/server.js b/demos/slack-redlining/cloud-function/server.js similarity index 100% rename from examples/integrations/slack-redlining/cloud-function/server.js rename to demos/slack-redlining/cloud-function/server.js diff --git a/examples/integrations/slack-redlining/cloud-function/utils.js b/demos/slack-redlining/cloud-function/utils.js similarity index 100% rename from examples/integrations/slack-redlining/cloud-function/utils.js rename to demos/slack-redlining/cloud-function/utils.js diff --git a/examples/integrations/slack-redlining/demo-config.json b/demos/slack-redlining/demo-config.json similarity index 100% rename from examples/integrations/slack-redlining/demo-config.json rename to demos/slack-redlining/demo-config.json diff --git a/examples/integrations/slack-redlining/demo-thumbnail.png b/demos/slack-redlining/demo-thumbnail.png similarity index 100% rename from examples/integrations/slack-redlining/demo-thumbnail.png rename to demos/slack-redlining/demo-thumbnail.png diff --git a/examples/integrations/slack-redlining/demo-video.mp4 b/demos/slack-redlining/demo-video.mp4 similarity index 100% rename from examples/integrations/slack-redlining/demo-video.mp4 rename to demos/slack-redlining/demo-video.mp4 diff --git a/examples/integrations/slack-redlining/screenshot.png b/demos/slack-redlining/screenshot.png similarity index 100% rename from examples/integrations/slack-redlining/screenshot.png rename to demos/slack-redlining/screenshot.png diff --git a/examples/integrations/slack-redlining/zap.json b/demos/slack-redlining/zap.json similarity index 100% rename from examples/integrations/slack-redlining/zap.json rename to demos/slack-redlining/zap.json diff --git a/examples/tests/.gitignore b/demos/tests/.gitignore similarity index 100% rename from examples/tests/.gitignore rename to demos/tests/.gitignore diff --git a/examples/tests/Dockerfile b/demos/tests/Dockerfile similarity index 100% rename from examples/tests/Dockerfile rename to demos/tests/Dockerfile diff --git a/examples/tests/README.md b/demos/tests/README.md similarity index 100% rename from examples/tests/README.md rename to demos/tests/README.md diff --git a/examples/tests/package.json b/demos/tests/package.json similarity index 100% rename from examples/tests/package.json rename to demos/tests/package.json diff --git a/examples/tests/playwright.config.js b/demos/tests/playwright.config.js similarity index 100% rename from examples/tests/playwright.config.js rename to demos/tests/playwright.config.js diff --git a/examples/tests/scripts/bootstrap.js b/demos/tests/scripts/bootstrap.js similarity index 100% rename from examples/tests/scripts/bootstrap.js rename to demos/tests/scripts/bootstrap.js diff --git a/examples/tests/test-config.js b/demos/tests/test-config.js similarity index 100% rename from examples/tests/test-config.js rename to demos/tests/test-config.js diff --git a/examples/tests/tests.spec.js b/demos/tests/tests.spec.js similarity index 100% rename from examples/tests/tests.spec.js rename to demos/tests/tests.spec.js diff --git a/examples/tests/tests.spec.js-snapshots/cdn-should-open-the-main-page-1-chromium-darwin.png b/demos/tests/tests.spec.js-snapshots/cdn-should-open-the-main-page-1-chromium-darwin.png similarity index 100% rename from examples/tests/tests.spec.js-snapshots/cdn-should-open-the-main-page-1-chromium-darwin.png rename to demos/tests/tests.spec.js-snapshots/cdn-should-open-the-main-page-1-chromium-darwin.png diff --git a/examples/tests/tests.spec.js-snapshots/cdn-should-open-the-main-page-1-chromium-linux.png b/demos/tests/tests.spec.js-snapshots/cdn-should-open-the-main-page-1-chromium-linux.png similarity index 100% rename from examples/tests/tests.spec.js-snapshots/cdn-should-open-the-main-page-1-chromium-linux.png rename to demos/tests/tests.spec.js-snapshots/cdn-should-open-the-main-page-1-chromium-linux.png diff --git a/examples/tests/tests.spec.js-snapshots/custom-mark-should-open-the-main-page-1-chromium-darwin.png b/demos/tests/tests.spec.js-snapshots/custom-mark-should-open-the-main-page-1-chromium-darwin.png similarity index 100% rename from examples/tests/tests.spec.js-snapshots/custom-mark-should-open-the-main-page-1-chromium-darwin.png rename to demos/tests/tests.spec.js-snapshots/custom-mark-should-open-the-main-page-1-chromium-darwin.png diff --git a/examples/tests/tests.spec.js-snapshots/custom-mark-should-open-the-main-page-1-chromium-linux.png b/demos/tests/tests.spec.js-snapshots/custom-mark-should-open-the-main-page-1-chromium-linux.png similarity index 100% rename from examples/tests/tests.spec.js-snapshots/custom-mark-should-open-the-main-page-1-chromium-linux.png rename to demos/tests/tests.spec.js-snapshots/custom-mark-should-open-the-main-page-1-chromium-linux.png diff --git a/examples/tests/tests.spec.js-snapshots/docx-from-html-should-open-the-main-page-1-chromium-darwin.png b/demos/tests/tests.spec.js-snapshots/docx-from-html-should-open-the-main-page-1-chromium-darwin.png similarity index 100% rename from examples/tests/tests.spec.js-snapshots/docx-from-html-should-open-the-main-page-1-chromium-darwin.png rename to demos/tests/tests.spec.js-snapshots/docx-from-html-should-open-the-main-page-1-chromium-darwin.png diff --git a/examples/tests/tests.spec.js-snapshots/docx-from-html-should-open-the-main-page-1-chromium-linux.png b/demos/tests/tests.spec.js-snapshots/docx-from-html-should-open-the-main-page-1-chromium-linux.png similarity index 100% rename from examples/tests/tests.spec.js-snapshots/docx-from-html-should-open-the-main-page-1-chromium-linux.png rename to demos/tests/tests.spec.js-snapshots/docx-from-html-should-open-the-main-page-1-chromium-linux.png diff --git a/examples/tests/tests.spec.js-snapshots/dynamic-content-should-open-the-main-page-1-chromium-darwin.png b/demos/tests/tests.spec.js-snapshots/dynamic-content-should-open-the-main-page-1-chromium-darwin.png similarity index 100% rename from examples/tests/tests.spec.js-snapshots/dynamic-content-should-open-the-main-page-1-chromium-darwin.png rename to demos/tests/tests.spec.js-snapshots/dynamic-content-should-open-the-main-page-1-chromium-darwin.png diff --git a/examples/tests/tests.spec.js-snapshots/dynamic-content-should-open-the-main-page-1-chromium-linux.png b/demos/tests/tests.spec.js-snapshots/dynamic-content-should-open-the-main-page-1-chromium-linux.png similarity index 100% rename from examples/tests/tests.spec.js-snapshots/dynamic-content-should-open-the-main-page-1-chromium-linux.png rename to demos/tests/tests.spec.js-snapshots/dynamic-content-should-open-the-main-page-1-chromium-linux.png diff --git a/examples/tests/tests.spec.js-snapshots/fields-should-open-the-main-page-1-chromium-darwin.png b/demos/tests/tests.spec.js-snapshots/fields-should-open-the-main-page-1-chromium-darwin.png similarity index 100% rename from examples/tests/tests.spec.js-snapshots/fields-should-open-the-main-page-1-chromium-darwin.png rename to demos/tests/tests.spec.js-snapshots/fields-should-open-the-main-page-1-chromium-darwin.png diff --git a/examples/tests/tests.spec.js-snapshots/fields-should-open-the-main-page-1-chromium-linux.png b/demos/tests/tests.spec.js-snapshots/fields-should-open-the-main-page-1-chromium-linux.png similarity index 100% rename from examples/tests/tests.spec.js-snapshots/fields-should-open-the-main-page-1-chromium-linux.png rename to demos/tests/tests.spec.js-snapshots/fields-should-open-the-main-page-1-chromium-linux.png diff --git a/examples/tests/tests.spec.js-snapshots/linked-sections-should-open-the-main-page-1-chromium-darwin.png b/demos/tests/tests.spec.js-snapshots/linked-sections-should-open-the-main-page-1-chromium-darwin.png similarity index 100% rename from examples/tests/tests.spec.js-snapshots/linked-sections-should-open-the-main-page-1-chromium-darwin.png rename to demos/tests/tests.spec.js-snapshots/linked-sections-should-open-the-main-page-1-chromium-darwin.png diff --git a/examples/tests/tests.spec.js-snapshots/linked-sections-should-open-the-main-page-1-chromium-linux.png b/demos/tests/tests.spec.js-snapshots/linked-sections-should-open-the-main-page-1-chromium-linux.png similarity index 100% rename from examples/tests/tests.spec.js-snapshots/linked-sections-should-open-the-main-page-1-chromium-linux.png rename to demos/tests/tests.spec.js-snapshots/linked-sections-should-open-the-main-page-1-chromium-linux.png diff --git a/examples/tests/tests.spec.js-snapshots/nextjs-ssr-should-open-the-main-page-1-chromium-darwin.png b/demos/tests/tests.spec.js-snapshots/nextjs-ssr-should-open-the-main-page-1-chromium-darwin.png similarity index 100% rename from examples/tests/tests.spec.js-snapshots/nextjs-ssr-should-open-the-main-page-1-chromium-darwin.png rename to demos/tests/tests.spec.js-snapshots/nextjs-ssr-should-open-the-main-page-1-chromium-darwin.png diff --git a/examples/tests/tests.spec.js-snapshots/nextjs-ssr-should-open-the-main-page-1-chromium-linux.png b/demos/tests/tests.spec.js-snapshots/nextjs-ssr-should-open-the-main-page-1-chromium-linux.png similarity index 100% rename from examples/tests/tests.spec.js-snapshots/nextjs-ssr-should-open-the-main-page-1-chromium-linux.png rename to demos/tests/tests.spec.js-snapshots/nextjs-ssr-should-open-the-main-page-1-chromium-linux.png diff --git a/examples/tests/tests.spec.js-snapshots/react-should-open-the-main-page-1-chromium-darwin.png b/demos/tests/tests.spec.js-snapshots/react-should-open-the-main-page-1-chromium-darwin.png similarity index 100% rename from examples/tests/tests.spec.js-snapshots/react-should-open-the-main-page-1-chromium-darwin.png rename to demos/tests/tests.spec.js-snapshots/react-should-open-the-main-page-1-chromium-darwin.png diff --git a/examples/tests/tests.spec.js-snapshots/react-should-open-the-main-page-1-chromium-linux.png b/demos/tests/tests.spec.js-snapshots/react-should-open-the-main-page-1-chromium-linux.png similarity index 100% rename from examples/tests/tests.spec.js-snapshots/react-should-open-the-main-page-1-chromium-linux.png rename to demos/tests/tests.spec.js-snapshots/react-should-open-the-main-page-1-chromium-linux.png diff --git a/examples/tests/tests.spec.js-snapshots/text-selection-should-open-the-main-page-1-chromium-darwin.png b/demos/tests/tests.spec.js-snapshots/text-selection-should-open-the-main-page-1-chromium-darwin.png similarity index 100% rename from examples/tests/tests.spec.js-snapshots/text-selection-should-open-the-main-page-1-chromium-darwin.png rename to demos/tests/tests.spec.js-snapshots/text-selection-should-open-the-main-page-1-chromium-darwin.png diff --git a/examples/tests/tests.spec.js-snapshots/text-selection-should-open-the-main-page-1-chromium-linux.png b/demos/tests/tests.spec.js-snapshots/text-selection-should-open-the-main-page-1-chromium-linux.png similarity index 100% rename from examples/tests/tests.spec.js-snapshots/text-selection-should-open-the-main-page-1-chromium-linux.png rename to demos/tests/tests.spec.js-snapshots/text-selection-should-open-the-main-page-1-chromium-linux.png diff --git a/examples/tests/tests.spec.js-snapshots/typescript-should-open-the-main-page-1-chromium-darwin.png b/demos/tests/tests.spec.js-snapshots/typescript-should-open-the-main-page-1-chromium-darwin.png similarity index 100% rename from examples/tests/tests.spec.js-snapshots/typescript-should-open-the-main-page-1-chromium-darwin.png rename to demos/tests/tests.spec.js-snapshots/typescript-should-open-the-main-page-1-chromium-darwin.png diff --git a/examples/tests/tests.spec.js-snapshots/typescript-should-open-the-main-page-1-chromium-linux.png b/demos/tests/tests.spec.js-snapshots/typescript-should-open-the-main-page-1-chromium-linux.png similarity index 100% rename from examples/tests/tests.spec.js-snapshots/typescript-should-open-the-main-page-1-chromium-linux.png rename to demos/tests/tests.spec.js-snapshots/typescript-should-open-the-main-page-1-chromium-linux.png diff --git a/examples/tests/tests.spec.js-snapshots/vanilla-should-open-the-main-page-1-chromium-darwin.png b/demos/tests/tests.spec.js-snapshots/vanilla-should-open-the-main-page-1-chromium-darwin.png similarity index 100% rename from examples/tests/tests.spec.js-snapshots/vanilla-should-open-the-main-page-1-chromium-darwin.png rename to demos/tests/tests.spec.js-snapshots/vanilla-should-open-the-main-page-1-chromium-darwin.png diff --git a/examples/tests/tests.spec.js-snapshots/vanilla-should-open-the-main-page-1-chromium-linux.png b/demos/tests/tests.spec.js-snapshots/vanilla-should-open-the-main-page-1-chromium-linux.png similarity index 100% rename from examples/tests/tests.spec.js-snapshots/vanilla-should-open-the-main-page-1-chromium-linux.png rename to demos/tests/tests.spec.js-snapshots/vanilla-should-open-the-main-page-1-chromium-linux.png diff --git a/examples/tests/tests.spec.js-snapshots/vue-should-open-the-main-page-1-chromium-darwin.png b/demos/tests/tests.spec.js-snapshots/vue-should-open-the-main-page-1-chromium-darwin.png similarity index 100% rename from examples/tests/tests.spec.js-snapshots/vue-should-open-the-main-page-1-chromium-darwin.png rename to demos/tests/tests.spec.js-snapshots/vue-should-open-the-main-page-1-chromium-darwin.png diff --git a/examples/tests/tests.spec.js-snapshots/vue-should-open-the-main-page-1-chromium-linux.png b/demos/tests/tests.spec.js-snapshots/vue-should-open-the-main-page-1-chromium-linux.png similarity index 100% rename from examples/tests/tests.spec.js-snapshots/vue-should-open-the-main-page-1-chromium-linux.png rename to demos/tests/tests.spec.js-snapshots/vue-should-open-the-main-page-1-chromium-linux.png diff --git a/examples/advanced/text-selection/README.md b/demos/text-selection/README.md similarity index 100% rename from examples/advanced/text-selection/README.md rename to demos/text-selection/README.md diff --git a/examples/advanced/text-selection/demo-config.json b/demos/text-selection/demo-config.json similarity index 100% rename from examples/advanced/text-selection/demo-config.json rename to demos/text-selection/demo-config.json diff --git a/examples/getting-started/react/demo-thumbnail.png b/demos/text-selection/demo-thumbnail.png similarity index 100% rename from examples/getting-started/react/demo-thumbnail.png rename to demos/text-selection/demo-thumbnail.png diff --git a/examples/advanced/text-selection/demo-video.mp4 b/demos/text-selection/demo-video.mp4 similarity index 100% rename from examples/advanced/text-selection/demo-video.mp4 rename to demos/text-selection/demo-video.mp4 diff --git a/examples/getting-started/react/index.html b/demos/text-selection/index.html similarity index 100% rename from examples/getting-started/react/index.html rename to demos/text-selection/index.html diff --git a/examples/advanced/text-selection/package.json b/demos/text-selection/package.json similarity index 100% rename from examples/advanced/text-selection/package.json rename to demos/text-selection/package.json diff --git a/examples/integrations/nextjs-ssr/public/sample.docx b/demos/text-selection/public/sample.docx similarity index 100% rename from examples/integrations/nextjs-ssr/public/sample.docx rename to demos/text-selection/public/sample.docx diff --git a/examples/advanced/text-selection/src/App.jsx b/demos/text-selection/src/App.jsx similarity index 100% rename from examples/advanced/text-selection/src/App.jsx rename to demos/text-selection/src/App.jsx diff --git a/examples/getting-started/react/src/components/DocumentEditor.jsx b/demos/text-selection/src/components/DocumentEditor.jsx similarity index 100% rename from examples/getting-started/react/src/components/DocumentEditor.jsx rename to demos/text-selection/src/components/DocumentEditor.jsx diff --git a/examples/advanced/text-selection/src/main.jsx b/demos/text-selection/src/main.jsx similarity index 100% rename from examples/advanced/text-selection/src/main.jsx rename to demos/text-selection/src/main.jsx diff --git a/examples/getting-started/react/vite.config.js b/demos/text-selection/vite.config.js similarity index 100% rename from examples/getting-started/react/vite.config.js rename to demos/text-selection/vite.config.js diff --git a/examples/customization/toolbar/README.md b/demos/toolbar/README.md similarity index 100% rename from examples/customization/toolbar/README.md rename to demos/toolbar/README.md diff --git a/examples/customization/toolbar/demo-config.json b/demos/toolbar/demo-config.json similarity index 100% rename from examples/customization/toolbar/demo-config.json rename to demos/toolbar/demo-config.json diff --git a/examples/customization/toolbar/demo-thumbnail.png b/demos/toolbar/demo-thumbnail.png similarity index 100% rename from examples/customization/toolbar/demo-thumbnail.png rename to demos/toolbar/demo-thumbnail.png diff --git a/examples/customization/toolbar/demo-video.mp4 b/demos/toolbar/demo-video.mp4 similarity index 100% rename from examples/customization/toolbar/demo-video.mp4 rename to demos/toolbar/demo-video.mp4 diff --git a/examples/customization/toolbar/index.html b/demos/toolbar/index.html similarity index 100% rename from examples/customization/toolbar/index.html rename to demos/toolbar/index.html diff --git a/examples/customization/toolbar/package.json b/demos/toolbar/package.json similarity index 100% rename from examples/customization/toolbar/package.json rename to demos/toolbar/package.json diff --git a/examples/customization/toolbar/src/icon_cat.svg b/demos/toolbar/src/icon_cat.svg similarity index 100% rename from examples/customization/toolbar/src/icon_cat.svg rename to demos/toolbar/src/icon_cat.svg diff --git a/examples/customization/toolbar/src/main.js b/demos/toolbar/src/main.js similarity index 100% rename from examples/customization/toolbar/src/main.js rename to demos/toolbar/src/main.js diff --git a/examples/customization/toolbar/src/style.css b/demos/toolbar/src/style.css similarity index 100% rename from examples/customization/toolbar/src/style.css rename to demos/toolbar/src/style.css diff --git a/examples/customization/toolbar/vite.config.js b/demos/toolbar/vite.config.js similarity index 100% rename from examples/customization/toolbar/vite.config.js rename to demos/toolbar/vite.config.js diff --git a/examples/customization/custom-plugin/.gitignore b/demos/typescript/.gitignore similarity index 100% rename from examples/customization/custom-plugin/.gitignore rename to demos/typescript/.gitignore diff --git a/examples/getting-started/typescript/demo-config.json b/demos/typescript/demo-config.json similarity index 100% rename from examples/getting-started/typescript/demo-config.json rename to demos/typescript/demo-config.json diff --git a/examples/getting-started/typescript/demo-thumbnail.png b/demos/typescript/demo-thumbnail.png similarity index 100% rename from examples/getting-started/typescript/demo-thumbnail.png rename to demos/typescript/demo-thumbnail.png diff --git a/examples/getting-started/typescript/demo-video.mp4 b/demos/typescript/demo-video.mp4 similarity index 100% rename from examples/getting-started/typescript/demo-video.mp4 rename to demos/typescript/demo-video.mp4 diff --git a/examples/getting-started/typescript/eslint.config.js b/demos/typescript/eslint.config.js similarity index 100% rename from examples/getting-started/typescript/eslint.config.js rename to demos/typescript/eslint.config.js diff --git a/examples/getting-started/typescript/index.html b/demos/typescript/index.html similarity index 100% rename from examples/getting-started/typescript/index.html rename to demos/typescript/index.html diff --git a/examples/getting-started/typescript/package.json b/demos/typescript/package.json similarity index 100% rename from examples/getting-started/typescript/package.json rename to demos/typescript/package.json diff --git a/examples/getting-started/typescript/src/App.tsx b/demos/typescript/src/App.tsx similarity index 100% rename from examples/getting-started/typescript/src/App.tsx rename to demos/typescript/src/App.tsx diff --git a/examples/getting-started/typescript/src/components/DocumentEditor.tsx b/demos/typescript/src/components/DocumentEditor.tsx similarity index 100% rename from examples/getting-started/typescript/src/components/DocumentEditor.tsx rename to demos/typescript/src/components/DocumentEditor.tsx diff --git a/examples/getting-started/typescript/src/main.tsx b/demos/typescript/src/main.tsx similarity index 100% rename from examples/getting-started/typescript/src/main.tsx rename to demos/typescript/src/main.tsx diff --git a/examples/getting-started/typescript/src/vite-env.d.ts b/demos/typescript/src/vite-env.d.ts similarity index 100% rename from examples/getting-started/typescript/src/vite-env.d.ts rename to demos/typescript/src/vite-env.d.ts diff --git a/examples/getting-started/typescript/tsconfig.app.json b/demos/typescript/tsconfig.app.json similarity index 100% rename from examples/getting-started/typescript/tsconfig.app.json rename to demos/typescript/tsconfig.app.json diff --git a/examples/getting-started/typescript/tsconfig.json b/demos/typescript/tsconfig.json similarity index 100% rename from examples/getting-started/typescript/tsconfig.json rename to demos/typescript/tsconfig.json diff --git a/examples/getting-started/typescript/tsconfig.node.json b/demos/typescript/tsconfig.node.json similarity index 100% rename from examples/getting-started/typescript/tsconfig.node.json rename to demos/typescript/tsconfig.node.json diff --git a/examples/getting-started/typescript/vite.config.ts b/demos/typescript/vite.config.ts similarity index 100% rename from examples/getting-started/typescript/vite.config.ts rename to demos/typescript/vite.config.ts diff --git a/examples/getting-started/vanilla/demo-config.json b/demos/vanilla/demo-config.json similarity index 100% rename from examples/getting-started/vanilla/demo-config.json rename to demos/vanilla/demo-config.json diff --git a/examples/getting-started/vanilla/demo-thumbnail.png b/demos/vanilla/demo-thumbnail.png similarity index 100% rename from examples/getting-started/vanilla/demo-thumbnail.png rename to demos/vanilla/demo-thumbnail.png diff --git a/examples/getting-started/vanilla/demo-video.mp4 b/demos/vanilla/demo-video.mp4 similarity index 100% rename from examples/getting-started/vanilla/demo-video.mp4 rename to demos/vanilla/demo-video.mp4 diff --git a/examples/getting-started/vanilla/index.html b/demos/vanilla/index.html similarity index 100% rename from examples/getting-started/vanilla/index.html rename to demos/vanilla/index.html diff --git a/examples/getting-started/vanilla/package.json b/demos/vanilla/package.json similarity index 100% rename from examples/getting-started/vanilla/package.json rename to demos/vanilla/package.json diff --git a/examples/getting-started/vanilla/src/main.js b/demos/vanilla/src/main.js similarity index 100% rename from examples/getting-started/vanilla/src/main.js rename to demos/vanilla/src/main.js diff --git a/examples/getting-started/vanilla/src/style.css b/demos/vanilla/src/style.css similarity index 100% rename from examples/getting-started/vanilla/src/style.css rename to demos/vanilla/src/style.css diff --git a/examples/getting-started/vanilla/vite.config.js b/demos/vanilla/vite.config.js similarity index 100% rename from examples/getting-started/vanilla/vite.config.js rename to demos/vanilla/vite.config.js diff --git a/examples/getting-started/vue/demo-config.json b/demos/vue/demo-config.json similarity index 100% rename from examples/getting-started/vue/demo-config.json rename to demos/vue/demo-config.json diff --git a/examples/getting-started/vue/demo-thumbnail.png b/demos/vue/demo-thumbnail.png similarity index 100% rename from examples/getting-started/vue/demo-thumbnail.png rename to demos/vue/demo-thumbnail.png diff --git a/examples/getting-started/vue/demo-video.mp4 b/demos/vue/demo-video.mp4 similarity index 100% rename from examples/getting-started/vue/demo-video.mp4 rename to demos/vue/demo-video.mp4 diff --git a/examples/getting-started/vue/index.html b/demos/vue/index.html similarity index 100% rename from examples/getting-started/vue/index.html rename to demos/vue/index.html diff --git a/examples/getting-started/vue/package.json b/demos/vue/package.json similarity index 100% rename from examples/getting-started/vue/package.json rename to demos/vue/package.json diff --git a/examples/getting-started/vue/src/App.vue b/demos/vue/src/App.vue similarity index 100% rename from examples/getting-started/vue/src/App.vue rename to demos/vue/src/App.vue diff --git a/examples/getting-started/vue/src/components/DocumentEditor.vue b/demos/vue/src/components/DocumentEditor.vue similarity index 100% rename from examples/getting-started/vue/src/components/DocumentEditor.vue rename to demos/vue/src/components/DocumentEditor.vue diff --git a/examples/getting-started/vue/src/main.js b/demos/vue/src/main.js similarity index 100% rename from examples/getting-started/vue/src/main.js rename to demos/vue/src/main.js diff --git a/examples/getting-started/vue/vite.config.js b/demos/vue/vite.config.js similarity index 100% rename from examples/getting-started/vue/vite.config.js rename to demos/vue/vite.config.js diff --git a/examples/integrations/word-addin/.gitignore b/demos/word-addin/.gitignore similarity index 100% rename from examples/integrations/word-addin/.gitignore rename to demos/word-addin/.gitignore diff --git a/examples/integrations/word-addin/MS-Word-Add-in-Sample.code-workspace b/demos/word-addin/MS-Word-Add-in-Sample.code-workspace similarity index 100% rename from examples/integrations/word-addin/MS-Word-Add-in-Sample.code-workspace rename to demos/word-addin/MS-Word-Add-in-Sample.code-workspace diff --git a/examples/integrations/word-addin/README.md b/demos/word-addin/README.md similarity index 100% rename from examples/integrations/word-addin/README.md rename to demos/word-addin/README.md diff --git a/examples/integrations/word-addin/assets/icon-128.png b/demos/word-addin/assets/icon-128.png similarity index 100% rename from examples/integrations/word-addin/assets/icon-128.png rename to demos/word-addin/assets/icon-128.png diff --git a/examples/integrations/word-addin/assets/icon-128x128.png b/demos/word-addin/assets/icon-128x128.png similarity index 100% rename from examples/integrations/word-addin/assets/icon-128x128.png rename to demos/word-addin/assets/icon-128x128.png diff --git a/examples/integrations/word-addin/assets/icon-16.png b/demos/word-addin/assets/icon-16.png similarity index 100% rename from examples/integrations/word-addin/assets/icon-16.png rename to demos/word-addin/assets/icon-16.png diff --git a/examples/integrations/word-addin/assets/icon-16x16.png b/demos/word-addin/assets/icon-16x16.png similarity index 100% rename from examples/integrations/word-addin/assets/icon-16x16.png rename to demos/word-addin/assets/icon-16x16.png diff --git a/examples/integrations/word-addin/assets/icon-32.png b/demos/word-addin/assets/icon-32.png similarity index 100% rename from examples/integrations/word-addin/assets/icon-32.png rename to demos/word-addin/assets/icon-32.png diff --git a/examples/integrations/word-addin/assets/icon-32x32.png b/demos/word-addin/assets/icon-32x32.png similarity index 100% rename from examples/integrations/word-addin/assets/icon-32x32.png rename to demos/word-addin/assets/icon-32x32.png diff --git a/examples/integrations/word-addin/assets/icon-64.png b/demos/word-addin/assets/icon-64.png similarity index 100% rename from examples/integrations/word-addin/assets/icon-64.png rename to demos/word-addin/assets/icon-64.png diff --git a/examples/integrations/word-addin/assets/icon-64x64.png b/demos/word-addin/assets/icon-64x64.png similarity index 100% rename from examples/integrations/word-addin/assets/icon-64x64.png rename to demos/word-addin/assets/icon-64x64.png diff --git a/examples/integrations/word-addin/assets/icon-80.png b/demos/word-addin/assets/icon-80.png similarity index 100% rename from examples/integrations/word-addin/assets/icon-80.png rename to demos/word-addin/assets/icon-80.png diff --git a/examples/integrations/word-addin/assets/icon-80x80.png b/demos/word-addin/assets/icon-80x80.png similarity index 100% rename from examples/integrations/word-addin/assets/icon-80x80.png rename to demos/word-addin/assets/icon-80x80.png diff --git a/examples/integrations/word-addin/assets/logo-filled.png b/demos/word-addin/assets/logo-filled.png similarity index 100% rename from examples/integrations/word-addin/assets/logo-filled.png rename to demos/word-addin/assets/logo-filled.png diff --git a/examples/integrations/word-addin/assets/logo.png b/demos/word-addin/assets/logo.png similarity index 100% rename from examples/integrations/word-addin/assets/logo.png rename to demos/word-addin/assets/logo.png diff --git a/examples/integrations/word-addin/assets/sample-document.docx b/demos/word-addin/assets/sample-document.docx similarity index 100% rename from examples/integrations/word-addin/assets/sample-document.docx rename to demos/word-addin/assets/sample-document.docx diff --git a/examples/integrations/word-addin/babel.config.json b/demos/word-addin/babel.config.json similarity index 100% rename from examples/integrations/word-addin/babel.config.json rename to demos/word-addin/babel.config.json diff --git a/examples/integrations/word-addin/demo-config.json b/demos/word-addin/demo-config.json similarity index 100% rename from examples/integrations/word-addin/demo-config.json rename to demos/word-addin/demo-config.json diff --git a/examples/integrations/word-addin/demo-thumbnail.png b/demos/word-addin/demo-thumbnail.png similarity index 100% rename from examples/integrations/word-addin/demo-thumbnail.png rename to demos/word-addin/demo-thumbnail.png diff --git a/examples/integrations/word-addin/demo-video.mp4 b/demos/word-addin/demo-video.mp4 similarity index 100% rename from examples/integrations/word-addin/demo-video.mp4 rename to demos/word-addin/demo-video.mp4 diff --git a/examples/integrations/word-addin/manifest.xml b/demos/word-addin/manifest.xml similarity index 100% rename from examples/integrations/word-addin/manifest.xml rename to demos/word-addin/manifest.xml diff --git a/examples/integrations/word-addin/package.json b/demos/word-addin/package.json similarity index 100% rename from examples/integrations/word-addin/package.json rename to demos/word-addin/package.json diff --git a/examples/integrations/word-addin/server/.env.example b/demos/word-addin/server/.env.example similarity index 100% rename from examples/integrations/word-addin/server/.env.example rename to demos/word-addin/server/.env.example diff --git a/examples/integrations/word-addin/server/package.json b/demos/word-addin/server/package.json similarity index 100% rename from examples/integrations/word-addin/server/package.json rename to demos/word-addin/server/package.json diff --git a/examples/integrations/word-addin/server/public/editor.css b/demos/word-addin/server/public/editor.css similarity index 100% rename from examples/integrations/word-addin/server/public/editor.css rename to demos/word-addin/server/public/editor.css diff --git a/examples/integrations/word-addin/server/public/editor.html b/demos/word-addin/server/public/editor.html similarity index 100% rename from examples/integrations/word-addin/server/public/editor.html rename to demos/word-addin/server/public/editor.html diff --git a/examples/integrations/word-addin/server/public/editor.js b/demos/word-addin/server/public/editor.js similarity index 100% rename from examples/integrations/word-addin/server/public/editor.js rename to demos/word-addin/server/public/editor.js diff --git a/examples/integrations/word-addin/server/server.js b/demos/word-addin/server/server.js similarity index 100% rename from examples/integrations/word-addin/server/server.js rename to demos/word-addin/server/server.js diff --git a/examples/integrations/word-addin/src/auth-dialog/auth-dialog.css b/demos/word-addin/src/auth-dialog/auth-dialog.css similarity index 100% rename from examples/integrations/word-addin/src/auth-dialog/auth-dialog.css rename to demos/word-addin/src/auth-dialog/auth-dialog.css diff --git a/examples/integrations/word-addin/src/auth-dialog/auth-dialog.html b/demos/word-addin/src/auth-dialog/auth-dialog.html similarity index 100% rename from examples/integrations/word-addin/src/auth-dialog/auth-dialog.html rename to demos/word-addin/src/auth-dialog/auth-dialog.html diff --git a/examples/integrations/word-addin/src/auth-dialog/auth-dialog.js b/demos/word-addin/src/auth-dialog/auth-dialog.js similarity index 100% rename from examples/integrations/word-addin/src/auth-dialog/auth-dialog.js rename to demos/word-addin/src/auth-dialog/auth-dialog.js diff --git a/examples/integrations/word-addin/src/auth0-config.js.example b/demos/word-addin/src/auth0-config.js.example similarity index 100% rename from examples/integrations/word-addin/src/auth0-config.js.example rename to demos/word-addin/src/auth0-config.js.example diff --git a/examples/integrations/word-addin/src/server-domain.js.example b/demos/word-addin/src/server-domain.js.example similarity index 100% rename from examples/integrations/word-addin/src/server-domain.js.example rename to demos/word-addin/src/server-domain.js.example diff --git a/examples/integrations/word-addin/src/taskpane/taskpane.css b/demos/word-addin/src/taskpane/taskpane.css similarity index 100% rename from examples/integrations/word-addin/src/taskpane/taskpane.css rename to demos/word-addin/src/taskpane/taskpane.css diff --git a/examples/integrations/word-addin/src/taskpane/taskpane.html b/demos/word-addin/src/taskpane/taskpane.html similarity index 100% rename from examples/integrations/word-addin/src/taskpane/taskpane.html rename to demos/word-addin/src/taskpane/taskpane.html diff --git a/examples/integrations/word-addin/src/taskpane/taskpane.js b/demos/word-addin/src/taskpane/taskpane.js similarity index 100% rename from examples/integrations/word-addin/src/taskpane/taskpane.js rename to demos/word-addin/src/taskpane/taskpane.js diff --git a/examples/integrations/word-addin/webpack.config.js b/demos/word-addin/webpack.config.js similarity index 100% rename from examples/integrations/word-addin/webpack.config.js rename to demos/word-addin/webpack.config.js diff --git a/examples/advanced/README.md b/examples/advanced/README.md deleted file mode 100644 index daee9d73a3..0000000000 --- a/examples/advanced/README.md +++ /dev/null @@ -1,26 +0,0 @@ -# Advanced Examples - -Advanced examples demonstrating complex SuperDoc features and use cases. - -## Examples - -| Example | Description | -|---------|-------------| -| [docx-from-html](./docx-from-html) | Generate DOCX files from HTML content | -| [html-editor](./html-editor) | HTML-based editor mode | -| [linked-sections](./linked-sections) | Link editor sections across documents | -| [fields](./fields) | Work with document fields (merge fields, form fields) | -| [loading-from-json](./loading-from-json) | Load documents from JSON format | -| [replace-content](./replace-content) | Programmatically replace document content | -| [text-selection](./text-selection) | Programmatic text selection APIs | -| [docxtemplater](./docxtemplater) | Template-based document generation | -| [grading-papers](./grading-papers) | Document review and annotation use case | -| [headless-converter](./headless-converter) | Convert DOCX to HTML/JSON/text/Markdown (Node.js) | - -## Running an Example - -```bash -cd -npm install -npm run dev -``` diff --git a/examples/ai/README.md b/examples/ai/README.md deleted file mode 100644 index a55e2436e5..0000000000 --- a/examples/ai/README.md +++ /dev/null @@ -1,18 +0,0 @@ -# AI Examples - -Examples for integrating AI capabilities with SuperDoc. - -## Examples - -| Example | Description | -|---------|-------------| -| [quickstart](./quickstart) | Quick start guide for SuperDoc AI features | -| [prompts](./prompts) | Example prompts for AI-powered document operations | - -## Running an Example - -```bash -cd -npm install -npm run dev -``` diff --git a/examples/ai/prompts/claude/prompt.txt b/examples/ai/prompts/claude/prompt.txt deleted file mode 100644 index 8e9f1c7e53..0000000000 --- a/examples/ai/prompts/claude/prompt.txt +++ /dev/null @@ -1,84 +0,0 @@ -Create a simple document editor using SuperDoc and the following code below: - - - - - - - - - - - - SuperDoc - CDN example - - - - -
SuperDoc - CDN example
-
- - - - -
- - - - - \ No newline at end of file diff --git a/examples/ai/tool-calls/.env.example b/examples/ai/tool-calls/.env.example deleted file mode 100644 index dcb1f1a747..0000000000 --- a/examples/ai/tool-calls/.env.example +++ /dev/null @@ -1,4 +0,0 @@ -# Copy this file to ".env" and fill in your API key before running the demo. -# VITE_OPENAI_API_KEY=sk-your-openai-key -# VITE_OPENAI_MODEL=gpt-4o-mini -# VITE_PROXY_URL=proxy.url diff --git a/examples/ai/tool-calls/README.md b/examples/ai/tool-calls/README.md deleted file mode 100644 index 2f90ef21e6..0000000000 --- a/examples/ai/tool-calls/README.md +++ /dev/null @@ -1,57 +0,0 @@ -# SuperDoc AI Quickstart - -Launch a live SuperDoc editor with AI helpers. This example shows how to wire up -`@superdoc-dev/ai` with a fresh SuperDoc instance, register a few buttons, and stream results back into the -document. - -## Prerequisites - -- Node.js 18+ -- An OpenAI API key (or update the provider section in `src/main.js` for another provider) - -## Run the demo - -```bash -cd examples/ai/quickstart -cp .env.example .env # add your OpenAI key + preferred model -npm install -npm run dev -``` - -Vite will print a local URL (defaults to ). Open it in your browser and use the action chips at -the top of the editor to generate, locate, or revise content while the status pill reports progress. - -## What this example covers - -- creating a SuperDoc instance with a ready-to-edit document -- initializing `AIActions` after the editor mounts -- streaming UI feedback via the built-in callbacks -- wiring multiple AI actions (`insertContent`, `insertTrackedChange`, `highlight`, `replace`, `replaceAll`, `find`, - `findAll`, `insertComment`, `insertComments`) through a shared handler -- safely handling missing API keys and error states - -## Key files - -- `src/main.js` – core integration logic -- `src/style.css` – quick styling for the layout and status panel -- `.env.example` – environment variables expected by the example - -## Switching providers - -OpenAI is used here, but you can swap in another provider by changing the `provider` block inside -`initializeAI()` in `src/main.js`. For example, to call a custom HTTP endpoint: - -```js -aiInstance = new AIActions(superdoc, { - user: { displayName: 'SuperDoc AI Assistant' }, - provider: { - type: 'http', - url: import.meta.env.VITE_AI_HTTP_URL, - headers: { - Authorization: `Bearer ${import.meta.env.VITE_AI_HTTP_TOKEN}` - } - } -}); -``` - -Restart the dev server after updating environment variables so Vite can pick them up. diff --git a/examples/ai/tool-calls/demo-config.json b/examples/ai/tool-calls/demo-config.json deleted file mode 100644 index 61e707d7e6..0000000000 --- a/examples/ai/tool-calls/demo-config.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "dirname": "superdoc-ai-tool-calls", - "tags": [ - "vue", - "agentic", - "ai" - ], - "title": "AI Actions" -} \ No newline at end of file diff --git a/examples/ai/tool-calls/demo-thumbnail.png b/examples/ai/tool-calls/demo-thumbnail.png deleted file mode 100644 index 9267c8c7185bd8e41498105fe298e2ce2396a7e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 70634 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 }+I*~Zg3C{kn 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℘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 k9(I>|#FwbGPnL0n - - - - - SuperDoc AI Quickstart - Vue - - - -
- - - diff --git a/examples/ai/tool-calls/package.json b/examples/ai/tool-calls/package.json deleted file mode 100644 index c98250875c..0000000000 --- a/examples/ai/tool-calls/package.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "superdoc-ai-quickstart", - "private": true, - "version": "0.0.1", - "type": "module", - "scripts": { - "dev": "vite", - "build": "vite build", - "preview": "vite preview" - }, - "dependencies": { - "@vitejs/plugin-vue": "^6.0.2", - "@superdoc-dev/ai": "^0.1.6", - "superdoc": "^1.0.0-next.1", - "vue": "^3.5.24" - }, - "devDependencies": { - "vite": "^6.3.5" - } -} \ No newline at end of file diff --git a/examples/ai/tool-calls/public/default.docx b/examples/ai/tool-calls/public/default.docx deleted file mode 100644 index 7082071ac4d866c090d1d90e3ff45584491751b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18748 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 diff --git a/examples/ai/tool-calls/src/App.vue b/examples/ai/tool-calls/src/App.vue deleted file mode 100644 index 8daa14de99..0000000000 --- a/examples/ai/tool-calls/src/App.vue +++ /dev/null @@ -1,359 +0,0 @@ - - - \ No newline at end of file diff --git a/examples/ai/tool-calls/src/actions.js b/examples/ai/tool-calls/src/actions.js deleted file mode 100644 index 64c7b87e91..0000000000 --- a/examples/ai/tool-calls/src/actions.js +++ /dev/null @@ -1,220 +0,0 @@ - -// Available actions dictionary - matches the planner's built-in tools -const actionsDictionary = { - 'findAll': { - label: 'Find All', - description: 'Locate all occurrences of content matching the instruction', - method: (ai, prompt) => ai.action.findAll(prompt) - }, - 'highlight': { - label: 'Highlight', - description: 'Visually highlight text without changing it. Use for: drawing attention to issues, marking items for discussion, indicating areas of concern.', - method: (ai, prompt) => ai.action.highlight(prompt) - }, - 'replaceAll': { - label: 'Replace All', - description: 'DIRECT batch editing (no tracking). Use ONLY when user explicitly wants all instances changed immediately AND the user does NOT provide exact find/replace text pairs.', - method: (ai, prompt) => ai.action.replaceAll(prompt) - }, - 'literalReplace': { - label: 'Literal Replace', - description: 'PREFERRED for explicit find-and-replace operations. Use when the user provides both the exact text to find AND the exact replacement text.', - method: (ai, prompt) => { - // For literal replace, we need to parse the prompt differently - // This is a simplified version - in practice, the planner would handle this - const parts = prompt.split(/ to | with /i); - if (parts.length >= 2) { - const findText = parts[0].trim(); - const replaceText = parts.slice(1).join(' ').trim(); - return ai.action.literalReplace(findText, replaceText, { trackChanges: false }); - } - throw new Error('Literal replace requires format: "find X to replace with Y"'); - } - }, - 'insertTrackedChanges': { - label: 'Insert Tracked Changes', - description: 'PRIMARY TOOL for suggesting multiple edits. Creates tracked changes across multiple locations. Use for: batch corrections, applying consistent changes, multiple editing suggestions.', - method: (ai, prompt) => ai.action.insertTrackedChanges(prompt) - }, - 'insertComments': { - label: 'Insert Comments', - description: 'PRIMARY TOOL for providing feedback in multiple locations when location criteria are complex or require AI interpretation. Use for: comprehensive document review, multiple questions, batch feedback.', - method: (ai, prompt) => ai.action.insertComments(prompt) - }, - 'literalInsertComment': { - label: 'Literal Insert Comment', - description: 'PREFERRED for explicit find-and-add-comment operations. Use when the user provides both the exact text to find AND the exact comment text to add.', - method: (ai, prompt) => { - // Simplified version - planner would handle this better - const parts = prompt.split(/ with comment | add comment /i); - if (parts.length >= 2) { - const findText = parts[0].trim(); - const commentText = parts.slice(1).join(' ').trim(); - return ai.action.literalInsertComment(findText, commentText); - } - throw new Error('Literal insert comment requires format: "find X with comment Y"'); - } - }, - 'summarize': { - label: 'Summarize', - description: 'Generate a summary or clarification of content. Use for: creating executive summaries, explaining complex sections, condensing information.', - method: (ai, prompt) => ai.action.summarize(prompt) - }, - 'insertContent': { - label: 'Insert Content', - description: 'Draft and insert new content relative to the current selection. Use for inserting headings, lists, clauses, or replacing selected text.', - method: (ai, prompt) => ai.action.insertContent(prompt) - }, -} - -// Export the available actions list as a static array -export const availableActions = Object.keys(actionsDictionary) - .sort() - .map(key => ({ - key, - ...actionsDictionary[key] - })) - -// Action handler class to manage dependencies and reduce parameter passing -export class ActionHandler { - constructor(aiInstance, logger) { - this.availableActions = availableActions - this.aiInstance = aiInstance - this.logger = logger - } - - // Build tools array for OpenAI function calling - buildToolsArray() { - const convertToOpenAITool = action => ({ - type: "function", - function: { - name: action.key, - description: action.description, - parameters: { - type: "object", - properties: { - prompt: { - type: "string", - description: "The specific instruction or prompt for this action" - } - }, - required: ["prompt"] - } - } - }) - - return this.availableActions.map(convertToOpenAITool) - } - - // Make API request to proxy - async callOpenAI(prompt, tools) { - const proxyUrl = import.meta.env.VITE_PROXY_URL - if (!proxyUrl) { - throw new Error('VITE_PROXY_URL not configured') - } - - const response = await fetch(proxyUrl, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - messages: [{ role: 'user', content: prompt }], - tools: tools, - tool_choice: "auto", - temperature: 0.7, - max_tokens: 1000 - }) - }) - - if (!response.ok) { - throw new Error(`HTTP error! status: ${response.status}`) - } - - return await response.json() - } - - // Execute a single tool call - async executeToolCall(toolCall) { - const functionName = toolCall.function.name - const args = JSON.parse(toolCall.function.arguments) - - const action = this.availableActions.find(a => a.key === functionName) - - if (!action?.method) { - this.logger.addActionLog(functionName, args.prompt) - this.logger.updateCurrentLog({ status: 'Error', error: 'Tool not found' }) - return `✗ ${functionName}: Tool not found` - } - - try { - this.logger.addActionLog(action.label, args.prompt) - console.log(`Executing ${functionName} with prompt:`, args.prompt) - - await action.method(this.aiInstance.value, args.prompt) - - this.logger.updateCurrentLog({ status: 'Done.' }) - return `✓ ${action.label}: "${args.prompt}"` - - } catch (error) { - console.error(`Error executing ${functionName}:`, error) - this.logger.updateCurrentLog({ status: 'Error', error: error.message }) - return `✗ ${action.label}: Error - ${error.message}` - } - } - - - // Execute tool calls from open prompt response - async executeToolCallsFromPrompt(toolCalls) { - const toolResults = [] - - for (const toolCall of toolCalls) { - const result = await this.executeToolCall(toolCall) - toolResults.push(result) - } - - this.logger.updateOriginalLog(toolCalls.length) - - const result = `Function calls executed:\n${toolResults.join('\n')}` - console.log('Open prompt result:', result) - return result - } - - // Standalone function to handle open prompt AI calls - async handleOpenPrompt(prompt) { - try { - this.logger.updateCurrentLog({ status: 'Processing open prompt...' }) - - const tools = this.buildToolsArray() - const data = await this.callOpenAI(prompt, tools) - const message = data.choices?.[0]?.message - - if (message?.tool_calls?.length > 0) { - console.log('Function calls requested:', message.tool_calls) - this.logger.updateCurrentLog({ status: `Executing ${message.tool_calls.length} function call(s)...` }) - - // Return the tool calls for the application to handle - return { - type: 'tool_calls', - toolCalls: message.tool_calls, - count: message.tool_calls.length - } - - } else { - // No tools were run - const result = message?.content || data.content || JSON.stringify(data) - console.log('Open prompt result:', result) - this.logger.updateNoToolsRun(result) - - return { - type: 'text_response', - content: result - } - } - - } catch (error) { - this.logger.handleError(error) - throw error - } - } -} \ No newline at end of file diff --git a/examples/ai/tool-calls/src/components/Sidebar.vue b/examples/ai/tool-calls/src/components/Sidebar.vue deleted file mode 100644 index 9df57ce03e..0000000000 --- a/examples/ai/tool-calls/src/components/Sidebar.vue +++ /dev/null @@ -1,169 +0,0 @@ - - - \ No newline at end of file diff --git a/examples/ai/tool-calls/src/logging.js b/examples/ai/tool-calls/src/logging.js deleted file mode 100644 index c99e452245..0000000000 --- a/examples/ai/tool-calls/src/logging.js +++ /dev/null @@ -1,95 +0,0 @@ -import { ref } from 'vue' - -// Helper function for text truncation -function truncateText(text, maxLength) { - if (!text) return '' - return text.length > maxLength ? text.substring(0, maxLength) + '...' : text -} - -export class ActionLogger { - constructor() { - this.actionLogs = ref([]) - this.currentLogId = 0 - this.currentOriginalLogId = null - } - - addActionLog(action, prompt) { - const log = { - id: this.currentLogId++, - action: action, - prompt: prompt, - status: 'Starting...', - partialResult: null, - fullResult: null, - error: null - } - this.actionLogs.value.push(log) - this.currentOriginalLogId = log.id - return log - } - - updateCurrentLog(updates) { - if (this.actionLogs.value.length > 0) { - const currentLog = this.actionLogs.value[this.actionLogs.value.length - 1] - Object.assign(currentLog, updates) - } - } - - updateLogById(logId, updates) { - const logIndex = this.actionLogs.value.findIndex(log => log.id === logId) - if (logIndex !== -1) { - Object.assign(this.actionLogs.value[logIndex], updates) - } - } - - updateStreamingResult(context) { - this.updateCurrentLog({ - status: 'Streaming...', - partialResult: truncateText(context.partialResult, 100) - }) - } - - updateStreamingEnd(context) { - this.updateCurrentLog({ - status: 'Done.', - fullResult: truncateText(String(context.fullResult), 100) - }) - } - - updateError(error) { - this.updateCurrentLog({ - status: 'Error', - error: error.message - }) - } - - updateNoToolsRun(result) { - this.updateCurrentLog({ - status: 'No tools were run.', - fullResult: truncateText(String(result), 100) - }) - } - - updateOriginalLog(toolCallsCount) { - if (!this.currentOriginalLogId) return - - const originalLogIndex = this.actionLogs.value.findIndex(log => log.id === this.currentOriginalLogId) - if (originalLogIndex !== -1) { - this.actionLogs.value[originalLogIndex].status = `All ${toolCallsCount} function calls completed.` - } - } - - handleError(error) { - console.error('Open prompt error:', error) - - if (this.currentOriginalLogId) { - const originalLogIndex = this.actionLogs.value.findIndex(log => log.id === this.currentOriginalLogId) - if (originalLogIndex !== -1) { - this.actionLogs.value[originalLogIndex].status = 'Open prompt failed.' - this.actionLogs.value[originalLogIndex].error = error.message - } - } else { - this.updateCurrentLog({ status: 'Open prompt failed.', error: error.message }) - } - } -} \ No newline at end of file diff --git a/examples/ai/tool-calls/src/main.js b/examples/ai/tool-calls/src/main.js deleted file mode 100644 index 01433bca2a..0000000000 --- a/examples/ai/tool-calls/src/main.js +++ /dev/null @@ -1,4 +0,0 @@ -import { createApp } from 'vue' -import App from './App.vue' - -createApp(App).mount('#app') diff --git a/examples/ai/tool-calls/src/style.css b/examples/ai/tool-calls/src/style.css deleted file mode 100644 index c1193abdf2..0000000000 --- a/examples/ai/tool-calls/src/style.css +++ /dev/null @@ -1,501 +0,0 @@ -* { - box-sizing: border-box; -} - -body { - margin: 0; - font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; - background: #f6f8fb; - color: #0f172a; -} - -.page { - min-height: 100vh; - display: grid; - grid-template-columns: minmax(0, 1fr); - background: linear-gradient(180deg, rgba(248, 250, 252, 0.8), rgba(241, 245, 249, 0.95)); - /* padding: 3rem 1.5rem; */ -} - -.page-shell { - padding: 1em; - display: flex; - flex-direction: column; - gap: 1.75rem; - align-items: center; -} - -.page-header { - width: 100%; - margin-bottom: 1.5rem; -} - -.page-header h1 { - margin: 0 0 0.35rem; - font-size: 1.6rem; - color: #0f172a; -} - -.page-header > div:first-child { - /* display: flex; */ - flex-direction: column; -} - -.page-header p { - margin: 0; - line-height: 1.45; - color: #475569; -} - -.main-layout { - width: 100%; -} - -.document-area { - background: rgba(255, 255, 255, 0.88); - border-radius: 1rem; - box-shadow: 0 20px 45px rgba(15, 23, 42, 0.12); - padding: 1.5rem; -} - -.document-content { - display: flex; - gap: 1.5rem; -} - -.superdoc-section { - flex: 1; -} - -.sidebar { - width: 400px; - flex-shrink: 0; - position: relative; -} - -.sidebar.collapsed { - width: 30px; - overflow: hidden; -} - -.collapse-toggle { - position: absolute; - left: -30px; - top: 80px; - width: 30px; - height: 60px; - background: white; - border: 1px solid rgba(37, 99, 235, 0.2); - border-right: none; - border-radius: 5px 0 0 5px; - cursor: pointer; - display: flex; - align-items: center; - justify-content: center; - z-index: 10; -} - -.sidebar.collapsed .collapse-toggle { - left: 0; - border: 1px solid rgba(37, 99, 235, 0.2); - border-radius: 5px; -} - -.collapse-toggle:hover { - background-color: #f9fafb; -} - -.collapse-toggle .chevron { - color: #25282d; - font-size: 24px; - font-weight: bold; - line-height: 1; -} - -.history-section { - background: white; - border: 1px solid rgba(37, 99, 235, 0.2); - border-radius: 8px; - margin-bottom: 1rem; - height: 300px; - display: flex; - flex-direction: column; -} - -.section-header { - padding: 0.75rem 1rem; - border-bottom: 1px solid #e5e7eb; -} - -.section-header span { - font-size: 0.7rem; - letter-spacing: 0.08em; - text-transform: uppercase; - color: #3b82f6; - font-weight: 600; -} - -.history-content { - flex: 1; - padding: 0.75rem 1rem; - overflow-y: auto; - font-size: 0.875rem; -} - -.history-placeholder { - color: #9ca3af; - font-style: italic; - text-align: center; - padding: 2rem 1rem; - font-size: 0.875rem; -} - -.history-item { - color: #374151; - font-size: 0.8rem; - border-bottom: 1px solid #f3f4f6; - padding-bottom: 0.5rem; - margin-bottom: 0.5rem; -} - -.history-item:last-child { - border-bottom: none; - margin-bottom: 0; - padding-bottom: 0; -} - -.history-action { - font-family: 'SF Mono', Monaco, 'Cascadia Code', 'Roboto Mono', Consolas, 'Courier New', monospace; - margin-bottom: 0.25rem; -} - -.history-status { - font-size: 0.75rem; - color: #6b7280; - font-style: italic; - display: flex; - align-items: center; - gap: 0.5rem; -} - -.spinner { - width: 0.75rem; - height: 0.75rem; - border: 1px solid #d1d5db; - border-top: 1px solid #6366f1; - border-radius: 50%; - animation: spin 1s linear infinite; - flex-shrink: 0; -} - -@keyframes spin { - 0% { transform: rotate(0deg); } - 100% { transform: rotate(360deg); } -} - -.controls-section { - background: white; - border: 1px solid rgba(37, 99, 235, 0.2); - border-radius: 8px; - padding: 1rem; -} - -.mode-toggle { - display: flex; - margin-bottom: 1rem; - border: 1px solid #d1d5db; - border-radius: 8px; - overflow: hidden; -} - -.mode-toggle-btn { - flex: 1; - padding: 0.75rem 1rem; - border: none; - background: white; - font-size: 0.875rem; - font-weight: 500; - color: #6b7280; - cursor: pointer; - transition: all 0.2s ease; -} - -.mode-toggle-btn:first-child { - border-right: 1px solid #d1d5db; -} - -.mode-toggle-btn.active { - background: #6366f1; - color: white; -} - -.mode-toggle-btn:hover:not(.active) { - background: #f3f4f6; -} - -.custom-dropdown:disabled { - opacity: 0.8; - cursor: default; -} - -.custom-dropdown small { - font-weight: 400; - opacity: 0.8; -} - - - -.control-row { - display: flex; - gap: 1rem; - align-items: flex-start; -} - -.dropdown-container { - position: relative; - flex: 1; -} - -.custom-dropdown { - width: 100%; - min-width: 200px; - padding: 0.75rem 1rem; - border: 2px solid #d1d5db; - border-radius: 8px; - background: white; - font-size: 1rem; - font-weight: 500; - color: #374151; - cursor: pointer; - display: flex; - align-items: center; - justify-content: space-between; - transition: border-color 0.2s ease, box-shadow 0.2s ease; -} - -.custom-dropdown:hover { - border-color: #9ca3af; -} - -.custom-dropdown:focus { - outline: none; - border-color: #6366f1; - box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.1); -} - -.custom-dropdown.is-open { - border-color: #6366f1; - box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.1); -} - -.dropdown-arrow { - font-size: 0.875rem; - color: #6b7280; - transition: transform 0.2s ease; -} - -.custom-dropdown.is-open .dropdown-arrow { - transform: rotate(180deg); -} - -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - right: 0; - margin-top: 0.25rem; - background: white; - border: 1px solid #e5e7eb; - border-radius: 8px; - box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1); - z-index: 50; - max-height: 300px; - overflow-y: auto; -} - -.dropdown-item { - width: 100%; - padding: 0.75rem 1rem; - border: none; - background: transparent; - font-size: 0.95rem; - color: #374151; - text-align: left; - cursor: pointer; - transition: background-color 0.15s ease; - display: block; -} - -.dropdown-item:hover { - background-color: #f3f4f6; -} - -.dropdown-item:focus { - outline: none; - background-color: #e0e7ff; -} - -.dropdown-item.is-selected { - background-color: #e0e7ff; - color: #6366f1; - font-weight: 600; -} - -.dropdown-item:first-child { - border-radius: 8px 8px 0 0; -} - -.dropdown-item:last-child { - border-radius: 0 0 8px 8px; -} - -.run-button { - padding: 0.75rem 1.5rem; - border: none; - border-radius: 8px; - background: linear-gradient(135deg, #6366f1, #8b5cf6); - color: white; - font-size: 1rem; - font-weight: 600; - cursor: pointer; - display: flex; - align-items: center; - gap: 0.5rem; - transition: all 0.2s ease; - white-space: nowrap; -} - -.run-button:hover:not(:disabled) { - background: linear-gradient(135deg, #5b5de3, #7c3aed); - transform: translateY(-1px); - box-shadow: 0 4px 12px rgba(99, 102, 241, 0.3); -} - -.run-button:focus { - outline: none; - box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.3); -} - -.run-button:disabled { - opacity: 0.6; - cursor: not-allowed; - transform: none; - box-shadow: none; -} - -.prompt-container { - margin-top: 1rem; -} - -.prompt-textarea { - width: 100%; - min-height: 100px; - padding: 1rem; - border: 2px solid #d1d5db; - border-radius: 8px; - font-size: 1rem; - font-family: inherit; - line-height: 1.5; - color: #374151; - background: white; - resize: vertical; - transition: border-color 0.2s ease, box-shadow 0.2s ease; -} - -.prompt-hint { - font-size: 0.75rem; - color: #6b7280; - margin-top: 0.5rem; - text-align: right; - font-style: italic; -} - -.prompt-textarea::placeholder { - color: #9ca3af; - font-style: italic; -} - -.prompt-textarea:focus { - outline: none; - border-color: #6366f1; - box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.1); -} - -@media (max-width: 640px) { - .control-row { - flex-direction: column; - gap: 0.75rem; - } - - .custom-dropdown { - min-width: unset; - } -} - -#superdoc { - width: 100%; - min-height: 500px; - background: white; - border-radius: 0.75rem; - box-shadow: 0 4px 12px rgba(15, 23, 42, 0.06); - border: 1px solid rgba(0, 0, 0, 0.05); - overflow: hidden; -} - -.superdoc { - justify-content: center; -} - -@media (max-width: 520px) { - .prompt-inline { - width: min(320px, calc(100vw - 2rem)); - } -} - -.import-export-buttons { - display: flex; - gap: 0.5rem; - justify-content: flex-end; - margin-bottom: 0.75rem; -} - -.toolbar-container { - display: flex; - align-items: flex-start; -} - -.import-btn, -.export-btn { - display: flex; - align-items: center; - gap: 0.375rem; - padding: 0.5rem 0.75rem; - border: 1px solid #d1d5db; - border-radius: 6px; - background: white; - font-size: 0.875rem; - font-weight: 500; - color: #374151; - cursor: pointer; - transition: all 0.2s ease; - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); -} - -.import-btn:hover, -.export-btn:hover { - background: #f9fafb; - border-color: #9ca3af; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); -} - -.import-btn:focus, -.export-btn:focus { - outline: none; - border-color: #6366f1; - box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.1); -} - -.import-btn i, -.export-btn i { - font-size: 0.75rem; -} diff --git a/examples/ai/tool-calls/vite.config.js b/examples/ai/tool-calls/vite.config.js deleted file mode 100644 index aa447e42e5..0000000000 --- a/examples/ai/tool-calls/vite.config.js +++ /dev/null @@ -1,9 +0,0 @@ -import { defineConfig } from 'vite'; -import vue from '@vitejs/plugin-vue'; - -export default defineConfig({ - plugins: [vue()], - optimizeDeps: { - include: ['superdoc', '@superdoc-dev/ai'] - } -}); diff --git a/examples/getting-started/typescript/.gitignore b/examples/custom-plugin/.gitignore similarity index 100% rename from examples/getting-started/typescript/.gitignore rename to examples/custom-plugin/.gitignore diff --git a/examples/customization/custom-plugin/README.md b/examples/custom-plugin/README.md similarity index 100% rename from examples/customization/custom-plugin/README.md rename to examples/custom-plugin/README.md diff --git a/examples/customization/custom-plugin/custom-plugin-extension.js b/examples/custom-plugin/custom-plugin-extension.js similarity index 100% rename from examples/customization/custom-plugin/custom-plugin-extension.js rename to examples/custom-plugin/custom-plugin-extension.js diff --git a/examples/customization/custom-plugin/demo-config.json b/examples/custom-plugin/demo-config.json similarity index 100% rename from examples/customization/custom-plugin/demo-config.json rename to examples/custom-plugin/demo-config.json diff --git a/examples/customization/custom-plugin/index.html b/examples/custom-plugin/index.html similarity index 100% rename from examples/customization/custom-plugin/index.html rename to examples/custom-plugin/index.html diff --git a/examples/customization/custom-plugin/package.json b/examples/custom-plugin/package.json similarity index 100% rename from examples/customization/custom-plugin/package.json rename to examples/custom-plugin/package.json diff --git a/examples/integrations/chrome-extension/chrome-extension/icons/logo.webp b/examples/custom-plugin/public/logo.webp similarity index 100% rename from examples/integrations/chrome-extension/chrome-extension/icons/logo.webp rename to examples/custom-plugin/public/logo.webp diff --git a/examples/shared/data/sample-document.docx b/examples/custom-plugin/public/sample-document.docx similarity index 100% rename from examples/shared/data/sample-document.docx rename to examples/custom-plugin/public/sample-document.docx diff --git a/examples/customization/custom-plugin/src/App.vue b/examples/custom-plugin/src/App.vue similarity index 100% rename from examples/customization/custom-plugin/src/App.vue rename to examples/custom-plugin/src/App.vue diff --git a/examples/customization/custom-plugin/src/custom-plugin-extension.js b/examples/custom-plugin/src/custom-plugin-extension.js similarity index 100% rename from examples/customization/custom-plugin/src/custom-plugin-extension.js rename to examples/custom-plugin/src/custom-plugin-extension.js diff --git a/examples/customization/custom-plugin/src/main.js b/examples/custom-plugin/src/main.js similarity index 100% rename from examples/customization/custom-plugin/src/main.js rename to examples/custom-plugin/src/main.js diff --git a/examples/customization/custom-plugin/src/style.css b/examples/custom-plugin/src/style.css similarity index 100% rename from examples/customization/custom-plugin/src/style.css rename to examples/custom-plugin/src/style.css diff --git a/examples/customization/custom-plugin/vite.config.js b/examples/custom-plugin/vite.config.js similarity index 100% rename from examples/customization/custom-plugin/vite.config.js rename to examples/custom-plugin/vite.config.js diff --git a/examples/customization/README.md b/examples/customization/README.md deleted file mode 100644 index 9f0b55cbeb..0000000000 --- a/examples/customization/README.md +++ /dev/null @@ -1,21 +0,0 @@ -# Customization Examples - -Examples showing how to customize and extend SuperDoc's editor functionality. - -## Examples - -| Example | Description | -|---------|-------------| -| [toolbar](./toolbar) | Customize the editor toolbar | -| [custom-mark](./custom-mark) | Create custom text marks (formatting) | -| [custom-node](./custom-node) | Create custom node types | -| [custom-plugin](./custom-plugin) | Build custom editor plugins | -| [dynamic-content](./dynamic-content) | External plugin with dynamic content injection | - -## Running an Example - -```bash -cd -npm install -npm run dev -``` diff --git a/examples/customization/dynamic-content/.gitignore b/examples/dynamic-content/.gitignore similarity index 100% rename from examples/customization/dynamic-content/.gitignore rename to examples/dynamic-content/.gitignore diff --git a/examples/customization/dynamic-content/README.md b/examples/dynamic-content/README.md similarity index 100% rename from examples/customization/dynamic-content/README.md rename to examples/dynamic-content/README.md diff --git a/examples/customization/dynamic-content/index.html b/examples/dynamic-content/index.html similarity index 100% rename from examples/customization/dynamic-content/index.html rename to examples/dynamic-content/index.html diff --git a/examples/customization/dynamic-content/package.json b/examples/dynamic-content/package.json similarity index 100% rename from examples/customization/dynamic-content/package.json rename to examples/dynamic-content/package.json diff --git a/examples/customization/dynamic-content/plugins/document-map/document-map.js b/examples/dynamic-content/plugins/document-map/document-map.js similarity index 100% rename from examples/customization/dynamic-content/plugins/document-map/document-map.js rename to examples/dynamic-content/plugins/document-map/document-map.js diff --git a/examples/customization/dynamic-content/plugins/document-map/index.js b/examples/dynamic-content/plugins/document-map/index.js similarity index 100% rename from examples/customization/dynamic-content/plugins/document-map/index.js rename to examples/dynamic-content/plugins/document-map/index.js diff --git a/examples/customization/dynamic-content/public/generic-license.docx b/examples/dynamic-content/public/generic-license.docx similarity index 100% rename from examples/customization/dynamic-content/public/generic-license.docx rename to examples/dynamic-content/public/generic-license.docx diff --git a/examples/shared/images/logo.webp b/examples/dynamic-content/public/logo.webp similarity index 100% rename from examples/shared/images/logo.webp rename to examples/dynamic-content/public/logo.webp diff --git a/examples/shared/images/superdoc-logo.png b/examples/dynamic-content/public/superdoc-logo.png similarity index 100% rename from examples/shared/images/superdoc-logo.png rename to examples/dynamic-content/public/superdoc-logo.png diff --git a/examples/customization/dynamic-content/src/App.vue b/examples/dynamic-content/src/App.vue similarity index 100% rename from examples/customization/dynamic-content/src/App.vue rename to examples/dynamic-content/src/App.vue diff --git a/examples/customization/dynamic-content/src/components/DocumentMap.vue b/examples/dynamic-content/src/components/DocumentMap.vue similarity index 100% rename from examples/customization/dynamic-content/src/components/DocumentMap.vue rename to examples/dynamic-content/src/components/DocumentMap.vue diff --git a/examples/customization/dynamic-content/src/components/DocumentMapItem.vue b/examples/dynamic-content/src/components/DocumentMapItem.vue similarity index 100% rename from examples/customization/dynamic-content/src/components/DocumentMapItem.vue rename to examples/dynamic-content/src/components/DocumentMapItem.vue diff --git a/examples/customization/dynamic-content/src/main.js b/examples/dynamic-content/src/main.js similarity index 100% rename from examples/customization/dynamic-content/src/main.js rename to examples/dynamic-content/src/main.js diff --git a/examples/customization/dynamic-content/src/style.css b/examples/dynamic-content/src/style.css similarity index 100% rename from examples/customization/dynamic-content/src/style.css rename to examples/dynamic-content/src/style.css diff --git a/examples/customization/dynamic-content/vite.config.js b/examples/dynamic-content/vite.config.js similarity index 100% rename from examples/customization/dynamic-content/vite.config.js rename to examples/dynamic-content/vite.config.js diff --git a/examples/getting-started/README.md b/examples/getting-started/README.md deleted file mode 100644 index f10052469b..0000000000 --- a/examples/getting-started/README.md +++ /dev/null @@ -1,21 +0,0 @@ -# Getting Started Examples - -Quick start examples to get SuperDoc running in your preferred framework. - -## Examples - -| Example | Description | -|---------|-------------| -| [react](./react) | Basic React integration | -| [vue](./vue) | Basic Vue.js integration | -| [vanilla](./vanilla) | Plain JavaScript without frameworks | -| [typescript](./typescript) | TypeScript setup with type definitions | -| [cdn](./cdn) | Browser-based setup using CDN links | - -## Running an Example - -```bash -cd -npm install -npm run dev -``` diff --git a/examples/advanced/headless-converter/README.md b/examples/headless-converter/README.md similarity index 100% rename from examples/advanced/headless-converter/README.md rename to examples/headless-converter/README.md diff --git a/examples/advanced/headless-converter/package.json b/examples/headless-converter/package.json similarity index 100% rename from examples/advanced/headless-converter/package.json rename to examples/headless-converter/package.json diff --git a/examples/advanced/headless-converter/sample.docx b/examples/headless-converter/sample.docx similarity index 100% rename from examples/advanced/headless-converter/sample.docx rename to examples/headless-converter/sample.docx diff --git a/examples/advanced/headless-converter/src/index.ts b/examples/headless-converter/src/index.ts similarity index 100% rename from examples/advanced/headless-converter/src/index.ts rename to examples/headless-converter/src/index.ts diff --git a/examples/integrations/README.md b/examples/integrations/README.md deleted file mode 100644 index 06ff927330..0000000000 --- a/examples/integrations/README.md +++ /dev/null @@ -1,23 +0,0 @@ -# Integration Examples - -Examples showing how to integrate SuperDoc with various platforms and environments. - -## Examples - -| Example | Description | -|---------|-------------| -| [nextjs-ssr](./nextjs-ssr) | Next.js with server-side rendering | -| [nodejs](./nodejs) | Node.js backend for document processing | -| [chrome-extension](./chrome-extension) | Chrome browser extension | -| [word-addin](./word-addin) | Microsoft Word add-in | -| [slack-redlining](./slack-redlining) | Slack integration for document redlining | - -## Running an Example - -```bash -cd -npm install -npm run dev -``` - -See individual example READMEs for platform-specific setup instructions. From 03a06b9c2cf990c5340e8f6e0ae6c1238b1c03fc Mon Sep 17 00:00:00 2001 From: Caio Pizzol Date: Fri, 6 Feb 2026 18:58:15 -0300 Subject: [PATCH 2/3] feat: add minimal Tier 1 getting-started examples MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add clean, standalone examples for React, Vue, Vanilla JS, and CDN. Each uses the published superdoc package (no monorepo workspace). Remove pnpm-workspace.yaml — examples install from npm directly. Add CI workflow to build-check examples on PRs. Fix doc links to point to new example paths. --- .github/workflows/ci-examples.yml | 25 +++++++++++++ .../docs/getting-started/frameworks/react.mdx | 2 +- apps/docs/getting-started/frameworks/vue.mdx | 2 +- examples/README.md | 36 ++++++++++++++++++ examples/cdn/README.md | 14 +++++++ examples/cdn/index.html | 37 +++++++++++++++++++ examples/pnpm-workspace.yaml | 17 --------- examples/react/README.md | 15 ++++++++ examples/react/index.html | 12 ++++++ examples/react/package.json | 20 ++++++++++ examples/react/src/App.tsx | 37 +++++++++++++++++++ examples/react/src/main.tsx | 4 ++ examples/react/tsconfig.json | 12 ++++++ examples/react/vite.config.ts | 6 +++ examples/vanilla/README.md | 15 ++++++++ examples/vanilla/index.html | 15 ++++++++ examples/vanilla/package.json | 14 +++++++ examples/vanilla/src/main.js | 17 +++++++++ examples/vue/README.md | 15 ++++++++ examples/vue/index.html | 12 ++++++ examples/vue/package.json | 17 +++++++++ examples/vue/src/App.vue | 36 ++++++++++++++++++ examples/vue/src/main.ts | 4 ++ examples/vue/tsconfig.json | 11 ++++++ examples/vue/vite.config.ts | 6 +++ 25 files changed, 382 insertions(+), 19 deletions(-) create mode 100644 .github/workflows/ci-examples.yml create mode 100644 examples/README.md create mode 100644 examples/cdn/README.md create mode 100644 examples/cdn/index.html delete mode 100644 examples/pnpm-workspace.yaml create mode 100644 examples/react/README.md create mode 100644 examples/react/index.html create mode 100644 examples/react/package.json create mode 100644 examples/react/src/App.tsx create mode 100644 examples/react/src/main.tsx create mode 100644 examples/react/tsconfig.json create mode 100644 examples/react/vite.config.ts create mode 100644 examples/vanilla/README.md create mode 100644 examples/vanilla/index.html create mode 100644 examples/vanilla/package.json create mode 100644 examples/vanilla/src/main.js create mode 100644 examples/vue/README.md create mode 100644 examples/vue/index.html create mode 100644 examples/vue/package.json create mode 100644 examples/vue/src/App.vue create mode 100644 examples/vue/src/main.ts create mode 100644 examples/vue/tsconfig.json create mode 100644 examples/vue/vite.config.ts diff --git a/.github/workflows/ci-examples.yml b/.github/workflows/ci-examples.yml new file mode 100644 index 0000000000..9ddb60ed69 --- /dev/null +++ b/.github/workflows/ci-examples.yml @@ -0,0 +1,25 @@ +name: CI Examples + +on: + pull_request: + paths: + - 'examples/**' + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + strategy: + matrix: + example: [react, vue, vanilla] + steps: + - uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + + - name: Install & Build + working-directory: examples/${{ matrix.example }} + run: npm install && npx vite build diff --git a/apps/docs/getting-started/frameworks/react.mdx b/apps/docs/getting-started/frameworks/react.mdx index 91a1895701..e2e4d39dd1 100644 --- a/apps/docs/getting-started/frameworks/react.mdx +++ b/apps/docs/getting-started/frameworks/react.mdx @@ -265,4 +265,4 @@ function useSuperDoc(config) { - [Vue Integration](/getting-started/frameworks/vue) - Vue setup - [API Reference](/core/superdoc/configuration) - Configuration options -- [Examples](https://github.com/superdoc-dev/superdoc/tree/main/examples/react-example) - Working examples +- [Examples](https://github.com/superdoc-dev/superdoc/tree/main/examples/react) - Working examples diff --git a/apps/docs/getting-started/frameworks/vue.mdx b/apps/docs/getting-started/frameworks/vue.mdx index 3f16c54761..937a436ef0 100644 --- a/apps/docs/getting-started/frameworks/vue.mdx +++ b/apps/docs/getting-started/frameworks/vue.mdx @@ -204,4 +204,4 @@ defineExpose({ - [React Integration](/getting-started/frameworks/react) - React setup - [API Reference](/core/superdoc/configuration) - Configuration options -- [Examples](https://github.com/superdoc-dev/superdoc/tree/main/examples/vue-example) - Working examples \ No newline at end of file +- [Examples](https://github.com/superdoc-dev/superdoc/tree/main/examples/vue) - Working examples \ No newline at end of file diff --git a/examples/README.md b/examples/README.md new file mode 100644 index 0000000000..f581a9ca98 --- /dev/null +++ b/examples/README.md @@ -0,0 +1,36 @@ +# SuperDoc Examples + +Minimal, self-contained examples showing how to use SuperDoc. + +## Getting Started + +| Example | Description | +|---------|-------------| +| [react](./react) | React + TypeScript with Vite | +| [vue](./vue) | Vue 3 + TypeScript with Vite | +| [vanilla](./vanilla) | Plain JavaScript with Vite | +| [cdn](./cdn) | Zero build tools — just an HTML file | + +## Features + +| Example | Description | +|---------|-------------| +| [collaboration](./collaboration) | Real-time editing with various Yjs providers | +| [headless-converter](./headless-converter) | Server-side DOCX conversion with Node.js | +| [custom-plugin](./custom-plugin) | Building a custom editor plugin | +| [dynamic-content](./dynamic-content) | Dynamic content rendering | + +## Running an example + +```bash +cd +npm install +npm run dev +``` + +For the CDN example, just open `index.html` or run `npx serve .`. + +## Documentation + +- [Getting Started](https://docs.superdoc.dev/getting-started/installation) +- [Configuration](https://docs.superdoc.dev/core/superdoc/configuration) diff --git a/examples/cdn/README.md b/examples/cdn/README.md new file mode 100644 index 0000000000..fd63207b79 --- /dev/null +++ b/examples/cdn/README.md @@ -0,0 +1,14 @@ +# SuperDoc — CDN + +Zero build tools. Open `index.html` in a browser or serve with any static server. + +## Run + +```bash +npx serve . +``` + +## Learn more + +- [Vanilla JS Guide](https://docs.superdoc.dev/getting-started/frameworks/vanilla-js) +- [Configuration Reference](https://docs.superdoc.dev/core/superdoc/configuration) diff --git a/examples/cdn/index.html b/examples/cdn/index.html new file mode 100644 index 0000000000..fb237ec11d --- /dev/null +++ b/examples/cdn/index.html @@ -0,0 +1,37 @@ + + + + + + SuperDoc — CDN + + + +
+ +
+
+ + + + diff --git a/examples/pnpm-workspace.yaml b/examples/pnpm-workspace.yaml deleted file mode 100644 index 1736a0e370..0000000000 --- a/examples/pnpm-workspace.yaml +++ /dev/null @@ -1,17 +0,0 @@ -packages: - - '**/*' - - '!collaboration/tiptap-cloud' - -ignoredBuiltDependencies: - - '@microsoft/teamsapp-cli' - - core-js - - keytar - - leveldown - - sharp - - vue-demi - -onlyBuiltDependencies: - - esbuild - -overrides: - superdoc: file:../packages/superdoc/superdoc.tgz diff --git a/examples/react/README.md b/examples/react/README.md new file mode 100644 index 0000000000..e9e747fc1d --- /dev/null +++ b/examples/react/README.md @@ -0,0 +1,15 @@ +# SuperDoc — React + +Minimal React + TypeScript example. + +## Run + +```bash +npm install +npm run dev +``` + +## Learn more + +- [React Integration Guide](https://docs.superdoc.dev/getting-started/frameworks/react) +- [Configuration Reference](https://docs.superdoc.dev/core/superdoc/configuration) diff --git a/examples/react/index.html b/examples/react/index.html new file mode 100644 index 0000000000..094d07e62a --- /dev/null +++ b/examples/react/index.html @@ -0,0 +1,12 @@ + + + + + + SuperDoc — React + + +
+ + + diff --git a/examples/react/package.json b/examples/react/package.json new file mode 100644 index 0000000000..af64b5c329 --- /dev/null +++ b/examples/react/package.json @@ -0,0 +1,20 @@ +{ + "name": "superdoc-react-example", + "private": true, + "type": "module", + "scripts": { + "dev": "vite" + }, + "dependencies": { + "react": "^19.0.0", + "react-dom": "^19.0.0", + "superdoc": "latest" + }, + "devDependencies": { + "@types/react": "^19.0.0", + "@types/react-dom": "^19.0.0", + "@vitejs/plugin-react": "^4.3.4", + "typescript": "^5.7.0", + "vite": "^6.2.0" + } +} diff --git a/examples/react/src/App.tsx b/examples/react/src/App.tsx new file mode 100644 index 0000000000..f0fd1f687d --- /dev/null +++ b/examples/react/src/App.tsx @@ -0,0 +1,37 @@ +import { useEffect, useRef, useState, type ChangeEvent } from 'react'; +import { SuperDoc } from 'superdoc'; +import 'superdoc/style.css'; + +export default function App() { + const [file, setFile] = useState(null); + const containerRef = useRef(null); + const superdocRef = useRef(null); + + const handleFile = (e: ChangeEvent) => { + const selected = e.target.files?.[0]; + if (selected) setFile(selected); + }; + + useEffect(() => { + if (!containerRef.current) return; + + superdocRef.current = new SuperDoc({ + selector: containerRef.current, + document: file, + }); + + return () => { + superdocRef.current?.destroy(); + superdocRef.current = null; + }; + }, [file]); + + return ( + <> +
+ +
+
+ + ); +} diff --git a/examples/react/src/main.tsx b/examples/react/src/main.tsx new file mode 100644 index 0000000000..e0138a10cc --- /dev/null +++ b/examples/react/src/main.tsx @@ -0,0 +1,4 @@ +import { createRoot } from 'react-dom/client'; +import App from './App'; + +createRoot(document.getElementById('root')!).render(); diff --git a/examples/react/tsconfig.json b/examples/react/tsconfig.json new file mode 100644 index 0000000000..4f344fd6f2 --- /dev/null +++ b/examples/react/tsconfig.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "target": "ES2020", + "module": "ESNext", + "moduleResolution": "bundler", + "jsx": "react-jsx", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true + }, + "include": ["src"] +} diff --git a/examples/react/vite.config.ts b/examples/react/vite.config.ts new file mode 100644 index 0000000000..0466183af6 --- /dev/null +++ b/examples/react/vite.config.ts @@ -0,0 +1,6 @@ +import { defineConfig } from 'vite'; +import react from '@vitejs/plugin-react'; + +export default defineConfig({ + plugins: [react()], +}); diff --git a/examples/vanilla/README.md b/examples/vanilla/README.md new file mode 100644 index 0000000000..16d7950f19 --- /dev/null +++ b/examples/vanilla/README.md @@ -0,0 +1,15 @@ +# SuperDoc — Vanilla JS + +Minimal plain JavaScript example with Vite. + +## Run + +```bash +npm install +npm run dev +``` + +## Learn more + +- [Vanilla JS Guide](https://docs.superdoc.dev/getting-started/frameworks/vanilla-js) +- [Configuration Reference](https://docs.superdoc.dev/core/superdoc/configuration) diff --git a/examples/vanilla/index.html b/examples/vanilla/index.html new file mode 100644 index 0000000000..2ad2b88d97 --- /dev/null +++ b/examples/vanilla/index.html @@ -0,0 +1,15 @@ + + + + + + SuperDoc — Vanilla JS + + +
+ +
+
+ + + diff --git a/examples/vanilla/package.json b/examples/vanilla/package.json new file mode 100644 index 0000000000..cd2dae08b8 --- /dev/null +++ b/examples/vanilla/package.json @@ -0,0 +1,14 @@ +{ + "name": "superdoc-vanilla-example", + "private": true, + "type": "module", + "scripts": { + "dev": "vite" + }, + "dependencies": { + "superdoc": "latest" + }, + "devDependencies": { + "vite": "^6.2.0" + } +} diff --git a/examples/vanilla/src/main.js b/examples/vanilla/src/main.js new file mode 100644 index 0000000000..80f5b81d79 --- /dev/null +++ b/examples/vanilla/src/main.js @@ -0,0 +1,17 @@ +import { SuperDoc } from 'superdoc'; +import 'superdoc/style.css'; + +let superdoc = new SuperDoc({ + selector: '#editor', +}); + +document.getElementById('file-input').addEventListener('change', (e) => { + const file = e.target.files[0]; + if (!file) return; + + superdoc?.destroy(); + superdoc = new SuperDoc({ + selector: '#editor', + document: file, + }); +}); diff --git a/examples/vue/README.md b/examples/vue/README.md new file mode 100644 index 0000000000..52d1606ef2 --- /dev/null +++ b/examples/vue/README.md @@ -0,0 +1,15 @@ +# SuperDoc — Vue + +Minimal Vue 3 + TypeScript example. + +## Run + +```bash +npm install +npm run dev +``` + +## Learn more + +- [Vue Integration Guide](https://docs.superdoc.dev/getting-started/frameworks/vue) +- [Configuration Reference](https://docs.superdoc.dev/core/superdoc/configuration) diff --git a/examples/vue/index.html b/examples/vue/index.html new file mode 100644 index 0000000000..87dd1a6ade --- /dev/null +++ b/examples/vue/index.html @@ -0,0 +1,12 @@ + + + + + + SuperDoc — Vue + + +
+ + + diff --git a/examples/vue/package.json b/examples/vue/package.json new file mode 100644 index 0000000000..a387668737 --- /dev/null +++ b/examples/vue/package.json @@ -0,0 +1,17 @@ +{ + "name": "superdoc-vue-example", + "private": true, + "type": "module", + "scripts": { + "dev": "vite" + }, + "dependencies": { + "superdoc": "latest", + "vue": "^3.5.0" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^5.2.0", + "typescript": "^5.7.0", + "vite": "^6.2.0" + } +} diff --git a/examples/vue/src/App.vue b/examples/vue/src/App.vue new file mode 100644 index 0000000000..6c794a0a61 --- /dev/null +++ b/examples/vue/src/App.vue @@ -0,0 +1,36 @@ + + + diff --git a/examples/vue/src/main.ts b/examples/vue/src/main.ts new file mode 100644 index 0000000000..684d04215d --- /dev/null +++ b/examples/vue/src/main.ts @@ -0,0 +1,4 @@ +import { createApp } from 'vue'; +import App from './App.vue'; + +createApp(App).mount('#app'); diff --git a/examples/vue/tsconfig.json b/examples/vue/tsconfig.json new file mode 100644 index 0000000000..2cac755e47 --- /dev/null +++ b/examples/vue/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "target": "ES2020", + "module": "ESNext", + "moduleResolution": "bundler", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true + }, + "include": ["src"] +} diff --git a/examples/vue/vite.config.ts b/examples/vue/vite.config.ts new file mode 100644 index 0000000000..1ebc4fc7dd --- /dev/null +++ b/examples/vue/vite.config.ts @@ -0,0 +1,6 @@ +import { defineConfig } from 'vite'; +import vue from '@vitejs/plugin-vue'; + +export default defineConfig({ + plugins: [vue()], +}); From e3a7829d0c1df186a85edc1a5aee92774213dc71 Mon Sep 17 00:00:00 2001 From: Caio Pizzol Date: Fri, 6 Feb 2026 19:22:48 -0300 Subject: [PATCH 3/3] test: add Playwright smoke tests for examples Add smoke test suite that starts each example's dev server, opens Chromium, and asserts no console errors. Runs in CI via matrix strategy (react, vue, vanilla, cdn). Fix CDN example to use UMD build instead of ES modules (bare specifiers don't resolve in browsers). --- .github/workflows/ci-examples.yml | 17 +++++++++++++---- examples/.gitignore | 8 ++++---- examples/__tests__/package.json | 13 +++++++++++++ examples/__tests__/playwright.config.ts | 25 +++++++++++++++++++++++++ examples/__tests__/smoke.spec.ts | 18 ++++++++++++++++++ examples/cdn/index.html | 15 +++++++-------- 6 files changed, 80 insertions(+), 16 deletions(-) create mode 100644 examples/__tests__/package.json create mode 100644 examples/__tests__/playwright.config.ts create mode 100644 examples/__tests__/smoke.spec.ts diff --git a/.github/workflows/ci-examples.yml b/.github/workflows/ci-examples.yml index 9ddb60ed69..8888c22ec6 100644 --- a/.github/workflows/ci-examples.yml +++ b/.github/workflows/ci-examples.yml @@ -7,11 +7,11 @@ on: workflow_dispatch: jobs: - build: + smoke-test: runs-on: ubuntu-latest strategy: matrix: - example: [react, vue, vanilla] + example: [react, vue, vanilla, cdn] steps: - uses: actions/checkout@v4 @@ -20,6 +20,15 @@ jobs: with: node-version: '20' - - name: Install & Build + - name: Install example dependencies + if: matrix.example != 'cdn' working-directory: examples/${{ matrix.example }} - run: npm install && npx vite build + run: npm install + + - name: Install smoke test dependencies + working-directory: examples/__tests__ + run: npm install && npx playwright install chromium + + - name: Run smoke test + working-directory: examples/__tests__ + run: EXAMPLE=${{ matrix.example }} npx playwright test diff --git a/examples/.gitignore b/examples/.gitignore index 934668777a..2286166f02 100644 --- a/examples/.gitignore +++ b/examples/.gitignore @@ -1,5 +1,5 @@ -# Ignore lock files +node_modules *-lock* - -# Ignore npmrc files -*.npmrc \ No newline at end of file +*.npmrc +test-results +playwright-report \ No newline at end of file diff --git a/examples/__tests__/package.json b/examples/__tests__/package.json new file mode 100644 index 0000000000..d6265d6824 --- /dev/null +++ b/examples/__tests__/package.json @@ -0,0 +1,13 @@ +{ + "name": "superdoc-example-smoke-tests", + "private": true, + "type": "module", + "scripts": { + "test": "playwright test", + "test:install": "playwright install chromium" + }, + "devDependencies": { + "@playwright/test": "^1.50.0", + "serve": "^14.2.0" + } +} diff --git a/examples/__tests__/playwright.config.ts b/examples/__tests__/playwright.config.ts new file mode 100644 index 0000000000..57b3e2644d --- /dev/null +++ b/examples/__tests__/playwright.config.ts @@ -0,0 +1,25 @@ +import { defineConfig, devices } from '@playwright/test'; + +const example = process.env.EXAMPLE || 'react'; +const isCdn = example === 'cdn'; +const port = isCdn ? 3000 : 5173; + +export default defineConfig({ + testDir: '.', + retries: 1, + timeout: 30_000, + webServer: { + command: isCdn + ? `npx serve ../${example} -l ${port}` + : `npm run --prefix ../${example} dev -- --port ${port}`, + url: `http://localhost:${port}`, + timeout: 30_000, + reuseExistingServer: !process.env.CI, + }, + use: { + baseURL: `http://localhost:${port}`, + }, + projects: [ + { name: 'chromium', use: { ...devices['Desktop Chrome'] } }, + ], +}); diff --git a/examples/__tests__/smoke.spec.ts b/examples/__tests__/smoke.spec.ts new file mode 100644 index 0000000000..754cd95ae3 --- /dev/null +++ b/examples/__tests__/smoke.spec.ts @@ -0,0 +1,18 @@ +import { test, expect } from '@playwright/test'; + +test('example loads without errors', async ({ page }) => { + const errors: string[] = []; + + page.on('pageerror', (err) => errors.push(err.message)); + page.on('console', (msg) => { + if (msg.type() === 'error') errors.push(msg.text()); + }); + + await page.goto('/'); + await expect(page.locator('body')).toBeVisible(); + + // Give the app a moment to initialize (SuperDoc is async) + await page.waitForTimeout(2000); + + expect(errors).toEqual([]); +}); diff --git a/examples/cdn/index.html b/examples/cdn/index.html index fb237ec11d..955216acea 100644 --- a/examples/cdn/index.html +++ b/examples/cdn/index.html @@ -8,6 +8,7 @@ href="https://cdn.jsdelivr.net/npm/superdoc/dist/style.css" rel="stylesheet" /> +
@@ -15,19 +16,17 @@
-