{"_id":"@blocura/core","_rev":"2-5cd1b3e8055fd6488b99d3425d06e0bc","name":"@blocura/core","dist-tags":{"latest":"1.0.2"},"versions":{"1.0.0":{"name":"@blocura/core","version":"1.0.0","keywords":["react","typescript","block-editor","gutenberg","prosemirror","headless-cms"],"license":"MIT","_id":"@blocura/core@1.0.0","maintainers":[{"name":"rjbick","email":"ryan.bick@otfoffice.com"}],"homepage":"https://github.com/rjbick/blocura","bugs":{"url":"https://github.com/rjbick/blocura/issues"},"dist":{"shasum":"75ee0957cac0c1e91944e0ac477413f871a26e4b","tarball":"https://registry.npmjs.org/@blocura/core/-/core-1.0.0.tgz","fileCount":204,"integrity":"sha512-DiCQ0mhIXfRRhVwcSyFwb17dhdHe5gk8HvPozxRizYqZN7U8Ww2lxOV650O/Kw85GmZYzmxHbWYCpE1vsZswYA==","signatures":[{"sig":"MEUCIQCmo8DPubX5YulBsEFDvBjdRjYscWTYQalWzjuLAQaw3wIgRHMDj9Okn8Fg/bJV5GXb7lUB93DOY16t5vy+rrctYls=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1158949},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"npm":">=10.0.0","node":">=18.18.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./unstyled":{"types":"./dist/index.unstyled.d.ts","import":"./dist/index.unstyled.js","require":"./dist/index.unstyled.cjs"},"./styles.css":"./dist/styles.css","./package.json":"./package.json"},"gitHead":"109eb6bd343e1af3b67352f2037fe994aa4743c9","scripts":{"dev":"vite","lint":"eslint .","test":"vitest","build":"npm run build:lib","preview":"vite preview","lint:fix":"eslint . --fix","test:run":"vitest run","build:app":"tsc -b && vite build","build:lib":"vite build --config vite.config.lib.ts && tsc -p tsconfig.build.json","typecheck":"tsc -b --pretty false","pack:check":"npm pack --dry-run --cache .npm-cache","pack:local":"node scripts/pack-local.mjs","test:watch":"vitest","release:check":"npm run lint && npm run typecheck && npm run test:coverage && npm run build:lib && npm run pack:check","test:coverage":"vitest run --coverage","prepublishOnly":"npm run release:check"},"_npmUser":{"name":"rjbick","email":"ryan.bick@otfoffice.com"},"repository":{"url":"git+https://github.com/rjbick/blocura.git","type":"git"},"_npmVersion":"9.2.0","description":"Standalone React block editor with Gutenberg-like UX.","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"18.19.1","dependencies":{"clsx":"^2.1.0","uuid":"^10.0.0","clean":"^4.0.2","immer":"^10.1.1","zustand":"^5.0.0","lucide-react":"^0.446.0","@dnd-kit/core":"^6.1.0","framer-motion":"^11.0.0","tailwind-merge":"^2.3.0","@codemirror/view":"^6.39.15","prosemirror-view":"^1.34.0","@codemirror/state":"^6.5.4","@dnd-kit/sortable":"^8.0.0","prosemirror-model":"^1.22.0","prosemirror-state":"^1.4.3","@dnd-kit/utilities":"^3.2.2","prosemirror-keymap":"^1.2.2","prosemirror-history":"^1.4.0","@codemirror/commands":"^6.10.2","@radix-ui/react-tabs":"^1.1.0","prosemirror-commands":"^1.5.2","@codemirror/lang-html":"^6.4.11","@radix-ui/react-label":"^2.1.0","prosemirror-gapcursor":"^1.3.2","@radix-ui/react-dialog":"^1.1.0","@radix-ui/react-select":"^2.1.0","@radix-ui/react-slider":"^1.2.0","@radix-ui/react-switch":"^1.1.0","@radix-ui/react-toggle":"^1.1.0","prosemirror-dropcursor":"^1.8.1","prosemirror-inputrules":"^1.4.0","@radix-ui/react-popover":"^1.1.0","@radix-ui/react-tooltip":"^1.1.0","prosemirror-schema-list":"^1.4.0","@radix-ui/react-checkbox":"^1.1.0","class-variance-authority":"^0.7.0","prosemirror-schema-basic":"^1.2.2","@codemirror/lang-markdown":"^6.5.0","@radix-ui/react-separator":"^1.1.0","@radix-ui/react-collapsible":"^1.1.0","@radix-ui/react-radio-group":"^1.2.0","@radix-ui/react-scroll-area":"^1.1.0","@radix-ui/react-context-menu":"^2.2.0","@radix-ui/react-toggle-group":"^1.1.0","@radix-ui/react-dropdown-menu":"^2.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.0","jsdom":"^24.1.3","react":"^19.0.0","eslint":"^9.39.3","vitest":"^2.0.0","react-dom":"^19.0.0","@eslint/js":"^9.39.3","typescript":"^5.6.0","@types/uuid":"^10.0.0","tailwindcss":"^4.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","@tailwindcss/vite":"^4.0.0","typescript-eslint":"^8.56.0","@vitest/coverage-v8":"^2.1.9","@vitejs/plugin-react":"^4.3.0","eslint-plugin-react-hooks":"^5.2.0","eslint-plugin-react-refresh":"^0.4.26"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/core_1.0.0_1775511754087_0.13704616531521085","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@blocura/core","version":"1.0.2","description":"Standalone React block editor with Gutenberg-like UX.","license":"MIT","repository":{"type":"git","url":"git+https://github.com/rjbick/blocura.git"},"homepage":"https://github.com/rjbick/blocura","keywords":["react","typescript","block-editor","gutenberg","prosemirror","headless-cms"],"engines":{"node":">=18.18.0","npm":">=10.0.0"},"type":"module","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./unstyled":{"types":"./dist/index.unstyled.d.ts","import":"./dist/index.unstyled.js","require":"./dist/index.unstyled.cjs"},"./styles.css":"./dist/styles.css","./package.json":"./package.json"},"sideEffects":["**/*.css"],"publishConfig":{"access":"public"},"scripts":{"dev":"vite","build":"npm run build:lib","build:lib":"vite build --config vite.config.lib.ts && tsc -p tsconfig.build.json","build:app":"tsc -b && vite build","preview":"vite preview","test":"vitest","lint":"eslint .","lint:fix":"eslint . --fix","typecheck":"tsc -b --pretty false","test:run":"vitest run","test:watch":"vitest","test:coverage":"vitest run --coverage","pack:local":"node scripts/pack-local.mjs","pack:check":"npm pack --dry-run --cache .npm-cache","release:check":"npm run lint && npm run typecheck && npm run test:coverage && npm run build:lib && npm run pack:check","prepublishOnly":"npm run release:check"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"dependencies":{"@codemirror/commands":"^6.10.2","@codemirror/lang-html":"^6.4.11","@codemirror/lang-markdown":"^6.5.0","@codemirror/state":"^6.5.4","@codemirror/view":"^6.39.15","@dnd-kit/core":"^6.1.0","@dnd-kit/sortable":"^8.0.0","@dnd-kit/utilities":"^3.2.2","@radix-ui/react-checkbox":"^1.1.0","@radix-ui/react-collapsible":"^1.1.0","@radix-ui/react-context-menu":"^2.2.0","@radix-ui/react-dialog":"^1.1.0","@radix-ui/react-dropdown-menu":"^2.1.0","@radix-ui/react-label":"^2.1.0","@radix-ui/react-popover":"^1.1.0","@radix-ui/react-radio-group":"^1.2.0","@radix-ui/react-scroll-area":"^1.1.0","@radix-ui/react-select":"^2.1.0","@radix-ui/react-separator":"^1.1.0","@radix-ui/react-slider":"^1.2.0","@radix-ui/react-switch":"^1.1.0","@radix-ui/react-tabs":"^1.1.0","@radix-ui/react-toggle":"^1.1.0","@radix-ui/react-toggle-group":"^1.1.0","@radix-ui/react-tooltip":"^1.1.0","class-variance-authority":"^0.7.0","clean":"^4.0.2","clsx":"^2.1.0","framer-motion":"^11.0.0","immer":"^10.1.1","lucide-react":"^0.446.0","prosemirror-commands":"^1.5.2","prosemirror-dropcursor":"^1.8.1","prosemirror-gapcursor":"^1.3.2","prosemirror-history":"^1.4.0","prosemirror-inputrules":"^1.4.0","prosemirror-keymap":"^1.2.2","prosemirror-model":"^1.22.0","prosemirror-schema-basic":"^1.2.2","prosemirror-schema-list":"^1.4.0","prosemirror-state":"^1.4.3","prosemirror-view":"^1.34.0","tailwind-merge":"^2.3.0","uuid":"^10.0.0","zustand":"^5.0.0"},"devDependencies":{"@eslint/js":"^9.39.3","@tailwindcss/vite":"^4.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","@types/uuid":"^10.0.0","@vitejs/plugin-react":"^4.3.0","@vitest/coverage-v8":"^2.1.9","eslint":"^9.39.3","eslint-plugin-react-hooks":"^5.2.0","eslint-plugin-react-refresh":"^0.4.26","jsdom":"^24.1.3","react":"^19.0.0","react-dom":"^19.0.0","tailwindcss":"^4.0.0","typescript":"^5.6.0","typescript-eslint":"^8.56.0","vite":"^6.0.0","vitest":"^2.0.0"},"gitHead":"8c2d1ea99519538aa09e72a42e700c5966b73ba2","_id":"@blocura/core@1.0.2","bugs":{"url":"https://github.com/rjbick/blocura/issues"},"_nodeVersion":"22.14.0","_npmVersion":"11.18.0","dist":{"integrity":"sha512-Bvc0+kYAiEDk+zYP+gVo9y6Q1mL1FH0R9K2bv26zIZ75EgUyMvZ7aBauHUhKALNpEZGFx+sK1t6qZgBr3Z2vdw==","shasum":"bc9e08896a7c9fd50184988bb05f605891e80846","tarball":"https://registry.npmjs.org/@blocura/core/-/core-1.0.2.tgz","fileCount":211,"unpackedSize":1204065,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@blocura%2fcore@1.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIEjl/hzPsVwvwgbRRA3NAa9bLDF4crGcUNysWYDdkCsHAiAv6yCCeYtPBctydQxkBLa7T0v05TheTZhWXZ4LxOXvFA=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4b5fdfe7-f5b7-4f07-89a1-77d623ff3497"}},"directories":{},"maintainers":[{"name":"rjbick","email":"ryan.bick@otfoffice.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/core_1.0.2_1783977754471_0.4984607032462893"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-06T21:42:33.987Z","modified":"2026-07-13T21:22:34.992Z","1.0.0":"2026-04-06T21:42:34.341Z","1.0.2":"2026-07-13T21:22:34.709Z"},"bugs":{"url":"https://github.com/rjbick/blocura/issues"},"license":"MIT","homepage":"https://github.com/rjbick/blocura","keywords":["react","typescript","block-editor","gutenberg","prosemirror","headless-cms"],"repository":{"type":"git","url":"git+https://github.com/rjbick/blocura.git"},"description":"Standalone React block editor with Gutenberg-like UX.","maintainers":[{"name":"rjbick","email":"ryan.bick@otfoffice.com"}],"readme":"# @blocura/core\n\nStandalone React block editor with Gutenberg-like UX, built without `@wordpress/*` dependencies.\n\n## Install\n\n```bash\nnpm install @blocura/core\n```\n\n`react` and `react-dom` are peer dependencies.\n\nFor local cross-project testing before publish, use the tarball workflow in `docs/local-package.md`.\n\n## Usage\n\n```tsx\nimport { BlockEditor } from '@blocura/core'\n\nexport function EditorPage() {\n  return (\n    <div style={{ width: '100%', height: '100vh' }}>\n      <BlockEditor\n        onSave={async (payload) => {\n          await fetch('/api/editor/document/1', {\n            method: 'PUT',\n            headers: { 'Content-Type': 'application/json' },\n            body: JSON.stringify(payload),\n          })\n        }}\n      />\n    </div>\n  )\n}\n```\n\n## Style Isolation\n\n`@blocura/core` (default entry) auto-imports editor CSS.\n\n- Use this when you want zero setup:\n\n```tsx\nimport { BlockEditor } from '@blocura/core'\n```\n\n- Use this when you want explicit style control in host apps (for example Tailwind-heavy apps):\n\n```tsx\nimport { BlockEditor } from '@blocura/core/unstyled'\nimport '@blocura/core/styles.css'\n```\n\nAll shipped editor selectors are scoped to `.editor-shell`.\n\n## Save Payload\n\n`onSave` and `onAutoSave` receive:\n\n- `blocks` / `blocksJson`\n- `rawHtml`\n- `postSettings` / `metadata`\n- `images`\n- `tailwindSafelist`\n- `titleIncludedInContent`\n\nSee `docs/save-payload.md` for full contract and examples.\n\n`rawHtml` is markup only (no linked stylesheets/scripts). It can still contain:\n\n- inline `style=\"\"` attributes emitted by block serializers\n- scoped `<style>` tags only when block attribute `__customCSS` is present\n\n## Preview Parity Settings\n\nUse `settings.preview` to render preview with your site shell/assets:\n\n```tsx\n<BlockEditor\n  settings={{\n    preview: {\n      stylesheets: ['/assets/app.css'],\n      scripts: ['/assets/app.js'],\n      htmlClassName: 'site-html',\n      bodyClassName: 'page page-preview',\n      baseUrl: 'https://example.com/',\n      templateHtml: '<div id=\"app\"><main>{{content}}</main></div>',\n      includeDefaultStyles: false,\n    },\n  }}\n  onResolvePreviewAssetUrl={(url, context) => {\n    if (context.tagName === 'img' && context.attribute === 'src' && url.startsWith('blob:')) {\n      return '/media/preview-image.jpg'\n    }\n    return url\n  }}\n/>\n```\n\n## PHP Integration\n\nSee `docs/php-integration.md` for:\n\n- Save/load endpoints\n- Suggested DB schema\n- Rendering strategy (`rawHtml` + `blocksJson`)\n- Tailwind safelist aggregation\n\n## Publish Readiness\n\nRun:\n\n```bash\nnpm run release:check\n```\n\nThen follow `docs/publish-checklist.md` before publishing.\n\n## CSS\n\nThe package entry imports editor CSS automatically. If you need explicit control, import:\n\n```ts\nimport '@blocura/core/styles.css'\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}