UNPKG

react-roast

Version:

A React widget to get feedback

156 lines (113 loc) 5.06 kB
# React Roast A React widget to get feedback ## Purpose React Roast is an open-source app inspector that allows users to select elements on a webpage, capture their state (including screenshots), and send the details to a desired channel. This tool is useful for UI/UX testing, feedback collection, and debugging user interfaces. ### **Demo** — [RoastNest.com](https://roastnest.com) | [Growati.com](https://growati.com) <!-- https://github.com/user-attachments/assets/bbbd0986-200f-45cb-99d5-cb44117024bb --> <br> ![Roastnest Widget Demo](https://github.com/user-attachments/assets/41e555a5-e7b1-47c7-8aba-59fd5065f9eb) ## Features Select any element on a webpage\ Capture element position, size, and a screenshot\ Supports React-based frameworks like Next.js\ Supports self-host and customization\ Lightweight and easy to integrate\ Written in Typescript and build using rollup ## Installation ```sh npm npm install react-roast ``` or ```sh yarn yarn add react-roast ``` ## Local Usage Wrap your app with `WidgetProvider` provided by `react-roast`. The provider should be in client side and mode should be set to `local` and onFormSubmit should be defined. ### React Example ```tsx import WidgetProvider, { FormDataProps } from "react-roast"; export default function App() { const handleSubmit = async ({ message, screenshot }: FormDataProps): Promise<boolean> => { // Must return boolean value. try { // Send message to desired channel like, Slack or discord return true; } catch (e) { return false; } }; return ( <WidgetProvider mode="local" onFormSubmit={handleSubmit}> <Main /> </WidgetProvider> ); } ``` ### NextJS App Example ```tsx "use client"; import WidgetProvider, { FormDataProps } from "react-roast"; import { ReactNode } from "react"; export default function ReactRoastProvider({ children: ReactNode }) { const handleSubmit = async ({ message, screenshot }: FormDataProps): Promise<boolean> => { // Must return boolean value. try { // Send message to desired channel like, Slack or discord return true; } catch (e) { return false; } }; return ( <WidgetProvider mode="local" onFormSubmit={handleSubmit}> {children} </WidgetProvider> ); } ``` In app/layout.tsx ```tsx export default function RootLayout({ children }) { return ( <html> <body> <ReactRoastProvider>{children}</ReactRoastProvider> </body> </html> ); } ``` ## Widget Props ### Widget Provider Props | Property | Type | Description | | -------------- | ------------------- | -------------------------------------------------- | | `mode` | `local` or `remote` | Defines if the widget operates locally or remotely | | `children` | `ReactNode` | Nested components inside the provider | | `disable` | `boolean` | Disable the widget | | `onFormSubmit` | `function` | Callback function for form submission | | `customize` | `object` | Customization options | ### Widget Customize Props You can customize the widget by passing `customize` props with the following options: | Property | Type | Description | | ------------------------------- | ----------------- | ------------------------------------ | | `form.className` | `string` | Custom class for the form | | `form.messageInput.placeholder` | `string` | Placeholder text for message input | | `form.submitButton.label` | `string` | Label for submit button | | `form.cancelButton.label` | `string` | Label for cancel button | | `island.direction` | `left` or `right` | Position of the floating button | | `island.className` | `string` | Custom class for the floating button | | `island.label` | `string` | Label for the floating button | ### Form Data Props | Property | Type | Description | | ------------ | -------- | ------------------------------------------------ | | `message` | `string` | The message input by the user. | | `screenshot` | `Blob` | The captured screenshot of the selected element. | ## Contribution Contributions are welcome! If you would like to improve react roast, please follow these steps: 1. Fork the repository. 2. Create a new branch for your feature or fix. 3. Make changes and commit them. 4. Submit a pull request. Please ensure your contributions align with the project’s coding standards and best practices. If You want help, [contact here](https://x.com/satyamskillz) ## License MIT License.