{"_id":"@plannotator/ui","_rev":"43-02ba3508fef1b247091b4306151dbe92","name":"@plannotator/ui","dist-tags":{"latest":"0.49.0"},"versions":{"0.22.0":{"name":"@plannotator/ui","version":"0.22.0","_id":"@plannotator/ui@0.22.0","maintainers":[{"name":"backnotprop","email":"backnotprop@gmail.com"}],"dist":{"shasum":"5b9dc61f14af2d21bcd89ef2c534cff4739f4a4a","tarball":"https://registry.npmjs.org/@plannotator/ui/-/ui-0.22.0.tgz","fileCount":305,"integrity":"sha512-uq0ZGOr99WxdjSGn/EW/VCyf9Fx+wwf0o7NP75u3DmzsF2WhFgsoYzFvmGqkUGoZbhm4asJZ8FHovF5snIxb0w==","signatures":[{"sig":"MEQCIEqgMiqh/AVk7U94QCHK/z7Ro61MxPZaTvp1WiC9tl/TAiB3UiWRDSMoNQEjNnp//jbRX7Se9G8uubyKRSdKG3k7xA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3845198},"type":"module","_from":"file:plannotator-ui-0.22.0.tgz","exports":{"./lib/*":"./lib/*.ts","./theme":"./theme.css","./types":"./types.ts","./config":"./config/index.ts","./hooks/*":"./hooks/*.ts","./utils/*":"./utils/*.ts","./configure":"./configure.ts","./shortcuts":"./shortcuts/index.ts","./styles.css":"./styles.css","./components/*":"./components/*.tsx","./components/ai/*":"./components/ai/*.tsx","./components/ui/*":"./components/ui/*.tsx","./components/core/*":"./components/core/*.tsx","./components/sidebar/*":"./components/sidebar/*.tsx","./components/html-viewer":"./components/html-viewer/index.ts","./components/plan-diff/*":"./components/plan-diff/*.tsx","./components/goal-setup/*":"./components/goal-setup/*.tsx","./components/ImageAnnotator":"./components/ImageAnnotator/index.tsx"},"scripts":{"prepack":"bun run build:css","build:css":"vite build --config vite.css.config.ts && rm -f styles.js","typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"backnotprop","email":"backnotprop@gmail.com"},"_resolved":"/Users/ramos/plannotator/feat-pkg-document-ui/packages/ui/plannotator-ui-0.22.0.tgz","_integrity":"sha512-uq0ZGOr99WxdjSGn/EW/VCyf9Fx+wwf0o7NP75u3DmzsF2WhFgsoYzFvmGqkUGoZbhm4asJZ8FHovF5snIxb0w==","_npmVersion":"11.12.1","description":"Plannotator's document UI — markdown rendering, themes, the annotation editor, settings, comments, and layout — as installable building blocks. Published so a separate app (the commercial Workspaces app) can reuse the exact same experience, while Plannota","directories":{},"_nodeVersion":"24.15.0","dependencies":{"clsx":"^2.1.1","diff":"^8.0.4","katex":"^0.16.47","marked":"^17.0.6","motion":"^12.38.0","mermaid":"^11.12.2","dompurify":"^3.3.3","@viz-js/viz":"^3.25.0","highlight.js":"^11.11.1","lucide-react":"^1.14.0","@lezer/common":"^1.5.2","@pierre/diffs":"1.2.8","tailwind-merge":"^3.6.0","@codemirror/view":"^6.43.0","@lezer/highlight":"^1.2.3","perfect-freehand":"^1.2.2","@codemirror/state":"^6.6.0","@plannotator/core":"0.22.0","@codemirror/search":"^6.7.0","@codemirror/commands":"^6.10.3","@codemirror/language":"^6.12.3","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@tanstack/react-table":"^8.21.3","@radix-ui/react-dialog":"^1.1.15","@codemirror/lang-python":"^6.2.1","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@codemirror/autocomplete":"^6.20.3","@codemirror/legacy-modes":"^6.5.3","class-variance-authority":"^0.7.1","@codemirror/lang-markdown":"^6.5.0","unique-username-generator":"^1.5.1","@fontsource-variable/inter":"^5.2.8","@plannotator/atomic-editor":"^0.5.0","@codemirror/lang-javascript":"^6.2.5","@plannotator/markdown-editor":"^0.2.0","@plannotator/web-highlighter":"^0.8.1","@radix-ui/react-dropdown-menu":"^2.1.16","@fontsource-variable/geist-mono":"5.2.7"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.2.0","react":"^19.2.3","react-dom":"^19.2.3","@types/bun":"^1.2.0","typescript":"~5.8.2","tailwindcss":"^4.1.18","@types/react":"^19.2.0","@types/react-dom":"^19.2.0","@tailwindcss/vite":"^4.1.18","tailwindcss-animate":"^1.0.7","@happy-dom/global-registrator":"^20.10.1"},"peerDependencies":{"react":"^19.2.3","react-dom":"^19.2.3","tailwindcss":"^4.1.18","tailwindcss-animate":"^1.0.7"},"_npmOperationalInternal":{"tmp":"tmp/ui_0.22.0_1783396406472_0.13387826387630697","host":"s3://npm-registry-packages-npm-production"}},"0.23.0":{"name":"@plannotator/ui","version":"0.23.0","_id":"@plannotator/ui@0.23.0","maintainers":[{"name":"backnotprop","email":"backnotprop@gmail.com"}],"dist":{"shasum":"0b25458480bcc362a1e65e85f6690aa14582a8a4","tarball":"https://registry.npmjs.org/@plannotator/ui/-/ui-0.23.0.tgz","fileCount":305,"integrity":"sha512-muiXqi6ya4xwr6WdN8HUalh/lI7hCJ5dus1uQIndW46svgyhhJwR+1RGlGxu31NfWgW/atJsqHIfqDHUJCa/hw==","signatures":[{"sig":"MEUCIQDMOXhZbOBhkQ/qkPS9jGS4k16Y4wF/HiKTvLDBIDxGuAIgPPeGhXGaC2JaxB8IepyFOu2up8dLa/1oCUttJnumMFo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3846154},"type":"module","_from":"file:plannotator-ui-0.23.0.tgz","exports":{"./lib/*":"./lib/*.ts","./theme":"./theme.css","./types":"./types.ts","./config":"./config/index.ts","./hooks/*":"./hooks/*.ts","./utils/*":"./utils/*.ts","./configure":"./configure.ts","./shortcuts":"./shortcuts/index.ts","./styles.css":"./styles.css","./components/*":"./components/*.tsx","./components/ai/*":"./components/ai/*.tsx","./components/ui/*":"./components/ui/*.tsx","./components/core/*":"./components/core/*.tsx","./components/sidebar/*":"./components/sidebar/*.tsx","./components/html-viewer":"./components/html-viewer/index.ts","./components/plan-diff/*":"./components/plan-diff/*.tsx","./components/goal-setup/*":"./components/goal-setup/*.tsx","./components/ImageAnnotator":"./components/ImageAnnotator/index.tsx"},"scripts":{"prepack":"bun run build:css","build:css":"vite build --config vite.css.config.ts && rm -f styles.js","typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"backnotprop","email":"backnotprop@gmail.com"},"_resolved":"/Users/ramos/plannotator/plannotator/packages/ui/plannotator-ui-0.23.0.tgz","_integrity":"sha512-muiXqi6ya4xwr6WdN8HUalh/lI7hCJ5dus1uQIndW46svgyhhJwR+1RGlGxu31NfWgW/atJsqHIfqDHUJCa/hw==","_npmVersion":"11.12.1","description":"Plannotator's document UI — markdown rendering, themes, the annotation editor, settings, comments, and layout — as installable building blocks. Published so a separate app (the commercial Workspaces app) can reuse the exact same experience, while Plannota","directories":{},"_nodeVersion":"24.15.0","dependencies":{"clsx":"^2.1.1","diff":"^8.0.4","katex":"^0.16.47","marked":"^17.0.6","motion":"^12.38.0","mermaid":"^11.12.2","dompurify":"^3.3.3","@viz-js/viz":"^3.25.0","highlight.js":"^11.11.1","lucide-react":"^1.14.0","@lezer/common":"^1.5.2","@pierre/diffs":"1.2.8","@base-ui/react":"^1.6.0","tailwind-merge":"^3.6.0","@codemirror/view":"^6.43.0","@lezer/highlight":"^1.2.3","perfect-freehand":"^1.2.2","@codemirror/state":"^6.6.0","@plannotator/core":"0.22.0","@codemirror/search":"^6.7.0","@codemirror/commands":"^6.10.3","@codemirror/language":"^6.12.3","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@tanstack/react-table":"^8.21.3","@codemirror/lang-python":"^6.2.1","@codemirror/autocomplete":"^6.20.3","@codemirror/legacy-modes":"^6.5.3","class-variance-authority":"^0.7.1","@codemirror/lang-markdown":"^6.5.0","unique-username-generator":"^1.5.1","@fontsource-variable/inter":"^5.2.8","@plannotator/atomic-editor":"^0.5.0","@codemirror/lang-javascript":"^6.2.5","@plannotator/markdown-editor":"^0.2.0","@plannotator/web-highlighter":"^0.8.1","@fontsource-variable/geist-mono":"5.2.7"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.2.0","react":"^19.2.3","react-dom":"^19.2.3","@types/bun":"^1.2.0","typescript":"~5.8.2","tailwindcss":"^4.1.18","@types/react":"^19.2.0","@types/react-dom":"^19.2.0","@tailwindcss/vite":"^4.1.18","@happy-dom/global-registrator":"^20.10.1"},"peerDependencies":{"react":"^19.2.3","react-dom":"^19.2.3","tailwindcss":"^4.1.18"},"_npmOperationalInternal":{"tmp":"tmp/ui_0.23.0_1783455773202_0.3214624181249004","host":"s3://npm-registry-packages-npm-production"}},"0.24.0":{"name":"@plannotator/ui","version":"0.24.0","_id":"@plannotator/ui@0.24.0","maintainers":[{"name":"backnotprop","email":"backnotprop@gmail.com"}],"dist":{"shasum":"ccba1549496f624866abebc6958fbe712faf770f","tarball":"https://registry.npmjs.org/@plannotator/ui/-/ui-0.24.0.tgz","fileCount":305,"integrity":"sha512-XGgRZsE62Q7ZI2eqcr8xGhOPA9Ubigznzrdntp1ugoDUBhJgjzZ2aweBNA2g+y2TZheB+v5x71+ewRc/VRqlFA==","signatures":[{"sig":"MEQCIFU6U9pbHlqK5j2EWGKQVEQTmcV7oQLqGkSlzxpt4vutAiBotVTpz44twGX6oaEkGPBiH/KYD08ZdgnrgNMe/3+WSA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3850376},"type":"module","_from":"file:plannotator-ui-0.24.0.tgz","exports":{"./lib/*":"./lib/*.ts","./theme":"./theme.css","./types":"./types.ts","./config":"./config/index.ts","./hooks/*":"./hooks/*.ts","./utils/*":"./utils/*.ts","./configure":"./configure.ts","./shortcuts":"./shortcuts/index.ts","./styles.css":"./styles.css","./components/*":"./components/*.tsx","./components/ai/*":"./components/ai/*.tsx","./components/ui/*":"./components/ui/*.tsx","./components/core/*":"./components/core/*.tsx","./components/sidebar/*":"./components/sidebar/*.tsx","./components/html-viewer":"./components/html-viewer/index.ts","./components/plan-diff/*":"./components/plan-diff/*.tsx","./components/goal-setup/*":"./components/goal-setup/*.tsx","./components/ImageAnnotator":"./components/ImageAnnotator/index.tsx"},"scripts":{"prepack":"bun run build:css","build:css":"vite build --config vite.css.config.ts && rm -f styles.js","typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"backnotprop","email":"backnotprop@gmail.com"},"_resolved":"/Users/ramos/plannotator/plannotator/packages/ui/plannotator-ui-0.24.0.tgz","_integrity":"sha512-XGgRZsE62Q7ZI2eqcr8xGhOPA9Ubigznzrdntp1ugoDUBhJgjzZ2aweBNA2g+y2TZheB+v5x71+ewRc/VRqlFA==","_npmVersion":"11.12.1","description":"Plannotator's document UI — markdown rendering, themes, the annotation editor, settings, comments, and layout — as installable building blocks. Published so a separate app (the commercial Workspaces app) can reuse the exact same experience, while Plannota","directories":{},"_nodeVersion":"24.15.0","dependencies":{"clsx":"^2.1.1","diff":"^8.0.4","katex":"^0.16.47","marked":"^17.0.6","motion":"^12.38.0","mermaid":"^11.12.2","dompurify":"^3.3.3","@viz-js/viz":"^3.25.0","highlight.js":"^11.11.1","lucide-react":"^1.14.0","@lezer/common":"^1.5.2","@pierre/diffs":"1.2.8","@base-ui/react":"^1.6.0","tailwind-merge":"^3.6.0","@codemirror/view":"^6.43.0","@lezer/highlight":"^1.2.3","perfect-freehand":"^1.2.2","@codemirror/state":"^6.6.0","@plannotator/core":"0.22.0","@codemirror/search":"^6.7.0","@codemirror/commands":"^6.10.3","@codemirror/language":"^6.12.3","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@tanstack/react-table":"^8.21.3","@codemirror/lang-python":"^6.2.1","@codemirror/autocomplete":"^6.20.3","@codemirror/legacy-modes":"^6.5.3","class-variance-authority":"^0.7.1","@codemirror/lang-markdown":"^6.5.0","unique-username-generator":"^1.5.1","@fontsource-variable/inter":"^5.2.8","@plannotator/atomic-editor":"^0.5.0","@codemirror/lang-javascript":"^6.2.5","@plannotator/markdown-editor":"^0.2.0","@plannotator/web-highlighter":"^0.8.1","@fontsource-variable/geist-mono":"5.2.7"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.2.0","react":"^19.2.3","react-dom":"^19.2.3","@types/bun":"^1.2.0","typescript":"~5.8.2","tailwindcss":"^4.1.18","@types/react":"^19.2.0","@types/react-dom":"^19.2.0","@tailwindcss/vite":"^4.1.18","@happy-dom/global-registrator":"^20.10.1"},"peerDependencies":{"react":"^19.2.3","react-dom":"^19.2.3","tailwindcss":"^4.1.18"},"_npmOperationalInternal":{"tmp":"tmp/ui_0.24.0_1783477430352_0.5944263182362284","host":"s3://npm-registry-packages-npm-production"}},"0.25.0":{"name":"@plannotator/ui","version":"0.25.0","_id":"@plannotator/ui@0.25.0","maintainers":[{"name":"backnotprop","email":"backnotprop@gmail.com"}],"dist":{"shasum":"dfc33544862d96d3e9e77fbfc0bd019b15e6491f","tarball":"https://registry.npmjs.org/@plannotator/ui/-/ui-0.25.0.tgz","fileCount":306,"integrity":"sha512-WCs1geZ221Ge4NndVXcB4VrR+HNOWuJS5EOLAMMPad8jfDiKe8rrmvsn1wpBevSHqmkGBwUjjkWhgA7V9GOItA==","signatures":[{"sig":"MEYCIQDVa1oo37RFBltsvyP+d9g2bIBXPJfb6bYAFK/ZMbD3ggIhAPQJ+MWdlvgrQkXmkNVzlK451sMGdVBE4i2C7EE5h89u","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3854775},"type":"module","_from":"file:plannotator-ui-0.25.0.tgz","exports":{"./lib/*":"./lib/*.ts","./theme":"./theme.css","./types":"./types.ts","./config":"./config/index.ts","./hooks/*":"./hooks/*.ts","./utils/*":"./utils/*.ts","./configure":"./configure.ts","./shortcuts":"./shortcuts/index.ts","./styles.css":"./styles.css","./components/*":"./components/*.tsx","./components/ai/*":"./components/ai/*.tsx","./components/ui/*":"./components/ui/*.tsx","./components/core/*":"./components/core/*.tsx","./components/sidebar/*":"./components/sidebar/*.tsx","./components/html-viewer":"./components/html-viewer/index.ts","./components/plan-diff/*":"./components/plan-diff/*.tsx","./components/goal-setup/*":"./components/goal-setup/*.tsx","./components/ImageAnnotator":"./components/ImageAnnotator/index.tsx"},"scripts":{"prepack":"bun run build:css","build:css":"vite build --config vite.css.config.ts && rm -f styles.js","typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"backnotprop","email":"backnotprop@gmail.com"},"_resolved":"/Users/ramos/plannotator/plannotator/packages/ui/plannotator-ui-0.25.0.tgz","_integrity":"sha512-WCs1geZ221Ge4NndVXcB4VrR+HNOWuJS5EOLAMMPad8jfDiKe8rrmvsn1wpBevSHqmkGBwUjjkWhgA7V9GOItA==","_npmVersion":"11.12.1","description":"Plannotator's document UI — markdown rendering, themes, the annotation editor, settings, comments, and layout — as installable building blocks. Published so a separate app (the commercial Workspaces app) can reuse the exact same experience, while Plannota","directories":{},"_nodeVersion":"24.15.0","dependencies":{"clsx":"^2.1.1","diff":"^8.0.4","katex":"^0.16.47","marked":"^17.0.6","motion":"^12.38.0","mermaid":"^11.12.2","dompurify":"^3.3.3","@viz-js/viz":"^3.25.0","highlight.js":"^11.11.1","lucide-react":"^1.14.0","@lezer/common":"^1.5.2","@pierre/diffs":"1.2.8","@base-ui/react":"^1.6.0","tailwind-merge":"^3.6.0","@codemirror/view":"^6.43.0","@lezer/highlight":"^1.2.3","perfect-freehand":"^1.2.2","@codemirror/state":"^6.6.0","@plannotator/core":"0.22.0","@codemirror/search":"^6.7.0","@codemirror/commands":"^6.10.3","@codemirror/language":"^6.12.3","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@tanstack/react-table":"^8.21.3","@codemirror/lang-python":"^6.2.1","@codemirror/autocomplete":"^6.20.3","@codemirror/legacy-modes":"^6.5.3","class-variance-authority":"^0.7.1","@codemirror/lang-markdown":"^6.5.0","unique-username-generator":"^1.5.1","@fontsource-variable/inter":"^5.2.8","@plannotator/atomic-editor":"^0.5.0","@codemirror/lang-javascript":"^6.2.5","@plannotator/markdown-editor":"^0.2.0","@plannotator/web-highlighter":"^0.8.1","@fontsource-variable/geist-mono":"5.2.7"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.2.0","react":"^19.2.3","react-dom":"^19.2.3","@types/bun":"^1.2.0","typescript":"~5.8.2","tailwindcss":"^4.1.18","@types/react":"^19.2.0","@types/react-dom":"^19.2.0","@tailwindcss/vite":"^4.1.18","@happy-dom/global-registrator":"^20.10.1"},"peerDependencies":{"react":"^19.2.3","react-dom":"^19.2.3","tailwindcss":"^4.1.18"},"_npmOperationalInternal":{"tmp":"tmp/ui_0.25.0_1783541864028_0.3161261678176075","host":"s3://npm-registry-packages-npm-production"}},"0.26.0":{"name":"@plannotator/ui","version":"0.26.0","_id":"@plannotator/ui@0.26.0","maintainers":[{"name":"backnotprop","email":"backnotprop@gmail.com"}],"dist":{"shasum":"5e4b2b1f5649bdac06764920841863f5bb6f9587","tarball":"https://registry.npmjs.org/@plannotator/ui/-/ui-0.26.0.tgz","fileCount":306,"integrity":"sha512-3eO7X0fIGmdHwvHm1dT5HElq4x2kFilWswsCzwcCK3iGKw7Xgvx+L78guTQcS/SLpg9No3xA6AW/71lbtM0T7g==","signatures":[{"sig":"MEYCIQCau4OZTgVUso0C35mjwkS3PN9SiAPwBx4GhsKn8OVs3AIhAJCRs3/QYSR3u+hLjAeHCPtI2/4+Lf7S4xr1mqcF4bRS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3867547},"type":"module","_from":"file:plannotator-ui-0.26.0.tgz","exports":{"./lib/*":"./lib/*.ts","./theme":"./theme.css","./types":"./types.ts","./config":"./config/index.ts","./hooks/*":"./hooks/*.ts","./utils/*":"./utils/*.ts","./configure":"./configure.ts","./shortcuts":"./shortcuts/index.ts","./styles.css":"./styles.css","./components/*":"./components/*.tsx","./components/ai/*":"./components/ai/*.tsx","./components/ui/*":"./components/ui/*.tsx","./components/core/*":"./components/core/*.tsx","./components/sidebar/*":"./components/sidebar/*.tsx","./components/html-viewer":"./components/html-viewer/index.ts","./components/plan-diff/*":"./components/plan-diff/*.tsx","./components/goal-setup/*":"./components/goal-setup/*.tsx","./components/ImageAnnotator":"./components/ImageAnnotator/index.tsx"},"scripts":{"prepack":"bun run build:css","build:css":"vite build --config vite.css.config.ts && rm -f styles.js","typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"backnotprop","email":"backnotprop@gmail.com"},"_resolved":"/Users/ramos/plannotator/plannotator/packages/ui/plannotator-ui-0.26.0.tgz","_integrity":"sha512-3eO7X0fIGmdHwvHm1dT5HElq4x2kFilWswsCzwcCK3iGKw7Xgvx+L78guTQcS/SLpg9No3xA6AW/71lbtM0T7g==","_npmVersion":"11.12.1","description":"Plannotator's document UI — markdown rendering, themes, the annotation editor, settings, comments, and layout — as installable building blocks. Published so a separate app (the commercial Workspaces app) can reuse the exact same experience, while Plannota","directories":{},"_nodeVersion":"24.15.0","dependencies":{"clsx":"^2.1.1","diff":"^8.0.4","katex":"^0.16.47","marked":"^17.0.6","motion":"^12.38.0","mermaid":"^11.12.2","dompurify":"^3.3.3","@viz-js/viz":"^3.25.0","highlight.js":"^11.11.1","lucide-react":"^1.14.0","@lezer/common":"^1.5.2","@pierre/diffs":"1.2.8","@base-ui/react":"^1.6.0","tailwind-merge":"^3.6.0","@codemirror/view":"^6.43.0","@lezer/highlight":"^1.2.3","perfect-freehand":"^1.2.2","@codemirror/state":"^6.6.0","@plannotator/core":"0.22.0","@codemirror/search":"^6.7.0","@codemirror/commands":"^6.10.3","@codemirror/language":"^6.12.3","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@tanstack/react-table":"^8.21.3","@codemirror/lang-python":"^6.2.1","@codemirror/autocomplete":"^6.20.3","@codemirror/legacy-modes":"^6.5.3","class-variance-authority":"^0.7.1","@codemirror/lang-markdown":"^6.5.0","unique-username-generator":"^1.5.1","@fontsource-variable/inter":"^5.2.8","@plannotator/atomic-editor":"^0.5.0","@codemirror/lang-javascript":"^6.2.5","@plannotator/markdown-editor":"^0.2.0","@plannotator/web-highlighter":"^0.8.1","@fontsource-variable/geist-mono":"5.2.7"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.2.0","react":"^19.2.3","react-dom":"^19.2.3","@types/bun":"^1.2.0","typescript":"~5.8.2","tailwindcss":"^4.1.18","@types/react":"^19.2.0","@types/react-dom":"^19.2.0","@tailwindcss/vite":"^4.1.18","@happy-dom/global-registrator":"^20.10.1"},"peerDependencies":{"react":"^19.2.3","react-dom":"^19.2.3","tailwindcss":"^4.1.18"},"_npmOperationalInternal":{"tmp":"tmp/ui_0.26.0_1783577376263_0.3700083031359336","host":"s3://npm-registry-packages-npm-production"}},"0.27.0":{"name":"@plannotator/ui","version":"0.27.0","_id":"@plannotator/ui@0.27.0","maintainers":[{"name":"backnotprop","email":"backnotprop@gmail.com"}],"dist":{"shasum":"675cf7f7f5eed74f6fece3dfb9e3f647695fbbf3","tarball":"https://registry.npmjs.org/@plannotator/ui/-/ui-0.27.0.tgz","fileCount":306,"integrity":"sha512-7yba8NG/+YhVbQzT6w5hlh/pxl4HBGKQZy+LTlvCKXnZaKQ7Uz8W/9xM76yNxwg+wa16WuQ0YCctO8A0k76ipw==","signatures":[{"sig":"MEYCIQCCeF91yunahLWI8FjenyGXCbKbRg5ulvuHD04Pv+Gy+AIhANAxz+V2gwcc2ejHtML00vCCggiImQC4NwfmEz0+Kkrm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3874378},"type":"module","_from":"file:plannotator-ui-0.27.0.tgz","exports":{"./lib/*":"./lib/*.ts","./theme":"./theme.css","./types":"./types.ts","./config":"./config/index.ts","./hooks/*":"./hooks/*.ts","./utils/*":"./utils/*.ts","./configure":"./configure.ts","./shortcuts":"./shortcuts/index.ts","./styles.css":"./styles.css","./components/*":"./components/*.tsx","./components/ai/*":"./components/ai/*.tsx","./components/ui/*":"./components/ui/*.tsx","./components/core/*":"./components/core/*.tsx","./components/sidebar/*":"./components/sidebar/*.tsx","./components/html-viewer":"./components/html-viewer/index.ts","./components/plan-diff/*":"./components/plan-diff/*.tsx","./components/goal-setup/*":"./components/goal-setup/*.tsx","./components/ImageAnnotator":"./components/ImageAnnotator/index.tsx"},"scripts":{"prepack":"bun run build:css","build:css":"vite build --config vite.css.config.ts && rm -f styles.js","typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"backnotprop","email":"backnotprop@gmail.com"},"_resolved":"/Users/ramos/plannotator/plannotator/packages/ui/plannotator-ui-0.27.0.tgz","_integrity":"sha512-7yba8NG/+YhVbQzT6w5hlh/pxl4HBGKQZy+LTlvCKXnZaKQ7Uz8W/9xM76yNxwg+wa16WuQ0YCctO8A0k76ipw==","_npmVersion":"11.12.1","description":"Plannotator's document UI — markdown rendering, themes, the annotation editor, settings, comments, and layout — as installable building blocks. Published so a separate app (the commercial Workspaces app) can reuse the exact same experience, while Plannota","directories":{},"_nodeVersion":"24.15.0","dependencies":{"clsx":"^2.1.1","diff":"^8.0.4","katex":"^0.16.47","marked":"^17.0.6","motion":"^12.38.0","mermaid":"^11.12.2","dompurify":"^3.3.3","@viz-js/viz":"^3.25.0","highlight.js":"^11.11.1","lucide-react":"^1.14.0","@lezer/common":"^1.5.2","@pierre/diffs":"1.2.8","@base-ui/react":"^1.6.0","tailwind-merge":"^3.6.0","@codemirror/view":"^6.43.0","@lezer/highlight":"^1.2.3","perfect-freehand":"^1.2.2","@codemirror/state":"^6.6.0","@plannotator/core":"0.22.0","@codemirror/search":"^6.7.0","@codemirror/commands":"^6.10.3","@codemirror/language":"^6.12.3","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@tanstack/react-table":"^8.21.3","@codemirror/lang-python":"^6.2.1","@codemirror/autocomplete":"^6.20.3","@codemirror/legacy-modes":"^6.5.3","class-variance-authority":"^0.7.1","@codemirror/lang-markdown":"^6.5.0","unique-username-generator":"^1.5.1","@fontsource-variable/inter":"^5.2.8","@plannotator/atomic-editor":"^0.7.0","@codemirror/lang-javascript":"^6.2.5","@plannotator/markdown-editor":"^0.3.2","@plannotator/web-highlighter":"^0.8.1","@fontsource-variable/geist-mono":"5.2.7"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.2.0","react":"^19.2.3","react-dom":"^19.2.3","@types/bun":"^1.2.0","typescript":"~5.8.2","tailwindcss":"^4.1.18","@types/react":"^19.2.0","@types/react-dom":"^19.2.0","@tailwindcss/vite":"^4.1.18","@happy-dom/global-registrator":"^20.10.1"},"peerDependencies":{"react":"^19.2.3","react-dom":"^19.2.3","tailwindcss":"^4.1.18"},"_npmOperationalInternal":{"tmp":"tmp/ui_0.27.0_1783640821547_0.2321558014219549","host":"s3://npm-registry-packages-npm-production"}},"0.28.0":{"name":"@plannotator/ui","version":"0.28.0","_id":"@plannotator/ui@0.28.0","maintainers":[{"name":"backnotprop","email":"backnotprop@gmail.com"}],"dist":{"shasum":"839438fe45f4ed6da6a9689a77c54fa32e1b6208","tarball":"https://registry.npmjs.org/@plannotator/ui/-/ui-0.28.0.tgz","fileCount":307,"integrity":"sha512-PhuO+ueKjrGJtw/EybegFsDDXP9mgf4Qb//KvRjjztNySmeTSd8GTb/cQSdgf8KXlpHaNuKV021woCAMU4Ctqg==","signatures":[{"sig":"MEYCIQD1lcuapHJGJOA0cXFwIunD/YXA0uS2nK5ukM0qefzPBwIhAPreYGBPeLmXXcu17Ka7qcUwsOjf5FskPvNLEWqKUQR4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3879066},"type":"module","_from":"file:plannotator-ui-0.28.0.tgz","exports":{"./lib/*":"./lib/*.ts","./theme":"./theme.css","./types":"./types.ts","./config":"./config/index.ts","./hooks/*":"./hooks/*.ts","./utils/*":"./utils/*.ts","./configure":"./configure.ts","./shortcuts":"./shortcuts/index.ts","./styles.css":"./styles.css","./components/*":"./components/*.tsx","./components/ai/*":"./components/ai/*.tsx","./components/ui/*":"./components/ui/*.tsx","./components/core/*":"./components/core/*.tsx","./components/sidebar/*":"./components/sidebar/*.tsx","./components/html-viewer":"./components/html-viewer/index.ts","./components/plan-diff/*":"./components/plan-diff/*.tsx","./components/goal-setup/*":"./components/goal-setup/*.tsx","./components/ImageAnnotator":"./components/ImageAnnotator/index.tsx"},"scripts":{"prepack":"bun run build:css","build:css":"vite build --config vite.css.config.ts && rm -f styles.js","typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"backnotprop","email":"backnotprop@gmail.com"},"_resolved":"/Users/ramos/plannotator/plannotator/packages/ui/plannotator-ui-0.28.0.tgz","_integrity":"sha512-PhuO+ueKjrGJtw/EybegFsDDXP9mgf4Qb//KvRjjztNySmeTSd8GTb/cQSdgf8KXlpHaNuKV021woCAMU4Ctqg==","_npmVersion":"11.12.1","description":"Plannotator's document UI — markdown rendering, themes, the annotation editor, settings, comments, and layout — as installable building blocks. Published so a separate app (the commercial Workspaces app) can reuse the exact same experience, while Plannota","directories":{},"_nodeVersion":"24.15.0","dependencies":{"clsx":"^2.1.1","diff":"^8.0.4","katex":"^0.16.47","marked":"^17.0.6","motion":"^12.38.0","mermaid":"^11.12.2","dompurify":"^3.3.3","@viz-js/viz":"^3.25.0","highlight.js":"^11.11.1","lucide-react":"^1.14.0","@lezer/common":"^1.5.2","@pierre/diffs":"1.2.8","@base-ui/react":"^1.6.0","tailwind-merge":"^3.6.0","@codemirror/view":"^6.43.0","@lezer/highlight":"^1.2.3","perfect-freehand":"^1.2.2","@codemirror/merge":"^6.12.2","@codemirror/state":"^6.6.0","@plannotator/core":"0.22.0","@codemirror/search":"^6.7.0","@codemirror/commands":"^6.10.3","@codemirror/language":"^6.12.3","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@tanstack/react-table":"^8.21.3","@codemirror/lang-python":"^6.2.1","@codemirror/autocomplete":"^6.20.3","@codemirror/legacy-modes":"^6.5.3","class-variance-authority":"^0.7.1","@codemirror/lang-markdown":"^6.5.0","unique-username-generator":"^1.5.1","@fontsource-variable/inter":"^5.2.8","@plannotator/atomic-editor":"^0.8.0","@codemirror/lang-javascript":"^6.2.5","@plannotator/markdown-editor":"^0.4.0","@plannotator/web-highlighter":"^0.8.1","@fontsource-variable/geist-mono":"5.2.7"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.2.0","react":"^19.2.3","react-dom":"^19.2.3","@types/bun":"^1.2.0","typescript":"~5.8.2","tailwindcss":"^4.1.18","@types/react":"^19.2.0","@types/react-dom":"^19.2.0","@tailwindcss/vite":"^4.1.18","@happy-dom/global-registrator":"^20.10.1"},"peerDependencies":{"react":"^19.2.3","react-dom":"^19.2.3","tailwindcss":"^4.1.18"},"_npmOperationalInternal":{"tmp":"tmp/ui_0.28.0_1783665560835_0.1638354993050788","host":"s3://npm-registry-packages-npm-production"}},"0.29.0":{"name":"@plannotator/ui","version":"0.29.0","_id":"@plannotator/ui@0.29.0","maintainers":[{"name":"backnotprop","email":"backnotprop@gmail.com"}],"dist":{"shasum":"19688ea23868331b309d32984d66231a6e5492d3","tarball":"https://registry.npmjs.org/@plannotator/ui/-/ui-0.29.0.tgz","fileCount":337,"integrity":"sha512-K5J5tiOtQbjZDX20IWkjnsiM/p1+zw2frhHa3V1pHsO/5UHzcs8ZvunD5R7l14vcpk+WTYZSrFtyGUoifThmxA==","signatures":[{"sig":"MEUCIQC1E4Bm1+MvfOy+JTlbqwNEk6m8lAISJkgkT359bLnc6AIgd5bwppa18dinkHbELU+xkUz1aG/b5Sjsgsx35VJeaYA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4447998},"type":"module","_from":"file:plannotator-ui-0.29.0.tgz","exports":{"./lib/*":"./lib/*.ts","./theme":"./theme.css","./types":"./types.ts","./config":"./config/index.ts","./hooks/*":"./hooks/*.ts","./utils/*":"./utils/*.ts","./configure":"./configure.ts","./shortcuts":"./shortcuts/index.ts","./styles.css":"./styles.css","./theme-modes":"./components/themeModes.tsx","./components/*":"./components/*.tsx","./components/ai/*":"./components/ai/*.tsx","./components/ui/*":"./components/ui/*.tsx","./components/core/*":"./components/core/*.tsx","./components/sidebar/*":"./components/sidebar/*.tsx","./components/html-viewer":"./components/html-viewer/index.ts","./components/plan-diff/*":"./components/plan-diff/*.tsx","./components/goal-setup/*":"./components/goal-setup/*.tsx","./components/ImageAnnotator":"./components/ImageAnnotator/index.tsx"},"scripts":{"prepack":"bun run build:css","build:css":"vite build --config vite.css.config.ts && rm -f styles.js","typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"backnotprop","email":"backnotprop@gmail.com"},"_resolved":"/Users/ramos/plannotator/plannotator/packages/ui/plannotator-ui-0.29.0.tgz","_integrity":"sha512-K5J5tiOtQbjZDX20IWkjnsiM/p1+zw2frhHa3V1pHsO/5UHzcs8ZvunD5R7l14vcpk+WTYZSrFtyGUoifThmxA==","_npmVersion":"11.12.1","description":"Plannotator's document UI — markdown rendering, themes, the annotation editor, settings, comments, and layout — as installable building blocks. Published so a separate app (the commercial Workspaces app) can reuse the exact same experience, while Plannota","directories":{},"_nodeVersion":"24.15.0","dependencies":{"clsx":"^2.1.1","diff":"^8.0.4","katex":"^0.16.47","marked":"^17.0.6","motion":"^12.38.0","mermaid":"^11.12.2","dompurify":"^3.3.3","@viz-js/viz":"^3.25.0","lucide-react":"^1.14.0","@lezer/common":"^1.5.2","@pierre/diffs":"1.3.2","@base-ui/react":"^1.6.0","tailwind-merge":"^3.6.0","@codemirror/view":"^6.43.0","@lezer/highlight":"^1.2.3","perfect-freehand":"^1.2.2","@codemirror/merge":"^6.12.2","@codemirror/state":"^6.6.0","@plannotator/core":"0.23.0","@codemirror/search":"^6.7.0","@codemirror/commands":"^6.10.3","@codemirror/language":"^6.12.3","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@tanstack/react-table":"^8.21.3","@codemirror/lang-python":"^6.2.1","@codemirror/autocomplete":"^6.20.3","@codemirror/legacy-modes":"^6.5.3","class-variance-authority":"^0.7.1","@codemirror/lang-markdown":"^6.5.0","unique-username-generator":"^1.5.1","@fontsource-variable/inter":"^5.2.8","@plannotator/atomic-editor":"^0.8.0","@codemirror/lang-javascript":"^6.2.5","@plannotator/markdown-editor":"^0.4.0","@plannotator/web-highlighter":"^0.8.1","@fontsource-variable/geist-mono":"5.2.7"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vite":"^6.2.0","react":"^19.2.3","react-dom":"^19.2.3","@types/bun":"^1.2.0","typescript":"~5.8.2","tailwindcss":"^4.1.18","@types/react":"^19.2.0","@types/react-dom":"^19.2.0","@tailwindcss/vite":"^4.1.18","@happy-dom/global-registrator":"^20.10.1"},"peerDependencies":{"react":"^19.2.3","react-dom":"^19.2.3","tailwindcss":"^4.1.18"},"_npmOperationalInternal":{"tmp":"tmp/ui_0.29.0_1786418802935_0.25697503060530535","host":"s3://npm-registry-packages-npm-production"}},"0.29.1":{"name":"@plannotator/ui","version":"0.29.1","_id":"@plannotator/ui@0.29.1","maintainers":[{"name":"backnotprop","email":"backnotprop@gmail.com"}],"dist":{"shasum":"6304a10da4527743585cfef4119e9a15ab462bc4","tarball":"https://registry.npmjs.org/@plannotator/ui/-/ui-0.29.1.tgz","fileCount":337,"integrity":"sha512-Ow8zJYaS4wL8pGLkRs2w3MOsbw24HCQ4mjidn1+rnK1KXRm3tW8RUTD7N5sjbwS4+b25nPqNXNqfA5TATUf4rw==","signatures":[{"sig":"MEQCIEarL/R8oRAWBHKuP3atLRR7iYCfDJnrLuqcQlHwr2l0AiAZSyS4CUtVinhXeLuMzJ2A4g+GMkLs1qlcTaNsErk5vg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4448008},"type":"module","_from":"file:plannotator-ui-0.29.1.tgz","exports":{"./lib/*":"./lib/*.ts","./theme":"./theme.css","./types":"./types.ts","./config":"./config/index.ts","./hooks/*":"./hooks/*.ts","./utils/*":"./utils/*.ts","./configure":"./configure.ts","./shortcuts":"./shortcuts/index.ts","./styles.css":"./styles.css","./theme-modes":"./components/themeModes.tsx","./components/*":"./components/*.tsx","./components/ai/*":"./components/ai/*.tsx","./components/ui/*":"./components/ui/*.tsx","./components/core/*":"./components/core/*.tsx","./components/sidebar/*":"./components/sidebar/*.tsx","./components/html-viewer":"./components/html-viewer/index.ts","./components/plan-diff/*":"./components/plan-diff/*.tsx","./components/goal-setup/*":"./components/goal-setup/*.tsx","./components/ImageAnnotator":"./components/ImageAnnotator/index.tsx"},"scripts":{"prepack":"bun run build:css","build:css":"vite build --config vite.css.config.ts && rm -f styles.js","typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"backnotprop","email":"backnotprop@gmail.com"},"_resolved":"/Users/ramos/plannotator/plannotator/packages/ui/plannotator-ui-0.29.1.tgz","_integrity":"sha512-Ow8zJYaS4wL8pGLkRs2w3MOsbw24HCQ4mjidn1+rnK1KXRm3tW8RUTD7N5sjbwS4+b25nPqNXNqfA5TATUf4rw==","_npmVersion":"11.12.1","description":"Plannotator's document UI — markdown rendering, themes, the annotation editor, settings, comments, and layout — as installable building blocks. Published so a separate app (the commercial Workspaces app) can reuse the exact same experience, while Plannota","directories":{},"_nodeVersion":"24.15.0","dependencies":{"clsx":"^2.1.1","diff":"^8.0.4","katex":"^0.16.47","marked":"^17.0.6","motion":"^12.38.0","mermaid":"^11.12.2","dompurify":"^3.3.3","@viz-js/viz":"^3.25.0","lucide-react":"^1.14.0","@lezer/common":"^1.5.2","@pierre/diffs":"1.3.2","@base-ui/react":"^1.6.0","tailwind-merge":"^3.6.0","@codemirror/view":"^6.43.0","@lezer/highlight":"^1.2.3","perfect-freehand":"^1.2.2","@codemirror/merge":"^6.12.2","@codemirror/state":"^6.6.0","@plannotator/core":"0.23.0","@codemirror/search":"^6.7.0","@codemirror/commands":"^6.10.3","@codemirror/language":"^6.12.3","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@tanstack/react-table":"^8.21.3","@codemirror/lang-python":"^6.2.1","@codemirror/autocomplete":"^6.20.3","@codemirror/legacy-modes":"^6.5.3","class-variance-authority":"^0.7.1","@codemirror/lang-markdown":"^6.5.0","unique-username-generator":"^1.5.1","@fontsource-variable/inter":"^5.2.8","@plannotator/atomic-editor":"^0.8.0","@codemirror/lang-javascript":"^6.2.5","@plannotator/markdown-editor":"^0.4.0","@plannotator/web-highlighter":"^0.8.1","@fontsource-variable/geist-mono":"5.2.7"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.2.0","react":"^19.2.3","react-dom":"^19.2.3","@types/bun":"^1.2.0","typescript":"~5.8.2","tailwindcss":"^4.1.18","@types/react":"^19.2.0","@types/react-dom":"^19.2.0","@tailwindcss/vite":"^4.1.18","@happy-dom/global-registrator":"^20.10.1"},"peerDependencies":{"react":"^19.2.3","react-dom":"^19.2.3","tailwindcss":"^4.1.18"},"_npmOperationalInternal":{"tmp":"tmp/ui_0.29.1_1786425236763_0.6949117128582729","host":"s3://npm-registry-packages-npm-production"}},"0.30.0":{"name":"@plannotator/ui","version":"0.30.0","_id":"@plannotator/ui@0.30.0","maintainers":[{"name":"backnotprop","email":"backnotprop@gmail.com"}],"dist":{"shasum":"93eab255849f6231b3165cf11c169685c08d1c6c","tarball":"https://registry.npmjs.org/@plannotator/ui/-/ui-0.30.0.tgz","fileCount":337,"integrity":"sha512-edo6h/Nf2vym2EBDFBeA5Zyv0kabFcOOc9WpRh3fgJSyPcPF2PZ1IxL7Muf5BKNBwFm043YAJBGRgOd2tYy78g==","signatures":[{"sig":"MEUCIH40nTyXPnDVC/IPiozdZ0qrBmJ/pWVl7Gn1svDpfAzoAiEAqHY0PHJNvQYZdviyBRGUxs3VJwg1HWjMcLBqUkk52T4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4452859},"type":"module","_from":"file:plannotator-ui-0.30.0.tgz","exports":{"./lib/*":"./lib/*.ts","./theme":"./theme.css","./types":"./types.ts","./config":"./config/index.ts","./hooks/*":"./hooks/*.ts","./utils/*":"./utils/*.ts","./configure":"./configure.ts","./shortcuts":"./shortcuts/index.ts","./styles.css":"./styles.css","./theme-modes":"./components/themeModes.tsx","./components/*":"./components/*.tsx","./components/ai/*":"./components/ai/*.tsx","./components/ui/*":"./components/ui/*.tsx","./components/core/*":"./components/core/*.tsx","./components/sidebar/*":"./components/sidebar/*.tsx","./components/html-viewer":"./components/html-viewer/index.ts","./components/plan-diff/*":"./components/plan-diff/*.tsx","./components/goal-setup/*":"./components/goal-setup/*.tsx","./components/ImageAnnotator":"./components/ImageAnnotator/index.tsx"},"scripts":{"prepack":"bun run build:css","build:css":"vite build --config vite.css.config.ts && rm -f styles.js","typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"backnotprop","email":"backnotprop@gmail.com"},"_resolved":"/Users/ramos/plannotator/plannotator/packages/ui/plannotator-ui-0.30.0.tgz","_integrity":"sha512-edo6h/Nf2vym2EBDFBeA5Zyv0kabFcOOc9WpRh3fgJSyPcPF2PZ1IxL7Muf5BKNBwFm043YAJBGRgOd2tYy78g==","_npmVersion":"11.12.1","description":"Plannotator's document UI — markdown rendering, themes, the annotation editor, settings, comments, and layout — as installable building blocks. Published so a separate app (the commercial Workspaces app) can reuse the exact same experience, while Plannota","directories":{},"_nodeVersion":"24.15.0","dependencies":{"clsx":"^2.1.1","diff":"^8.0.4","katex":"^0.16.47","marked":"^17.0.6","motion":"^12.38.0","mermaid":"^11.12.2","dompurify":"^3.3.3","@viz-js/viz":"^3.25.0","lucide-react":"^1.14.0","@lezer/common":"^1.5.2","@pierre/diffs":"1.3.2","@base-ui/react":"^1.6.0","tailwind-merge":"^3.6.0","@codemirror/view":"^6.43.0","@lezer/highlight":"^1.2.3","perfect-freehand":"^1.2.2","@codemirror/merge":"^6.12.2","@codemirror/state":"^6.6.0","@plannotator/core":"0.23.0","@codemirror/search":"^6.7.0","@codemirror/commands":"^6.10.3","@codemirror/language":"^6.12.3","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@tanstack/react-table":"^8.21.3","@codemirror/lang-python":"^6.2.1","@codemirror/autocomplete":"^6.20.3","@codemirror/legacy-modes":"^6.5.3","class-variance-authority":"^0.7.1","@codemirror/lang-markdown":"^6.5.0","unique-username-generator":"^1.5.1","@fontsource-variable/inter":"^5.2.8","@plannotator/atomic-editor":"^0.8.0","@codemirror/lang-javascript":"^6.2.5","@plannotator/markdown-editor":"^0.4.0","@plannotator/web-highlighter":"^0.8.1","@fontsource-variable/geist-mono":"5.2.7"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.2.0","react":"^19.2.3","react-dom":"^19.2.3","@types/bun":"^1.2.0","typescript":"~5.8.2","tailwindcss":"^4.1.18","@types/react":"^19.2.0","@types/react-dom":"^19.2.0","@tailwindcss/vite":"^4.1.18","@happy-dom/global-registrator":"^20.10.1"},"peerDependencies":{"react":"^19.2.3","react-dom":"^19.2.3","tailwindcss":"^4.1.18"},"_npmOperationalInternal":{"tmp":"tmp/ui_0.30.0_1786427284319_0.6636688285080445","host":"s3://npm-registry-packages-npm-production"}},"0.31.0":{"name":"@plannotator/ui","version":"0.31.0","_id":"@plannotator/ui@0.31.0","maintainers":[{"name":"backnotprop","email":"backnotprop@gmail.com"}],"dist":{"shasum":"e118fe833c96701241ee4e7c27753dc7cefd7e0f","tarball":"https://registry.npmjs.org/@plannotator/ui/-/ui-0.31.0.tgz","fileCount":341,"integrity":"sha512-04Zi4gOieNKPJx5AzQlacZCuKClinO0l/wudnmK5jVjkQjQIcWu2ay0Enrgyhv7hLnos1zG3dyuR+gp2T9mVWA==","signatures":[{"sig":"MEUCICAGIxzx5ZvQGnRzp+CEcB6TH/QYMbu8gGuBYpQzUUJ3AiEAhpKSKjpMg3QNA/yut5lwBw1EpcxKY0TZL4RFqdIqyqQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4546337},"type":"module","_from":"file:plannotator-ui-0.31.0.tgz","exports":{"./lib/*":"./lib/*.ts","./theme":"./theme.css","./types":"./types.ts","./config":"./config/index.ts","./hooks/*":"./hooks/*.ts","./utils/*":"./utils/*.ts","./configure":"./configure.ts","./shortcuts":"./shortcuts/index.ts","./styles.css":"./styles.css","./theme-modes":"./components/themeModes.tsx","./components/*":"./components/*.tsx","./components/ai/*":"./components/ai/*.tsx","./components/ui/*":"./components/ui/*.tsx","./components/core/*":"./components/core/*.tsx","./components/sidebar/*":"./components/sidebar/*.tsx","./components/html-viewer":"./components/html-viewer/index.ts","./components/plan-diff/*":"./components/plan-diff/*.tsx","./components/goal-setup/*":"./components/goal-setup/*.tsx","./components/ImageAnnotator":"./components/ImageAnnotator/index.tsx","./components/html-viewer/bridge-script":"./components/html-viewer/bridge-script.ts"},"scripts":{"prepack":"bun run build:css","build:css":"vite build --config vite.css.config.ts && rm -f styles.js","typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"backnotprop","email":"backnotprop@gmail.com"},"_resolved":"/Users/ramos/plannotator/plannotator/packages/ui/plannotator-ui-0.31.0.tgz","_integrity":"sha512-04Zi4gOieNKPJx5AzQlacZCuKClinO0l/wudnmK5jVjkQjQIcWu2ay0Enrgyhv7hLnos1zG3dyuR+gp2T9mVWA==","_npmVersion":"11.12.1","description":"Plannotator's document UI — markdown rendering, themes, the annotation editor, settings, comments, and layout — as installable building blocks. Published so a separate app (the commercial Workspaces app) can reuse the exact same experience, while Plannota","directories":{},"_nodeVersion":"24.15.0","dependencies":{"clsx":"^2.1.1","diff":"^8.0.4","katex":"^0.16.47","marked":"^17.0.6","motion":"^12.38.0","mermaid":"^11.12.2","dompurify":"^3.3.3","@viz-js/viz":"^3.25.0","lucide-react":"^1.14.0","@lezer/common":"^1.5.2","@pierre/diffs":"1.3.2","@base-ui/react":"^1.6.0","tailwind-merge":"^3.6.0","@codemirror/view":"^6.43.0","@lezer/highlight":"^1.2.3","perfect-freehand":"^1.2.2","@codemirror/merge":"^6.12.2","@codemirror/state":"^6.6.0","@plannotator/core":"0.24.0","@codemirror/search":"^6.7.0","@codemirror/commands":"^6.10.3","@codemirror/language":"^6.12.3","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@tanstack/react-table":"^8.21.3","@codemirror/lang-python":"^6.2.1","@codemirror/autocomplete":"^6.20.3","@codemirror/legacy-modes":"^6.5.3","class-variance-authority":"^0.7.1","@codemirror/lang-markdown":"^6.5.0","unique-username-generator":"^1.5.1","@fontsource-variable/inter":"^5.2.8","@plannotator/atomic-editor":"^0.8.0","@codemirror/lang-javascript":"^6.2.5","@plannotator/markdown-editor":"^0.4.0","@plannotator/web-highlighter":"^0.8.1","@fontsource-variable/geist-mono":"5.2.7"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.2.0","react":"^19.2.3","react-dom":"^19.2.3","@types/bun":"^1.2.0","typescript":"~5.8.2","tailwindcss":"^4.1.18","@types/react":"^19.2.0","@types/react-dom":"^19.2.0","@tailwindcss/vite":"^4.1.18","@happy-dom/global-registrator":"^20.10.1"},"peerDependencies":{"react":"^19.2.3","react-dom":"^19.2.3","tailwindcss":"^4.1.18"},"_npmOperationalInternal":{"tmp":"tmp/ui_0.31.0_1787507089722_0.7696619350176106","host":"s3://npm-registry-packages-npm-production"}},"0.32.0":{"name":"@plannotator/ui","version":"0.32.0","_id":"@plannotator/ui@0.32.0","maintainers":[{"name":"backnotprop","email":"backnotprop@gmail.com"}],"dist":{"shasum":"34631700e8126f2284a0a817a67f319105914362","tarball":"https://registry.npmjs.org/@plannotator/ui/-/ui-0.32.0.tgz","fileCount":361,"integrity":"sha512-L8YHGx73gW+rJBB+uAcK5fYLb/Dnuz1S3L+XsqsF/Vl8gYhCZXDb17/xqu2EBMlSfm9WVd3bKKyec5jX9cxmYQ==","signatures":[{"sig":"MEUCIQCa4z4dC1M1vT+lTc7fcDXa8nfZCxilAj2immaHfxFYVQIgHcdAQYrBC/CI49H/HWRrpOESW+tFQFOPbSG+ouGw84U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4665414},"type":"module","_from":"file:plannotator-ui-0.32.0.tgz","exports":{"./lib/*":"./lib/*.ts","./theme":"./theme.css","./types":"./types.ts","./config":"./config/index.ts","./webmcp":"./webmcp/index.ts","./hooks/*":"./hooks/*.ts","./utils/*":"./utils/*.ts","./configure":"./configure.ts","./shortcuts":"./shortcuts/index.ts","./styles.css":"./styles.css","./theme-modes":"./components/themeModes.tsx","./components/*":"./components/*.tsx","./components/ai/*":"./components/ai/*.tsx","./components/ui/*":"./components/ui/*.tsx","./components/core/*":"./components/core/*.tsx","./components/sidebar/*":"./components/sidebar/*.tsx","./components/html-viewer":"./components/html-viewer/index.ts","./components/plan-diff/*":"./components/plan-diff/*.tsx","./components/goal-setup/*":"./components/goal-setup/*.tsx","./components/ImageAnnotator":"./components/ImageAnnotator/index.tsx","./components/html-viewer/bridge-script":"./components/html-viewer/bridge-script.ts"},"scripts":{"prepack":"bun run build:css","build:css":"vite build --config vite.css.config.ts && rm -f styles.js","typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"backnotprop","email":"backnotprop@gmail.com"},"_resolved":"/private/tmp/claude-501/-Users-ramos-plannotator-plannotator/34d56d5a-33a8-4878-92b2-3f4318214ae2/scratchpad/release-0.32.0/final/plannotator-ui-0.32.0.tgz","_integrity":"sha512-L8YHGx73gW+rJBB+uAcK5fYLb/Dnuz1S3L+XsqsF/Vl8gYhCZXDb17/xqu2EBMlSfm9WVd3bKKyec5jX9cxmYQ==","_npmVersion":"11.12.1","description":"Plannotator's document UI — markdown rendering, themes, the annotation editor, settings, comments, and layout — as installable building blocks. Published so a separate app (the commercial Workspaces app) can reuse the exact same experience, while Plannota","directories":{},"_nodeVersion":"24.15.0","dependencies":{"clsx":"^2.1.1","diff":"^8.0.4","katex":"^0.16.47","marked":"^17.0.6","motion":"^12.38.0","mermaid":"^11.12.2","dompurify":"^3.3.3","@viz-js/viz":"^3.25.0","lucide-react":"^1.14.0","@lezer/common":"^1.5.2","@pierre/diffs":"1.3.2","@base-ui/react":"^1.6.0","tailwind-merge":"^3.6.0","@codemirror/view":"^6.43.0","@lezer/highlight":"^1.2.3","perfect-freehand":"^1.2.2","@codemirror/merge":"^6.12.2","@codemirror/state":"^6.6.0","@plannotator/core":"0.25.0","@codemirror/search":"^6.7.0","@codemirror/commands":"^6.10.3","@codemirror/language":"^6.12.3","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@tanstack/react-table":"^8.21.3","@codemirror/lang-python":"^6.2.1","@codemirror/autocomplete":"^6.20.3","@codemirror/legacy-modes":"^6.5.3","class-variance-authority":"^0.7.1","@codemirror/lang-markdown":"^6.5.0","unique-username-generator":"^1.5.1","@fontsource-variable/inter":"^5.2.8","@plannotator/atomic-editor":"^0.8.0","@codemirror/lang-javascript":"^6.2.5","@plannotator/markdown-editor":"^0.4.0","@plannotator/web-highlighter":"^0.8.1","@fontsource-variable/geist-mono":"5.2.7"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.2.0","react":"^19.2.3","react-dom":"^19.2.3","@types/bun":"^1.2.0","typescript":"~5.8.2","tailwindcss":"^4.1.18","@types/react":"^19.2.0","@types/react-dom":"^19.2.0","@tailwindcss/vite":"^4.1.18","@happy-dom/global-registrator":"^20.10.1"},"peerDependencies":{"react":"^19.2.3","react-dom":"^19.2.3","tailwindcss":"^4.1.18"},"_npmOperationalInternal":{"tmp":"tmp/ui_0.32.0_1787842981075_0.8083304713414725","host":"s3://npm-registry-packages-npm-production"}},"0.33.0":{"name":"@plannotator/ui","version":"0.33.0","_id":"@plannotator/ui@0.33.0","maintainers":[{"name":"backnotprop","email":"backnotprop@gmail.com"}],"dist":{"shasum":"f9bb4d551068c168d9d55ee9f22ed9f3b94cf29f","tarball":"https://registry.npmjs.org/@plannotator/ui/-/ui-0.33.0.tgz","fileCount":365,"integrity":"sha512-2mLMhUEMzF0hynls6b5PgP+4she27lQdd/aMbv38xwfTec6OBScrQLFuk0mfECzuxnxYJNcgzt3gZTjYkiteiA==","signatures":[{"sig":"MEUCIQD2FPHM6q8O+Xdp2Tr/4Mj8fylp9wFFHeYR1GcegOB8DwIgHy5FG71Ubi1bl6Ae4ssv+2jxkSH9aj89UFbBAhhE3D8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4977208},"type":"module","_from":"file:plannotator-ui-0.33.0.tgz","exports":{"./lib/*":"./lib/*.ts","./theme":"./theme.css","./types":"./types.ts","./config":"./config/index.ts","./webmcp":"./webmcp/index.ts","./hooks/*":"./hooks/*.ts","./utils/*":"./utils/*.ts","./configure":"./configure.ts","./shortcuts":"./shortcuts/index.ts","./styles.css":"./styles.css","./theme-modes":"./components/themeModes.tsx","./components/*":"./components/*.tsx","./components/ai/*":"./components/ai/*.tsx","./components/ui/*":"./components/ui/*.tsx","./components/core/*":"./components/core/*.tsx","./components/sidebar/*":"./components/sidebar/*.tsx","./components/html-viewer":"./components/html-viewer/index.ts","./components/plan-diff/*":"./components/plan-diff/*.tsx","./components/goal-setup/*":"./components/goal-setup/*.tsx","./components/ImageAnnotator":"./components/ImageAnnotator/index.tsx","./components/html-viewer/bridge-script":"./components/html-viewer/bridge-script.ts","./components/html-viewer/bridge-script.lite":"./components/html-viewer/bridge-script.lite.ts","./components/html-viewer/bridge-script.asset.js":"./components/html-viewer/bridge-script.asset.js"},"scripts":{"prepack":"bun run build:css && bun run build:bridge-assets","build:css":"vite build --config vite.css.config.ts && rm -f styles.js","typecheck":"tsc --noEmit -p tsconfig.json","build:bridge-assets":"bun run scripts/build-bridge-assets.ts"},"_npmUser":{"name":"backnotprop","email":"backnotprop@gmail.com"},"_resolved":"/private/tmp/claude-501/-Users-ramos-plannotator-plannotator/34d56d5a-33a8-4878-92b2-3f4318214ae2/scratchpad/release-0.33.0/final/plannotator-ui-0.33.0.tgz","_integrity":"sha512-2mLMhUEMzF0hynls6b5PgP+4she27lQdd/aMbv38xwfTec6OBScrQLFuk0mfECzuxnxYJNcgzt3gZTjYkiteiA==","_npmVersion":"11.12.1","description":"Plannotator's document UI — markdown rendering, themes, the annotation editor, settings, comments, and layout — as installable building blocks. Published so a separate app (the commercial Workspaces app) can reuse the exact same experience, while Plannota","directories":{},"_nodeVersion":"24.15.0","dependencies":{"clsx":"^2.1.1","diff":"^8.0.4","katex":"^0.16.47","marked":"^17.0.6","motion":"^12.38.0","mermaid":"^11.12.2","dompurify":"^3.3.3","@viz-js/viz":"^3.25.0","lucide-react":"^1.14.0","@lezer/common":"^1.5.2","@pierre/diffs":"1.3.2","@base-ui/react":"^1.6.0","tailwind-merge":"^3.6.0","@codemirror/view":"^6.43.0","@lezer/highlight":"^1.2.3","perfect-freehand":"^1.2.2","@codemirror/merge":"^6.12.2","@codemirror/state":"^6.6.0","@plannotator/core":"0.25.0","@codemirror/search":"^6.7.0","@codemirror/commands":"^6.10.3","@codemirror/language":"^6.12.3","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@tanstack/react-table":"^8.21.3","@codemirror/lang-python":"^6.2.1","@codemirror/autocomplete":"^6.20.3","@codemirror/legacy-modes":"^6.5.3","class-variance-authority":"^0.7.1","@codemirror/lang-markdown":"^6.5.0","unique-username-generator":"^1.5.1","@fontsource-variable/inter":"^5.2.8","@plannotator/atomic-editor":"^0.8.0","@codemirror/lang-javascript":"^6.2.5","@plannotator/markdown-editor":"^0.4.0","@plannotator/web-highlighter":"^0.8.1","@fontsource-variable/geist-mono":"5.2.7"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.2.0","react":"^19.2.3","react-dom":"^19.2.3","@types/bun":"^1.2.0","typescript":"~5.8.2","tailwindcss":"^4.1.18","@types/react":"^19.2.0","@types/react-dom":"^19.2.0","@tailwindcss/vite":"^4.1.18","@happy-dom/global-registrator":"^20.10.1"},"peerDependencies":{"react":"^19.2.3","react-dom":"^19.2.3","tailwindcss":"^4.1.18"},"_npmOperationalInternal":{"tmp":"tmp/ui_0.33.0_1787848634685_0.2697805807140039","host":"s3://npm-registry-packages-npm-production"}},"0.34.0":{"name":"@plannotator/ui","version":"0.34.0","_id":"@plannotator/ui@0.34.0","maintainers":[{"name":"backnotprop","email":"backnotprop@gmail.com"}],"dist":{"shasum":"331ced4c88deaefe04d9ced842dc44fda8cf25d1","tarball":"https://registry.npmjs.org/@plannotator/ui/-/ui-0.34.0.tgz","fileCount":366,"integrity":"sha512-23pwUMPFXKCyifON0AKjlF3t7nO8yBNJPNiWNArvx4FLazHEU9adpX2man1AgHplHSUD/Zh2/kX8bIVarg9ngw==","signatures":[{"sig":"MEQCIASlqai5mtk4GCpdyMfjXSFkp2XMaGtnE8Rt1v/vZA2TAiBL0lgfAJSaiuqQjw/UCyg8OdJQPoW6ek78DJDkLjnLyw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4992889},"type":"module","_from":"file:plannotator-ui-0.34.0.tgz","exports":{"./lib/*":"./lib/*.ts","./theme":"./theme.css","./types":"./types.ts","./config":"./config/index.ts","./webmcp":"./webmcp/index.ts","./hooks/*":"./hooks/*.ts","./utils/*":"./utils/*.ts","./configure":"./configure.ts","./shortcuts":"./shortcuts/index.ts","./styles.css":"./styles.css","./theme-modes":"./components/themeModes.tsx","./components/*":"./components/*.tsx","./components/ai/*":"./components/ai/*.tsx","./components/ui/*":"./components/ui/*.tsx","./components/core/*":"./components/core/*.tsx","./components/sidebar/*":"./components/sidebar/*.tsx","./components/html-viewer":"./components/html-viewer/index.ts","./components/plan-diff/*":"./components/plan-diff/*.tsx","./components/goal-setup/*":"./components/goal-setup/*.tsx","./components/ImageAnnotator":"./components/ImageAnnotator/index.tsx","./components/html-viewer/bridge-script":"./components/html-viewer/bridge-script.ts","./components/html-viewer/bridge-script.lite":"./components/html-viewer/bridge-script.lite.ts","./components/html-viewer/bridge-script.asset.js":"./components/html-viewer/bridge-script.asset.js"},"scripts":{"prepack":"bun run build:css && bun run build:bridge-assets","build:css":"vite build --config vite.css.config.ts && rm -f styles.js","typecheck":"tsc --noEmit -p tsconfig.json","build:bridge-assets":"bun run scripts/build-bridge-assets.ts"},"_npmUser":{"name":"backnotprop","email":"backnotprop@gmail.com"},"_resolved":"/private/tmp/claude-501/-Users-ramos-plannotator-plannotator/34d56d5a-33a8-4878-92b2-3f4318214ae2/scratchpad/release-0.34.0/final/plannotator-ui-0.34.0.tgz","_integrity":"sha512-23pwUMPFXKCyifON0AKjlF3t7nO8yBNJPNiWNArvx4FLazHEU9adpX2man1AgHplHSUD/Zh2/kX8bIVarg9ngw==","_npmVersion":"11.12.1","description":"Plannotator's document UI — markdown rendering, themes, the annotation editor, settings, comments, and layout — as installable building blocks. Published so a separate app (the commercial Workspaces app) can reuse the exact same experience, while Plannota","directories":{},"_nodeVersion":"24.15.0","dependencies":{"clsx":"^2.1.1","diff":"^8.0.4","katex":"^0.16.47","marked":"^17.0.6","motion":"^12.38.0","mermaid":"^11.12.2","dompurify":"^3.3.3","@viz-js/viz":"^3.25.0","lucide-react":"^1.14.0","@lezer/common":"^1.5.2","@pierre/diffs":"1.3.2","@base-ui/react":"^1.6.0","tailwind-merge":"^3.6.0","@codemirror/view":"^6.43.0","@lezer/highlight":"^1.2.3","perfect-freehand":"^1.2.2","@codemirror/merge":"^6.12.2","@codemirror/state":"^6.6.0","@plannotator/core":"0.25.0","@codemirror/search":"^6.7.0","@codemirror/commands":"^6.10.3","@codemirror/language":"^6.12.3","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@tanstack/react-table":"^8.21.3","@codemirror/lang-python":"^6.2.1","@codemirror/autocomplete":"^6.20.3","@codemirror/legacy-modes":"^6.5.3","class-variance-authority":"^0.7.1","@codemirror/lang-markdown":"^6.5.0","unique-username-generator":"^1.5.1","@fontsource-variable/inter":"^5.2.8","@plannotator/atomic-editor":"^0.8.0","@codemirror/lang-javascript":"^6.2.5","@plannotator/markdown-editor":"^0.4.0","@plannotator/web-highlighter":"^0.8.1","@fontsource-variable/geist-mono":"5.2.7"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.2.0","react":"^19.2.3","react-dom":"^19.2.3","@types/bun":"^1.2.0","typescript":"~5.8.2","tailwindcss":"^4.1.18","@types/react":"^19.2.0","@types/react-dom":"^19.2.0","@tailwindcss/vite":"^4.1.18","@happy-dom/global-registrator":"^20.10.1"},"peerDependencies":{"react":"^19.2.3","react-dom":"^19.2.3","tailwindcss":"^4.1.18"},"_npmOperationalInternal":{"tmp":"tmp/ui_0.34.0_1787857912092_0.04117996525108358","host":"s3://npm-registry-packages-npm-production"}},"0.35.0":{"name":"@plannotator/ui","version":"0.35.0","_id":"@plannotator/ui@0.35.0","maintainers":[{"name":"backnotprop","email":"backnotprop@gmail.com"}],"dist":{"shasum":"498976de5260138cd056721a73fb29e1b395402c","tarball":"https://registry.npmjs.org/@plannotator/ui/-/ui-0.35.0.tgz","fileCount":371,"integrity":"sha512-XrEOTxYVZcCees5+juR6OEhyqACSHm/A09qMqbOlM47uRaRVaLHrsbW9VqQmRXFMTI5IJMlB6GBXhU8D3Vjraw==","signatures":[{"sig":"MEUCIQDjA/fpdj1YJN6IRtfcp2fMBil+ZisVMjuBXk7yfghQuQIgdKLxZEAcA59nRTfiW+APVIMbPcC6adfC5eIKH1VLpRo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5020324},"type":"module","exports":{"./lib/*":"./lib/*.ts","./theme":"./theme.css","./types":"./types.ts","./config":"./config/index.ts","./webmcp":"./webmcp/index.ts","./hooks/*":"./hooks/*.ts","./utils/*":"./utils/*.ts","./configure":"./configure.ts","./shortcuts":"./shortcuts/index.ts","./styles.css":"./styles.css","./theme-modes":"./components/themeModes.tsx","./components/*":"./components/*.tsx","./components/ai/*":"./components/ai/*.tsx","./components/ui/*":"./components/ui/*.tsx","./components/core/*":"./components/core/*.tsx","./components/sidebar/*":"./components/sidebar/*.tsx","./components/html-viewer":"./components/html-viewer/index.ts","./components/plan-diff/*":"./components/plan-diff/*.tsx","./components/goal-setup/*":"./components/goal-setup/*.tsx","./components/ImageAnnotator":"./components/ImageAnnotator/index.tsx","./components/html-viewer/bridge-script":"./components/html-viewer/bridge-script.ts","./components/html-viewer/bridge-script.lite":"./components/html-viewer/bridge-script.lite.ts","./components/html-viewer/bridge-script.asset.js":"./components/html-viewer/bridge-script.asset.js"},"gitHead":"e025abf93a1c8a6774f11a4c8014d36baccf9ebb","scripts":{"prepack":"bun run build:css && bun run build:bridge-assets","build:css":"vite build --config vite.css.config.ts && rm -f styles.js","typecheck":"tsc --noEmit -p tsconfig.json","build:bridge-assets":"bun run scripts/build-bridge-assets.ts"},"_npmUser":{"name":"backnotprop","email":"backnotprop@gmail.com"},"deprecated":"Published with an unresolvable workspace:* dependency; use 0.35.1","_npmVersion":"11.12.1","description":"Plannotator's document UI — markdown rendering, themes, the annotation editor, settings, comments, and layout — as installable building blocks. Published so a separate app (the commercial Workspaces app) can reuse the exact same experience, while Plannota","directories":{},"_nodeVersion":"24.15.0","dependencies":{"clsx":"^2.1.1","diff":"^8.0.4","katex":"^0.16.47","marked":"^17.0.6","motion":"^12.38.0","mermaid":"^11.12.2","dompurify":"^3.3.3","@viz-js/viz":"^3.25.0","lucide-react":"^1.14.0","@lezer/common":"^1.5.2","@pierre/diffs":"1.3.2","@base-ui/react":"^1.6.0","tailwind-merge":"^3.6.0","@codemirror/view":"^6.43.0","@lezer/highlight":"^1.2.3","perfect-freehand":"^1.2.2","@codemirror/merge":"^6.12.2","@codemirror/state":"^6.6.0","@plannotator/core":"workspace:*","@codemirror/search":"^6.7.0","@codemirror/commands":"^6.10.3","@codemirror/language":"^6.12.3","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@tanstack/react-table":"^8.21.3","@codemirror/lang-python":"^6.2.1","@codemirror/autocomplete":"^6.20.3","@codemirror/legacy-modes":"^6.5.3","class-variance-authority":"^0.7.1","@codemirror/lang-markdown":"^6.5.0","unique-username-generator":"^1.5.1","@fontsource-variable/inter":"^5.2.8","@plannotator/atomic-editor":"^0.8.0","@codemirror/lang-javascript":"^6.2.5","@plannotator/markdown-editor":"^0.4.0","@plannotator/web-highlighter":"^0.8.1","@fontsource-variable/geist-mono":"5.2.7"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.2.0","react":"^19.2.3","react-dom":"^19.2.3","@types/bun":"^1.2.0","typescript":"~5.8.2","tailwindcss":"^4.1.18","@types/react":"^19.2.0","@types/react-dom":"^19.2.0","@tailwindcss/vite":"^4.1.18","@happy-dom/global-registrator":"^20.10.1"},"peerDependencies":{"react":"^19.2.3","react-dom":"^19.2.3","tailwindcss":"^4.1.18"},"_npmOperationalInternal":{"tmp":"tmp/ui_0.35.0_1788287000432_0.8741360096895581","host":"s3://npm-registry-packages-npm-production"}},"0.35.1":{"name":"@plannotator/ui","version":"0.35.1","_id":"@plannotator/ui@0.35.1","maintainers":[{"name":"backnotprop","email":"backnotprop@gmail.com"}],"dist":{"shasum":"6f96a1e0fe99a1827d5321eabf490a8ee8c28d51","tarball":"https://registry.npmjs.org/@plannotator/ui/-/ui-0.35.1.tgz","fileCount":371,"integrity":"sha512-5jl1yiJotg2iGDZutM3jIqSUPgzVjWdcyZc0p9fXMv/NDfhY8sV7H4f6B1ZnZDZj7Hm7lN4z7ufDKaqOHywYSw==","signatures":[{"sig":"MEQCIBugCjyXRRJpdPJ1CYP0RoIIA+zBvGhZnTzEDByKRMNcAiAgd/Dz9NaZO90PKzdxL3lNRqbkMLgVJOYETsy9cwd66g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5020206},"type":"module","_from":"file:plannotator-ui-0.35.1.tgz","exports":{"./lib/*":"./lib/*.ts","./theme":"./theme.css","./types":"./types.ts","./config":"./config/index.ts","./webmcp":"./webmcp/index.ts","./hooks/*":"./hooks/*.ts","./utils/*":"./utils/*.ts","./configure":"./configure.ts","./shortcuts":"./shortcuts/index.ts","./styles.css":"./styles.css","./theme-modes":"./components/themeModes.tsx","./components/*":"./components/*.tsx","./components/ai/*":"./components/ai/*.tsx","./components/ui/*":"./components/ui/*.tsx","./components/core/*":"./components/core/*.tsx","./components/sidebar/*":"./components/sidebar/*.tsx","./components/html-viewer":"./components/html-viewer/index.ts","./components/plan-diff/*":"./components/plan-diff/*.tsx","./components/goal-setup/*":"./components/goal-setup/*.tsx","./components/ImageAnnotator":"./components/ImageAnnotator/index.tsx","./components/html-viewer/bridge-script":"./components/html-viewer/bridge-script.ts","./components/html-viewer/bridge-script.lite":"./components/html-viewer/bridge-script.lite.ts","./components/html-viewer/bridge-script.asset.js":"./components/html-viewer/bridge-script.asset.js"},"scripts":{"prepack":"bun run build:css && bun run build:bridge-assets","build:css":"vite build --config vite.css.config.ts && rm -f styles.js","typecheck":"tsc --noEmit -p tsconfig.json","smoke:package":"bun run scripts/package-smoke.ts","build:bridge-assets":"bun run scripts/build-bridge-assets.ts"},"_npmUser":{"name":"backnotprop","email":"backnotprop@gmail.com"},"_resolved":"/Users/ramos/plannotator/plannotator/packages/ui/plannotator-ui-0.35.1.tgz","_integrity":"sha512-5jl1yiJotg2iGDZutM3jIqSUPgzVjWdcyZc0p9fXMv/NDfhY8sV7H4f6B1ZnZDZj7Hm7lN4z7ufDKaqOHywYSw==","_npmVersion":"11.12.1","description":"Plannotator's document UI — markdown rendering, themes, the annotation editor, settings, comments, and layout — as installable building blocks. Published so a separate app (the commercial Workspaces app) can reuse the exact same experience, while Plannota","directories":{},"_nodeVersion":"24.15.0","dependencies":{"clsx":"^2.1.1","diff":"^8.0.4","katex":"^0.16.47","marked":"^17.0.6","motion":"^12.38.0","mermaid":"^11.12.2","dompurify":"^3.3.3","@viz-js/viz":"^3.25.0","lucide-react":"^1.14.0","@lezer/common":"^1.5.2","@pierre/diffs":"1.3.2","@base-ui/react":"^1.6.0","tailwind-merge":"^3.6.0","@codemirror/view":"^6.43.0","@lezer/highlight":"^1.2.3","perfect-freehand":"^1.2.2","@codemirror/merge":"^6.12.2","@codemirror/state":"^6.6.0","@plannotator/core":"0.25.0","@codemirror/search":"^6.7.0","@codemirror/commands":"^6.10.3","@codemirror/language":"^6.12.3","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@tanstack/react-table":"^8.21.3","@codemirror/lang-python":"^6.2.1","@codemirror/autocomplete":"^6.20.3","@codemirror/legacy-modes":"^6.5.3","class-variance-authority":"^0.7.1","@codemirror/lang-markdown":"^6.5.0","unique-username-generator":"^1.5.1","@fontsource-variable/inter":"^5.2.8","@plannotator/atomic-editor":"^0.8.0","@codemirror/lang-javascript":"^6.2.5","@plannotator/markdown-editor":"^0.4.0","@plannotator/web-highlighter":"^0.8.1","@fontsource-variable/geist-mono":"5.2.7"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.2.0","react":"^19.2.3","react-dom":"^19.2.3","@types/bun":"^1.2.0","typescript":"~5.8.2","tailwindcss":"^4.1.18","@types/react":"^19.2.0","@types/react-dom":"^19.2.0","@tailwindcss/vite":"^4.1.18","@happy-dom/global-registrator":"^20.10.1"},"peerDependencies":{"react":"^19.2.3","react-dom":"^19.2.3","tailwindcss":"^4.1.18"},"_npmOperationalInternal":{"tmp":"tmp/ui_0.35.1_1788291521279_0.9980134544160946","host":"s3://npm-registry-packages-npm-production"}},"0.35.2":{"name":"@plannotator/ui","version":"0.35.2","_id":"@plannotator/ui@0.35.2","maintainers":[{"name":"backnotprop","email":"backnotprop@gmail.com"}],"dist":{"shasum":"ca0c299961a0f93862d287389475053a99b26800","tarball":"https://registry.npmjs.org/@plannotator/ui/-/ui-0.35.2.tgz","fileCount":371,"integrity":"sha512-vak+Bv2T7R4Vghd41UoiCxFPKxRtobKv9dKbl/Vdzsdl3SWbSKMaHy9Q8K+FZp8ZCt+NnMnr/NuKm8s8+jXwIg==","signatures":[{"sig":"MEQCIGtDzE/jHmp4FnzOQJOXvLIIV/itwq8MUt+lB9YI0V9FAiBE+rmIrVGnJLq25JlF7XaQr/U+w9+tQSlm0uEmwU7Ccg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5020190},"type":"module","_from":"file:plannotator-ui-0.35.2.tgz","exports":{"./lib/*":"./lib/*.ts","./theme":"./theme.css","./types":"./types.ts","./config":"./config/index.ts","./webmcp":"./webmcp/index.ts","./hooks/*":"./hooks/*.ts","./utils/*":"./utils/*.ts","./configure":"./configure.ts","./shortcuts":"./shortcuts/index.ts","./styles.css":"./styles.css","./theme-modes":"./components/themeModes.tsx","./components/*":"./components/*.tsx","./components/ai/*":"./components/ai/*.tsx","./components/ui/*":"./components/ui/*.tsx","./components/core/*":"./components/core/*.tsx","./components/sidebar/*":"./components/sidebar/*.tsx","./components/html-viewer":"./components/html-viewer/index.ts","./components/plan-diff/*":"./components/plan-diff/*.tsx","./components/goal-setup/*":"./components/goal-setup/*.tsx","./components/ImageAnnotator":"./components/ImageAnnotator/index.tsx","./components/html-viewer/bridge-script":"./components/html-viewer/bridge-script.ts","./components/html-viewer/bridge-script.lite":"./components/html-viewer/bridge-script.lite.ts","./components/html-viewer/bridge-script.asset.js":"./components/html-viewer/bridge-script.asset.js"},"scripts":{"prepack":"bun run build:css && bun run build:bridge-assets","build:css":"vite build --config vite.css.config.ts && rm -f styles.js","typecheck":"tsc --noEmit -p tsconfig.json","smoke:package":"bun run scripts/package-smoke.ts","build:bridge-assets":"bun run scripts/build-bridge-assets.ts"},"_npmUser":{"name":"backnotprop","email":"backnotprop@gmail.com"},"_resolved":"/Users/ramos/plannotator/plannotator/packages/ui/plannotator-ui-0.35.2.tgz","_integrity":"sha512-vak+Bv2T7R4Vghd41UoiCxFPKxRtobKv9dKbl/Vdzsdl3SWbSKMaHy9Q8K+FZp8ZCt+NnMnr/NuKm8s8+jXwIg==","_npmVersion":"11.12.1","description":"Plannotator's document UI — markdown rendering, themes, the annotation editor, settings, comments, and layout — as installable building blocks. Published so a separate app (the commercial Workspaces app) can reuse the exact same experience, while Plannota","directories":{},"_nodeVersion":"24.15.0","dependencies":{"clsx":"^2.1.1","diff":"^8.0.4","katex":"^0.16.47","marked":"^17.0.6","motion":"^12.38.0","mermaid":"^11.12.2","dompurify":"^3.3.3","@viz-js/viz":"^3.25.0","lucide-react":"^1.14.0","@lezer/common":"^1.5.2","@pierre/diffs":"1.3.2","@base-ui/react":"^1.6.0","tailwind-merge":"^3.6.0","@codemirror/view":"^6.43.0","@lezer/highlight":"^1.2.3","perfect-freehand":"^1.2.2","@codemirror/merge":"^6.12.2","@codemirror/state":"^6.6.0","@plannotator/core":"0.25.1","@codemirror/search":"^6.7.0","@codemirror/commands":"^6.10.3","@codemirror/language":"^6.12.3","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@tanstack/react-table":"^8.21.3","@codemirror/lang-python":"^6.2.1","@codemirror/autocomplete":"^6.20.3","@codemirror/legacy-modes":"^6.5.3","class-variance-authority":"^0.7.1","@codemirror/lang-markdown":"^6.5.0","unique-username-generator":"^1.5.1","@fontsource-variable/inter":"^5.2.8","@plannotator/atomic-editor":"^0.8.0","@codemirror/lang-javascript":"^6.2.5","@plannotator/markdown-editor":"^0.4.0","@plannotator/web-highlighter":"^0.8.1","@fontsource-variable/geist-mono":"5.2.7"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.2.0","react":"^19.2.3","react-dom":"^19.2.3","@types/bun":"^1.2.0","typescript":"~5.8.2","tailwindcss":"^4.1.18","@types/react":"^19.2.0","@types/react-dom":"^19.2.0","@tailwindcss/vite":"^4.1.18","@happy-dom/global-registrator":"^20.10.1"},"peerDependencies":{"react":"^19.2.3","react-dom":"^19.2.3","tailwindcss":"^4.1.18"},"_npmOperationalInternal":{"tmp":"tmp/ui_0.35.2_1788293225752_0.8655105616942609","host":"s3://npm-registry-packages-npm-production"}},"0.36.0":{"name":"@plannotator/ui","version":"0.36.0","_id":"@plannotator/ui@0.36.0","maintainers":[{"name":"backnotprop","email":"backnotprop@gmail.com"}],"dist":{"shasum":"ab7978c396993981bf9dc50c7dee5cb220da7dcf","tarball":"https://registry.npmjs.org/@plannotator/ui/-/ui-0.36.0.tgz","fileCount":371,"integrity":"sha512-r+tu4kdkEIgTNhY+4nt0SFQHk1Y3nCZUOfyGXObnOC/UG0eOEJnwFBLGOd8ilYUqv8qpiuZTn+Dmtpu+zhbtCA==","signatures":[{"sig":"MEQCIDZn/X732JO9qKtgeOOjS39hwYcVOUjbMdNyfXlKtNlRAiAdmaCGUeQjvW2MDjLzeZztwfT2B4/Luo0VfTumumFKpw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5024422},"type":"module","_from":"file:plannotator-ui-0.36.0.tgz","exports":{"./lib/*":"./lib/*.ts","./theme":"./theme.css","./types":"./types.ts","./config":"./config/index.ts","./webmcp":"./webmcp/index.ts","./hooks/*":"./hooks/*.ts","./utils/*":"./utils/*.ts","./configure":"./configure.ts","./shortcuts":"./shortcuts/index.ts","./styles.css":"./styles.css","./theme-modes":"./components/themeModes.tsx","./components/*":"./components/*.tsx","./components/ai/*":"./components/ai/*.tsx","./components/ui/*":"./components/ui/*.tsx","./components/core/*":"./components/core/*.tsx","./components/sidebar/*":"./components/sidebar/*.tsx","./components/html-viewer":"./components/html-viewer/index.ts","./components/plan-diff/*":"./components/plan-diff/*.tsx","./components/goal-setup/*":"./components/goal-setup/*.tsx","./components/ImageAnnotator":"./components/ImageAnnotator/index.tsx","./components/html-viewer/bridge-script":"./components/html-viewer/bridge-script.ts","./components/html-viewer/bridge-script.lite":"./components/html-viewer/bridge-script.lite.ts","./components/html-viewer/bridge-script.asset.js":"./components/html-viewer/bridge-script.asset.js"},"scripts":{"prepack":"bun run build:css && bun run build:bridge-assets","build:css":"vite build --config vite.css.config.ts && rm -f styles.js","typecheck":"tsc --noEmit -p tsconfig.json","smoke:package":"bun run scripts/package-smoke.ts","build:bridge-assets":"bun run scripts/build-bridge-assets.ts"},"_npmUser":{"name":"backnotprop","email":"backnotprop@gmail.com"},"_resolved":"/Users/ramos/plannotator/plannotator/packages/ui/plannotator-ui-0.36.0.tgz","_integrity":"sha512-r+tu4kdkEIgTNhY+4nt0SFQHk1Y3nCZUOfyGXObnOC/UG0eOEJnwFBLGOd8ilYUqv8qpiuZTn+Dmtpu+zhbtCA==","_npmVersion":"11.12.1","description":"Plannotator's document UI — markdown rendering, themes, the annotation editor, settings, comments, and layout — as installable building blocks. Published so a separate app (the commercial Workspaces app) can reuse the exact same experience, while Plannota","directories":{},"_nodeVersion":"24.15.0","dependencies":{"clsx":"^2.1.1","diff":"^8.0.4","katex":"^0.16.47","marked":"^17.0.6","motion":"^12.38.0","mermaid":"^11.12.2","dompurify":"^3.3.3","@viz-js/viz":"^3.25.0","lucide-react":"^1.14.0","@lezer/common":"^1.5.2","@pierre/diffs":"1.3.2","@base-ui/react":"^1.6.0","tailwind-merge":"^3.6.0","@codemirror/view":"^6.43.0","@lezer/highlight":"^1.2.3","perfect-freehand":"^1.2.2","@codemirror/merge":"^6.12.2","@codemirror/state":"^6.6.0","@plannotator/core":"0.25.1","@codemirror/search":"^6.7.0","@codemirror/commands":"^6.10.3","@codemirror/language":"^6.12.3","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@tanstack/react-table":"^8.21.3","@codemirror/lang-python":"^6.2.1","@codemirror/autocomplete":"^6.20.3","@codemirror/legacy-modes":"^6.5.3","class-variance-authority":"^0.7.1","@codemirror/lang-markdown":"^6.5.0","unique-username-generator":"^1.5.1","@fontsource-variable/inter":"^5.2.8","@plannotator/atomic-editor":"^0.8.0","@codemirror/lang-javascript":"^6.2.5","@plannotator/markdown-editor":"^0.4.0","@plannotator/web-highlighter":"^0.8.1","@fontsource-variable/geist-mono":"5.2.7"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.2.0","react":"^19.2.3","react-dom":"^19.2.3","@types/bun":"^1.2.0","typescript":"~5.8.2","tailwindcss":"^4.1.18","@types/react":"^19.2.0","@types/react-dom":"^19.2.0","@tailwindcss/vite":"^4.1.18","@happy-dom/global-registrator":"^20.10.1"},"peerDependencies":{"react":"^19.2.3","react-dom":"^19.2.3","tailwindcss":"^4.1.18"},"_npmOperationalInternal":{"tmp":"tmp/ui_0.36.0_1788305227631_0.727389715856601","host":"s3://npm-registry-packages-npm-production"}},"0.37.0":{"name":"@plannotator/ui","version":"0.37.0","_id":"@plannotator/ui@0.37.0","maintainers":[{"name":"backnotprop","email":"backnotprop@gmail.com"}],"dist":{"shasum":"df04cca7ca38e948c1cdc3ea6a04d66c769c6cb3","tarball":"https://registry.npmjs.org/@plannotator/ui/-/ui-0.37.0.tgz","fileCount":372,"integrity":"sha512-mpCCeC3noOq0h8LvkLGPw4yY1SV7Id71cDcLURVcJ3pEIb+4YiV4U1r6/GV8J/f1QnHq/8ooUN8QvMs43zvweg==","signatures":[{"sig":"MEQCIF4P4i4hvPOxl/+pmI4gK5fvft6lkZ9wECB9SkSkW3syAiB3M9CNCAbYhQFpjlVOffy+tm8XGKkv2pCUn74Qr72aqQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5034489},"type":"module","_from":"file:plannotator-ui-0.37.0.tgz","exports":{"./lib/*":"./lib/*.ts","./theme":"./theme.css","./types":"./types.ts","./config":"./config/index.ts","./webmcp":"./webmcp/index.ts","./hooks/*":"./hooks/*.ts","./utils/*":"./utils/*.ts","./configure":"./configure.ts","./shortcuts":"./shortcuts/index.ts","./styles.css":"./styles.css","./theme-modes":"./components/themeModes.tsx","./components/*":"./components/*.tsx","./components/ai/*":"./components/ai/*.tsx","./components/ui/*":"./components/ui/*.tsx","./components/core/*":"./components/core/*.tsx","./components/sidebar/*":"./components/sidebar/*.tsx","./components/html-viewer":"./components/html-viewer/index.ts","./components/plan-diff/*":"./components/plan-diff/*.tsx","./components/goal-setup/*":"./components/goal-setup/*.tsx","./components/ImageAnnotator":"./components/ImageAnnotator/index.tsx","./components/html-viewer/bridge-script":"./components/html-viewer/bridge-script.ts","./components/html-viewer/bridge-script.lite":"./components/html-viewer/bridge-script.lite.ts","./components/html-viewer/bridge-script.asset.js":"./components/html-viewer/bridge-script.asset.js"},"scripts":{"prepack":"bun run build:css && bun run build:bridge-assets","build:css":"vite build --config vite.css.config.ts && rm -f styles.js","typecheck":"tsc --noEmit -p tsconfig.json","smoke:package":"bun run scripts/package-smoke.ts","build:bridge-assets":"bun run scripts/build-bridge-assets.ts"},"_npmUser":{"name":"backnotprop","email":"backnotprop@gmail.com"},"_resolved":"/Users/ramos/plannotator/plannotator/packages/ui/plannotator-ui-0.37.0.tgz","_integrity":"sha512-mpCCeC3noOq0h8LvkLGPw4yY1SV7Id71cDcLURVcJ3pEIb+4YiV4U1r6/GV8J/f1QnHq/8ooUN8QvMs43zvweg==","_npmVersion":"11.12.1","description":"Plannotator's document UI — markdown rendering, themes, the annotation editor, settings, comments, and layout — as installable building blocks. Published so a separate app (the commercial Workspaces app) can reuse the exact same experience, while Plannota","directories":{},"_nodeVersion":"24.15.0","dependencies":{"clsx":"^2.1.1","diff":"^8.0.4","katex":"^0.16.47","marked":"^17.0.6","motion":"^12.38.0","mermaid":"^11.12.2","dompurify":"^3.3.3","@viz-js/viz":"^3.25.0","lucide-react":"^1.14.0","@lezer/common":"^1.5.2","@pierre/diffs":"1.3.2","@base-ui/react":"^1.6.0","tailwind-merge":"^3.6.0","@codemirror/view":"^6.43.0","@lezer/highlight":"^1.2.3","perfect-freehand":"^1.2.2","@codemirror/merge":"^6.12.2","@codemirror/state":"^6.6.0","@plannotator/core":"0.25.1","@codemirror/search":"^6.7.0","@codemirror/commands":"^6.10.3","@codemirror/language":"^6.12.3","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@tanstack/react-table":"^8.21.3","@codemirror/lang-python":"^6.2.1","@codemirror/autocomplete":"^6.20.3","@codemirror/legacy-modes":"^6.5.3","class-variance-authority":"^0.7.1","@codemirror/lang-markdown":"^6.5.0","unique-username-generator":"^1.5.1","@fontsource-variable/inter":"^5.2.8","@plannotator/atomic-editor":"^0.8.0","@codemirror/lang-javascript":"^6.2.5","@plannotator/markdown-editor":"^0.4.0","@plannotator/web-highlighter":"^0.8.1","@fontsource-variable/geist-mono":"5.2.7"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.2.0","react":"^19.2.3","react-dom":"^19.2.3","@types/bun":"^1.2.0","typescript":"~5.8.2","tailwindcss":"^4.1.18","@types/react":"^19.2.0","@types/react-dom":"^19.2.0","@tailwindcss/vite":"^4.1.18","@happy-dom/global-registrator":"^20.10.1"},"peerDependencies":{"react":"^19.2.3","react-dom":"^19.2.3","tailwindcss":"^4.1.18"},"_npmOperationalInternal":{"tmp":"tmp/ui_0.37.0_1788310531564_0.5729954194658695","host":"s3://npm-registry-packages-npm-production"}},"0.38.0":{"name":"@plannotator/ui","version":"0.38.0","_id":"@plannotator/ui@0.38.0","maintainers":[{"name":"backnotprop","email":"backnotprop@gmail.com"}],"dist":{"shasum":"7a232244cc976dcdd91b4abd0e39b50b4fdea4c8","tarball":"https://registry.npmjs.org/@plannotator/ui/-/ui-0.38.0.tgz","fileCount":374,"integrity":"sha512-BuRCST3MNKIOZYlpgsr3tHmHbnu+D/cXNQUVZFbJjcNAflBeZ/8hne96LwTowNSzNYuBvPCCMaM3I0Fwh9bivA==","signatures":[{"sig":"MEUCIQD2Puu24OmpCdIHCj6HC6DnLPxYWJc92gDc5gITVANcOgIgW+p+tcbhoMRip/QPkLc68s6+zzFwjez4HNUyRsQFSQs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5094775},"type":"module","_from":"file:plannotator-ui-0.38.0.tgz","exports":{"./lib/*":"./lib/*.ts","./theme":"./theme.css","./types":"./types.ts","./config":"./config/index.ts","./webmcp":"./webmcp/index.ts","./hooks/*":"./hooks/*.ts","./utils/*":"./utils/*.ts","./configure":"./configure.ts","./shortcuts":"./shortcuts/index.ts","./styles.css":"./styles.css","./theme-modes":"./components/themeModes.tsx","./components/*":"./components/*.tsx","./components/ai/*":"./components/ai/*.tsx","./components/ui/*":"./components/ui/*.tsx","./components/core/*":"./components/core/*.tsx","./components/sidebar/*":"./components/sidebar/*.tsx","./components/html-viewer":"./components/html-viewer/index.ts","./components/plan-diff/*":"./components/plan-diff/*.tsx","./components/goal-setup/*":"./components/goal-setup/*.tsx","./components/ImageAnnotator":"./components/ImageAnnotator/index.tsx","./components/html-viewer/bridge-script":"./components/html-viewer/bridge-script.ts","./components/html-viewer/bridge-script.lite":"./components/html-viewer/bridge-script.lite.ts","./components/html-viewer/bridge-script.asset.js":"./components/html-viewer/bridge-script.asset.js"},"scripts":{"prepack":"bun run build:css && bun run build:bridge-assets","build:css":"vite build --config vite.css.config.ts && rm -f styles.js","typecheck":"tsc --noEmit -p tsconfig.json","smoke:package":"bun run scripts/package-smoke.ts","build:bridge-assets":"bun run scripts/build-bridge-assets.ts"},"_npmUser":{"name":"backnotprop","email":"backnotprop@gmail.com"},"_resolved":"/Users/ramos/plannotator/plannotator/packages/ui/plannotator-ui-0.38.0.tgz","_integrity":"sha512-BuRCST3MNKIOZYlpgsr3tHmHbnu+D/cXNQUVZFbJjcNAflBeZ/8hne96LwTowNSzNYuBvPCCMaM3I0Fwh9bivA==","deprecated":"does not compile: pins core 0.25.1 without ./token-hover; use 0.38.1","_npmVersion":"11.12.1","description":"Plannotator's document UI — markdown rendering, themes, the annotation editor, settings, comments, and layout — as installable building blocks. Published so a separate app (the commercial Workspaces app) can reuse the exact same experience, while Plannota","directories":{},"_nodeVersion":"24.15.0","dependencies":{"clsx":"^2.1.1","diff":"^8.0.4","katex":"^0.16.47","marked":"^17.0.6","motion":"^12.38.0","mermaid":"^11.17.2","dompurify":"^3.4.14","@viz-js/viz":"^3.29.0","lucide-react":"^1.38.0","@lezer/common":"^1.5.2","@pierre/diffs":"1.3.6","@base-ui/react":"^1.7.0","tailwind-merge":"^3.6.0","@codemirror/view":"^6.43.10","@lezer/highlight":"^1.2.3","perfect-freehand":"^1.2.2","@codemirror/merge":"^6.12.2","@codemirror/state":"^6.6.0","@plannotator/core":"0.25.1","@codemirror/search":"^6.7.2","@codemirror/commands":"^6.11.0","@codemirror/language":"^6.12.4","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@tanstack/react-table":"^8.21.3","@codemirror/lang-python":"^6.2.1","@codemirror/autocomplete":"^6.20.3","@codemirror/legacy-modes":"^6.5.3","class-variance-authority":"^0.7.1","@codemirror/lang-markdown":"^6.5.2","unique-username-generator":"^1.5.1","@fontsource-variable/inter":"^5.3.0","@plannotator/atomic-editor":"^0.8.0","@codemirror/lang-javascript":"^6.2.5","@plannotator/markdown-editor":"^0.4.0","@plannotator/web-highlighter":"^0.8.1","@fontsource-variable/geist-mono":"5.3.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vite":"^6.2.0","react":"^19.2.8","react-dom":"^19.2.8","@types/bun":"^1.2.0","typescript":"~5.8.2","tailwindcss":"^4.1.18","@types/react":"^19.2.18","@types/react-dom":"^19.2.5","@tailwindcss/vite":"^4.3.3","@happy-dom/global-registrator":"^20.12.0"},"peerDependencies":{"react":"^19.2.8","react-dom":"^19.2.8","tailwindcss":"^4.1.18"},"_npmOperationalInternal":{"tmp":"tmp/ui_0.38.0_1789151299258_0.41919339945631084","host":"s3://npm-registry-packages-npm-production"}},"0.38.1":{"name":"@plannotator/ui","version":"0.38.1","_id":"@plannotator/ui@0.38.1","maintainers":[{"name":"backnotprop","email":"backnotprop@gmail.com"}],"dist":{"shasum":"731b2457f24b36bc10075d9fd7ea7e9389dda4d9","tarball":"https://registry.npmjs.org/@plannotator/ui/-/ui-0.38.1.tgz","fileCount":374,"integrity":"sha512-TVETQ8JicOMt53CQWXQMMPolGFfIRddrdjYDdpIhZgKy7NIBcrFi20p1V2PxYoHJDS5IjoJPW546ihJAvuvhNA==","signatures":[{"sig":"MEUCIExbqz8TQu6wfrP/Nh3Vqllx/siZsCNS9TneIPzJ0dU0AiEAz3051KKbn0pEIzSjdZLyx+kcj+Uly49JGxB87wtWmJw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5095652},"type":"module","_from":"file:packages/ui/plannotator-ui-0.38.1.tgz","exports":{"./lib/*":"./lib/*.ts","./theme":"./theme.css","./types":"./types.ts","./config":"./config/index.ts","./webmcp":"./webmcp/index.ts","./hooks/*":"./hooks/*.ts","./utils/*":"./utils/*.ts","./configure":"./configure.ts","./shortcuts":"./shortcuts/index.ts","./styles.css":"./styles.css","./theme-modes":"./components/themeModes.tsx","./components/*":"./components/*.tsx","./components/ai/*":"./components/ai/*.tsx","./components/ui/*":"./components/ui/*.tsx","./components/core/*":"./components/core/*.tsx","./components/sidebar/*":"./components/sidebar/*.tsx","./components/html-viewer":"./components/html-viewer/index.ts","./components/plan-diff/*":"./components/plan-diff/*.tsx","./components/goal-setup/*":"./components/goal-setup/*.tsx","./components/ImageAnnotator":"./components/ImageAnnotator/index.tsx","./components/html-viewer/bridge-script":"./components/html-viewer/bridge-script.ts","./components/html-viewer/bridge-script.lite":"./components/html-viewer/bridge-script.lite.ts","./components/html-viewer/bridge-script.asset.js":"./components/html-viewer/bridge-script.asset.js"},"scripts":{"prepack":"bun run build:css && bun run build:bridge-assets","build:css":"vite build --config vite.css.config.ts && rm -f styles.js","typecheck":"tsc --noEmit -p tsconfig.json","smoke:package":"bun run scripts/package-smoke.ts","build:bridge-assets":"bun run scripts/build-bridge-assets.ts"},"_npmUser":{"name":"backnotprop","email":"backnotprop@gmail.com"},"_resolved":"/Users/ramos/plannotator/plannotator/packages/ui/plannotator-ui-0.38.1.tgz","_integrity":"sha512-TVETQ8JicOMt53CQWXQMMPolGFfIRddrdjYDdpIhZgKy7NIBcrFi20p1V2PxYoHJDS5IjoJPW546ihJAvuvhNA==","_npmVersion":"11.12.1","description":"Plannotator's document UI — markdown rendering, themes, the annotation editor, settings, comments, and layout — as installable building blocks. Published so a separate app (the commercial Workspaces app) can reuse the exact same experience, while Plannota","directories":{},"_nodeVersion":"24.15.0","dependencies":{"clsx":"^2.1.1","diff":"^8.0.4","katex":"^0.16.47","marked":"^17.0.6","motion":"^12.38.0","mermaid":"^11.17.2","dompurify":"^3.4.14","@viz-js/viz":"^3.29.0","lucide-react":"^1.38.0","@lezer/common":"^1.5.2","@pierre/diffs":"1.3.6","@base-ui/react":"^1.7.0","tailwind-merge":"^3.6.0","@codemirror/view":"^6.43.10","@lezer/highlight":"^1.2.3","perfect-freehand":"^1.2.2","@codemirror/merge":"^6.12.2","@codemirror/state":"^6.7.2","@plannotator/core":"0.25.2","@codemirror/search":"^6.7.2","@codemirror/commands":"^6.11.0","@codemirror/language":"^6.12.4","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@tanstack/react-table":"^8.21.3","@codemirror/lang-python":"^6.2.1","@codemirror/autocomplete":"^6.20.3","@codemirror/legacy-modes":"^6.5.3","class-variance-authority":"^0.7.1","@codemirror/lang-markdown":"^6.5.2","unique-username-generator":"^1.5.1","@fontsource-variable/inter":"^5.3.0","@plannotator/atomic-editor":"^0.8.0","@codemirror/lang-javascript":"^6.2.5","@plannotator/markdown-editor":"^0.4.0","@plannotator/web-highlighter":"^0.8.1","@fontsource-variable/geist-mono":"5.3.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.2.0","react":"^19.2.8","react-dom":"^19.2.8","@types/bun":"^1.2.0","typescript":"~5.8.2","tailwindcss":"^4.1.18","@types/react":"^19.2.18","@types/react-dom":"^19.2.5","@tailwindcss/vite":"^4.3.3","@happy-dom/global-registrator":"^20.12.0"},"peerDependencies":{"react":"^19.2.8","react-dom":"^19.2.8","tailwindcss":"^4.1.18"},"_npmOperationalInternal":{"tmp":"tmp/ui_0.38.1_1789155880763_0.8282081593074355","host":"s3://npm-registry-packages-npm-production"}},"0.38.2":{"name":"@plannotator/ui","version":"0.38.2","_id":"@plannotator/ui@0.38.2","maintainers":[{"name":"backnotprop","email":"backnotprop@gmail.com"}],"dist":{"shasum":"43b1d3d574e8a14fda6c2871d7dc7f59a20181cb","tarball":"https://registry.npmjs.org/@plannotator/ui/-/ui-0.38.2.tgz","fileCount":374,"integrity":"sha512-Q+2iKaqF1dwCNbZOY1su0UFFp8WdlIjvqBgQzyRn+C+7PogMiV5nUJs/J233oqCYZQxcbsuZYxJqewLcUOzlEQ==","signatures":[{"sig":"MEQCIEvToqdUG07nSLa9ba5kLSN2GIS41oentjAtngW4lNrPAiAlWn2CXry/+4Bz1YtCc6uwHuUtC6rmxXEkhlvt3rpvYA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5096512},"type":"module","_from":"file:packages/ui/plannotator-ui-0.38.2.tgz","exports":{"./lib/*":"./lib/*.ts","./theme":"./theme.css","./types":"./types.ts","./config":"./config/index.ts","./webmcp":"./webmcp/index.ts","./hooks/*":"./hooks/*.ts","./utils/*":"./utils/*.ts","./configure":"./configure.ts","./shortcuts":"./shortcuts/index.ts","./styles.css":"./styles.css","./theme-modes":"./components/themeModes.tsx","./components/*":"./components/*.tsx","./components/ai/*":"./components/ai/*.tsx","./components/ui/*":"./components/ui/*.tsx","./components/core/*":"./components/core/*.tsx","./components/sidebar/*":"./components/sidebar/*.tsx","./components/html-viewer":"./components/html-viewer/index.ts","./components/plan-diff/*":"./components/plan-diff/*.tsx","./components/goal-setup/*":"./components/goal-setup/*.tsx","./components/ImageAnnotator":"./components/ImageAnnotator/index.tsx","./components/html-viewer/bridge-script":"./components/html-viewer/bridge-script.ts","./components/html-viewer/bridge-script.lite":"./components/html-viewer/bridge-script.lite.ts","./components/html-viewer/bridge-script.asset.js":"./components/html-viewer/bridge-script.asset.js"},"scripts":{"prepack":"bun run build:css && bun run build:bridge-assets","build:css":"vite build --config vite.css.config.ts && rm -f styles.js","typecheck":"tsc --noEmit -p tsconfig.json","smoke:package":"bun run scripts/package-smoke.ts","build:bridge-assets":"bun run scripts/build-bridge-assets.ts"},"_npmUser":{"name":"backnotprop","email":"backnotprop@gmail.com"},"_resolved":"/Users/ramos/plannotator/plannotator/packages/ui/plannotator-ui-0.38.2.tgz","_integrity":"sha512-Q+2iKaqF1dwCNbZOY1su0UFFp8WdlIjvqBgQzyRn+C+7PogMiV5nUJs/J233oqCYZQxcbsuZYxJqewLcUOzlEQ==","_npmVersion":"11.12.1","description":"Plannotator's document UI — markdown rendering, themes, the annotation editor, settings, comments, and layout — as installable building blocks. Published so a separate app (the commercial Workspaces app) can reuse the exact same experience, while Plannota","directories":{},"_nodeVersion":"24.15.0","dependencies":{"clsx":"^2.1.1","diff":"^8.0.4","katex":"^0.16.47","marked":"^17.0.6","motion":"^12.38.0","mermaid":"^11.17.2","dompurify":"^3.4.14","@viz-js/viz":"^3.29.0","lucide-react":"^1.38.0","@lezer/common":"^1.5.2","@pierre/diffs":"1.3.6","@base-ui/react":"^1.7.0","tailwind-merge":"^3.6.0","@codemirror/view":"^6.43.10","@lezer/highlight":"^1.2.3","perfect-freehand":"^1.2.2","@codemirror/merge":"^6.12.2","@codemirror/state":"^6.7.2","@plannotator/core":"0.25.2","@codemirror/search":"^6.7.2","@codemirror/commands":"^6.11.0","@codemirror/language":"^6.12.4","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@tanstack/react-table":"^8.21.3","@codemirror/lang-python":"^6.2.1","@codemirror/autocomplete":"^6.20.3","@codemirror/legacy-modes":"^6.5.3","class-variance-authority":"^0.7.1","@codemirror/lang-markdown":"^6.5.2","unique-username-generator":"^1.5.1","@fontsource-variable/inter":"^5.3.0","@plannotator/atomic-editor":"^0.8.0","@codemirror/lang-javascript":"^6.2.5","@plannotator/markdown-editor":"^0.4.0","@plannotator/web-highlighter":"^0.8.1","@fontsource-variable/geist-mono":"5.3.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.2.0","react":"^19.2.8","react-dom":"^19.2.8","@types/bun":"^1.2.0","typescript":"~5.8.2","tailwindcss":"^4.1.18","@types/react":"^19.2.18","@types/react-dom":"^19.2.5","@tailwindcss/vite":"^4.3.3","@happy-dom/global-registrator":"^20.12.0"},"peerDependencies":{"react":"^19.2.3","react-dom":"^19.2.3","tailwindcss":"^4.1.18"},"_npmOperationalInternal":{"tmp":"tmp/ui_0.38.2_1789159210980_0.5200116507533594","host":"s3://npm-registry-packages-npm-production"}},"0.39.0":{"name":"@plannotator/ui","version":"0.39.0","_id":"@plannotator/ui@0.39.0","maintainers":[{"name":"backnotprop","email":"backnotprop@gmail.com"}],"dist":{"shasum":"d6abcd4acaa97406ca840b5a6d2300789a2915ca","tarball":"https://registry.npmjs.org/@plannotator/ui/-/ui-0.39.0.tgz","fileCount":374,"integrity":"sha512-DC01fjBBdPiJK+ZrxNMu3owTPdMd4c2pbFEHwzHMetQlkOU0NiQQBnp3ENh7tBoSrIRYcpYYcVwUVsE19m178g==","signatures":[{"sig":"MEUCICLj/08bKuzDmwwrBEi7ErZ2YzAdxTHLLlhuvNVmbHxjAiEAsglImlo/NxA5G6JcG+Dq4Ju18Lotna+p50DYjq3KLww=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5153196},"type":"module","exports":{"./lib/*":"./lib/*.ts","./theme":"./theme.css","./types":"./types.ts","./config":"./config/index.ts","./webmcp":"./webmcp/index.ts","./hooks/*":"./hooks/*.ts","./utils/*":"./utils/*.ts","./configure":"./configure.ts","./shortcuts":"./shortcuts/index.ts","./styles.css":"./styles.css","./theme-modes":"./components/themeModes.tsx","./components/*":"./components/*.tsx","./components/ai/*":"./components/ai/*.tsx","./components/ui/*":"./components/ui/*.tsx","./components/core/*":"./components/core/*.tsx","./components/sidebar/*":"./components/sidebar/*.tsx","./components/html-viewer":"./components/html-viewer/index.ts","./components/plan-diff/*":"./components/plan-diff/*.tsx","./components/goal-setup/*":"./components/goal-setup/*.tsx","./components/ImageAnnotator":"./components/ImageAnnotator/index.tsx","./components/html-viewer/bridge-script":"./components/html-viewer/bridge-script.ts","./components/html-viewer/bridge-script.lite":"./components/html-viewer/bridge-script.lite.ts","./components/html-viewer/bridge-script.asset.js":"./components/html-viewer/bridge-script.asset.js"},"gitHead":"03744dd80a664c3c65ae120859f9d960d7c74330","scripts":{"prepack":"bun run build:css && bun run build:bridge-assets","build:css":"vite build --config vite.css.config.ts && rm -f styles.js","typecheck":"tsc --noEmit -p tsconfig.json","smoke:package":"bun run scripts/package-smoke.ts","build:bridge-assets":"bun run scripts/build-bridge-assets.ts"},"_npmUser":{"name":"backnotprop","email":"backnotprop@gmail.com"},"_npmVersion":"11.12.1","description":"Plannotator's document UI — markdown rendering, themes, the annotation editor, settings, comments, and layout — as installable building blocks. Published so a separate app (the commercial Workspaces app) can reuse the exact same experience, while Plannota","directories":{},"_nodeVersion":"24.15.0","dependencies":{"clsx":"^2.1.1","diff":"^8.0.4","katex":"^0.16.47","marked":"^17.0.6","motion":"^12.38.0","mermaid":"^11.17.2","dompurify":"^3.4.14","@viz-js/viz":"^3.29.0","lucide-react":"^1.38.0","@lezer/common":"^1.5.2","@pierre/diffs":"1.3.6","@base-ui/react":"^1.7.0","tailwind-merge":"^3.6.0","@codemirror/view":"^6.43.10","@lezer/highlight":"^1.2.3","perfect-freehand":"^1.2.2","@codemirror/merge":"^6.12.2","@codemirror/state":"^6.7.2","@plannotator/core":"0.25.2","@codemirror/search":"^6.7.2","@codemirror/commands":"^6.11.0","@codemirror/language":"^6.12.4","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@tanstack/react-table":"^8.21.3","@codemirror/lang-python":"^6.2.1","@codemirror/autocomplete":"^6.20.3","@codemirror/legacy-modes":"^6.5.3","class-variance-authority":"^0.7.1","@codemirror/lang-markdown":"^6.5.2","unique-username-generator":"^1.5.1","@fontsource-variable/inter":"^5.3.0","@plannotator/atomic-editor":"^0.8.0","@codemirror/lang-javascript":"^6.2.5","@plannotator/markdown-editor":"^0.4.0","@plannotator/web-highlighter":"^0.8.1","@fontsource-variable/geist-mono":"5.3.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.2.0","react":"^19.2.8","react-dom":"^19.2.8","@types/bun":"^1.2.0","typescript":"~5.8.2","tailwindcss":"^4.1.18","@types/react":"^19.2.18","@types/react-dom":"^19.2.5","@tailwindcss/vite":"^4.3.3","@happy-dom/global-registrator":"^20.12.0"},"peerDependencies":{"react":"^19.2.3","react-dom":"^19.2.3","tailwindcss":"^4.1.18"},"_npmOperationalInternal":{"tmp":"tmp/ui_0.39.0_1789257723736_0.09777815264819734","host":"s3://npm-registry-packages-npm-production"}},"0.40.0":{"name":"@plannotator/ui","version":"0.40.0","_id":"@plannotator/ui@0.40.0","maintainers":[{"name":"backnotprop","email":"backnotprop@gmail.com"}],"dist":{"shasum":"4d93e5cf86c998467a0e43a074fd4d15b170ed28","tarball":"https://registry.npmjs.org/@plannotator/ui/-/ui-0.40.0.tgz","fileCount":380,"integrity":"sha512-3A59ubOxEyFH59ev1Le2U+3FJi+rkPR0uNCYf95nTPE6VyztSgfY7ndLvtbBXdhcjVzoOKwXS1WjXzqBAmsIxQ==","signatures":[{"sig":"MEQCIHJE7Ai1iT//Fv9QtZKicjM5zc/Yj5HRn7MIigqoRqQYAiAYgn4QrBgOmZBa4X7zDwg8q6HztAQkvq+h4tpkgi/q4Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5334992},"type":"module","exports":{"./lib/*":"./lib/*.ts","./theme":"./theme.css","./types":"./types.ts","./config":"./config/index.ts","./webmcp":"./webmcp/index.ts","./hooks/*":"./hooks/*.ts","./utils/*":"./utils/*.ts","./configure":"./configure.ts","./shortcuts":"./shortcuts/index.ts","./styles.css":"./styles.css","./theme-modes":"./components/themeModes.tsx","./components/*":"./components/*.tsx","./components/ai/*":"./components/ai/*.tsx","./components/ui/*":"./components/ui/*.tsx","./components/core/*":"./components/core/*.tsx","./components/sidebar/*":"./components/sidebar/*.tsx","./components/html-viewer":"./components/html-viewer/index.ts","./components/plan-diff/*":"./components/plan-diff/*.tsx","./components/goal-setup/*":"./components/goal-setup/*.tsx","./components/ImageAnnotator":"./components/ImageAnnotator/index.tsx","./components/html-viewer/bridge-script":"./components/html-viewer/bridge-script.ts","./components/html-viewer/bridge-script.lite":"./components/html-viewer/bridge-script.lite.ts","./components/html-viewer/bridge-script.asset.js":"./components/html-viewer/bridge-script.asset.js"},"gitHead":"2a51b26e1bfa394207b26f08371795465fd3e18f","scripts":{"prepack":"bun run build:css && bun run build:bridge-assets","build:css":"vite build --config vite.css.config.ts && rm -f styles.js","typecheck":"tsc --noEmit -p tsconfig.json","smoke:package":"bun run scripts/package-smoke.ts","build:bridge-assets":"bun run scripts/build-bridge-assets.ts"},"_npmUser":{"name":"backnotprop","email":"backnotprop@gmail.com"},"_npmVersion":"11.12.1","description":"Plannotator's document UI — markdown rendering, themes, the annotation editor, settings, comments, and layout — as installable building blocks. Published so a separate app (the commercial Workspaces app) can reuse the exact same experience, while Plannota","directories":{},"_nodeVersion":"24.15.0","dependencies":{"clsx":"^2.1.1","diff":"^8.0.4","katex":"^0.16.47","marked":"^17.0.6","motion":"^12.38.0","mermaid":"12.0.0","dompurify":"^3.4.14","@viz-js/viz":"^3.29.0","lucide-react":"^1.38.0","@lezer/common":"^1.5.2","@pierre/diffs":"1.3.6","@base-ui/react":"^1.7.0","tailwind-merge":"^3.6.0","@codemirror/view":"^6.43.10","@lezer/highlight":"^1.2.3","perfect-freehand":"^1.2.2","@codemirror/merge":"^6.12.2","@codemirror/state":"^6.7.2","@plannotator/core":"0.25.3","@codemirror/search":"^6.7.2","@codemirror/commands":"^6.11.0","@codemirror/language":"^6.12.4","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@tanstack/react-table":"^8.21.3","@codemirror/lang-python":"^6.2.1","@codemirror/autocomplete":"^6.20.3","@codemirror/legacy-modes":"^6.5.3","class-variance-authority":"^0.7.1","@codemirror/lang-markdown":"^6.5.2","unique-username-generator":"^1.5.1","@fontsource-variable/inter":"^5.3.0","@plannotator/atomic-editor":"^0.8.0","@codemirror/lang-javascript":"^6.2.5","@plannotator/markdown-editor":"^0.4.0","@plannotator/web-highlighter":"^0.8.1","@fontsource-variable/geist-mono":"5.3.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.2.0","react":"^19.2.8","react-dom":"^19.2.8","@types/bun":"^1.2.0","typescript":"~5.8.2","tailwindcss":"^4.1.18","@types/react":"^19.2.18","@types/react-dom":"^19.2.5","@tailwindcss/vite":"^4.3.3","@happy-dom/global-registrator":"^20.12.0"},"peerDependencies":{"react":"^19.2.3","react-dom":"^19.2.3","tailwindcss":"^4.1.18"},"_npmOperationalInternal":{"tmp":"tmp/ui_0.40.0_1789633481669_0.6302101857134244","host":"s3://npm-registry-packages-npm-production"}},"0.41.0":{"name":"@plannotator/ui","version":"0.41.0","_id":"@plannotator/ui@0.41.0","maintainers":[{"name":"backnotprop","email":"backnotprop@gmail.com"}],"dist":{"shasum":"60d111a508c7b391ce0a1bf023e3e4fe5fd495c2","tarball":"https://registry.npmjs.org/@plannotator/ui/-/ui-0.41.0.tgz","fileCount":397,"integrity":"sha512-rHUIjqfJ1PL/ohjHbIEWeyLGIXY18rBAAXcIuOSnK/wnI6cfyu4CpaRqd3ECDeLSXXeLZmxpHzHft8QRo0FBIQ==","signatures":[{"sig":"MEYCIQDkPgtTcIZvn00E8PP4LZ4i8b9pySgCDFOmWKN3AfS2RwIhAP9Lsip8uEONXdDyk7uE6qGkDGaRbUHxT6nquWbIus3O","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIG9vLUwbNtoqvpgzToj3rEfalx25fBZgtqLtJjRrfyMwAiB5yHFlhbjjIfX9QGEv6ucYa/2CaiqwlBV9VHocIEEAyQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5483103},"type":"module","exports":{"./lib/*":"./lib/*.ts","./theme":"./theme.css","./types":"./types.ts","./config":"./config/index.ts","./webmcp":"./webmcp/index.ts","./hooks/*":"./hooks/*.ts","./utils/*":"./utils/*.ts","./configure":"./configure.ts","./shortcuts":"./shortcuts/index.ts","./styles.css":"./styles.css","./theme-modes":"./components/themeModes.tsx","./components/*":"./components/*.tsx","./components/ai/*":"./components/ai/*.tsx","./components/ui/*":"./components/ui/*.tsx","./components/core/*":"./components/core/*.tsx","./components/diagram":"./components/diagram/index.ts","./components/diagram/*":"./components/diagram/*.tsx","./components/sidebar/*":"./components/sidebar/*.tsx","./components/html-viewer":"./components/html-viewer/index.ts","./components/plan-diff/*":"./components/plan-diff/*.tsx","./components/goal-setup/*":"./components/goal-setup/*.tsx","./components/ImageAnnotator":"./components/ImageAnnotator/index.tsx","./components/html-viewer/bridge-script":"./components/html-viewer/bridge-script.ts","./components/html-viewer/bridge-script.lite":"./components/html-viewer/bridge-script.lite.ts","./components/html-viewer/bridge-script.asset.js":"./components/html-viewer/bridge-script.asset.js"},"gitHead":"b6c475a14bbb1abaffb071246f8be949594b237c","scripts":{"prepack":"bun run build:css && bun run build:bridge-assets","build:css":"vite build --config vite.css.config.ts && rm -f styles.js","typecheck":"tsc --noEmit -p tsconfig.json","smoke:package":"bun run scripts/package-smoke.ts","build:bridge-assets":"bun run scripts/build-bridge-assets.ts"},"_npmUser":{"name":"backnotprop","email":"backnotprop@gmail.com"},"_npmVersion":"11.12.1","description":"Plannotator's document UI — markdown rendering, themes, the annotation editor, settings, comments, and layout — as installable building blocks. Published so a separate app (the commercial Workspaces app) can reuse the exact same experience, while Plannota","directories":{},"_nodeVersion":"24.15.0","dependencies":{"clsx":"^2.1.1","diff":"^8.0.4","katex":"^0.16.47","marked":"^17.0.6","motion":"^12.38.0","mermaid":"12.0.0","dompurify":"^3.4.14","@viz-js/viz":"3.30.0","lucide-react":"^1.38.0","@lezer/common":"^1.5.2","@pierre/diffs":"1.3.6","@base-ui/react":"^1.7.0","tailwind-merge":"^3.6.0","@codemirror/view":"^6.43.10","@lezer/highlight":"^1.2.3","perfect-freehand":"^1.2.2","@codemirror/merge":"^6.12.2","@codemirror/state":"^6.7.2","@plannotator/core":"0.25.4","@codemirror/search":"^6.7.2","@codemirror/commands":"^6.11.0","@codemirror/language":"^6.12.4","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@tanstack/react-table":"^8.21.3","@codemirror/lang-python":"^6.2.1","@codemirror/autocomplete":"^6.20.3","@codemirror/legacy-modes":"^6.5.3","class-variance-authority":"^0.7.1","@codemirror/lang-markdown":"^6.5.2","unique-username-generator":"^1.5.1","@fontsource-variable/inter":"^5.3.0","@plannotator/atomic-editor":"^0.8.0","@codemirror/lang-javascript":"^6.2.5","@plannotator/markdown-editor":"^0.4.0","@plannotator/web-highlighter":"^0.8.1","@fontsource-variable/geist-mono":"5.3.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.2.0","react":"^19.2.8","react-dom":"^19.2.8","@types/bun":"^1.2.0","typescript":"~5.8.2","tailwindcss":"^4.1.18","@types/react":"^19.2.18","@types/react-dom":"^19.2.5","@tailwindcss/vite":"^4.3.3","@happy-dom/global-registrator":"^20.12.0"},"peerDependencies":{"react":"^19.2.3","react-dom":"^19.2.3","tailwindcss":"^4.1.18"},"_npmOperationalInternal":{"tmp":"tmp/ui_0.41.0_1789678219673_0.7046344919227236","host":"s3://npm-registry-packages-npm-production"}},"0.41.1":{"name":"@plannotator/ui","version":"0.41.1","_id":"@plannotator/ui@0.41.1","maintainers":[{"name":"backnotprop","email":"backnotprop@gmail.com"}],"dist":{"shasum":"139f1c65e536f9885d8ea0805136bf4362c4759f","tarball":"https://registry.npmjs.org/@plannotator/ui/-/ui-0.41.1.tgz","fileCount":400,"integrity":"sha512-WDs6hFPhHyhm7B7i0PlNTVBnSYW9HN1iXRaErA4LOew93dOyp7jiZggL36wfn2AvVCLna5oYHU2JKHRf4kcClQ==","signatures":[{"sig":"MEQCIHy3920xWUy5N97x96YYPXPS1KPIF+g4OkKFLTlSD3r9AiAfFDzP4ZouLz2cLkm7KR7NgvILhH+xC+/whNc00i31cg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQC372iZyei+wbpV8O1EqfkF6+Qn0JJqssEkNzW4dW0imAIgUexwst+JTGcjf4JaAWkdH3/YPeevvJvjvU4b+s/NJ8o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5496531},"type":"module","exports":{"./lib/*":"./lib/*.ts","./theme":"./theme.css","./types":"./types.ts","./config":"./config/index.ts","./webmcp":"./webmcp/index.ts","./hooks/*":"./hooks/*.ts","./utils/*":"./utils/*.ts","./configure":"./configure.ts","./shortcuts":"./shortcuts/index.ts","./styles.css":"./styles.css","./theme-modes":"./components/themeModes.tsx","./components/*":"./components/*.tsx","./components/ai/*":"./components/ai/*.tsx","./components/ui/*":"./components/ui/*.tsx","./components/core/*":"./components/core/*.tsx","./components/diagram":"./components/diagram/index.ts","./components/diagram/*":"./components/diagram/*.tsx","./components/sidebar/*":"./components/sidebar/*.tsx","./components/html-viewer":"./components/html-viewer/index.ts","./components/plan-diff/*":"./components/plan-diff/*.tsx","./components/goal-setup/*":"./components/goal-setup/*.tsx","./components/ImageAnnotator":"./components/ImageAnnotator/index.tsx","./components/html-viewer/bridge-script":"./components/html-viewer/bridge-script.ts","./components/html-viewer/bridge-script.lite":"./components/html-viewer/bridge-script.lite.ts","./components/html-viewer/bridge-script.asset.js":"./components/html-viewer/bridge-script.asset.js"},"gitHead":"3a497cfb489075f59b89a417239cb226ce71117e","scripts":{"prepack":"bun run build:css && bun run build:bridge-assets","build:css":"vite build --config vite.css.config.ts && rm -f styles.js","typecheck":"tsc --noEmit -p tsconfig.json","smoke:package":"bun run scripts/package-smoke.ts","build:bridge-assets":"bun run scripts/build-bridge-assets.ts"},"_npmUser":{"name":"backnotprop","email":"backnotprop@gmail.com"},"_npmVersion":"11.12.1","description":"Plannotator's document UI — markdown rendering, themes, the annotation editor, settings, comments, and layout — as installable building blocks. Published so a separate app (the commercial Workspaces app) can reuse the exact same experience, while Plannota","directories":{},"_nodeVersion":"24.15.0","dependencies":{"clsx":"^2.1.1","diff":"^8.0.4","katex":"^0.16.47","marked":"^17.0.6","motion":"^12.38.0","mermaid":"12.0.0","dompurify":"^3.4.14","@viz-js/viz":"3.30.0","lucide-react":"^1.38.0","@lezer/common":"^1.5.2","@pierre/diffs":"1.3.6","@base-ui/react":"^1.7.0","tailwind-merge":"^3.6.0","@codemirror/view":"^6.43.10","@lezer/highlight":"^1.2.3","perfect-freehand":"^1.2.2","@codemirror/merge":"^6.12.2","@codemirror/state":"^6.7.2","@plannotator/core":"0.25.4","@codemirror/search":"^6.7.2","@codemirror/commands":"^6.11.0","@codemirror/language":"^6.12.4","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@tanstack/react-table":"^8.21.3","@codemirror/lang-python":"^6.2.1","@codemirror/autocomplete":"^6.20.3","@codemirror/legacy-modes":"^6.5.3","class-variance-authority":"^0.7.1","@codemirror/lang-markdown":"^6.5.2","unique-username-generator":"^1.5.1","@fontsource-variable/inter":"^5.3.0","@plannotator/atomic-editor":"^0.8.0","@codemirror/lang-javascript":"^6.2.5","@plannotator/markdown-editor":"^0.4.0","@plannotator/web-highlighter":"^0.8.1","@fontsource-variable/geist-mono":"5.3.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.2.0","react":"^19.2.8","react-dom":"^19.2.8","@types/bun":"^1.2.0","typescript":"~5.8.2","tailwindcss":"^4.1.18","@types/react":"^19.2.18","@types/react-dom":"^19.2.5","@tailwindcss/vite":"^4.3.3","@happy-dom/global-registrator":"^20.12.0"},"peerDependencies":{"react":"^19.2.3","react-dom":"^19.2.3","tailwindcss":"^4.1.18"},"_npmOperationalInternal":{"tmp":"tmp/ui_0.41.1_1789688100356_0.960615730161493","host":"s3://npm-registry-packages-npm-production"}},"0.41.2":{"name":"@plannotator/ui","version":"0.41.2","_id":"@plannotator/ui@0.41.2","maintainers":[{"name":"backnotprop","email":"backnotprop@gmail.com"}],"dist":{"shasum":"08fe591e436df8d7332ad02d1628fea19c3cc098","tarball":"https://registry.npmjs.org/@plannotator/ui/-/ui-0.41.2.tgz","fileCount":402,"integrity":"sha512-r58+G2Exmtzv7i6QkJ/5CFof2pEkptRKFL6rM+ZD312I+nKArbOGLj5mz6BoxFbUXwIBgQPF4QtKAvYaIpO9Tg==","signatures":[{"sig":"MEQCIHkmV6NC+8X6bpT4k4kGI/ihth46rUvNRRY6vxAToN/OAiB16vqgDTP4zctal4QCLytYy8sA5x7Iom7K2BhjmeOIWA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDyNqtH6eHrrV/6bCcos8aiUB3tpyrOTq2vqZL2zMIyNgIhAPs1e1vJw3R+5VFJ/SyQMDuWkKSxDgB4bzjDq8DuCTTl","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5519768},"type":"module","exports":{"./lib/*":"./lib/*.ts","./theme":"./theme.css","./types":"./types.ts","./config":"./config/index.ts","./webmcp":"./webmcp/index.ts","./hooks/*":"./hooks/*.ts","./utils/*":"./utils/*.ts","./configure":"./configure.ts","./shortcuts":"./shortcuts/index.ts","./styles.css":"./styles.css","./theme-modes":"./components/themeModes.tsx","./components/*":"./components/*.tsx","./components/ai/*":"./components/ai/*.tsx","./components/ui/*":"./components/ui/*.tsx","./components/core/*":"./components/core/*.tsx","./components/diagram":"./components/diagram/index.ts","./components/diagram/*":"./components/diagram/*.tsx","./components/sidebar/*":"./components/sidebar/*.tsx","./components/html-viewer":"./components/html-viewer/index.ts","./components/plan-diff/*":"./components/plan-diff/*.tsx","./components/goal-setup/*":"./components/goal-setup/*.tsx","./components/ImageAnnotator":"./components/ImageAnnotator/index.tsx","./components/html-viewer/bridge-script":"./components/html-viewer/bridge-script.ts","./components/html-viewer/bridge-script.lite":"./components/html-viewer/bridge-script.lite.ts","./components/html-viewer/bridge-script.asset.js":"./components/html-viewer/bridge-script.asset.js"},"gitHead":"1e02fc9c7eae7d63aafcf266ca43c406fb6720a4","scripts":{"prepack":"bun run build:css && bun run build:bridge-assets","build:css":"vite build --config vite.css.config.ts && rm -f styles.js","typecheck":"tsc --noEmit -p tsconfig.json","smoke:package":"bun run scripts/package-smoke.ts","build:bridge-assets":"bun run scripts/build-bridge-assets.ts"},"_npmUser":{"name":"backnotprop","email":"backnotprop@gmail.com"},"_npmVersion":"11.12.1","description":"Plannotator's document UI — markdown rendering, themes, the annotation editor, settings, comments, and layout — as installable building blocks. Published so a separate app (the commercial Workspaces app) can reuse the exact same experience, while Plannota","directories":{},"_nodeVersion":"24.15.0","dependencies":{"clsx":"^2.1.1","diff":"^8.0.4","katex":"^0.16.47","marked":"^17.0.6","motion":"^12.38.0","mermaid":"12.0.0","dompurify":"^3.4.14","@viz-js/viz":"3.30.0","lucide-react":"^1.38.0","@lezer/common":"^1.5.2","@pierre/diffs":"1.3.6","@base-ui/react":"^1.7.0","tailwind-merge":"^3.6.0","@codemirror/view":"^6.43.10","@lezer/highlight":"^1.2.3","perfect-freehand":"^1.2.2","@codemirror/merge":"^6.12.2","@codemirror/state":"^6.7.2","@plannotator/core":"0.25.4","@codemirror/search":"^6.7.2","@codemirror/commands":"^6.11.0","@codemirror/language":"^6.12.4","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@tanstack/react-table":"^8.21.3","@codemirror/lang-python":"^6.2.1","@codemirror/autocomplete":"^6.20.3","@codemirror/legacy-modes":"^6.5.3","class-variance-authority":"^0.7.1","@codemirror/lang-markdown":"^6.5.2","unique-username-generator":"^1.5.1","@fontsource-variable/inter":"^5.3.0","@plannotator/atomic-editor":"^0.8.0","@codemirror/lang-javascript":"^6.2.5","@plannotator/markdown-editor":"^0.4.0","@plannotator/web-highlighter":"^0.8.1","@fontsource-variable/geist-mono":"5.3.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.2.0","react":"^19.2.8","react-dom":"^19.2.8","@types/bun":"^1.2.0","typescript":"~5.8.2","tailwindcss":"^4.1.18","@types/react":"^19.2.18","@types/react-dom":"^19.2.5","@tailwindcss/vite":"^4.3.3","@happy-dom/global-registrator":"^20.12.0"},"peerDependencies":{"react":"^19.2.3","react-dom":"^19.2.3","tailwindcss":"^4.1.18"},"_npmOperationalInternal":{"tmp":"tmp/ui_0.41.2_1789697704084_0.26594519102050707","host":"s3://npm-registry-packages-npm-production"}},"0.42.0":{"name":"@plannotator/ui","version":"0.42.0","_id":"@plannotator/ui@0.42.0","maintainers":[{"name":"backnotprop","email":"backnotprop@gmail.com"}],"dist":{"shasum":"07b28f56f1a6adadf459c2bceeb9d6dfff1b2cfd","tarball":"https://registry.npmjs.org/@plannotator/ui/-/ui-0.42.0.tgz","fileCount":402,"integrity":"sha512-pinD4egnU4YBk92E5Cm20pDkgy2P2ciRlsHjTk2XNi/FosiSgp4Kt/AKzjWG8LQhQRP6J60fIukuP3LAFM6V0A==","signatures":[{"sig":"MEYCIQDbBEF91WGFifc6BeE94rVKiDfgzmPgPnzQX3m1g48L2wIhAO9Zxahji3oiTPI1lvTvtplBtH0E0tTRY0CmqZjtlc4o","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCz1lMCnB1bYTWbJ0cXvNJZ/15HSUQGY3W+FmQCeH2sYAIhAMRcBSS44mAlaJYQw1QxZHudYB+WNmTlInOkUt1Qmdd7","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5525733},"type":"module","exports":{"./lib/*":"./lib/*.ts","./theme":"./theme.css","./types":"./types.ts","./config":"./config/index.ts","./webmcp":"./webmcp/index.ts","./hooks/*":"./hooks/*.ts","./utils/*":"./utils/*.ts","./configure":"./configure.ts","./shortcuts":"./shortcuts/index.ts","./styles.css":"./styles.css","./theme-modes":"./components/themeModes.tsx","./components/*":"./components/*.tsx","./components/ai/*":"./components/ai/*.tsx","./components/ui/*":"./components/ui/*.tsx","./components/core/*":"./components/core/*.tsx","./components/diagram":"./components/diagram/index.ts","./components/diagram/*":"./components/diagram/*.tsx","./components/sidebar/*":"./components/sidebar/*.tsx","./components/html-viewer":"./components/html-viewer/index.ts","./components/plan-diff/*":"./components/plan-diff/*.tsx","./components/goal-setup/*":"./components/goal-setup/*.tsx","./components/ImageAnnotator":"./components/ImageAnnotator/index.tsx","./components/html-viewer/bridge-script":"./components/html-viewer/bridge-script.ts","./components/html-viewer/bridge-script.lite":"./components/html-viewer/bridge-script.lite.ts","./components/html-viewer/bridge-script.asset.js":"./components/html-viewer/bridge-script.asset.js"},"gitHead":"2fcb049549fd6b3860e429962c60fd27c475f693","scripts":{"prepack":"bun run build:css && bun run build:bridge-assets","build:css":"vite build --config vite.css.config.ts && rm -f styles.js","typecheck":"tsc --noEmit -p tsconfig.json","smoke:package":"bun run scripts/package-smoke.ts","build:bridge-assets":"bun run scripts/build-bridge-assets.ts"},"_npmUser":{"name":"backnotprop","email":"backnotprop@gmail.com"},"_npmVersion":"11.12.1","description":"Plannotator's document UI — markdown rendering, themes, the annotation editor, settings, comments, and layout — as installable building blocks. Published so a separate app (the commercial Workspaces app) can reuse the exact same experience, while Plannota","directories":{},"_nodeVersion":"24.15.0","dependencies":{"clsx":"^2.1.1","diff":"^8.0.4","katex":"^0.16.47","marked":"^17.0.6","motion":"^12.38.0","mermaid":"12.0.0","dompurify":"^3.4.14","@viz-js/viz":"3.30.0","lucide-react":"^1.38.0","@lezer/common":"^1.5.2","@pierre/diffs":"1.3.6","@base-ui/react":"^1.7.0","tailwind-merge":"^3.6.0","@codemirror/view":"^6.43.10","@lezer/highlight":"^1.2.3","perfect-freehand":"^1.2.2","@codemirror/merge":"^6.12.2","@codemirror/state":"^6.7.2","@plannotator/core":"0.25.5","@codemirror/search":"^6.7.2","@codemirror/commands":"^6.11.0","@codemirror/language":"^6.12.4","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@tanstack/react-table":"^8.21.3","@codemirror/lang-python":"^6.2.1","@codemirror/autocomplete":"^6.20.3","@codemirror/legacy-modes":"^6.5.3","class-variance-authority":"^0.7.1","@codemirror/lang-markdown":"^6.5.2","unique-username-generator":"^1.5.1","@fontsource-variable/inter":"^5.3.0","@plannotator/atomic-editor":"^0.8.0","@codemirror/lang-javascript":"^6.2.5","@plannotator/markdown-editor":"^0.4.0","@plannotator/web-highlighter":"^0.8.1","@fontsource-variable/geist-mono":"5.3.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.2.0","react":"^19.2.8","react-dom":"^19.2.8","@types/bun":"^1.2.0","typescript":"~5.8.2","tailwindcss":"^4.1.18","@types/react":"^19.2.18","@types/react-dom":"^19.2.5","@tailwindcss/vite":"^4.3.3","@happy-dom/global-registrator":"^20.12.0"},"peerDependencies":{"react":"^19.2.3","react-dom":"^19.2.3","tailwindcss":"^4.1.18"},"_npmOperationalInternal":{"tmp":"tmp/ui_0.42.0_1789779543850_0.5524263129036462","host":"s3://npm-registry-packages-npm-production"}},"0.43.0":{"name":"@plannotator/ui","version":"0.43.0","_id":"@plannotator/ui@0.43.0","maintainers":[{"name":"backnotprop","email":"backnotprop@gmail.com"}],"dist":{"shasum":"59226ff92069628fcc5909b3dab8828deb43d9fc","tarball":"https://registry.npmjs.org/@plannotator/ui/-/ui-0.43.0.tgz","fileCount":407,"integrity":"sha512-LChOnftZcTd1jPTidiOE9ubZQxwLQH9tASlv1cs4qRR8YGIw18zeYkVaZlw1hoRuob4MYgX8ujIKdbzvkYY0KA==","signatures":[{"sig":"MEUCIDGQDwkTJWsO0gkp6l0/mUmrlwrTVDXdndvpxnxYJeO3AiEAz8mCXz6aHVqF2Cf96tECsqQaaMddb7RshszI76A7HPU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCIaRT3Tjt+wgup67MYAuZxq4tDKDLMXUSRxL6mHtxawAIhALszqduL9qXMvxKD2H9iAI3WEpeVsHKyhE1noyQ+719R","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5576937},"type":"module","exports":{"./lib/*":"./lib/*.ts","./theme":"./theme.css","./types":"./types.ts","./config":"./config/index.ts","./webmcp":"./webmcp/index.ts","./hooks/*":"./hooks/*.ts","./utils/*":"./utils/*.ts","./configure":"./configure.ts","./shortcuts":"./shortcuts/index.ts","./styles.css":"./styles.css","./theme-modes":"./components/themeModes.tsx","./components/*":"./components/*.tsx","./components/ai/*":"./components/ai/*.tsx","./components/ui/*":"./components/ui/*.tsx","./components/core/*":"./components/core/*.tsx","./components/diagram":"./components/diagram/index.ts","./components/diagram/*":"./components/diagram/*.tsx","./components/sidebar/*":"./components/sidebar/*.tsx","./components/html-viewer":"./components/html-viewer/index.ts","./components/plan-diff/*":"./components/plan-diff/*.tsx","./components/goal-setup/*":"./components/goal-setup/*.tsx","./components/ImageAnnotator":"./components/ImageAnnotator/index.tsx","./components/html-viewer/bridge-script":"./components/html-viewer/bridge-script.ts","./components/html-viewer/bridge-script.lite":"./components/html-viewer/bridge-script.lite.ts","./components/html-viewer/bridge-script.asset.js":"./components/html-viewer/bridge-script.asset.js"},"gitHead":"8fb069df4ebab0829bf08be78f073c42bd0f12c9","scripts":{"prepack":"bun run build:css && bun run build:bridge-assets","build:css":"vite build --config vite.css.config.ts && rm -f styles.js","typecheck":"tsc --noEmit -p tsconfig.json","smoke:package":"bun run scripts/package-smoke.ts","build:bridge-assets":"bun run scripts/build-bridge-assets.ts"},"_npmUser":{"name":"backnotprop","email":"backnotprop@gmail.com"},"_npmVersion":"11.12.1","description":"Plannotator's document UI — markdown rendering, themes, the annotation editor, settings, comments, and layout — as installable building blocks. Published so a separate app (the commercial Workspaces app) can reuse the exact same experience, while Plannota","directories":{},"_nodeVersion":"24.15.0","dependencies":{"clsx":"^2.1.1","diff":"^8.0.4","katex":"^0.16.47","marked":"^17.0.6","motion":"^12.38.0","mermaid":"12.0.0","dompurify":"^3.4.14","@viz-js/viz":"3.30.0","lucide-react":"^1.38.0","@lezer/common":"^1.5.2","@pierre/diffs":"1.3.6","@base-ui/react":"^1.7.0","tailwind-merge":"^3.6.0","@codemirror/view":"^6.43.10","@lezer/highlight":"^1.2.3","perfect-freehand":"^1.2.2","@codemirror/merge":"^6.12.2","@codemirror/state":"^6.7.2","@plannotator/core":"0.25.5","@codemirror/search":"^6.7.2","@codemirror/commands":"^6.11.0","@codemirror/language":"^6.12.4","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@tanstack/react-table":"^8.21.3","@codemirror/lang-python":"^6.2.1","@codemirror/autocomplete":"^6.20.3","@codemirror/legacy-modes":"^6.5.3","class-variance-authority":"^0.7.1","@codemirror/lang-markdown":"^6.5.2","unique-username-generator":"^1.5.1","@fontsource-variable/inter":"^5.3.0","@plannotator/atomic-editor":"^0.8.0","@codemirror/lang-javascript":"^6.2.5","@plannotator/markdown-editor":"^0.4.0","@plannotator/web-highlighter":"^0.8.1","@fontsource-variable/geist-mono":"5.3.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.2.0","react":"^19.2.8","react-dom":"^19.2.8","@types/bun":"^1.2.0","typescript":"~5.8.2","tailwindcss":"^4.1.18","@types/react":"^19.2.18","@types/react-dom":"^19.2.5","@tailwindcss/vite":"^4.3.3","@happy-dom/global-registrator":"^20.12.0"},"peerDependencies":{"react":"^19.2.3","react-dom":"^19.2.3","tailwindcss":"^4.1.18"},"_npmOperationalInternal":{"tmp":"tmp/ui_0.43.0_1789799231536_0.8466252697083252","host":"s3://npm-registry-packages-npm-production"}},"0.43.1":{"name":"@plannotator/ui","version":"0.43.1","_id":"@plannotator/ui@0.43.1","maintainers":[{"name":"backnotprop","email":"backnotprop@gmail.com"}],"dist":{"shasum":"9713c74bc8fab7b7c9a90ba6af48501252b1dae3","tarball":"https://registry.npmjs.org/@plannotator/ui/-/ui-0.43.1.tgz","fileCount":407,"integrity":"sha512-GIjuin3ep8oUVmu/hPW2iJBbxi8bGziTE2XsJhs36j12EWdNRiHQ337MhTmRn/Cvqj9Dneg1Mk8h927qI1zoTw==","signatures":[{"sig":"MEUCIQCK3Z1wd0DJO0SsVGlpSz+YXuF9IY4mCRLX5XazuSi6zAIgVQtdMDNCGiXnbpkAyPMD5CGMXotsuDoWko9IlNecOFo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIHpf3QfferK4VuRFT1rHVf9o9qftee3SRkIGUI6gjuH3AiAaIzXc68jOpK4yv7SgQ2+sGzISBBC49d11q3tX04Cz1w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5588434},"type":"module","exports":{"./lib/*":"./lib/*.ts","./theme":"./theme.css","./types":"./types.ts","./config":"./config/index.ts","./webmcp":"./webmcp/index.ts","./hooks/*":"./hooks/*.ts","./utils/*":"./utils/*.ts","./configure":"./configure.ts","./shortcuts":"./shortcuts/index.ts","./styles.css":"./styles.css","./theme-modes":"./components/themeModes.tsx","./components/*":"./components/*.tsx","./components/ai/*":"./components/ai/*.tsx","./components/ui/*":"./components/ui/*.tsx","./components/core/*":"./components/core/*.tsx","./components/diagram":"./components/diagram/index.ts","./components/diagram/*":"./components/diagram/*.tsx","./components/sidebar/*":"./components/sidebar/*.tsx","./components/html-viewer":"./components/html-viewer/index.ts","./components/plan-diff/*":"./components/plan-diff/*.tsx","./components/goal-setup/*":"./components/goal-setup/*.tsx","./components/ImageAnnotator":"./components/ImageAnnotator/index.tsx","./components/html-viewer/bridge-script":"./components/html-viewer/bridge-script.ts","./components/html-viewer/bridge-script.lite":"./components/html-viewer/bridge-script.lite.ts","./components/html-viewer/bridge-script.asset.js":"./components/html-viewer/bridge-script.asset.js"},"gitHead":"61da2aef36a82a1de54fc19a023d20ffcb0123ce","scripts":{"prepack":"bun run build:css && bun run build:bridge-assets","build:css":"vite build --config vite.css.config.ts && rm -f styles.js","typecheck":"tsc --noEmit -p tsconfig.json","smoke:package":"bun run scripts/package-smoke.ts","build:bridge-assets":"bun run scripts/build-bridge-assets.ts"},"_npmUser":{"name":"backnotprop","email":"backnotprop@gmail.com"},"_npmVersion":"11.12.1","description":"Plannotator's document UI — markdown rendering, themes, the annotation editor, settings, comments, and layout — as installable building blocks. Published so a separate app (the commercial Workspaces app) can reuse the exact same experience, while Plannota","directories":{},"_nodeVersion":"24.15.0","dependencies":{"clsx":"^2.1.1","diff":"^8.0.4","katex":"^0.16.47","marked":"^17.0.6","motion":"^12.38.0","mermaid":"12.0.0","dompurify":"^3.4.14","@viz-js/viz":"3.30.0","lucide-react":"^1.38.0","@lezer/common":"^1.5.2","@pierre/diffs":"1.3.6","@base-ui/react":"^1.7.0","tailwind-merge":"^3.6.0","@codemirror/view":"^6.43.10","@lezer/highlight":"^1.2.3","perfect-freehand":"^1.2.2","@codemirror/merge":"^6.12.2","@codemirror/state":"^6.7.2","@plannotator/core":"0.25.5","@codemirror/search":"^6.7.2","@codemirror/commands":"^6.11.0","@codemirror/language":"^6.12.4","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@tanstack/react-table":"^8.21.3","@codemirror/lang-python":"^6.2.1","@codemirror/autocomplete":"^6.20.3","@codemirror/legacy-modes":"^6.5.3","class-variance-authority":"^0.7.1","@codemirror/lang-markdown":"^6.5.2","unique-username-generator":"^1.5.1","@fontsource-variable/inter":"^5.3.0","@plannotator/atomic-editor":"^0.8.0","@codemirror/lang-javascript":"^6.2.5","@plannotator/markdown-editor":"^0.4.0","@plannotator/web-highlighter":"^0.8.1","@fontsource-variable/geist-mono":"5.3.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.2.0","react":"^19.2.8","react-dom":"^19.2.8","@types/bun":"^1.2.0","typescript":"~5.8.2","tailwindcss":"^4.1.18","@types/react":"^19.2.18","@types/react-dom":"^19.2.5","@tailwindcss/vite":"^4.3.3","@happy-dom/global-registrator":"^20.12.0"},"peerDependencies":{"react":"^19.2.3","react-dom":"^19.2.3","tailwindcss":"^4.1.18"},"_npmOperationalInternal":{"tmp":"tmp/ui_0.43.1_1789832881410_0.5924091250406032","host":"s3://npm-registry-packages-npm-production"}},"0.43.2":{"name":"@plannotator/ui","version":"0.43.2","_id":"@plannotator/ui@0.43.2","maintainers":[{"name":"backnotprop","email":"backnotprop@gmail.com"}],"dist":{"shasum":"2955f030197acb42fe1e9370e1dffe5ad8c0ece5","tarball":"https://registry.npmjs.org/@plannotator/ui/-/ui-0.43.2.tgz","fileCount":407,"integrity":"sha512-2RjOZvD2qYRhBLY1sRYoQGwcv3UVweVSINU6wuCeOr1Q6KYdz2qGnFkG13kZjVsr68DvUvJSnah6dYQirIYV4g==","signatures":[{"sig":"MEQCIGWGF74noVCSYS2BcHdPF+S3zN70bqD1pkWIbBS6+q4gAiAbzUbSXG0nHmFZZhJnqgVctjGt+UA1xV8cg1ObnxQBYw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCZQv7N8zhOaHL15nldNxexZ9AJBTAJYjbGlsn5zSB0+gIhAJAMCWfx4gzDdf3mYYGJLfnVotaQneyXTLtJGtJA9zrB","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5591366},"type":"module","exports":{"./lib/*":"./lib/*.ts","./theme":"./theme.css","./types":"./types.ts","./config":"./config/index.ts","./webmcp":"./webmcp/index.ts","./hooks/*":"./hooks/*.ts","./utils/*":"./utils/*.ts","./configure":"./configure.ts","./shortcuts":"./shortcuts/index.ts","./styles.css":"./styles.css","./theme-modes":"./components/themeModes.tsx","./components/*":"./components/*.tsx","./components/ai/*":"./components/ai/*.tsx","./components/ui/*":"./components/ui/*.tsx","./components/core/*":"./components/core/*.tsx","./components/diagram":"./components/diagram/index.ts","./components/diagram/*":"./components/diagram/*.tsx","./components/sidebar/*":"./components/sidebar/*.tsx","./components/html-viewer":"./components/html-viewer/index.ts","./components/plan-diff/*":"./components/plan-diff/*.tsx","./components/goal-setup/*":"./components/goal-setup/*.tsx","./components/ImageAnnotator":"./components/ImageAnnotator/index.tsx","./components/html-viewer/bridge-script":"./components/html-viewer/bridge-script.ts","./components/html-viewer/bridge-script.lite":"./components/html-viewer/bridge-script.lite.ts","./components/html-viewer/bridge-script.asset.js":"./components/html-viewer/bridge-script.asset.js"},"gitHead":"0d7387b2dc929268432ddbe40a5f2c96116657e0","scripts":{"prepack":"bun run build:css && bun run build:bridge-assets","build:css":"vite build --config vite.css.config.ts && rm -f styles.js","typecheck":"tsc --noEmit -p tsconfig.json","smoke:package":"bun run scripts/package-smoke.ts","build:bridge-assets":"bun run scripts/build-bridge-assets.ts"},"_npmUser":{"name":"backnotprop","email":"backnotprop@gmail.com"},"_npmVersion":"11.12.1","description":"Plannotator's document UI — markdown rendering, themes, the annotation editor, settings, comments, and layout — as installable building blocks. Published so a separate app (the commercial Workspaces app) can reuse the exact same experience, while Plannota","directories":{},"_nodeVersion":"24.15.0","dependencies":{"clsx":"^2.1.1","diff":"^8.0.4","katex":"^0.16.47","marked":"^17.0.6","motion":"^12.38.0","mermaid":"12.0.0","dompurify":"^3.4.14","@viz-js/viz":"3.30.0","lucide-react":"^1.38.0","@lezer/common":"^1.5.2","@pierre/diffs":"1.3.6","@base-ui/react":"^1.7.0","tailwind-merge":"^3.6.0","@codemirror/view":"^6.43.10","@lezer/highlight":"^1.2.3","perfect-freehand":"^1.2.2","@codemirror/merge":"^6.12.2","@codemirror/state":"^6.7.2","@plannotator/core":"0.25.5","@codemirror/search":"^6.7.2","@codemirror/commands":"^6.11.0","@codemirror/language":"^6.12.4","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@tanstack/react-table":"^8.21.3","@codemirror/lang-python":"^6.2.1","@codemirror/autocomplete":"^6.20.3","@codemirror/legacy-modes":"^6.5.3","class-variance-authority":"^0.7.1","@codemirror/lang-markdown":"^6.5.2","unique-username-generator":"^1.5.1","@fontsource-variable/inter":"^5.3.0","@plannotator/atomic-editor":"^0.8.0","@codemirror/lang-javascript":"^6.2.5","@plannotator/markdown-editor":"^0.4.0","@plannotator/web-highlighter":"^0.8.1","@fontsource-variable/geist-mono":"5.3.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.2.0","react":"^19.2.8","react-dom":"^19.2.8","@types/bun":"^1.2.0","typescript":"~5.8.2","tailwindcss":"^4.1.18","@types/react":"^19.2.18","@types/react-dom":"^19.2.5","@tailwindcss/vite":"^4.3.3","@happy-dom/global-registrator":"^20.12.0"},"peerDependencies":{"react":"^19.2.3","react-dom":"^19.2.3","tailwindcss":"^4.1.18"},"_npmOperationalInternal":{"tmp":"tmp/ui_0.43.2_1789836971208_0.2484473173170143","host":"s3://npm-registry-packages-npm-production"}},"0.44.0":{"name":"@plannotator/ui","version":"0.44.0","_id":"@plannotator/ui@0.44.0","maintainers":[{"name":"backnotprop","email":"backnotprop@gmail.com"}],"dist":{"shasum":"94afc3767330b93392e1c22ad1affe6726937a29","tarball":"https://registry.npmjs.org/@plannotator/ui/-/ui-0.44.0.tgz","fileCount":408,"integrity":"sha512-NecuAM+jthcAqrtR6KzR57rc9Nd8IifHJ9Ijhjp5Zp/J6E+Sjmxha2o4GcF6bD1Ty0oUAts1wAlxcU2VG1HyNQ==","signatures":[{"sig":"MEUCIQDNtOaT16SVO1HrYd6HtDOPIRXPYIYxWpbK9hikXx33ZQIgJkA0eGogJCvAq+EEX9VLPr3ifVgHJ6H8kuvOILo7YSI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCwfSxviLT7S6M1YT/4vdrmHcAEc+RyvWKebNTe/vrliwIhAKTj2qZoFcAVTRxUgygOe0VYNaY28f17onl/cIHqQiPu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5613422},"type":"module","exports":{"./lib/*":"./lib/*.ts","./theme":"./theme.css","./types":"./types.ts","./config":"./config/index.ts","./webmcp":"./webmcp/index.ts","./hooks/*":"./hooks/*.ts","./utils/*":"./utils/*.ts","./configure":"./configure.ts","./shortcuts":"./shortcuts/index.ts","./styles.css":"./styles.css","./theme-modes":"./components/themeModes.tsx","./components/*":"./components/*.tsx","./components/ai/*":"./components/ai/*.tsx","./components/ui/*":"./components/ui/*.tsx","./components/core/*":"./components/core/*.tsx","./components/diagram":"./components/diagram/index.ts","./components/diagram/*":"./components/diagram/*.tsx","./components/sidebar/*":"./components/sidebar/*.tsx","./components/html-viewer":"./components/html-viewer/index.ts","./components/plan-diff/*":"./components/plan-diff/*.tsx","./components/goal-setup/*":"./components/goal-setup/*.tsx","./components/ImageAnnotator":"./components/ImageAnnotator/index.tsx","./components/html-viewer/bridge-script":"./components/html-viewer/bridge-script.ts","./components/html-viewer/bridge-script.lite":"./components/html-viewer/bridge-script.lite.ts","./components/html-viewer/bridge-script.asset.js":"./components/html-viewer/bridge-script.asset.js"},"gitHead":"00eb88018221fba2d191f6dbd824e9bf2a6d5cb3","scripts":{"prepack":"bun run build:css && bun run build:bridge-assets","build:css":"vite build --config vite.css.config.ts && rm -f styles.js","typecheck":"tsc --noEmit -p tsconfig.json","smoke:package":"bun run scripts/package-smoke.ts","build:bridge-assets":"bun run scripts/build-bridge-assets.ts"},"_npmUser":{"name":"backnotprop","email":"backnotprop@gmail.com"},"_npmVersion":"11.12.1","description":"Plannotator's document UI — markdown rendering, themes, the annotation editor, settings, comments, and layout — as installable building blocks. Published so a separate app (the commercial Workspaces app) can reuse the exact same experience, while Plannota","directories":{},"_nodeVersion":"24.15.0","dependencies":{"clsx":"^2.1.1","diff":"^8.0.4","katex":"^0.16.47","marked":"^17.0.6","motion":"^12.38.0","mermaid":"12.0.0","dompurify":"^3.4.14","@viz-js/viz":"3.30.0","lucide-react":"^1.38.0","@lezer/common":"^1.5.2","@pierre/diffs":"1.3.6","@base-ui/react":"^1.7.0","tailwind-merge":"^3.6.0","@codemirror/view":"^6.43.10","@lezer/highlight":"^1.2.3","perfect-freehand":"^1.2.2","@codemirror/merge":"^6.12.2","@codemirror/state":"^6.7.2","@plannotator/core":"0.25.5","@codemirror/search":"^6.7.2","@codemirror/commands":"^6.11.0","@codemirror/language":"^6.12.4","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@tanstack/react-table":"^8.21.3","@codemirror/lang-python":"^6.2.1","@codemirror/autocomplete":"^6.20.3","@codemirror/legacy-modes":"^6.5.3","class-variance-authority":"^0.7.1","@codemirror/lang-markdown":"^6.5.2","unique-username-generator":"^1.5.1","@fontsource-variable/inter":"^5.3.0","@plannotator/atomic-editor":"^0.8.0","@codemirror/lang-javascript":"^6.2.5","@plannotator/markdown-editor":"^0.4.0","@plannotator/web-highlighter":"^0.8.1","@fontsource-variable/geist-mono":"5.3.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.2.0","react":"^19.2.8","react-dom":"^19.2.8","@types/bun":"^1.2.0","typescript":"~5.8.2","tailwindcss":"^4.1.18","@types/react":"^19.2.18","@types/react-dom":"^19.2.5","@tailwindcss/vite":"^4.3.3","@happy-dom/global-registrator":"^20.12.0"},"peerDependencies":{"react":"^19.2.3","react-dom":"^19.2.3","tailwindcss":"^4.1.18"},"_npmOperationalInternal":{"tmp":"tmp/ui_0.44.0_1789856694236_0.44755816030507534","host":"s3://npm-registry-packages-npm-production"}},"0.45.0":{"name":"@plannotator/ui","version":"0.45.0","_id":"@plannotator/ui@0.45.0","maintainers":[{"name":"backnotprop","email":"backnotprop@gmail.com"}],"dist":{"shasum":"eaefe0d6d5d073311fe2fc20c3c192dec6fd2237","tarball":"https://registry.npmjs.org/@plannotator/ui/-/ui-0.45.0.tgz","fileCount":409,"integrity":"sha512-DokCbmu0nBIW2WnCSIxIggnymByLarE5eEaFxPmB75oFplNVENM3fTlZxFU6zwAHZ+kDiQYSxYWZqeqiUhBm3Q==","signatures":[{"sig":"MEUCIHB6bpp68YysIhHERozx6BdouSErbrgIsMhmQBZOy9y/AiEA+THNc1E6aSKGBghbZu418aqNfOQjeK27S0FIg47T+wU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIFyOPpRECSiRke8EcX9aItAeqvbZ06EYdD1UY9VluTvKAiEA61eCTTU8UWu/up+mZu+RZ0Td7nCxusG6fSeEeAUA55E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5632653},"type":"module","exports":{"./lib/*":"./lib/*.ts","./theme":"./theme.css","./types":"./types.ts","./config":"./config/index.ts","./webmcp":"./webmcp/index.ts","./hooks/*":"./hooks/*.ts","./utils/*":"./utils/*.ts","./configure":"./configure.ts","./shortcuts":"./shortcuts/index.ts","./styles.css":"./styles.css","./theme-modes":"./components/themeModes.tsx","./components/*":"./components/*.tsx","./components/ai/*":"./components/ai/*.tsx","./components/ui/*":"./components/ui/*.tsx","./components/core/*":"./components/core/*.tsx","./components/diagram":"./components/diagram/index.ts","./components/diagram/*":"./components/diagram/*.tsx","./components/sidebar/*":"./components/sidebar/*.tsx","./components/html-viewer":"./components/html-viewer/index.ts","./components/plan-diff/*":"./components/plan-diff/*.tsx","./components/goal-setup/*":"./components/goal-setup/*.tsx","./components/ImageAnnotator":"./components/ImageAnnotator/index.tsx","./components/html-viewer/bridge-script":"./components/html-viewer/bridge-script.ts","./components/html-viewer/bridge-script.lite":"./components/html-viewer/bridge-script.lite.ts","./components/html-viewer/bridge-script.asset.js":"./components/html-viewer/bridge-script.asset.js"},"gitHead":"56a2ce811a10ffb0d2d6248fbafdf3ae32c6c356","scripts":{"prepack":"bun run build:css && bun run build:bridge-assets","build:css":"vite build --config vite.css.config.ts && rm -f styles.js","typecheck":"tsc --noEmit -p tsconfig.json","smoke:package":"bun run scripts/package-smoke.ts","build:bridge-assets":"bun run scripts/build-bridge-assets.ts"},"_npmUser":{"name":"backnotprop","email":"backnotprop@gmail.com"},"_npmVersion":"11.12.1","description":"Plannotator's document UI — markdown rendering, themes, the annotation editor, settings, comments, and layout — as installable building blocks. Published so a separate app (the commercial Workspaces app) can reuse the exact same experience, while Plannota","directories":{},"_nodeVersion":"24.15.0","dependencies":{"clsx":"^2.1.1","diff":"^8.0.4","katex":"^0.16.47","marked":"^17.0.6","motion":"^12.38.0","mermaid":"12.0.0","dompurify":"^3.4.14","@viz-js/viz":"3.30.0","lucide-react":"^1.38.0","@lezer/common":"^1.5.2","@pierre/diffs":"1.3.6","@base-ui/react":"^1.7.0","tailwind-merge":"^3.6.0","@codemirror/view":"^6.43.10","@lezer/highlight":"^1.2.3","perfect-freehand":"^1.2.2","@codemirror/merge":"^6.12.2","@codemirror/state":"^6.7.2","@plannotator/core":"0.25.5","@codemirror/search":"^6.7.2","@codemirror/commands":"^6.11.0","@codemirror/language":"^6.12.4","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@tanstack/react-table":"^8.21.3","@codemirror/lang-python":"^6.2.1","@codemirror/autocomplete":"^6.20.3","@codemirror/legacy-modes":"^6.5.3","class-variance-authority":"^0.7.1","@codemirror/lang-markdown":"^6.5.2","unique-username-generator":"^1.5.1","@fontsource-variable/inter":"^5.3.0","@plannotator/atomic-editor":"^0.8.0","@codemirror/lang-javascript":"^6.2.5","@plannotator/markdown-editor":"^0.4.0","@plannotator/web-highlighter":"^0.8.1","@fontsource-variable/geist-mono":"5.3.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.2.0","react":"^19.2.8","react-dom":"^19.2.8","@types/bun":"^1.2.0","typescript":"~5.8.2","tailwindcss":"^4.1.18","@types/react":"^19.2.18","@types/react-dom":"^19.2.5","@tailwindcss/vite":"^4.3.3","@happy-dom/global-registrator":"^20.12.0"},"peerDependencies":{"react":"^19.2.3","react-dom":"^19.2.3","tailwindcss":"^4.1.18"},"_npmOperationalInternal":{"tmp":"tmp/ui_0.45.0_1789865316392_0.9322703252928612","host":"s3://npm-registry-packages-npm-production"}},"0.45.1":{"name":"@plannotator/ui","version":"0.45.1","_id":"@plannotator/ui@0.45.1","maintainers":[{"name":"backnotprop","email":"backnotprop@gmail.com"}],"dist":{"shasum":"ddb8dba2e868503c771a570725989f74b020305f","tarball":"https://registry.npmjs.org/@plannotator/ui/-/ui-0.45.1.tgz","fileCount":409,"integrity":"sha512-Yhke3tjmv/6w2oszWoaEhCerOy6MyUDAYeV4VS4TrrPP8IpYMQDYWLU+hHvvYIlB+XN+5t9LYTaS+98VcXH8pg==","signatures":[{"sig":"MEYCIQCTbnE5xV1IW8HuLXoOY9h/CuTLVqadDUfIWMUDQvWP8wIhAOTaCeJohlW9vVrdp9vCO96UAd28f60IUltAJ5tl7iN2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCID/p5Alhd4LU5SEjGNFkLfD7eQ8g4V9kkYc7R5biI0Y1AiEAgsD2YNyW+nEBUhgQOSsDvHnNlei33tmGLLLflX/jvas=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5634017},"type":"module","exports":{"./lib/*":"./lib/*.ts","./theme":"./theme.css","./types":"./types.ts","./config":"./config/index.ts","./webmcp":"./webmcp/index.ts","./hooks/*":"./hooks/*.ts","./utils/*":"./utils/*.ts","./configure":"./configure.ts","./shortcuts":"./shortcuts/index.ts","./styles.css":"./styles.css","./theme-modes":"./components/themeModes.tsx","./components/*":"./components/*.tsx","./components/ai/*":"./components/ai/*.tsx","./components/ui/*":"./components/ui/*.tsx","./components/core/*":"./components/core/*.tsx","./components/diagram":"./components/diagram/index.ts","./components/diagram/*":"./components/diagram/*.tsx","./components/sidebar/*":"./components/sidebar/*.tsx","./components/html-viewer":"./components/html-viewer/index.ts","./components/plan-diff/*":"./components/plan-diff/*.tsx","./components/goal-setup/*":"./components/goal-setup/*.tsx","./components/ImageAnnotator":"./components/ImageAnnotator/index.tsx","./components/html-viewer/bridge-script":"./components/html-viewer/bridge-script.ts","./components/html-viewer/bridge-script.lite":"./components/html-viewer/bridge-script.lite.ts","./components/html-viewer/bridge-script.asset.js":"./components/html-viewer/bridge-script.asset.js"},"gitHead":"2988df4290d90490b24c0edd61750c37fe153424","scripts":{"prepack":"bun run build:css && bun run build:bridge-assets","build:css":"vite build --config vite.css.config.ts && rm -f styles.js","typecheck":"tsc --noEmit -p tsconfig.json","smoke:package":"bun run scripts/package-smoke.ts","build:bridge-assets":"bun run scripts/build-bridge-assets.ts"},"_npmUser":{"name":"backnotprop","email":"backnotprop@gmail.com"},"_npmVersion":"11.12.1","description":"Plannotator's document UI — markdown rendering, themes, the annotation editor, settings, comments, and layout — as installable building blocks. Published so a separate app (the commercial Workspaces app) can reuse the exact same experience, while Plannota","directories":{},"_nodeVersion":"24.15.0","dependencies":{"clsx":"^2.1.1","diff":"^8.0.4","katex":"^0.16.47","marked":"^17.0.6","motion":"^12.38.0","mermaid":"12.0.0","dompurify":"^3.4.14","@viz-js/viz":"3.30.0","lucide-react":"^1.38.0","@lezer/common":"^1.5.2","@pierre/diffs":"1.3.6","@base-ui/react":"^1.7.0","tailwind-merge":"^3.6.0","@codemirror/view":"^6.43.10","@lezer/highlight":"^1.2.3","perfect-freehand":"^1.2.2","@codemirror/merge":"^6.12.2","@codemirror/state":"^6.7.2","@plannotator/core":"0.25.5","@codemirror/search":"^6.7.2","@codemirror/commands":"^6.11.0","@codemirror/language":"^6.12.4","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@tanstack/react-table":"^8.21.3","@codemirror/lang-python":"^6.2.1","@codemirror/autocomplete":"^6.20.3","@codemirror/legacy-modes":"^6.5.3","class-variance-authority":"^0.7.1","@codemirror/lang-markdown":"^6.5.2","unique-username-generator":"^1.5.1","@fontsource-variable/inter":"^5.3.0","@plannotator/atomic-editor":"^0.8.0","@codemirror/lang-javascript":"^6.2.5","@plannotator/markdown-editor":"^0.4.0","@plannotator/web-highlighter":"^0.8.1","@fontsource-variable/geist-mono":"5.3.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.2.0","react":"^19.2.8","react-dom":"^19.2.8","@types/bun":"^1.2.0","typescript":"~5.8.2","tailwindcss":"^4.1.18","@types/react":"^19.2.18","@types/react-dom":"^19.2.5","@tailwindcss/vite":"^4.3.3","@happy-dom/global-registrator":"^20.12.0"},"peerDependencies":{"react":"^19.2.3","react-dom":"^19.2.3","tailwindcss":"^4.1.18"},"_npmOperationalInternal":{"tmp":"tmp/ui_0.45.1_1789870002313_0.01714432179524139","host":"s3://npm-registry-packages-npm-production"}},"0.46.0":{"name":"@plannotator/ui","version":"0.46.0","_id":"@plannotator/ui@0.46.0","maintainers":[{"name":"backnotprop","email":"backnotprop@gmail.com"}],"dist":{"shasum":"bb7871de26a1577bd6353b424e06909337a59b62","tarball":"https://registry.npmjs.org/@plannotator/ui/-/ui-0.46.0.tgz","fileCount":408,"integrity":"sha512-O26BjSnbJu4AJPEatmFZ6scbWvAV2Q61vlqK3UOGINd82vLsEeAoT2g2sojOpFYtpmyYHuYkosdAtoK3/U+INQ==","signatures":[{"sig":"MEYCIQDqqRel0wwJ6kZdtwShpyVOhWYPE9tW4lleUncFKM2KugIhAK/WaoWhK1ITBscfhGjzFdd47bRk3KrNTWihWH+YJISp","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDNc1hxX1xpRxt6osAK7oeFkjVCGH4jH9pobVt8gB85NAIhAMRGs5oAy1HKRvTUSvtxsJDXQ4g+Ss/+DHyVb1TMGFS9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5578232},"type":"module","exports":{"./lib/*":"./lib/*.ts","./theme":"./theme.css","./types":"./types.ts","./config":"./config/index.ts","./webmcp":"./webmcp/index.ts","./hooks/*":"./hooks/*.ts","./utils/*":"./utils/*.ts","./configure":"./configure.ts","./shortcuts":"./shortcuts/index.ts","./styles.css":"./styles.css","./theme-modes":"./components/themeModes.tsx","./components/*":"./components/*.tsx","./components/ai/*":"./components/ai/*.tsx","./components/ui/*":"./components/ui/*.tsx","./components/core/*":"./components/core/*.tsx","./components/diagram":"./components/diagram/index.ts","./components/diagram/*":"./components/diagram/*.tsx","./components/sidebar/*":"./components/sidebar/*.tsx","./components/html-viewer":"./components/html-viewer/index.ts","./components/plan-diff/*":"./components/plan-diff/*.tsx","./components/goal-setup/*":"./components/goal-setup/*.tsx","./components/ImageAnnotator":"./components/ImageAnnotator/index.tsx","./components/html-viewer/bridge-script":"./components/html-viewer/bridge-script.ts","./components/html-viewer/bridge-script.lite":"./components/html-viewer/bridge-script.lite.ts","./components/html-viewer/bridge-script.asset.js":"./components/html-viewer/bridge-script.asset.js"},"scripts":{"prepack":"bun run build:css && bun run build:bridge-assets","build:css":"vite build --config vite.css.config.ts && rm -f styles.js","typecheck":"tsc --noEmit -p tsconfig.json","smoke:package":"bun run scripts/package-smoke.ts","build:bridge-assets":"bun run scripts/build-bridge-assets.ts"},"_npmUser":{"name":"backnotprop","email":"backnotprop@gmail.com"},"_npmVersion":"11.12.1","description":"Plannotator's document UI — markdown rendering, themes, the annotation editor, settings, comments, and layout — as installable building blocks. Published so a separate app (the commercial Workspaces app) can reuse the exact same experience, while Plannota","directories":{},"_nodeVersion":"24.15.0","dependencies":{"clsx":"^2.1.1","diff":"^8.0.4","katex":"^0.16.47","marked":"^17.0.6","motion":"^12.38.0","mermaid":"12.0.0","dompurify":"^3.4.14","@viz-js/viz":"3.30.0","lucide-react":"^1.38.0","@lezer/common":"^1.5.2","@pierre/diffs":"1.3.6","@base-ui/react":"^1.7.0","tailwind-merge":"^3.6.0","@codemirror/view":"^6.43.10","@lezer/highlight":"^1.2.3","perfect-freehand":"^1.2.2","@codemirror/merge":"^6.12.2","@codemirror/state":"^6.7.2","@plannotator/core":"0.25.6","@codemirror/search":"^6.7.2","@codemirror/commands":"^6.11.0","@codemirror/language":"^6.12.4","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@tanstack/react-table":"^8.21.3","@codemirror/lang-python":"^6.2.1","@codemirror/autocomplete":"^6.20.3","@codemirror/legacy-modes":"^6.5.3","class-variance-authority":"^0.7.1","@codemirror/lang-markdown":"^6.5.2","unique-username-generator":"^1.5.1","@fontsource-variable/inter":"^5.3.0","@plannotator/atomic-editor":"^0.8.0","@codemirror/lang-javascript":"^6.2.5","@plannotator/markdown-editor":"^0.4.0","@plannotator/web-highlighter":"^0.8.1","@fontsource-variable/geist-mono":"5.3.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.2.0","react":"^19.2.8","react-dom":"^19.2.8","@types/bun":"^1.2.0","typescript":"~5.8.2","tailwindcss":"^4.1.18","@types/react":"^19.2.18","@types/react-dom":"^19.2.5","@tailwindcss/vite":"^4.3.3","@happy-dom/global-registrator":"^20.12.0"},"peerDependencies":{"react":"^19.2.3","react-dom":"^19.2.3","tailwindcss":"^4.1.18"},"_npmOperationalInternal":{"tmp":"tmp/ui_0.46.0_1790277382465_0.7519134992348182","host":"s3://npm-registry-packages-npm-production"}},"0.46.1":{"name":"@plannotator/ui","version":"0.46.1","_id":"@plannotator/ui@0.46.1","maintainers":[{"name":"backnotprop","email":"backnotprop@gmail.com"}],"dist":{"shasum":"f86bc270af66e789276e0b04cf6d29d7eb277a1d","tarball":"https://registry.npmjs.org/@plannotator/ui/-/ui-0.46.1.tgz","fileCount":408,"integrity":"sha512-DKs6gM1Ei1lxhqB6sif7hw/Nv3hc2CIIMgnjBL1aTqoEzR4O5FMOAS02pB1veOl4ZKiAZXiysTA3D7C9DV9fiw==","signatures":[{"sig":"MEUCIQCOW48EbSx+fVTFhcZ95fX1k81czW9cXAWuafVO60WF1wIgAYsgrSwXOLEfUHfLSXvvGWGKceSbiyP6gmfT0NdJte4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIAEbG2RFEU/78PsUxy6vZUkH+eNHlmlETkMpqvkQrs1YAiEAldjwVicQYOUtkv8jOVzYF2TvnFrXvL3P8XFDl5TPSdo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5579442},"type":"module","exports":{"./lib/*":"./lib/*.ts","./theme":"./theme.css","./types":"./types.ts","./config":"./config/index.ts","./webmcp":"./webmcp/index.ts","./hooks/*":"./hooks/*.ts","./utils/*":"./utils/*.ts","./configure":"./configure.ts","./shortcuts":"./shortcuts/index.ts","./styles.css":"./styles.css","./theme-modes":"./components/themeModes.tsx","./components/*":"./components/*.tsx","./components/ai/*":"./components/ai/*.tsx","./components/ui/*":"./components/ui/*.tsx","./components/core/*":"./components/core/*.tsx","./components/diagram":"./components/diagram/index.ts","./components/diagram/*":"./components/diagram/*.tsx","./components/sidebar/*":"./components/sidebar/*.tsx","./components/html-viewer":"./components/html-viewer/index.ts","./components/plan-diff/*":"./components/plan-diff/*.tsx","./components/goal-setup/*":"./components/goal-setup/*.tsx","./components/ImageAnnotator":"./components/ImageAnnotator/index.tsx","./components/html-viewer/bridge-script":"./components/html-viewer/bridge-script.ts","./components/html-viewer/bridge-script.lite":"./components/html-viewer/bridge-script.lite.ts","./components/html-viewer/bridge-script.asset.js":"./components/html-viewer/bridge-script.asset.js"},"scripts":{"prepack":"bun run build:css && bun run build:bridge-assets","build:css":"vite build --config vite.css.config.ts && rm -f styles.js","typecheck":"tsc --noEmit -p tsconfig.json","smoke:package":"bun run scripts/package-smoke.ts","build:bridge-assets":"bun run scripts/build-bridge-assets.ts"},"_npmUser":{"name":"backnotprop","email":"backnotprop@gmail.com"},"_npmVersion":"11.12.1","description":"Plannotator's document UI — markdown rendering, themes, the annotation editor, settings, comments, and layout — as installable building blocks. Published so a separate app (the commercial Workspaces app) can reuse the exact same experience, while Plannota","directories":{},"_nodeVersion":"24.15.0","dependencies":{"clsx":"^2.1.1","diff":"^8.0.4","katex":"^0.16.47","marked":"^17.0.6","motion":"^12.38.0","mermaid":"12.0.0","dompurify":"^3.4.14","@viz-js/viz":"3.30.0","lucide-react":"^1.38.0","@lezer/common":"^1.5.2","@pierre/diffs":"1.3.6","@base-ui/react":"^1.7.0","tailwind-merge":"^3.6.0","@codemirror/view":"^6.43.10","@lezer/highlight":"^1.2.3","perfect-freehand":"^1.2.2","@codemirror/merge":"^6.12.2","@codemirror/state":"^6.7.2","@plannotator/core":"0.25.6","@codemirror/search":"^6.7.2","@codemirror/commands":"^6.11.0","@codemirror/language":"^6.12.4","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@tanstack/react-table":"^8.21.3","@codemirror/lang-python":"^6.2.1","@codemirror/autocomplete":"^6.20.3","@codemirror/legacy-modes":"^6.5.3","class-variance-authority":"^0.7.1","@codemirror/lang-markdown":"^6.5.2","unique-username-generator":"^1.5.1","@fontsource-variable/inter":"^5.3.0","@plannotator/atomic-editor":"^0.8.0","@codemirror/lang-javascript":"^6.2.5","@plannotator/markdown-editor":"^0.4.0","@plannotator/web-highlighter":"^0.8.1","@fontsource-variable/geist-mono":"5.3.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.2.0","react":"^19.2.8","react-dom":"^19.2.8","@types/bun":"^1.2.0","typescript":"~5.8.2","tailwindcss":"^4.1.18","@types/react":"^19.2.18","@types/react-dom":"^19.2.5","@tailwindcss/vite":"^4.3.3","@happy-dom/global-registrator":"^20.12.0"},"peerDependencies":{"react":"^19.2.3","react-dom":"^19.2.3","tailwindcss":"^4.1.18"},"_npmOperationalInternal":{"tmp":"tmp/ui_0.46.1_1790292255845_0.9394080718120028","host":"s3://npm-registry-packages-npm-production"}},"0.47.0":{"name":"@plannotator/ui","version":"0.47.0","_id":"@plannotator/ui@0.47.0","maintainers":[{"name":"backnotprop","email":"backnotprop@gmail.com"}],"dist":{"shasum":"e84c2e69dac692529a777356c06dd03644e44b8b","tarball":"https://registry.npmjs.org/@plannotator/ui/-/ui-0.47.0.tgz","fileCount":409,"integrity":"sha512-OQkdE26nkQSsxKKNdnhqONKqL9Wxq83PQ8IlN8H3sKOqDBsHgI5wpsULKg2pE8YkPAV+YlS76w+I4f5wcDZZ6A==","signatures":[{"sig":"MEYCIQC2bZBLcLanvhEHP6GjtfU6DQNv+WR/+yilfj9dshsMfAIhAOSBxbRb5pGIspJLv+8ZO+zybH7VBClVbD56L6DSnuy4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIG3psMeMTFZ668v6cZG8X6TbYiqS1h+DeNYFNUSTjRvoAiBsFF3BupZaIlrNuHilrAWMKEzrZfDTIh/WSpkCTdkjeQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5594949},"type":"module","_from":"file:/tmp/plannotator-ui-0.47.0.tgz","exports":{"./lib/*":"./lib/*.ts","./theme":"./theme.css","./types":"./types.ts","./config":"./config/index.ts","./webmcp":"./webmcp/index.ts","./hooks/*":"./hooks/*.ts","./utils/*":"./utils/*.ts","./configure":"./configure.ts","./shortcuts":"./shortcuts/index.ts","./styles.css":"./styles.css","./theme-modes":"./components/themeModes.tsx","./components/*":"./components/*.tsx","./components/ai/*":"./components/ai/*.tsx","./components/ui/*":"./components/ui/*.tsx","./components/core/*":"./components/core/*.tsx","./components/diagram":"./components/diagram/index.ts","./components/diagram/*":"./components/diagram/*.tsx","./components/sidebar/*":"./components/sidebar/*.tsx","./components/html-viewer":"./components/html-viewer/index.ts","./components/plan-diff/*":"./components/plan-diff/*.tsx","./components/goal-setup/*":"./components/goal-setup/*.tsx","./components/ImageAnnotator":"./components/ImageAnnotator/index.tsx","./components/html-viewer/bridge-script":"./components/html-viewer/bridge-script.ts","./components/html-viewer/bridge-script.lite":"./components/html-viewer/bridge-script.lite.ts","./components/html-viewer/bridge-script.asset.js":"./components/html-viewer/bridge-script.asset.js"},"scripts":{"prepack":"bun run build:css && bun run build:bridge-assets","build:css":"vite build --config vite.css.config.ts && rm -f styles.js","typecheck":"tsc --noEmit -p tsconfig.json","smoke:package":"bun run scripts/package-smoke.ts","build:bridge-assets":"bun run scripts/build-bridge-assets.ts"},"_npmUser":{"name":"backnotprop","email":"backnotprop@gmail.com"},"_resolved":"/tmp/plannotator-ui-0.47.0.tgz","_integrity":"sha512-OQkdE26nkQSsxKKNdnhqONKqL9Wxq83PQ8IlN8H3sKOqDBsHgI5wpsULKg2pE8YkPAV+YlS76w+I4f5wcDZZ6A==","_npmVersion":"11.16.0","description":"Plannotator's document UI — markdown rendering, themes, the annotation editor, settings, comments, and layout — as installable building blocks. Published so a separate app (the commercial Workspaces app) can reuse the exact same experience, while Plannota","directories":{},"_nodeVersion":"24.18.0","dependencies":{"clsx":"^2.1.1","diff":"^8.0.4","katex":"^0.16.47","marked":"^17.0.6","motion":"^12.38.0","mermaid":"12.0.0","dompurify":"^3.4.14","@viz-js/viz":"3.30.0","lucide-react":"^1.38.0","@lezer/common":"^1.5.2","@pierre/diffs":"1.3.6","@base-ui/react":"^1.7.0","tailwind-merge":"^3.6.0","@codemirror/view":"^6.43.10","@lezer/highlight":"^1.2.3","perfect-freehand":"^1.2.2","@codemirror/merge":"^6.12.2","@codemirror/state":"^6.7.2","@plannotator/core":"0.25.7","@codemirror/search":"^6.7.2","@codemirror/commands":"^6.11.0","@codemirror/language":"^6.12.4","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@tanstack/react-table":"^8.21.3","@codemirror/lang-python":"^6.2.1","@codemirror/autocomplete":"^6.20.3","@codemirror/legacy-modes":"^6.5.3","class-variance-authority":"^0.7.1","@codemirror/lang-markdown":"^6.5.2","unique-username-generator":"^1.5.1","@fontsource-variable/inter":"^5.3.0","@plannotator/atomic-editor":"^0.9.0","@codemirror/lang-javascript":"^6.2.5","@plannotator/markdown-editor":"^0.5.0","@plannotator/web-highlighter":"^0.8.1","@fontsource-variable/geist-mono":"5.3.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.2.0","react":"^19.2.8","react-dom":"^19.2.8","@types/bun":"^1.2.0","typescript":"~5.8.2","tailwindcss":"^4.1.18","@types/react":"^19.2.18","@types/react-dom":"^19.2.5","@tailwindcss/vite":"^4.3.3","@happy-dom/global-registrator":"^20.12.0"},"peerDependencies":{"react":"^19.2.3","react-dom":"^19.2.3","tailwindcss":"^4.1.18"},"_npmOperationalInternal":{"tmp":"tmp/ui_0.47.0_1790696673774_0.5362596200605538","host":"s3://npm-registry-packages-npm-production"}},"0.49.0":{"_id":"@plannotator/ui@0.49.0","dist":{"shasum":"09c807eadc42b2938f29bf810d10d2a33b5b524c","tarball":"https://registry.npmjs.org/@plannotator/ui/-/ui-0.49.0.tgz","fileCount":416,"integrity":"sha512-fKio6mb6Fwt7rU3lHvYRgDscmd5JJfrWu9gsrcTpMO5tf0uTAckb6YO51o62tPUgGvYq7dZIEGNubWbTkgIM+w==","signatures":[{"sig":"MEUCIQDJO0W7CntUsZoRGClVznyiwzMfkp9ITO+UykFH9LEAggIgaTBetIwrUV3iDt3AhNMjtd2s4H4sVMhHVRtowPPqCJ4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDnzfp/PjWdCGM5wJHi7VTtnRqW2u24QdpIzhIyU7Vj4wIgMlOZ1fhhjLj6xft1xdJknVagOtfgjOOgAQ0cvNssDbk="}],"unpackedSize":5668593},"name":"@plannotator/ui","type":"module","exports":{"./lib/*":"./lib/*.ts","./theme":"./theme.css","./types":"./types.ts","./config":"./config/index.ts","./webmcp":"./webmcp/index.ts","./hooks/*":"./hooks/*.ts","./utils/*":"./utils/*.ts","./configure":"./configure.ts","./shortcuts":"./shortcuts/index.ts","./styles.css":"./styles.css","./theme-modes":"./components/themeModes.tsx","./components/*":"./components/*.tsx","./components/ai/*":"./components/ai/*.tsx","./components/ui/*":"./components/ui/*.tsx","./components/core/*":"./components/core/*.tsx","./components/diagram":"./components/diagram/index.ts","./components/diagram/*":"./components/diagram/*.tsx","./components/sidebar/*":"./components/sidebar/*.tsx","./components/html-viewer":"./components/html-viewer/index.ts","./components/plan-diff/*":"./components/plan-diff/*.tsx","./components/goal-setup/*":"./components/goal-setup/*.tsx","./components/ImageAnnotator":"./components/ImageAnnotator/index.tsx","./components/html-viewer/bridge-script":"./components/html-viewer/bridge-script.ts","./components/html-viewer/bridge-script.lite":"./components/html-viewer/bridge-script.lite.ts","./components/html-viewer/bridge-script.asset.js":"./components/html-viewer/bridge-script.asset.js"},"gitHead":"8181b2805158aab751f5cf83246f089dc4fe6476","scripts":{"prepack":"bun run build:css && bun run build:bridge-assets","build:css":"vite build --config vite.css.config.ts && rm -f styles.js","typecheck":"tsc --noEmit -p tsconfig.json","smoke:package":"bun run scripts/package-smoke.ts","build:bridge-assets":"bun run scripts/build-bridge-assets.ts"},"version":"0.49.0","_npmUser":{"name":"backnotprop","email":"backnotprop@gmail.com"},"_npmVersion":"11.12.1","description":"Plannotator's document UI — markdown rendering, themes, the annotation editor, settings, comments, and layout — as installable building blocks. Published so a separate app (the commercial Workspaces app) can reuse the exact same experience, while Plannota","directories":{},"maintainers":[{"name":"backnotprop","email":"backnotprop@gmail.com"}],"_nodeVersion":"24.15.0","dependencies":{"clsx":"^2.1.1","diff":"^8.0.4","katex":"^0.16.47","marked":"^17.0.6","motion":"^12.38.0","mermaid":"12.0.0","dompurify":"^3.4.14","@viz-js/viz":"3.30.0","lucide-react":"^1.38.0","@lezer/common":"^1.5.2","@pierre/diffs":"1.3.6","@base-ui/react":"^1.7.0","tailwind-merge":"^3.6.0","@codemirror/view":"^6.43.10","@lezer/highlight":"^1.2.3","perfect-freehand":"^1.2.2","@codemirror/merge":"^6.12.2","@codemirror/state":"^6.7.2","@plannotator/core":"0.25.9","@codemirror/search":"^6.7.2","@codemirror/commands":"^6.11.0","@codemirror/language":"^6.12.4","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@tanstack/react-table":"^8.21.3","@codemirror/lang-python":"^6.2.1","@codemirror/autocomplete":"^6.20.3","@codemirror/legacy-modes":"^6.5.3","class-variance-authority":"^0.7.1","@codemirror/lang-markdown":"^6.5.2","unique-username-generator":"^1.5.1","@fontsource-variable/inter":"^5.3.0","@plannotator/atomic-editor":"^0.9.0","@codemirror/lang-javascript":"^6.2.5","@plannotator/markdown-editor":"^0.5.0","@plannotator/web-highlighter":"^0.8.1","@fontsource-variable/geist-mono":"5.3.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.2.0","react":"^19.2.8","react-dom":"^19.2.8","@types/bun":"^1.2.0","typescript":"~5.8.2","tailwindcss":"^4.1.18","@types/react":"^19.2.18","@types/react-dom":"^19.2.5","@tailwindcss/vite":"^4.3.3","@happy-dom/global-registrator":"^20.12.0"},"peerDependencies":{"react":"^19.2.3","react-dom":"^19.2.3","tailwindcss":"^4.1.18"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ui_0.49.0_1790909926693_0.32689614458683103"}}},"time":{"created":"2026-07-07T03:53:26.329Z","modified":"2026-10-02T02:58:47.066Z","0.22.0":"2026-07-07T03:53:26.666Z","0.23.0":"2026-07-07T20:22:53.445Z","0.24.0":"2026-07-08T02:23:50.539Z","0.25.0":"2026-07-08T20:17:44.242Z","0.26.0":"2026-07-09T06:09:36.483Z","0.27.0":"2026-07-09T23:47:01.782Z","0.28.0":"2026-07-10T06:39:21.076Z","0.29.0":"2026-08-11T03:26:43.152Z","0.29.1":"2026-08-11T05:13:57.003Z","0.30.0":"2026-08-11T05:48:04.528Z","0.31.0":"2026-08-23T17:44:50.006Z","0.32.0":"2026-08-27T15:03:01.334Z","0.33.0":"2026-08-27T16:37:14.995Z","0.34.0":"2026-08-27T19:11:52.352Z","0.35.0":"2026-09-01T18:23:20.696Z","0.35.1":"2026-09-01T19:38:41.566Z","0.35.2":"2026-09-01T20:07:05.989Z","0.36.0":"2026-09-01T23:27:07.849Z","0.37.0":"2026-09-02T00:55:31.810Z","0.38.0":"2026-09-11T18:28:19.495Z","0.38.1":"2026-09-11T19:44:41.082Z","0.38.2":"2026-09-11T20:40:11.156Z","0.39.0":"2026-09-13T00:02:03.946Z","0.40.0":"2026-09-17T08:24:41.931Z","0.41.0":"2026-09-17T20:50:19.893Z","0.41.1":"2026-09-17T23:35:00.574Z","0.41.2":"2026-09-18T02:15:04.248Z","0.42.0":"2026-09-19T00:59:04.027Z","0.43.0":"2026-09-19T06:27:11.721Z","0.43.1":"2026-09-19T15:48:01.584Z","0.43.2":"2026-09-19T16:56:11.381Z","0.44.0":"2026-09-19T22:24:54.378Z","0.45.0":"2026-09-20T00:48:36.544Z","0.45.1":"2026-09-20T02:06:42.516Z","0.46.0":"2026-09-24T19:16:22.615Z","0.46.1":"2026-09-24T23:24:15.994Z","0.47.0":"2026-09-29T15:44:33.940Z","0.49.0":"2026-10-02T02:58:46.903Z"},"description":"Plannotator's document UI — markdown rendering, themes, the annotation editor, settings, comments, and layout — as installable building blocks. Published so a separate app (the commercial Workspaces app) can reuse the exact same experience, while Plannota","maintainers":[{"name":"backnotprop","email":"backnotprop@gmail.com"}],"readme":"# @plannotator/ui\n\nPlannotator's document UI — markdown rendering, themes, the annotation editor, settings, comments, and layout — as installable building blocks. Published so a separate app (the commercial Workspaces app) can reuse the exact same experience, while Plannotator itself stays unchanged.\n\nShips with **`@plannotator/core`**: a small, browser-safe, zero-dependency package of the pure utilities and types `ui` builds on (carved out so `ui` can be installed standalone without Plannotator's server code).\n\n## Why this exists\n\nWorkspaces needs the same document experience Plannotator has — render docs, annotate, comment, theme, edit — but backed by its own infrastructure (its own storage, auth, realtime, AI). Rather than fork or rebuild, it **installs these packages and plugs in its own backend.** Plannotator passes nothing and behaves exactly as before.\n\n## How it works: host-override seams\n\nEvery place the UI talks to a backend (loading a doc preview, saving settings, persisting drafts, streaming comments, listing files, calling AI, etc.) is an **optional seam** that defaults to Plannotator's behavior. A host swaps in its own implementations through **one call at startup**:\n\n```ts\nimport { configurePlannotatorUI } from \"@plannotator/ui/configure\";\n\nconfigurePlannotatorUI({\n  storageBackend,              // where settings persist\n  identityProvider,           // who the current user is\n  imageSrcResolver,           // how image paths resolve to URLs\n  docPreviewFetcher,\n  fileTreeBackend,\n  draftTransport,\n  externalAnnotationTransport, // live/agent comments\n  aiTransport,\n  skillCatalogTransport,       // skill-reference catalog for comment composers\n  skillContentTransport,       // human-only skill contents for feedback injection\n  serverSync,\n  webmcp,                      // browser-agent (WebMCP) provider policy: { enabled, namePrefix }\n  mathRendererLoader,          // how KaTeX loads when no renderer is registered before first math render\n  identityGenerator,           // sync generator behind the default \"tater\" name (no identityProvider)\n  alertIconRenderer,           // (name) => ReactNode | null for a GitHub alert title line's <!-- icon: name --> (default: null, the type's icon)\n});\n```\n\nAnything you don't pass keeps Plannotator's default. A few component-specific overrides (e.g. an \"open in editor\" diff action) are passed as props where you render that component.\n\n### Resize-handle seams (`ResizeHandle` / `useResizablePanel`)\n\nThe sidebar/panel resize handle exposes seams for hosts that want different edge interactions (e.g. no hover reveal, click-to-collapse). All default to today's behavior — pass nothing and it's unchanged.\n\n- **Suppress / restyle the hover reveal.** The inner visible track carries a `[data-resize-track]` attribute (same host-CSS pattern as the collapse button's `[data-collapse]`), and `ResizeHandle` takes a `trackClassName` prop. To kill the pop-in from host CSS:\n  ```css\n  [data-resize-track] { background: none !important; }\n  ```\n- **Click-to-collapse anywhere on the handle.** The handle can't tell a click from a drag-start on its own — the hook owns the pointer state machine. Pass `onClick` to `useResizablePanel`; it fires on pointer-up only when the pointer never traveled past `clickThreshold` (default 4px), so a genuine click on the full-width handle can collapse the panel while drags still resize:\n  ```ts\n  const resize = useResizablePanel({ storageKey, side: \"left\", onSnapClose: collapse, onClick: collapse });\n  ```\n\nBuilding your own tooltip and removing the built-in double-click reset are host-side concerns (override `onDoubleClick` where you render the handle).\n\n### Lazy renderers and the eager entries (`utils/math`, `utils/generateIdentity`, `utils/mermaid`; 0.32.0)\n\nThe Mermaid runtime, the Graphviz engine, KaTeX and the username dictionary are off the static import graph of `Viewer`, so a host that bundles by route does not download them for a plain markdown read. Graphviz has its own slot since 0.41.0 (`utils/graphviz`, the same shape as Mermaid's: lazy `import('@viz-js/viz')` on the first dot fence, or `setGraphvizRuntime` from the host) and the block shows the source fence under a status until the SVG lands. Mermaid, Graphviz, KaTeX and the dictionary sit behind synchronous slots:\n\n- **Math.** Without registration, a math node renders its TeX as text in the same wrapper (same `data-math-tex` / `data-math-display` / `aria-label` / class names), loads KaTeX via `import('katex')`, and re-renders typeset. To keep math typeset on the very first commit, as Plannotator does, add one line to your entry: `import \"@plannotator/ui/utils/math-eager\";`. To put KaTeX and its stylesheet on one lazy chunk instead, pass `mathRendererLoader`. The stylesheet remains your job either way (see \"Consuming it\", step 3). The default `import('katex')` is the only runtime mention of `katex` in the package and lives in `utils/math-default-loader` (0.33.0), called only while no loader is registered; a registered loader is never backfilled by it, though a default load already in flight at registration still fills the slot (pre-existing), so register the loader before the first math render. Chunk emission is static, so a bundler still emits that chunk (never requested) unless you alias the module away; see HANDOFF.md \"Lazy renderers and eager entries\" for the two-line alias. The Mermaid runtime has its own `import(\"katex\")` for `$$` labels, which leaves a second, shared KaTeX chunk in a host build even with the alias; since 0.34.0 a host redirects that one import (for importers inside the `mermaid` package only) to `@plannotator/ui/utils/mermaid-math-slot`, which typesets the labels through your registered renderer, so one KaTeX chunk remains and it is yours. Recipe and measurement in HANDOFF.md, same section. `resetMathRenderer()` empties the slot only and keeps a registered loader (0.34.0); `setMathRendererLoader(null)` is the explicit way back to the package default.\n- **Mermaid.** Without registration, the first diagram on a page fetches the runtime through `import('mermaid')` and the block shows the source fence under a \"Rendering diagram\" status until the SVG lands; a failed import is dropped from the memo, re-attempted once after a short delay, and the error panel (with the source) offers Retry, which issues another fresh attempt. **Since 0.40.0 (Mermaid 12.0.0, ELK layout by default, Safari 17.4+) this lazy path is Plannotator's own**: the plan editor no longer imports the eager entry, so a document with no diagram never downloads the runtime in a chunked build. `import \"@plannotator/ui/utils/mermaid-eager\";` in your entry registers and initializes the runtime at startup instead, if you would rather it never fail separately from the app. Mermaid 12 lays flowchart, state, class, ER and requirement diagrams out with ELK (orthogonal edges, different packing); every generated SVG `id` keeps its 11.x shape, but children of `g.edgePaths` are now in declaration order, so select edges by id (`{renderId}-L_{from}_{to}_{n}`, `{renderId}-edge{n}`), never by DOM position. Details in HANDOFF.md \"Mermaid 12 (0.40.0)\". **Diagrams follow the colour theme.** Before every render `MermaidBlock` calls `applyMermaidTheme` (`utils/mermaidTheme`), which reads the theme tokens off the document (`--background`, `--foreground`, `--card`, `--border`, `--muted`, `--muted-foreground`, `--primary`, the accent tokens and `--font-sans`; `readThemeTokens`), derives a complete `themeVariables` set for every diagram family from them (`buildMermaidThemeVariables(tokens, mode)`, pure; base theme `dark` under a dark resolved mode, `default` under light; every text-on-fill pair guarded to WCAG 4.5:1 and every line 3:1, rule in the module doc) and runs the global `mermaid.initialize` once per `(palette, mode, shadow amount)` key, re-rendering mounted diagrams when the key changes. The key comes from `useTheme()`, so a host that mounts `ThemeProvider` and ships `theme.css` gets diagrams in its palette with nothing to configure. **The node shadow follows the palette too.** Mermaid 12's neo look shadows every node from a fixed `rgba(185,185,185,1)` grey; the mapping keeps the look and replaces that filter, setting `themeVariables.dropShadow` from the page's own ground at `options.shadowAmount` (0..1, default `DEFAULT_MERMAID_SHADOW_AMOUNT` = **0.7** of Mermaid's geometry; 1 reproduces its `1px 2px 2px` exactly, 0 publishes `dropShadow: false` and the neo rules render `filter: none`). Its polarity follows the page — lighter than the ground on a dark page, darker on a light one, which is what Mermaid's own `insertLookDefs` does and what keeps a shadow visible at all. A host that wants Mermaid's grey passes its own `themeVariables.dropShadow` after ours; one that wants none passes `{ shadowAmount: 0 }`. `mermaidThemeKey(palette, mode, amount?)` appends the amount only when it is not the default, so a host that names none keeps the key it had. **Fallback contract:** with no tokens on the document (no `ThemeProvider`, no `theme.css`) `readThemeTokens` returns `undefined`, nothing is re-initialized, and the runtime keeps the static `MERMAID_CONFIG` it was initialized with, so such a host renders byte-identically to 0.39.0. `MERMAID_CONFIG` keeps its value and meaning (`securityLevel: 'strict'` pinned); the new exports are additive. Honest limit of any in-page retry: a browser records a failed module fetch in its module map for the page lifetime, so a fresh `import()` of the same chunk URL rejects without a request; the retry recovers failures after the fetch (engine instantiation, initialize) and hosts that version chunk URLs. A host that needs recovery from a failed first fetch uses versioned chunk URLs or a `vite:preloadError` reload at app level.\n- **Identity.** With an `identityProvider` the generator is never called and the word lists stay out of your bundle. Without one, default names come from a small built-in pool of the same `adjective-noun-tater` shape; `import \"@plannotator/ui/utils/identity-tater\";` registers the full dictionary, or pass your own `identityGenerator`.\n\nPlannotator's own entries import the eager math and identity modules (`math-eager` and `identity-tater` in both `packages/editor/App.tsx` and `packages/review-editor/App.tsx`), which is what keeps math typeset on the first commit and names minted from the full dictionary; neither app imports `mermaid-eager` since 0.40.0, so the Mermaid runtime rides a lazy chunk on the share portal and is inlined by `inlineDynamicImports` in the single-file builds. `tests/entry-assets.test.ts` fails if an eager math/identity import is dropped or an eager Mermaid import creeps back. See HANDOFF.md \"Lazy renderers and eager entries\" and \"Mermaid 12 (0.40.0)\".\n\n### Markdown editor extensions + wiki links (`MarkdownEditor` / `InlineMarkdown`)\n\n- **`MarkdownEditor` takes CM6 extensions.** `extensions?: readonly Extension[]` (from `@codemirror/state`) is forwarded verbatim into the underlying editor — the seam for `wikiLinks(config)`, `y-codemirror.next` collab bindings, custom keymaps.\n\n  > **⚠️ Captured once per `documentId` — not reactive.** The engine reads the array a single time at document mount; swapping the array later is silently ignored until a `documentId` change remounts. Pass a stable reference, and feed changing data through extension config callbacks that close over live state (refs/getters) — never through new arrays.\n\n- **`wikiLinks` is re-exported from `@plannotator/ui/components/MarkdownEditor`** together with `WikiLinksConfig`, `WikiLinkSuggestion`, `WikiLinkResolvedTarget`, `WikiLinkStatus`. Import it from there — `@plannotator/atomic-editor` stays off the supported-import list:\n  ```tsx\n  import { MarkdownEditor, wikiLinks } from \"@plannotator/ui/components/MarkdownEditor\";\n\n  const editorExtensions = [wikiLinks({ suggest, resolve, onOpen })]; // stable reference!\n  <MarkdownEditor markdown={md} documentId={docId} editorHandleRef={ref} extensions={editorExtensions} />\n  ```\n- **`embedPicker(config)` and `embedSlashItem()` are re-exported from the same surface.** Compose the static item into `slashCommands({ items: [...] })` and pass the picker beside it in the stable `extensions` array. `getTargets`, `buildInsertLine`, optional `uploadTarget`, and optional `getNotice` stay live through callbacks. Optional `labels` (`upload`, `empty`, `noMatch(query)`) reword the three rows that say \"HTML\"; absent keys keep the built-in text. The host owns embed grammar and upload error UI; the package owns filtering, async anchor mapping, single-flight upload state, and paragraph-safe insertion through the re-exported `planEmbedInsert()`.\n- **`linkWidgets(...specs)` and `refreshLinkWidgets` are re-exported from the same surface** (since 0.47.0, engine `@plannotator/atomic-editor` ^0.9.0), with the types `LinkWidgetSpec` and `LinkWidgetLink`. A spec's `match(link)` gets `{ url, text, title?, from, to }` for a single-line `[text](url)` link whose syntax the engine would hide, and returns a CM6 `WidgetType` to draw in the link's place (first non-null spec wins) or `null` for the engine's normal link. The reveal rule (caret, focus, pointer-press freeze, diff ranges) stays the engine's, so the widget comes and goes exactly when the hidden syntax would; `match` is never asked about table-cell links or links wrapping an image. `match` runs on every rebuild: keep it synchronous and side-effect free and implement `eq` on the widget. When the answer changes without a document edit (data arrived after mount), dispatch `view.dispatch({ effects: refreshLinkWidgets.of(null) })`; it changes no text and adds no history entry.\n  ```tsx\n  import { linkWidgets, refreshLinkWidgets, type LinkWidgetSpec } from \"@plannotator/ui/components/MarkdownEditor\";\n\n  const spec: LinkWidgetSpec = { match: (link) => (isMine(link.url) ? new MyChip(link) : null) };\n  const editorExtensions = [linkWidgets(spec)]; // stable reference!\n  ```\n- **The viewer resolves wiki-links synchronously.** `InlineMarkdown` takes `resolveLinkedDoc?: (target) => { label?; status?: 'active' | 'deleted' } | null` — called with the raw stored target (opaque ids like `doc_01XYZ`, no `.md` normalization). Return a `label` to display live titles (stored label is the fallback, target the last resort); return `status: 'deleted'` for a muted non-link (\"Document deleted\") instead of a live link. Absent or `null` → rendering is unchanged. Sync-only by design: back it with an in-memory cache.\n\nWiki links require `@plannotator/markdown-editor ^0.3.2` and `@plannotator/atomic-editor ^0.7.0` (see HANDOFF.md § \"Wiki-link seams (0.27.0)\"); link widgets require `@plannotator/markdown-editor ^0.5.0` and `@plannotator/atomic-editor ^0.9.0`, which is what 0.47.0 declares (see HANDOFF.md § \"Host link widgets (0.47.0)\").\n\n### Frozen markdown diff (`MarkdownDiff`)\n\n- **`MarkdownDiff` renders two markdown revisions as a frozen, themed comparison** — the newer revision as the real (uncollapsed) document, deletions projected struck-through in place, char/word change emphasis, a change-count toolbar with prev/next, a clickable keyboard-accessible overview rail, and a changed-line gutter. The surface is never editable (edits are rejected at the state and view boundaries; the content DOM is `contenteditable=\"false\"`).\n- **Same shim pattern as `MarkdownEditor`:** theme resolves from `ThemeProvider` (or pass `mode` directly), `gridEnabled` applies the identical card chrome, and `extensions` composes CM6 extensions — `wikiLinks` included — into the frozen view, with the same captured-once, stable-reference calling convention:\n  ```tsx\n  import { MarkdownDiff } from \"@plannotator/ui/components/MarkdownDiff\";\n  import { wikiLinks } from \"@plannotator/ui/components/MarkdownEditor\";\n\n  const diffExtensions = [wikiLinks({ resolve, onOpen })]; // stable reference!\n  <MarkdownDiff originalMarkdown={older} modifiedMarkdown={newer} documentId={docId}\n                editorHandleRef={ref} extensions={diffExtensions} />\n  ```\n- **Bytes are the contract:** `ref.current.getMarkdown()` / `.getOriginalMarkdown()` return the exact input strings (CRLF and trailing whitespace included); `getChangeCount()` / `goToNextChange()` / `goToPreviousChange()` drive review navigation.\n\nRequires `@plannotator/markdown-editor ^0.4.0` and `@plannotator/atomic-editor ^0.8.0` (which adds a `@codemirror/merge` peer — declared by this package). See HANDOFF.md § \"Frozen markdown diff (0.28.0)\".\n\n### Raw-HTML annotation viewer (`HtmlViewer`)\n\n`components/html-viewer` is supported host surface as of 0.29.0: the overlay-projection annotation viewer for raw HTML (placed comment markers, pinpoint element anchors, shift-click multi-target comments). Its contract is **props plus the validated iframe message protocol** — not `configurePlannotatorUI()`, which only governs the backend surfaces around it. Drive the `annotations` prop (marker numbering derives from its array order); `readOnly` keeps markers painted and clickable while disabling all authoring. **0.29.0 also carries a breaking migration:** highlight.js is gone and `.hljs` selectors are inert — style code via the exported `pn-code` class (`CODE_BLOCK_CLASS` in `utils/codeHighlight`). See HANDOFF.md § \"Raw-HTML annotation viewer + syntax-highlighting migration (0.29.0)\" before upgrading from 0.28.0.\n\n#### HTML annotation parity seams (0.32.0)\n\nEverything a host needs around `HtmlViewer` to match Plannotator's HTML annotation experience, all additive and all defaulting to today's behavior. Requires `@plannotator/core` 0.25.0 (the `html-anchor` subpath), so install and publish core before ui:\n\n- **`projectHostThreads(threads, { openOnly?, documentLevel?, maxTargets? })`** and **`buildPersistedHtmlAnchor(source, { maxBytes?, maxTargets? })`** from `components/html-viewer` (pure, from `@plannotator/core/html-anchor`): project stored rows onto the `annotations` prop in the order that becomes the marker numbering, and trim a composed comment's anchor for persistence with cap drops and size drops reported separately. A row with nothing restorable projects as a document-level `GLOBAL_COMMENT` by default (`documentLevel: 'global'`, never reported as unanchored) or, with `documentLevel: 'unanchored'`, as a textless page `COMMENT` the unanchored report names. **HTML-only:** the projection carries `originalText`, `htmlAnchor` and `htmlAdditionalTargets`, and pins `blockId` to `\"\"`, offsets to `0` and no `startMeta` / `endMeta`; on the markdown `Viewer` a projected `COMMENT` with quoted text still re-anchors by whole-document text search, but with `blockId` `\"\"` and offsets `0` it loses export ordering (every such row sorts first and ties), the \"lines N-M\" location label, disambiguation when the same text repeats (first match wins), and the no-flash meta restore; a host that needs those carries `blockId`, the offsets and the web-highlighter metas in its own projection. **Element context rides both helpers** (next publish, #1521): `buildPersistedHtmlAnchor` accepts `elementContext` on its source and `context` on each additional target and writes them back as `PersistedHtmlAnchor.elementContext` / `HtmlAnnotationTarget.context` (serialized after `htmlAdditionalTargets` and after each target's `anchor`, so a row without context stays byte-identical on the wire), and `projectHostThreads` returns both on the projection so a host panel and its per-row Copy see them. Contexts are shed before targets under `maxBytes`, whose 16 KiB default is unchanged. The validator, `parseHtmlElementContext`, lives in `@plannotator/core/html-anchor` and is re-exported from `components/html-viewer`.\n- **`onUnanchoredChange`** is keyed to the bridge's restore (one complete report per document after the restore batch, the empty set included) and complete over the `annotations` prop: textless page rows are reported without being posted, and a locally minted id the host swapped out of its list is not. It replaces a host's `mark-applied` bookkeeping for the unanchored set; the local-to-server mark swap itself stays host-side. **Nothing is delivered before the bridge's first post-restore report for a document (per reload generation):** a prop-side change before that point does not fire the callback, so do not gate host state on a prop-side delivery arriving first; treat the first call as the restore's verdict.\n- **`hooks/useHtmlRefresh({ fetchSnapshot, onSnapshot, onUnanchored?, onResult? })`**: the refresh cycle with the stale-response and document-change guards, backend behind `fetchSnapshot`.\n- **`components/HtmlSurfaceControls`**: the eye / refresh / pen header controls with Plannotator's markup and `labels` overrides.\n- **`AnnotationPanel` `unanchoredIds`**: an \"Unanchored\" chip on the listed cards.\n- **`HtmlViewer` `scrollBehavior`** (`'auto'` for reduced motion) and **`maxAdditionalTargets`** (a product cap the bridge honors too). With the cap enforced upstream (bridge toggle, parent trust boundary on submit and on restore, `projectHostThreads` `maxTargets` on read), a composed comment never reaches the host with more targets than the cap, so a host's own cap-dropped handling (`capDroppedTargets` from `buildPersistedHtmlAnchor`, or a message-counting listener) is unreachable in normal operation; keep it only as a backstop for rows written by an older host build or by another writer. Byte-budget drops (`sizeDroppedTargets`) are a separate path and remain reachable.\n- An `ExternalAnnotationTransport` whose `subscribe` emits `snapshot` on a host push keeps `useExternalAnnotations` off its fallback poll.\n\nSee HANDOFF.md § \"HTML annotation parity seams\".\n\n#### The bridge script as an asset (`bridgeScriptUrl`; 0.33.0)\n\nBy default `HtmlViewer` inlines its 185 KB in-page bridge script into every srcdoc document. A host that serves the package's generated `components/html-viewer/bridge-script.asset.js` as a static file can pass its URL instead:\n\n```ts\nimport bridgeScriptUrl from \"@plannotator/ui/components/html-viewer/bridge-script.asset.js?url\";\n\n<HtmlViewer rawHtml={html} bridgeScriptUrl={bridgeScriptUrl} … />\n```\n\nThe srcdoc then carries one classic `<script src>` in the exact place the inline script sat (at the end of `<head>`, before the body), the browser caches the asset across documents, and the bridge's `ready` message carries `BRIDGE_PROTOCOL_VERSION`, which the viewer checks: a stale cached asset (no stamp, or another version) logs one console warning naming both versions and shows a dismissible error banner in the surface (`onBridgeUnavailable` fires too); no `ready` within `bridgeReadyTimeoutMs` (default 5000) shows a timeout banner. The package owns that banner by default (`bridgeErrorDisplay=\"banner\"`); a host that renders its own notice from `onBridgeUnavailable` passes `bridgeErrorDisplay=\"none\"` (0.34.0) and no strip is rendered, while the callback and the console warning are unchanged. The URL is resolved against your document's base (`document.baseURI`) before it is written into the srcdoc, never against the framed page, so a page's own `<base href>` cannot redirect it. Plannotator passes nothing and stays inline; none of this runs on the inline path. **CSP:** the package sets no CSP `<meta>` in the srcdoc document, and the frame is an opaque origin so the classic script needs no CORS (no `crossorigin` is set), but a CSP delivered as a header on your page is inherited by the frame: allow `script-src` for the asset's origin. Because the frame is an opaque origin, an asset served with `Cross-Origin-Resource-Policy: same-origin` (common alongside COEP) is blocked; serve it with a CORP that admits cross-origin loads, or without CORP. To also drop the inline literal from your viewer chunk, alias the package's relative `./bridge-script` import (match `/^\\.\\/bridge-script$/`, never a bare `/\\/bridge-script$/`, which would also catch another package's `bridge-script` entry) to the generated `bridge-script.lite` module (see HANDOFF.md § \"HTML viewer bridge as an asset\").\n\n#### Also blessed in 0.32.0: `shortcuts` and `utils/inputMethod`\n\n- **`@plannotator/ui/shortcuts`**: the declarative keyboard-shortcut engine (`defineShortcutScope`, `useShortcutScope`) and the per-surface scopes, including `useHtmlAnnotateShortcuts` for the Mod+Shift+A Annotate/Interact chord on HTML surfaces. Pure React plus `utils/platform`; no backend.\n- **`@plannotator/ui/utils/inputMethod`**: `getInputMethod(surface)` / `saveInputMethod(method, surface)` / `refreshInputMethodStamp(method)`, the per-surface pinpoint-or-drag preference with its TTL, persisted through the `storageBackend` seam.\n\n#### Toolstrip host props (0.35.0)\n\n`components/AnnotationToolstrip` is supported host surface: the annotation mode toolstrip with per-tool opt-outs, all defaulting to today's rendering.\n\n- **`hideQuickLabel`** omits the Quick Label tool. `StickyHeaderLane` forwards it, so the pinned scroll header stays consistent. It hides the button only — it does not clamp the mode, so keep host mode state out of `'quickLabel'` (including preferences restored through `utils/editorMode`).\n- **`showHelpLink={false}`** for hosts: the default help modal embeds Plannotator's own video walkthroughs.\n- **`hideInputMethodSwitch`** omits the pinpoint/drag input-method switch.\n\n#### Sticky header lane host props\n\n`components/StickyHeaderLane` is the measured compact companion to `Viewer`'s\n`[data-sticky-actions]` cluster. Its defaults preserve Plannotator's ghost-header\nbehavior: hidden and inert at rest, then visible with card chrome once stuck.\n\n- **`visibility=\"always\"`** keeps the existing measured left lane visible and\n  interactive at rest as well as while stuck. Resting lanes have no background,\n  border, backdrop, shadow, or new document padding; stuck lanes retain the\n  incumbent chrome. The lane remains zero-height and absolutely positioned, so\n  the host must reserve a clear header-height region; otherwise its visible\n  controls can cover and intercept interaction with document content below.\n- **`sticky={false}`** uses non-sticky positioning, creates no intersection\n  observer, and scrolls away normally. Pass the same value to\n  `Viewer.stickyActions` so the left lane and right action cluster follow one\n  policy. By itself it leaves the default stuck-only lane permanently hidden;\n  combine it with `visibility=\"always\"` for a visible non-sticky header. The\n  measured Viewer-actions width is still reserved because both clusters share\n  the lane at rest before they scroll away together.\n- Wide, tight icon-only, and narrow stacked layouts continue to derive from the\n  wrapper width and the measured action-cluster width. `hideQuickLabel` is still\n  forwarded to the compact toolstrip.\n\n#### Viewer-owned document header\n\nUse `Viewer.annotationHeader` when the compact annotation controls must be\nvisible at rest. Viewer then owns one in-flow header containing those controls\non the left and its existing Global comment / Copy actions on the right:\n\n```tsx\n<Viewer\n  mode={mode}\n  inputMethod={inputMethod}\n  stickyActions={stickyActions}\n  annotationHeader={{\n    onInputMethodChange: setInputMethod,\n    onModeChange: setMode,\n    hideQuickLabel: true,\n  }}\n  // ...the existing Viewer props\n/>\n```\n\nThe trailing action cluster keeps full-width labels unless you also pass\n`actionsLabelMode` (`'full' | 'short' | 'icon'`); the header measures the real\ncluster either way, so omitting it costs earlier stacking on narrow columns,\nnever breakage.\n\nThe header reserves its real responsive height before document content. It\nkeeps active labels in the wide layout, switches the compact toolstrip to\nicons in the tight layout, and stacks the two clusters when narrow or wrapped.\nAll Viewer badge context moves into the same measured header. With\n`stickyActions={true}` the complete header pins and gains the existing stuck\nchrome; with `false` it remains in flow and scrolls away. The complete header\nhas `data-print-hide`, so it contributes no print layout.\n\nAs with Viewer's legacy sticky actions and anchor navigation, hosts with a\ncustom scroll element must wrap Viewer in `ScrollViewportProvider` from\n`@plannotator/ui/hooks/useScrollViewport` and pass that actual scroll element.\nWithout the provider, CSS page stickiness can still apply, but Viewer cannot\nobserve the host scroller to add stuck chrome or calculate anchor clearance.\n\nThe header reuses Viewer's `[data-sticky-actions]` cluster, so host CSS that\nrestyled that selector for the legacy floating bar (negative margins are the\ncommon case) applies inside the header too and pulls the action cluster out of\nits row. Scope such rules away from the header, e.g.\n`[data-viewer-document-header] [data-sticky-actions] { margin-top: 0; margin-right: 0; }`.\n\nWith `stickyActions` on, the legacy bar's `[data-sticky-actions]` cluster is no\nlonger the sticky element or a float: it pins inside a zero-height\n`[data-sticky-actions-lane]`, beside a static float that reserves the title's\nwrap space. Both copy the cluster's measured size and margins, so margin\noverrides on `[data-sticky-actions]` still apply. Do not give the cluster\n`position: sticky` and a float together: Firefox narrows float-avoiding blocks\nsuch as table and code wrappers around a sticky float's stuck position.\n\nThe config is intentionally typed rather than a React-node slot. Viewer reuses\nits existing `mode`, `inputMethod`, and `taterMode`; the config supplies only\nthe state-change callbacks and optional `hideQuickLabel`. Compact toolstrips\nnever render the Plannotator help modal. Hiding Quick Label does not clamp the\nmode, so hosts must still prevent stored `'quickLabel'` state from reaching\nViewer. Omit `annotationHeader` to preserve the legacy floating action bar\nexactly. The standalone `StickyHeaderLane` remains supported for Plannotator's\nhidden-at-rest ghost lane, but its always-visible mode is an overlay and is not\nthe in-flow host integration.\n\n### Diagram engine (`components/diagram`; 0.41.0)\n\nOne renderer slot and one canvas render every Mermaid and Graphviz diagram — the fences in `Viewer` (`MermaidBlock`, `GraphvizBlock`), their popout, and whatever a host renders itself. `DiagramViewer` from `@plannotator/ui/components/diagram` takes `kind`, `source`, `theme` (`{ colorTheme, mode, shadowAmount? }`), `comments: DiagramComment[]` and `onCreateComment(anchor, text, additionalTargets)`; pass `onSave(source) => Promise<{ status: 'ok' } | { status: 'stale', currentSource }>` to get the Source pane (left of the canvas on desktop, under it on the phone; `readOnlySource` shows it without Save), and `sourceOpen` to toggle it. Zoom, pan and fit are the canvas's (wheel, drag, `+` `-` `0`, arrow keys); a click opens the composer at the part beneath while a drag pans (4 px threshold, 10 px for a finger), nothing highlights on a plain mouse-over (the ring under the pointer needs the platform modifier held), every edge carries an invisible 14 px hit path in one top layer and a click is resolved by priority over everything under the pointer (node, then edge, then cluster; an edge label is its edge), a click on no part comments on the whole diagram (kind `diagram`), sequence diagrams are addressable (actors, messages, notes, frames), a saved comment paints a ring and a numbered badge from the array order, and every comment re-resolves against each render through the engine's finder (id, then label, then unanchored — reported through `onUnanchoredChange`). The anchor is `DiagramAnchor` from `@plannotator/core/diagram-anchor` (`{ v: 1, family, kind, id | from + to, label, sourceLine }`, document lines), and Plannotator stores it as `Annotation.diagramAnchor`. Runtime slots: `utils/mermaid` (as before) and `utils/graphviz` (new, same shape, `@viz-js/viz` pinned `3.30.0`), each lazy on first use or filled by the host. `DiagramPopout` is the full-size viewer in the `PopoutDialog` chrome. See HANDOFF.md § \"Diagram engine (0.41.0)\" for every export, the adapter, the sanitizer and the migration notes.\n\n### Host toolbar seams (0.43.0)\n\nTwo opt-in props for hosts that want their own commands and their own people\ninside the annotation UI. Both default to today's behavior — pass neither and\nthe toolbar and the comment composer render byte-for-byte what they rendered\nin 0.42.0 (proven by diffing the mounted `outerHTML` against the base commit).\n\n- **`AnnotationToolbar` `selectionActions`** (forwarded by `Viewer` to both its\n  toolbars, and by `HtmlViewer` to the HTML selection toolbar): an array of\n  `{ id, label, detail?, icon?, onSelect(ctx) }`. They render as ONE wand\n  button (`data-selection-actions`) in the slot the quick-labels Zap occupied,\n  opening the package's dropdown below it (arrows + Enter + Escape, nothing\n  preselected until the first arrow). `onSelect` receives\n  `{ text, blockId, startOffset, endOffset, element }` — the same coordinates\n  an annotation created from that selection would carry (`blockId: ''` and\n  `startOffset: 0` on a surface with no blocks, such as raw HTML) — and the\n  toolbar closes. **The package creates no annotation:** what an action does is yours.\n  An empty array renders no button.\n- **`AnnotationToolbar` `selectionActionsIcon`** (forwarded by `Viewer` and\n  `HtmlViewer`): the glyph on the `selectionActions` button, so a host can match\n  the wand it draws elsewhere. Absent means the package's own wand; nothing else\n  about the button changes.\n- **`AnnotationToolbar` `quickLabels`** (default `true`): `false` hides the Zap\n  picker and makes the Alt+digit label shortcuts inert on that toolbar. The\n  one-click 👍 is unaffected, and mode state is still yours to clamp.\n- **`CommentPopover` `mentionSource`** (0.43.2 adds `heading?` above the list\n  and an optional `avatar?: { url?, initials?, tint? }` per person, drawn before\n  the label; both absent → the 0.43.1 rows): `{ people, emptyNotice?,\n  onMentionsChange?, onPickBlocked? }` over `MentionPerson`\n  (`{ id, kind, label, detail, canOpen }`). Typing `@` at a word boundary opens\n  a portaled picker measured from the textarea; picking inserts the readable\n  `@Label ` token, and the ids ride `onMentionsChange(ids)` plus an optional\n  third `onSubmit(text, images?, mentions?)` argument that is passed **only**\n  when a source is supplied. Deleting a token untags that person. A\n  `canOpen: false` person inserts nothing when you supply `onPickBlocked` (your\n  no-access dialog) and inserts normally when you do not. Not wired to any\n  Plannotator data and not a `configurePlannotatorUI` seam — pass it where you\n  render the composer.\n- **`CommentPopover` mention chips** (0.44.0): with a `mentionSource`, the\n  `@Label` tokens the picker inserted render as chips in the composer's text —\n  the same mirrored overlay skill references use, never a second layer. Each\n  chip span carries `data-mention-token=\"<person id>\"` and\n  `data-mention-kind`, which is `MentionPerson.kind` verbatim — today that is\n  always `user`, because the picker offers users only; `agent` is reserved\n  and matches nothing yet. `MentionSource.tokenClassName?` is appended to the\n  span for your own look. **Metric rule, yours to keep too:** a chip\n  may change color, background, border-radius, box-shadow and text-decoration\n  ONLY — padding, margin, border width, weight, tracking or size move a glyph\n  and drift the caret off the painted text (want a pill? add\n  `box-shadow: 0 0 0 Npx <background>`, which paints without taking space).\n  Only a person you supplied and the author picked is a chip, and editing a\n  byte of the token un-chips it in the same render that drops the id. Two\n  inherited limits: two labels that sanitize to the same token are one token\n  in a plain-text body, so the first person you list owns every occurrence of\n  it; and a restored draft has no chips (and reports no ids) until the author\n  picks again. No source → no overlay element at all.\n- **`Viewer` / `HtmlViewer` `mentionSource`** (0.43.1): the same prop on the two\n  viewers, forwarded to every comment composer each of them mounts, so a host\n  wires mentions once per surface instead of per composer. The ids the author\n  kept ride onto the created annotation as `Annotation.mentions`\n  (`readonly string[]`, present only when a source was supplied and at least\n  one token survived). It is host data: the package never renders, exports,\n  shares or archives it.\n\nSee HANDOFF.md § \"Host toolbar seams (0.43.0)\" for the grammar, the keyboard\nrules and the threading points, and § \"mentionSource on the viewers (0.43.1)\"\nfor the two viewer props and the annotation field. § \"Mention token chips in\nthe composer (0.44.0)\" covers the chips, the metric rule, the merged-range\nrefactor behind them, and the three inherited limits (duplicate labels,\nrestored drafts, and a label that is a prefix of another label).\n\n### Annotation card seams (`AnnotationPanel`; 0.45.0)\n\nTwo more opt-in props, both on the panel and both defaulting to today's\nbehavior — pass neither and the panel renders byte-for-byte what it rendered\nin 0.44.0 (proven by diffing mounted `outerHTML` against the base commit for\nan empty panel, every card kind, a card in edit mode, `readOnly` and the\nAll-files view).\n\n- **`renderCardHeader?: (annotation) => ReactNode`** — the twin of\n  `renderCardFooter`, rendered inside each plan-annotation card's header row\n  after `author · time` and before the built-in edit/delete actions: the place\n  for a status stamp (resolved, needs reply, a reviewer badge). Its wrapper is\n  `[data-annotation-card-header]` and swallows clicks and keydowns, so\n  interacting with your stamp never selects the card. It renders under\n  `readOnly` for the same reason the footer does — a stamp is a read\n  affordance — and, like the footer, only on the OPEN document's cards in the\n  All-files grouped view. Return `null` for a card and no wrapper exists for\n  it; omit the prop and no wrapper exists at all. The header row is one\n  non-wrapping flex line, so keep the stamp compact: the wrapper shrinks but\n  a node that cannot will overflow toward the built-in actions.\n- **`mentionSource?: MentionSource`** — the same source `Viewer` and\n  `HtmlViewer` take (0.43.1), applied to the card's EDIT box, so a comment can\n  be re-tagged after it was written. The grammar, the picker, the keyboard\n  rules and `onPickBlocked` are the ones documented above. Saving an edit\n  calls `onEdit(id, { text, mentions })` **only** when a source is supplied\n  AND at least one person was picked in that edit session whose token\n  survives; otherwise it is the `onEdit(id, { text })` it always was, so an\n  untouched or pick-less edit can never wipe tags the annotation already\n  carries. Reopening the editor starts a fresh session with nobody picked, and\n  `onMentionsChange` follows that session — it reports `[]` once when the\n  editor opens, so treat it as the live picker state, never as the\n  annotation's stored tags.\n  **One difference from `CommentPopover`: no chips** — the token stays plain\n  text, because the chip layer lives in the composer's mirrored overlay and is\n  not worth duplicating; the follow-up is to move the card's edit box onto\n  `ComposerTextarea`.\n\nNeither prop reaches `CodeAnnotation` cards (the review-editor shape), which\ntake no `renderCardFooter` either. See HANDOFF.md § \"Annotation card header\nslot and mentions on the edit box (0.45.0)\".\n\n### WebMCP provider (`@plannotator/ui/webmcp`; 0.32.0)\n\nThe engine that lets a browser-integrated agent (Chrome/Edge WebMCP, `document.modelContext`) call in-page tools on a document surface. Feature-detected once; a browser without the API sees no registration, no DOM, no network, no timers. Seam: `configurePlannotatorUI({ webmcp: { enabled, namePrefix } })`, default enabled with the `plannotator.` prefix; pass `enabled: false` to keep a host page tool-free, or your own prefix to namespace the tools beside your own. There is deliberately no confirmation seam: the catalog is read-and-comment only (no approve / submit / close tools), and the agent may only edit or remove comments stamped `source: \"browser-agent\"`.\n\n- `modelContext.ts` is the only file that spells the spec surface (local structural types, no `webmcp-types` dependency). A spec rename is a one-file change.\n- `useToolset({ id, active, build, deps, hooks })` attaches a named tool set to the document registry; handlers read through refs, so re-renders never re-register, and `active: false` aborts every registration (what Plannotator's Settings opt-out drives).\n- `AnnotationChangeTracker` / `buildNudges` are pure (no DOM): per-annotation `seq`, tombstones, a per-tab watermark with `since` override, and the nudge vocabulary every response carries.\n- A host with its own document state builds the same adapter-driven catalog Plannotator uses (`packages/editor/webmcp/documentTools.ts`, `buildDocumentTools(adapter, state, options)`) over its own getters and actions; multi-document pages should register one set whose tools take `path` (the folder-session shape) rather than one set per viewer (duplicate names across sets are skipped with a warning, never replaced).\n- Never register tools inside an untrusted iframe: the raw-HTML viewer's `sandbox=\"allow-scripts\"` frame and the live-app frame carry no `allow=\"tools\"`, and that is what keeps a framed page from impersonating the host's tools.\n\nThe one additive data-model change that rides with it: `Annotation.inReplyTo` (threaded replies; the panel indents them under the parent, the export nests them, share links drop them).\n\n### Questions in documents (`:::question`; 0.48.0, core 0.25.8)\n\nAn agent writes `:::question` (pick one), `:::question-multi` (pick any) or `:::question-text` (free text) blocks in a markdown document; `Viewer` renders each as an answer card (`components/blocks/QuestionBlock`) with native radios / checkboxes, an always-present \"Other…\", Add note · Skip · Accept recommended. Question and choice text stay selectable and annotatable; a drag across option text never picks it.\n\n- **Grammar, key, answer shape, export section, authoring guide:** `@plannotator/core/question-block` (`parseQuestionBlock`, `indexQuestionBlocks`, `questionKey`, `QuestionAnswer`, `parseQuestionAnswer`, `formatQuestionAnswersSection`, `QUESTION_AUTHORING_GUIDE` — the syntax reference to put in your own agent prompts).\n- **Storage is an annotation.** An answer is one row with `Annotation.questionAnswer` (id `ann-question-<key>`). The Viewer draws answers from its existing `annotations` prop, so your annotation persistence and `draftTransport` carry them unchanged.\n- **One new optional prop:** `Viewer` `onAnswerQuestion?(blockId, answer | null, key)`. Apply it with `upsertQuestionAnswerAnnotation(annotations, blockId, answer, key)` from `utils/questionAnswers` and store the result. Without the prop (or under `readOnly`) the cards render read-only, still showing stored answers.\n- **Export:** `exportAnnotations` / `exportLinkedDocAnnotations` / `exportAnnotationEntry` print answers in an \"Answers to your questions\" section before the numbered feedback, with no host action.\n- An unparseable block (no prompt) renders as the ordinary directive callout; a ui older than 0.48.0 renders every `:::question` that way.\n- **Progress and panel (optional):** pass `questionRows={buildQuestionPanelRows(blocks, annotations)}` to `AnnotationPanel` for the Questions section (answers then leave the comment timeline), and mount `QuestionProgressChip` with `questionProgress(rows)` / `nextOpenQuestionKey(rows)` / `focusQuestionCard(key)` for the \"N/M answered\" chip.\n\nSee HANDOFF.md § \"Questions in documents (0.48.0, core 0.25.8)\".\n\n**A host that keeps answers itself (ui 0.49.0, core 0.25.9).** All optional on `Viewer`; Plannotator passes none of them:\n\n- `questionAnswers` (Map or object keyed by the de-duplicated question key): the cards read answers from here instead of from `annotations`.\n- `onSaveQuestionAnswer(key, answer | null)`: explicit save mode. Edits stay a draft in the card, which shows Save answer and Cancel (no Skip); return a promise to hold the draft until the save settles.\n- `saveQuestionAnswerLabel` (string, or `(question) => string`): the Save button's label in explicit save mode. Default \"Save answer\"; never derived from `Decision: when answered`, since only the host knows whether its save records a decision.\n- `renderQuestionFooter(question, savedAnswer)`: host actions at the right of the card's footer (e.g. \"Mark as decision\"), live in read-only cards too.\n- Core reads a `Decision: when answered` line after the prompt as `ParsedQuestion.decisionOnAnswer` and a `Decision: [statement](https://…)` line as `ParsedQuestion.decision`; the card shows either. Neither changes the key.\n- `findQuestionBlocks(markdown)` (core) locates each question block by key, line range and exact text, without the UI parser; it shares the block splitter's rules through the new `@plannotator/core/markdown-structure` subpath, so it agrees with what renders.\n\nSee HANDOFF.md § \"Question host seams (ui 0.49.0, core 0.25.9)\".\n\n## Consuming it (e.g. from Workspaces)\n\n```bash\nnpm install @plannotator/ui @plannotator/core\n```\n\n1. Call `configurePlannotatorUI({ ... })` once at startup with your backend.\n2. Import the stylesheet: `import \"@plannotator/ui/styles.css\";` (precompiled — no Tailwind wiring needed; if you'd rather run your own Tailwind over the package source, add `@source` globs for `@plannotator/ui`'s `components/`, `hooks/`, and `utils/` dirs in your own CSS — the package doesn't ship its build entry).\n3. **Load the fonts in your app entry** — the stylesheet references `--font-sans` / `--font-mono` but does not ship font binaries (standard for a shared UI package; your app owns font loading). Plannotator uses Inter + Geist Mono:\n   ```ts\n   import \"@fontsource-variable/inter\";\n   import \"@fontsource-variable/geist-mono\";\n   ```\n   Or provide your own fonts and set `--font-sans` / `--font-mono` to match.\n   The same policy covers math: KaTeX's stylesheet + fonts are deliberately not in `styles.css` — if you render math, load `katex/dist/katex.min.css` yourself (import, CDN tag, or self-hosted copy; see HANDOFF.md \"Math rendering\").\n4. Import components: `import { Viewer } from \"@plannotator/ui/components/Viewer\";`\n5. Build with a bundler that compiles TS/TSX (Vite + React 19 + Tailwind v4). The packages ship **source**, so your bundler compiles them — set `moduleResolution: \"bundler\"`, `allowImportingTsExtensions`, `jsx: \"react-jsx\"`.\n\n## Packages & publishing\n\n- `@plannotator/core` — pure utils + types, zero deps, browser-safe (CI enforces no `node:` imports). Published.\n- `@plannotator/ui` — React components/hooks + theme + `configure()`. Depends on an exact published `@plannotator/core` version. Published.\n- `@plannotator/shared`, `@plannotator/ai` — stay private to the monorepo; `shared` re-exports `core`'s modules via shims so Plannotator's internals are untouched.\n- Currently `@plannotator/ui` 0.48.0 depends exactly on `@plannotator/core` 0.25.8. `core` is bumped only when something under `packages/core` changes, so `ui` can advance alone. Keep the published core version exact in `packages/ui/package.json`; do not use a `workspace:` protocol there, because a directly published manifest must remain installable outside this monorepo. Bun still links the matching local workspace during development. When both packages change, publish `core` first, then build and publish the UI tarball. See HANDOFF.md \"Publishing & versioning\" for the verification command.\n\n## The one rule\n\n**Do not reimplement the document UI from scratch.** A prior from-scratch rewrite broke the app and was reverted. The supported path is always: keep these components as-is and add a seam where a host needs different backend behavior. Never delete working Plannotator code until a human has confirmed parity in the browser.\n","readmeFilename":"README.md"}