* docs: migrating existing docs to docosaraus :) * log broken links * lint :p * fix * divide the doc into diff categories * fix * order sidebars and more * fix lint * point to installation * making docs better :) * fix * renaming git * renaming git * fix links * fix * update readme * fix * resolve duplicate url and make /docs as base url * fix * move main docs as well * making docs better * support mdx * update og * fix title * upgrade docusarus to stable version * use draculla theme * fix * make entire sidebar collapsable * live editor for footer wohoo * render excalidraw only on client to fix the prod build * migrate MainMenu to live editor too :) * lint :p * cleanup integration and use live editor and tabs * fix * Add welcome screen doc * Live Collaboration comp docs * Add collaborator example * Add example * add more * remove isCollaborating * Rewrite ref and move to sidebar * change color of links inside pre * add initial data * fix lint * Add styling * fix lint * Add example for customizing styles * fix lint * fix * fix lint * Add link to livecollabtrigger * fix * rewrite UIOptions to sidebar * move initialdata to sidebar * move render props to sidebar and rewrite renderTopRightUI and renderCustomStats * rewrite renderSidebar * update og * update url for testing * fix url * update readme * fix style * tweaks * Add highlight comp to highlight text * Add bash syntax highlight * fix * tweaks * fix * rewrite export utilities * fix restore * rewrite utils * move constants to sidebar * update readme * add copyright * fix links style * Add linkedin * tweaks * rename package to @excalidraw/excalidraw * enable algolia with dummy creds * tweaks to integration doc * tweak WelcomeScreen docs to reflect upcoming API changes * tweak components intro * tweak nomenclature * fix admonition * rename `components` sidebar item and change order of components list * uncollapse package section in sidebar * show level 4 haeadings in TOC * remove algolia * remove unused assets * capitalize C * tweak * rename components to App * rename components -> children-components in the routes * move notable used tools to intro * update MainMenu docs with `onSelect` preventDefault behavior * change sidebar label for children components * use code * tweak README & docs intro * tweak package development doc * make scrollbar gutter stable * tweak api intro * add admonition for export utils * use next * wip * wip * make excalidraw examples use current color theme & prefer system * fix welcomescreen docs * use latest temp release * fix component order * revert wip changes * use next * tweak * increase height to fix welcome screen hint * tweak editor height * update excal version * wrap Excal with forwardRef to fix refs * migrate contributing.md * fix broken links --------- Co-authored-by: dwelle <luzar.david@gmail.com>
127 lines
4.4 KiB
Plaintext
127 lines
4.4 KiB
Plaintext
# Render Props
|
|
|
|
## renderTopRightUI
|
|
|
|
<pre>
|
|
(isMobile: boolean, appState:{" "}
|
|
<a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L95">
|
|
AppState
|
|
</a>
|
|
) => JSX | null
|
|
</pre>
|
|
|
|
A function returning `JSX` to render `custom` UI in the top right corner of the app.
|
|
|
|
```jsx live
|
|
function App() {
|
|
return (
|
|
<div style={{ height: "500px" }}>
|
|
<Excalidraw
|
|
renderTopRightUI={() => {
|
|
return (
|
|
<button
|
|
style={{
|
|
background: "#70b1ec",
|
|
border: "none",
|
|
color: "#fff",
|
|
width: "max-content",
|
|
fontWeight: "bold",
|
|
}}
|
|
onClick={() => window.alert("This is dummy top right UI")}
|
|
>
|
|
{" "}
|
|
Click me{" "}
|
|
</button>
|
|
);
|
|
}}
|
|
/>
|
|
</div>
|
|
);
|
|
}
|
|
```
|
|
|
|
## renderCustomStats
|
|
|
|
A function that can be used to render custom stats (returns JSX) in the `nerd stats` dialog.
|
|
|
|

