{"_id":"@canihelp-ai/widget","_rev":"3-65bbbcd44e2fb1e6fdf9a5f42cd98474","name":"@canihelp-ai/widget","dist-tags":{"latest":"0.1.2"},"versions":{"0.1.0":{"name":"@canihelp-ai/widget","version":"0.1.0","_id":"@canihelp-ai/widget@0.1.0","maintainers":[{"name":"canihelp","email":"admin@canihelp.ai"}],"dist":{"shasum":"08acfd2e082401438ea115c9be04691b7e1ced69","tarball":"https://registry.npmjs.org/@canihelp-ai/widget/-/widget-0.1.0.tgz","fileCount":8,"integrity":"sha512-x81zI5vdAX196QIfes9+R5S0U3hpS+ulAZ5heR2/X6P4PVV8dbHy5hJT00AOQuQIcTaqu87mDIqj2SI5UEV8rA==","signatures":[{"sig":"MEYCIQDMCVHZFF72it2Ja7cmISsGDtNdIVXlmMNIgxI4EDLQgAIhAM+x6Va9/8rmiY5x1yuFbEH6GAE/Lhsu2wN1OwpjKBGV","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":58543},"type":"module","exports":{"./react":{"import":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"},"require":{"types":"./dist/react/index.d.cts","default":"./dist/react/index.cjs"}}},"gitHead":"9d1d7b43588e96ce53483dd0bc0a0144ee5b8882","scripts":{"dev":"vite","lint":"eslint . --fix","build":"tsc -b && vite build","serve":"npx http-server ./test --cors -p 3333","format":"prettier --write \"src/**/*.{ts,tsx}\"","preview":"vite preview","lint:check":"eslint .","build:react":"tailwindcss -i ./src/widget/styles/style.css -o ./dist/react-widget.css --minify && node scripts/inline-css.mjs && tsup && cp README.npm.md dist/react/README.md","build:widget":"tsc --noEmit && rollup -c ./rollup.config.mjs","serve:widget":"npx http-server ./dist --cors -p 3334","build:widget:staging":"tsc --noEmit && rollup -c ./rollup.config.mjs --environment=staging","build:widget:production":"tsc --noEmit && rollup -c ./rollup.config.mjs --environment=production"},"_npmUser":{"name":"canihelp","email":"admin@canihelp.ai"},"prettier":{"semi":true,"tabWidth":2,"printWidth":80,"singleQuote":true,"trailingComma":"all","bracketSpacing":true,"jsxSingleQuote":true},"_npmVersion":"11.6.2","description":"Embeddable chat widget for React applications","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vite":"^6.0.3","react":"^18.3.1","dotenv":"^16.4.7","eslint":"^9.17.0","rollup":"^4.29.1","globals":"^15.13.0","postcss":"^8.4.49","prettier":"3.4.2","react-dom":"^18.3.1","@eslint/js":"^9.17.0","typescript":"~5.6.3","@types/node":"^22.10.2","tailwindcss":"^3.4.17","@types/react":"^18.3.28","@types/react-dom":"^18.3.5","typescript-eslint":"^8.18.1","@babel/preset-react":"^7.26.3","@rollup/plugin-babel":"^6.0.4","@vitejs/plugin-react":"^4.3.4","@rollup/plugin-terser":"^1.0.0","rollup-plugin-postcss":"^4.0.2","@rollup/plugin-replace":"^6.0.2","eslint-config-prettier":"^10.0.1","eslint-plugin-prettier":"^5.2.3","@rollup/plugin-commonjs":"^28.0.2","@babel/preset-typescript":"^7.26.0","rollup-plugin-visualizer":"^5.12.0","eslint-plugin-react-hooks":"^5.0.0","@rollup/plugin-node-resolve":"^16.0.0","eslint-plugin-react-refresh":"^0.4.16","rollup-plugin-inject-process-env":"^1.3.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/widget_0.1.0_1775430949382_0.7223275321992879","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@canihelp-ai/widget","version":"0.1.1","_id":"@canihelp-ai/widget@0.1.1","maintainers":[{"name":"canihelp","email":"admin@canihelp.ai"}],"dist":{"shasum":"08a850bce2d9542ddfebafe2cd42fb5db83513da","tarball":"https://registry.npmjs.org/@canihelp-ai/widget/-/widget-0.1.1.tgz","fileCount":7,"integrity":"sha512-JhVOki0OgcukiIWEbYwSJl7FRXapD62nSMYjgQ8eQFtPfOjMMU5KGNPrx7Mod7dZ4XID6cARH4wT3dpWmepDWA==","signatures":[{"sig":"MEYCIQC0E+xpt4kxTOatZtHwQeXk4OldgoE6dVZc9/P0Xrq2IAIhAPOrhWYRUARcT+++wAWf3G0HuKul3Ry5wNYGVjUsABg2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":58055},"type":"module","exports":{"./react":{"import":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"},"require":{"types":"./dist/react/index.d.cts","default":"./dist/react/index.cjs"}}},"gitHead":"9d1d7b43588e96ce53483dd0bc0a0144ee5b8882","scripts":{"dev":"vite","lint":"eslint . --fix","build":"tsc -b && vite build","serve":"npx http-server ./test --cors -p 3333","format":"prettier --write \"src/**/*.{ts,tsx}\"","preview":"vite preview","lint:check":"eslint .","build:react":"tailwindcss -i ./src/widget/styles/style.css -o ./dist/react-widget.css --minify && node scripts/inline-css.mjs && tsup","build:widget":"tsc --noEmit && rollup -c ./rollup.config.mjs","serve:widget":"npx http-server ./dist --cors -p 3334","build:widget:staging":"tsc --noEmit && rollup -c ./rollup.config.mjs --environment=staging","build:widget:production":"tsc --noEmit && rollup -c ./rollup.config.mjs --environment=production"},"_npmUser":{"name":"canihelp","email":"admin@canihelp.ai"},"prettier":{"semi":true,"tabWidth":2,"printWidth":80,"singleQuote":true,"trailingComma":"all","bracketSpacing":true,"jsxSingleQuote":true},"_npmVersion":"11.6.2","description":"Embeddable chat widget for React applications","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vite":"^6.0.3","react":"^18.3.1","dotenv":"^16.4.7","eslint":"^9.17.0","rollup":"^4.29.1","globals":"^15.13.0","postcss":"^8.4.49","prettier":"3.4.2","react-dom":"^18.3.1","@eslint/js":"^9.17.0","typescript":"~5.6.3","@types/node":"^22.10.2","tailwindcss":"^3.4.17","@types/react":"^18.3.28","@types/react-dom":"^18.3.5","typescript-eslint":"^8.18.1","@babel/preset-react":"^7.26.3","@rollup/plugin-babel":"^6.0.4","@vitejs/plugin-react":"^4.3.4","@rollup/plugin-terser":"^1.0.0","rollup-plugin-postcss":"^4.0.2","@rollup/plugin-replace":"^6.0.2","eslint-config-prettier":"^10.0.1","eslint-plugin-prettier":"^5.2.3","@rollup/plugin-commonjs":"^28.0.2","@babel/preset-typescript":"^7.26.0","rollup-plugin-visualizer":"^5.12.0","eslint-plugin-react-hooks":"^5.0.0","@rollup/plugin-node-resolve":"^16.0.0","eslint-plugin-react-refresh":"^0.4.16","rollup-plugin-inject-process-env":"^1.3.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/widget_0.1.1_1775431103304_0.08648973464631582","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@canihelp-ai/widget","version":"0.1.2","type":"module","description":"Embeddable chat widget for React applications","exports":{"./react":{"import":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"},"require":{"types":"./dist/react/index.d.cts","default":"./dist/react/index.cjs"}}},"scripts":{"dev":"vite","predev":"node scripts/ensure-widget-styles.mjs","build":"node scripts/ensure-widget-styles.mjs && tsc -b && vite build","lint":"eslint . --fix","lint:check":"eslint .","preview":"vite preview","format":"prettier --write \"src/**/*.{ts,tsx}\"","build:widget":"node scripts/ensure-widget-styles.mjs && tsc --noEmit && rollup -c ./rollup.config.mjs","build:widget:staging":"node scripts/ensure-widget-styles.mjs && tsc --noEmit && rollup -c ./rollup.config.mjs --environment=staging","build:widget:production":"node scripts/ensure-widget-styles.mjs && tsc --noEmit && rollup -c ./rollup.config.mjs --environment=production","serve":"npx http-server ./test --cors -p 3333","serve:widget":"npx http-server ./dist --cors -p 3334","build:react":"rm -rf dist/react && tailwindcss -i ./src/widget/styles/style.css -o ./dist/react-widget.css --minify && node scripts/inline-css.mjs && tsup","test:react":"bash scripts/test-react.sh","test:react:published":"bash scripts/test-react-published.sh"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"devDependencies":{"@babel/preset-react":"^7.26.3","@babel/preset-typescript":"^7.26.0","@eslint/js":"^9.17.0","@rollup/plugin-babel":"^6.0.4","@rollup/plugin-commonjs":"^28.0.2","@rollup/plugin-node-resolve":"^16.0.0","@rollup/plugin-replace":"^6.0.2","@rollup/plugin-terser":"^1.0.0","@types/node":"^22.10.2","@types/react":"^18.3.28","@types/react-dom":"^18.3.5","@vitejs/plugin-react":"^4.3.4","dotenv":"^16.4.7","eslint":"^9.17.0","eslint-config-prettier":"^10.0.1","eslint-plugin-prettier":"^5.2.3","eslint-plugin-react-hooks":"^5.0.0","eslint-plugin-react-refresh":"^0.4.16","globals":"^15.13.0","postcss":"^8.4.49","prettier":"3.4.2","react":"^18.3.1","react-dom":"^18.3.1","rollup":"^4.29.1","rollup-plugin-inject-process-env":"^1.3.1","rollup-plugin-postcss":"^4.0.2","rollup-plugin-visualizer":"^5.12.0","tailwindcss":"^3.4.17","tsup":"^8.0.0","typescript":"~5.6.3","typescript-eslint":"^8.18.1","vite":"^6.0.3"},"prettier":{"singleQuote":true,"trailingComma":"all","tabWidth":2,"semi":true,"bracketSpacing":true,"jsxSingleQuote":true,"printWidth":80},"gitHead":"ced5e44a6f7312b3c73c70a7d585b97d41969394","_id":"@canihelp-ai/widget@0.1.2","_nodeVersion":"24.14.1","_npmVersion":"11.11.0","dist":{"integrity":"sha512-7y+ZIvC5INrFauKxksaP3chYi69FDVz5Y0FeciRoFphQdwu00WhM2B35yaJaW1WPtFvKCyHUbSZbSGwgLu9NSQ==","shasum":"e9bf7df522ae3641d431676e290cad4a420a72eb","tarball":"https://registry.npmjs.org/@canihelp-ai/widget/-/widget-0.1.2.tgz","fileCount":6,"unpackedSize":54280,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIEm1yR4GUMx0nI32hwypPbHs4gBJPDKIW7EULdiVv7MgAiEAmkYeHvg1zTeEjROWRB++mIOKQN03aTorexzZHLRuKUg="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1ada8d51-dedf-4f0e-b0ea-dbd3d2ac5de2"}},"directories":{},"maintainers":[{"name":"canihelp","email":"admin@canihelp.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/widget_0.1.2_1775449406501_0.2899917153690894"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-05T23:15:49.250Z","modified":"2026-04-06T04:23:26.785Z","0.1.0":"2026-04-05T23:15:49.521Z","0.1.1":"2026-04-05T23:18:23.439Z","0.1.2":"2026-04-06T04:23:26.664Z"},"description":"Embeddable chat widget for React applications","maintainers":[{"name":"canihelp","email":"admin@canihelp.ai"}],"readme":"# @canihelp-ai/widget\n\nEmbeddable chat widget for React applications. Renders in a Shadow DOM for complete style isolation from your host application.\n\n## Installation\n\n```bash\nnpm install @canihelp-ai/widget\n```\n\n## Usage\n\n```tsx\nimport { CanIHelpWidget, useCanIHelp } from '@canihelp-ai/widget/react';\n\nfunction App() {\n  const { open, close, toggle, isOpen } = useCanIHelp();\n\n  return (\n    <>\n      <CanIHelpWidget agentId=\"agt_abc\" theme=\"dark\" position=\"right\" hideButton />\n      <button onClick={open}>Chat with us</button>\n    </>\n  );\n}\n```\n\n## `<CanIHelpWidget />` Props\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `agentId` | `string` | **required** | Agent identifier |\n| `theme` | `'light' \\| 'dark'` | `'light'` | Visual theme |\n| `position` | `'left' \\| 'right'` | `'right'` | Screen position of the widget button |\n| `size` | `'small' \\| 'medium' \\| 'large'` | `'medium'` | Widget button size |\n| `ctaText` | `string` | `'Can I Help?'` | Tooltip text on the widget button |\n| `ctaIconSrc` | `string` | — | Custom icon URL for the widget button |\n| `hideButton` | `boolean` | `false` | Hide the default circular button (use with `useCanIHelp` hook) |\n\n## `useCanIHelp()` Hook\n\nProgrammatic control for the chat widget.\n\n```tsx\nconst { open, close, toggle, isOpen } = useCanIHelp();\n```\n\n| Property | Type | Description |\n|----------|------|-------------|\n| `open` | `() => void` | Open the chat window |\n| `close` | `() => void` | Close the chat window |\n| `toggle` | `() => void` | Toggle the chat window |\n| `isOpen` | `boolean` | Current open/closed state |\n\n## Requirements\n\n- React 18 or 19\n- Client-side only — Next.js App Router components must use `'use client'`\n- Only one `<CanIHelpWidget />` instance can be mounted at a time\n","readmeFilename":"README.md"}