From 11917c70c4370d56054b879ed80f0a90e8884c33 Mon Sep 17 00:00:00 2001 From: braginini Date: Fri, 13 Mar 2026 17:40:57 +0100 Subject: [PATCH] Init --- .gitignore | 4 + README.md | 402 +++++++++++++++++++++++++++++ package-lock.json | 113 ++++++++ package.json | 45 ++++ src/client/AIAssistantProvider.tsx | 288 +++++++++++++++++++++ src/client/AIChatBot.tsx | 309 ++++++++++++++++++++++ src/client/AIFloatingButton.tsx | 34 +++ src/client/index.ts | 4 + src/client/styles.ts | 353 +++++++++++++++++++++++++ src/server/handler.ts | 158 ++++++++++++ src/server/index.ts | 5 + src/server/providers/anthropic.ts | 53 ++++ src/server/providers/openai.ts | 55 ++++ src/server/providers/types.ts | 10 + src/types.ts | 11 + tsconfig.json | 22 ++ 16 files changed, 1866 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 src/client/AIAssistantProvider.tsx create mode 100644 src/client/AIChatBot.tsx create mode 100644 src/client/AIFloatingButton.tsx create mode 100644 src/client/index.ts create mode 100644 src/client/styles.ts create mode 100644 src/server/handler.ts create mode 100644 src/server/index.ts create mode 100644 src/server/providers/anthropic.ts create mode 100644 src/server/providers/openai.ts create mode 100644 src/server/providers/types.ts create mode 100644 src/types.ts create mode 100644 tsconfig.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..53400d7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +node_modules/ +dist/ +*.tsbuildinfo +.idea/ \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..6790892 --- /dev/null +++ b/README.md @@ -0,0 +1,402 @@ +# netbird-explain + +AI-powered "Explain" assistant for React apps. Users click on UI elements and get contextual AI explanations via a chat panel. + +The package has two entry points: + +- `netbird-explain/client` — React components (provider, chat panel, floating button) +- `netbird-explain/server` — Node.js handler that proxies requests to Anthropic or OpenAI + +No CSS framework required — the package is fully self-contained with inline styles and CSS custom properties. + +## Installation + +```bash +npm install netbird-explain +``` + +Peer dependencies: `react >=18`, `react-dom >=18`. + +For local development as a workspace package, add it to your `package.json`: + +```json +{ + "dependencies": { + "netbird-explain": "file:./packages/netbird-explain" + } +} +``` + +If you're using Next.js, add to `next.config.js`: + +```js +module.exports = { + transpilePackages: ["netbird-explain"], +}; +``` + +--- + +## Client + +### Setup + +Wrap your app with `AIAssistantProvider`: + +```tsx +import { AIAssistantProvider } from "netbird-explain/client"; + +export default function App({ children }) { + return ( + + {children} + + ); +} +``` + +This renders the floating action button and chat panel automatically. No CSS imports are needed — the provider injects all required styles via CSS custom properties. + +### Props + +| Prop | Type | Required | Description | +| ---------- | ----------- | -------- | ----------------------------------- | +| `endpoint` | `string` | Yes | URL of the AI chat API | +| `apiKey` | `string` | No | Bearer token sent with each request | +| `children` | `ReactNode` | Yes | Your application | + +### Marking elements as explainable + +Add the `data-nb-explain` attribute to any element you want users to be able to click on in explain mode: + +```tsx +
+ + +
+``` + +When clicked, the library extracts a label from the element (first `