|
|
|
|
For example you can use this prop to render the size of the elements in the storage as do in [excalidraw.com](https://excalidraw.com).
|
|
|
|
```jsx live
|
|
function App() {
|
|
return (
|
|
<div style={{ height: "500px" }}>
|
|
<Excalidraw
|
|
renderCustomStats={() => (
|
|
<p style={{ color: "#70b1ec", fontWeight: "bold" }}>
|
|
{" "}
|
|
Dummy stats will be shown here{" "}
|
|
</p>
|
|
)}
|
|
/>
|
|
</div>
|
|
);
|
|
}
|
|
```
|
|
|
|
## renderSidebar
|
|
|
|
```tsx
|
|
() => JSX | null;
|
|
```
|
|
|
|
You can render `custom sidebar` using this prop. This sidebar is the same that the library menu sidebar is using, and can be used for any purposes your app needs.
|
|
|
|
You need to import the `Sidebar` component from `excalidraw` package and pass your content as its `children`. The function `renderSidebar` should return the `Sidebar` instance.
|
|
|
|
### Sidebar
|
|
The `<Sidebar>` component takes these props (all are optional except `children`):
|
|
|
|
| Prop | Type | Description |
|
|
| --- | --- | --- |
|
|
| `children` | `React.ReactNode` | Content you want to render inside the `sidebar`. |
|
|
| `onClose` | `function` | Invoked when the component is closed (by user, or the editor). No need to act on this event, as the editor manages the sidebar open state on its own. |
|
|
| `onDock` | `function` | Invoked when the user toggles the `dock` button. The callback recieves a `boolean` parameter `isDocked` which indicates whether the sidebar is `docked` |
|
|
| `docked` | `boolean` | Indicates whether the sidebar is`docked`. By default, the sidebar is `undocked`. If passed, the docking becomes controlled, and you are responsible for updating the `docked` state by listening on `onDock` callback. To decide the breakpoint for docking you can use [UIOptions.dockedSidebarBreakpoint](/docs/@excalidraw/excalidraw/api/props/ui-options#dockedsidebarbreakpoint) for more info on docking. |
|
|
| `dockable` | `boolean` | Indicates whether to show the `dock` button so that user can `dock` the sidebar. If `false`, you can still dock programmatically by passing `docked` as `true`. |
|
|
|
|
The sidebar will always include a header with `close / dock` buttons (when applicable).
|
|
You can also add custom content to the header, by rendering `<Sidebar.Header>` as a child of the `<Sidebar>` component. Note that the custom header will still include the default buttons.
|
|
|
|
|
|
### Sidebar.Header
|
|
|
|
| name | type | description |
|
|
| --- | --- | --- |
|
|
| children | `React.ReactNode` | Content you want to render inside the sidebar header as a sibling of `close` / `dock` buttons. |
|
|
|
|
To control the visibility of the sidebar you can use [`toggleMenu("customSidebar")`](/docs/@excalidraw/excalidraw/api/props/ref#togglemenu) api available via `ref`.
|
|
|
|
```tsx live
|
|
function App() {
|
|
const [excalidrawAPI, setExcalidrawAPI] = useState(null);
|
|
|
|
return (
|
|
<div style={{ height: "500px" }}>
|
|
<button className="custom-button" onClick={() => excalidrawAPI.toggleMenu("customSidebar")}>
|
|
{" "}
|
|
Toggle Custom Sidebar{" "}
|
|
</button>
|
|
<Excalidraw
|
|
UIOptions={{ dockedSidebarBreakpoint: 100 }}
|
|
ref={(api) => setExcalidrawAPI(api)}
|
|
renderSidebar={() => {
|
|
return (
|
|
<Sidebar dockable={true}>
|
|
<Sidebar.Header>Custom Sidebar Header </Sidebar.Header>
|
|
<p style={{ padding: "1rem" }}> custom Sidebar Content </p>
|
|
</Sidebar>
|
|
);
|
|
}}
|
|
/>
|
|
</div>
|
|
);
|
|
}
|
|
```
|