Package configuration options
This commit is contained in:
parent
25ea97d0f9
commit
02c1236962
@ -516,6 +516,7 @@ class App extends React.Component<AppProps, AppState> {
|
|||||||
const {
|
const {
|
||||||
onCollabButtonClick,
|
onCollabButtonClick,
|
||||||
renderTopRightUI,
|
renderTopRightUI,
|
||||||
|
renderMenuLinks,
|
||||||
renderFooter,
|
renderFooter,
|
||||||
renderCustomStats,
|
renderCustomStats,
|
||||||
} = this.props;
|
} = this.props;
|
||||||
@ -562,6 +563,7 @@ class App extends React.Component<AppProps, AppState> {
|
|||||||
langCode={getLanguage().code}
|
langCode={getLanguage().code}
|
||||||
isCollaborating={this.props.isCollaborating}
|
isCollaborating={this.props.isCollaborating}
|
||||||
renderTopRightUI={renderTopRightUI}
|
renderTopRightUI={renderTopRightUI}
|
||||||
|
renderMenuLinks={renderMenuLinks}
|
||||||
renderCustomFooter={renderFooter}
|
renderCustomFooter={renderFooter}
|
||||||
renderCustomStats={renderCustomStats}
|
renderCustomStats={renderCustomStats}
|
||||||
renderCustomSidebar={this.props.renderSidebar}
|
renderCustomSidebar={this.props.renderSidebar}
|
||||||
@ -576,6 +578,7 @@ class App extends React.Component<AppProps, AppState> {
|
|||||||
id={this.id}
|
id={this.id}
|
||||||
onImageAction={this.onImageAction}
|
onImageAction={this.onImageAction}
|
||||||
renderWelcomeScreen={
|
renderWelcomeScreen={
|
||||||
|
this.props.hideWelcomeScreen !== true &&
|
||||||
this.state.showWelcomeScreen &&
|
this.state.showWelcomeScreen &&
|
||||||
this.state.activeTool.type === "selection" &&
|
this.state.activeTool.type === "selection" &&
|
||||||
!this.scene.getElementsIncludingDeleted().length
|
!this.scene.getElementsIncludingDeleted().length
|
||||||
|
@ -71,6 +71,7 @@ interface LayerUIProps {
|
|||||||
langCode: Language["code"];
|
langCode: Language["code"];
|
||||||
isCollaborating: boolean;
|
isCollaborating: boolean;
|
||||||
renderTopRightUI?: ExcalidrawProps["renderTopRightUI"];
|
renderTopRightUI?: ExcalidrawProps["renderTopRightUI"];
|
||||||
|
renderMenuLinks?: ExcalidrawProps["renderMenuLinks"];
|
||||||
renderCustomFooter?: ExcalidrawProps["renderFooter"];
|
renderCustomFooter?: ExcalidrawProps["renderFooter"];
|
||||||
renderCustomStats?: ExcalidrawProps["renderCustomStats"];
|
renderCustomStats?: ExcalidrawProps["renderCustomStats"];
|
||||||
renderCustomSidebar?: ExcalidrawProps["renderSidebar"];
|
renderCustomSidebar?: ExcalidrawProps["renderSidebar"];
|
||||||
@ -96,6 +97,7 @@ const LayerUI = ({
|
|||||||
showExitZenModeBtn,
|
showExitZenModeBtn,
|
||||||
isCollaborating,
|
isCollaborating,
|
||||||
renderTopRightUI,
|
renderTopRightUI,
|
||||||
|
renderMenuLinks,
|
||||||
renderCustomFooter,
|
renderCustomFooter,
|
||||||
renderCustomStats,
|
renderCustomStats,
|
||||||
renderCustomSidebar,
|
renderCustomSidebar,
|
||||||
@ -218,7 +220,8 @@ const LayerUI = ({
|
|||||||
actionManager.renderAction("loadScene")}
|
actionManager.renderAction("loadScene")}
|
||||||
{/* // TODO barnabasmolnar/editor-redesign */}
|
{/* // TODO barnabasmolnar/editor-redesign */}
|
||||||
{/* is this fine here? */}
|
{/* is this fine here? */}
|
||||||
{appState.fileHandle &&
|
{UIOptions.canvasActions.saveToActiveFile &&
|
||||||
|
appState.fileHandle &&
|
||||||
actionManager.renderAction("saveToActiveFile")}
|
actionManager.renderAction("saveToActiveFile")}
|
||||||
{renderJSONExportDialog()}
|
{renderJSONExportDialog()}
|
||||||
{UIOptions.canvasActions.saveAsImage && (
|
{UIOptions.canvasActions.saveAsImage && (
|
||||||
@ -240,8 +243,16 @@ const LayerUI = ({
|
|||||||
{actionManager.renderAction("toggleShortcuts", undefined, true)}
|
{actionManager.renderAction("toggleShortcuts", undefined, true)}
|
||||||
{!appState.viewModeEnabled &&
|
{!appState.viewModeEnabled &&
|
||||||
actionManager.renderAction("clearCanvas")}
|
actionManager.renderAction("clearCanvas")}
|
||||||
|
{typeof renderMenuLinks === "undefined" ? ( //zsviczian
|
||||||
<Separator />
|
<Separator />
|
||||||
|
) : (
|
||||||
|
renderMenuLinks && <Separator />
|
||||||
|
)}
|
||||||
|
{typeof renderMenuLinks === "undefined" ? ( //zsviczian
|
||||||
<MenuLinks />
|
<MenuLinks />
|
||||||
|
) : (
|
||||||
|
renderMenuLinks && renderMenuLinks(device.isMobile, appState)
|
||||||
|
)}
|
||||||
<Separator />
|
<Separator />
|
||||||
<div
|
<div
|
||||||
style={{
|
style={{
|
||||||
@ -251,9 +262,11 @@ const LayerUI = ({
|
|||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<div>{actionManager.renderAction("toggleTheme")}</div>
|
<div>{actionManager.renderAction("toggleTheme")}</div>
|
||||||
|
{UIOptions.canvasActions.languageList !== false && (
|
||||||
<div style={{ padding: "0 0.625rem" }}>
|
<div style={{ padding: "0 0.625rem" }}>
|
||||||
<LanguageList style={{ width: "100%" }} />
|
<LanguageList style={{ width: "100%" }} />
|
||||||
</div>
|
</div>
|
||||||
|
)}
|
||||||
{!appState.viewModeEnabled && (
|
{!appState.viewModeEnabled && (
|
||||||
<div>
|
<div>
|
||||||
<div style={{ fontSize: ".75rem", marginBottom: ".5rem" }}>
|
<div style={{ fontSize: ".75rem", marginBottom: ".5rem" }}>
|
||||||
@ -484,9 +497,11 @@ const LayerUI = ({
|
|||||||
renderCustomFooter={renderCustomFooter}
|
renderCustomFooter={renderCustomFooter}
|
||||||
onImageAction={onImageAction}
|
onImageAction={onImageAction}
|
||||||
renderTopRightUI={renderTopRightUI}
|
renderTopRightUI={renderTopRightUI}
|
||||||
|
renderMenuLinks={renderMenuLinks}
|
||||||
renderCustomStats={renderCustomStats}
|
renderCustomStats={renderCustomStats}
|
||||||
renderSidebars={renderSidebars}
|
renderSidebars={renderSidebars}
|
||||||
device={device}
|
device={device}
|
||||||
|
UIOptions={UIOptions}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import { AppState, Device, ExcalidrawProps } from "../types";
|
import { AppProps, AppState, Device, ExcalidrawProps } from "../types";
|
||||||
import { ActionManager } from "../actions/manager";
|
import { ActionManager } from "../actions/manager";
|
||||||
import { t } from "../i18n";
|
import { t } from "../i18n";
|
||||||
import Stack from "./Stack";
|
import Stack from "./Stack";
|
||||||
@ -45,10 +45,12 @@ type MobileMenuProps = {
|
|||||||
isMobile: boolean,
|
isMobile: boolean,
|
||||||
appState: AppState,
|
appState: AppState,
|
||||||
) => JSX.Element | null;
|
) => JSX.Element | null;
|
||||||
|
renderMenuLinks?: ExcalidrawProps["renderMenuLinks"];
|
||||||
renderCustomStats?: ExcalidrawProps["renderCustomStats"];
|
renderCustomStats?: ExcalidrawProps["renderCustomStats"];
|
||||||
renderSidebars: () => JSX.Element | null;
|
renderSidebars: () => JSX.Element | null;
|
||||||
device: Device;
|
device: Device;
|
||||||
renderWelcomeScreen?: boolean;
|
renderWelcomeScreen?: boolean;
|
||||||
|
UIOptions: AppProps["UIOptions"];
|
||||||
};
|
};
|
||||||
|
|
||||||
export const MobileMenu = ({
|
export const MobileMenu = ({
|
||||||
@ -66,10 +68,12 @@ export const MobileMenu = ({
|
|||||||
renderCustomFooter,
|
renderCustomFooter,
|
||||||
onImageAction,
|
onImageAction,
|
||||||
renderTopRightUI,
|
renderTopRightUI,
|
||||||
|
renderMenuLinks,
|
||||||
renderCustomStats,
|
renderCustomStats,
|
||||||
renderSidebars,
|
renderSidebars,
|
||||||
device,
|
device,
|
||||||
renderWelcomeScreen,
|
renderWelcomeScreen,
|
||||||
|
UIOptions,
|
||||||
}: MobileMenuProps) => {
|
}: MobileMenuProps) => {
|
||||||
const renderToolbar = () => {
|
const renderToolbar = () => {
|
||||||
return (
|
return (
|
||||||
@ -111,8 +115,8 @@ export const MobileMenu = ({
|
|||||||
/>
|
/>
|
||||||
</Stack.Row>
|
</Stack.Row>
|
||||||
</Island>
|
</Island>
|
||||||
{renderTopRightUI && renderTopRightUI(true, appState)}
|
|
||||||
<div className="mobile-misc-tools-container">
|
<div className="mobile-misc-tools-container">
|
||||||
|
{renderTopRightUI && renderTopRightUI(true, appState)}
|
||||||
<PenModeButton
|
<PenModeButton
|
||||||
checked={appState.penMode}
|
checked={appState.penMode}
|
||||||
onChange={onPenModeToggle}
|
onChange={onPenModeToggle}
|
||||||
@ -192,12 +196,14 @@ export const MobileMenu = ({
|
|||||||
{!appState.viewModeEnabled && actionManager.renderAction("loadScene")}
|
{!appState.viewModeEnabled && actionManager.renderAction("loadScene")}
|
||||||
{renderJSONExportDialog()}
|
{renderJSONExportDialog()}
|
||||||
{renderImageExportDialog()}
|
{renderImageExportDialog()}
|
||||||
|
{UIOptions.canvasActions.saveAsImage && (
|
||||||
<MenuItem
|
<MenuItem
|
||||||
label={t("buttons.exportImage")}
|
label={t("buttons.exportImage")}
|
||||||
icon={ExportImageIcon}
|
icon={ExportImageIcon}
|
||||||
dataTestId="image-export-button"
|
dataTestId="image-export-button"
|
||||||
onClick={() => setAppState({ openDialog: "imageExport" })}
|
onClick={() => setAppState({ openDialog: "imageExport" })}
|
||||||
/>
|
/>
|
||||||
|
)}
|
||||||
{onCollabButtonClick && (
|
{onCollabButtonClick && (
|
||||||
<CollabButton
|
<CollabButton
|
||||||
isCollaborating={isCollaborating}
|
isCollaborating={isCollaborating}
|
||||||
@ -207,8 +213,16 @@ export const MobileMenu = ({
|
|||||||
)}
|
)}
|
||||||
{actionManager.renderAction("toggleShortcuts", undefined, true)}
|
{actionManager.renderAction("toggleShortcuts", undefined, true)}
|
||||||
{!appState.viewModeEnabled && actionManager.renderAction("clearCanvas")}
|
{!appState.viewModeEnabled && actionManager.renderAction("clearCanvas")}
|
||||||
|
{typeof renderMenuLinks === "undefined" ? ( //zsviczian
|
||||||
<Separator />
|
<Separator />
|
||||||
|
) : (
|
||||||
|
renderMenuLinks && <Separator />
|
||||||
|
)}
|
||||||
|
{typeof renderMenuLinks === "undefined" ? ( //zsviczian
|
||||||
<MenuLinks />
|
<MenuLinks />
|
||||||
|
) : (
|
||||||
|
renderMenuLinks && renderMenuLinks(device.isMobile, appState)
|
||||||
|
)}
|
||||||
<Separator />
|
<Separator />
|
||||||
{!appState.viewModeEnabled && (
|
{!appState.viewModeEnabled && (
|
||||||
<div style={{ marginBottom: ".5rem" }}>
|
<div style={{ marginBottom: ".5rem" }}>
|
||||||
|
@ -155,6 +155,7 @@ export const DEFAULT_UI_OPTIONS: AppProps["UIOptions"] = {
|
|||||||
saveToActiveFile: true,
|
saveToActiveFile: true,
|
||||||
toggleTheme: null,
|
toggleTheme: null,
|
||||||
saveAsImage: true,
|
saveAsImage: true,
|
||||||
|
languageList: true,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -392,6 +392,8 @@ No, Excalidraw package doesn't come with collaboration built in, since the imple
|
|||||||
| [`onPointerUpdate`](#onPointerUpdate) | Function | | Callback triggered when mouse pointer is updated. |
|
| [`onPointerUpdate`](#onPointerUpdate) | Function | | Callback triggered when mouse pointer is updated. |
|
||||||
| [`langCode`](#langCode) | string | `en` | Language code string |
|
| [`langCode`](#langCode) | string | `en` | Language code string |
|
||||||
| [`renderTopRightUI`](#renderTopRightUI) | Function | | Function that renders custom UI in top right corner |
|
| [`renderTopRightUI`](#renderTopRightUI) | Function | | Function that renders custom UI in top right corner |
|
||||||
|
| [`hideWelcomeScreen`](#hideWelcomeScreen) | boolean | | This implies if the app should always hide the welcome sreen |
|
||||||
|
| [`renderMenuLinks`](#renderMenuLinks) | Function | | Function that renders custom list of links (or other custom UI) in the app menu |
|
||||||
| [`renderFooter `](#renderFooter) | Function | | Function that renders custom UI footer |
|
| [`renderFooter `](#renderFooter) | Function | | Function that renders custom UI footer |
|
||||||
| [`renderCustomStats`](#renderCustomStats) | Function | | Function that can be used to render custom stats on the stats dialog. |
|
| [`renderCustomStats`](#renderCustomStats) | Function | | Function that can be used to render custom stats on the stats dialog. |
|
||||||
| [`renderSIdebar`](#renderSIdebar) | Function | | Render function that renders custom sidebar. |
|
| [`renderSIdebar`](#renderSIdebar) | Function | | Render function that renders custom sidebar. |
|
||||||
@ -613,6 +615,22 @@ import { defaultLang, languages } from "@excalidraw/excalidraw";
|
|||||||
|
|
||||||
A function returning JSX to render custom UI in the top right corner of the app.
|
A function returning JSX to render custom UI in the top right corner of the app.
|
||||||
|
|
||||||
|
#### `hideWelcomeScreen`
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
boolean
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
Boolean value to override the displaying of the welcome screen elements. If set to true, the welcome screen will never be shown.
|
||||||
|
|
||||||
|
#### `renderMenuLinks`
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
((isMobile: boolean, appState: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L79">AppState</a>) => JSX | null)|null
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
A function returning JSX to render custom UI (intended to be a list of custom links) replacing the default list of links in the app menu. If set to null, the list of links will not be displayed. If unset, the default list of links will be displayed.
|
||||||
|
|
||||||
#### `renderFooter`
|
#### `renderFooter`
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
@ -702,6 +720,7 @@ This prop can be used to customise UI of Excalidraw. Currently we support custom
|
|||||||
| `saveToActiveFile` | boolean | true | Implies whether to show `Save button` to save to current file |
|
| `saveToActiveFile` | boolean | true | Implies whether to show `Save button` to save to current file |
|
||||||
| `toggleTheme` | boolean | null | null | Implies whether to show `Theme toggle`. When defined as `boolean`, takes precedence over [`props.theme`](#theme) to show `Theme toggle` |
|
| `toggleTheme` | boolean | null | null | Implies whether to show `Theme toggle`. When defined as `boolean`, takes precedence over [`props.theme`](#theme) to show `Theme toggle` |
|
||||||
| `saveAsImage` | boolean | true | Implies whether to show `Save as image button` |
|
| `saveAsImage` | boolean | true | Implies whether to show `Save as image button` |
|
||||||
|
| `languageList` | boolean | true | Implies whether to show the `Language Selector Dropdown list` |
|
||||||
|
|
||||||
##### `dockedSidebarBreakpoint`
|
##### `dockedSidebarBreakpoint`
|
||||||
|
|
||||||
|
@ -20,6 +20,8 @@ const ExcalidrawBase = (props: ExcalidrawProps) => {
|
|||||||
isCollaborating = false,
|
isCollaborating = false,
|
||||||
onPointerUpdate,
|
onPointerUpdate,
|
||||||
renderTopRightUI,
|
renderTopRightUI,
|
||||||
|
hideWelcomeScreen,
|
||||||
|
renderMenuLinks,
|
||||||
renderFooter,
|
renderFooter,
|
||||||
renderSidebar,
|
renderSidebar,
|
||||||
langCode = defaultLang.code,
|
langCode = defaultLang.code,
|
||||||
@ -93,6 +95,8 @@ const ExcalidrawBase = (props: ExcalidrawProps) => {
|
|||||||
isCollaborating={isCollaborating}
|
isCollaborating={isCollaborating}
|
||||||
onPointerUpdate={onPointerUpdate}
|
onPointerUpdate={onPointerUpdate}
|
||||||
renderTopRightUI={renderTopRightUI}
|
renderTopRightUI={renderTopRightUI}
|
||||||
|
hideWelcomeScreen={hideWelcomeScreen}
|
||||||
|
renderMenuLinks={renderMenuLinks}
|
||||||
renderFooter={renderFooter}
|
renderFooter={renderFooter}
|
||||||
langCode={langCode}
|
langCode={langCode}
|
||||||
viewModeEnabled={viewModeEnabled}
|
viewModeEnabled={viewModeEnabled}
|
||||||
|
@ -284,6 +284,10 @@ export interface ExcalidrawProps {
|
|||||||
isMobile: boolean,
|
isMobile: boolean,
|
||||||
appState: AppState,
|
appState: AppState,
|
||||||
) => JSX.Element | null;
|
) => JSX.Element | null;
|
||||||
|
renderMenuLinks?:
|
||||||
|
| ((isMobile: boolean, appState: AppState) => JSX.Element | null)
|
||||||
|
| null;
|
||||||
|
hideWelcomeScreen?: boolean;
|
||||||
renderFooter?: (isMobile: boolean, appState: AppState) => JSX.Element | null;
|
renderFooter?: (isMobile: boolean, appState: AppState) => JSX.Element | null;
|
||||||
langCode?: Language["code"];
|
langCode?: Language["code"];
|
||||||
viewModeEnabled?: boolean;
|
viewModeEnabled?: boolean;
|
||||||
@ -363,6 +367,7 @@ type CanvasActions = {
|
|||||||
saveToActiveFile?: boolean;
|
saveToActiveFile?: boolean;
|
||||||
toggleTheme?: boolean | null;
|
toggleTheme?: boolean | null;
|
||||||
saveAsImage?: boolean;
|
saveAsImage?: boolean;
|
||||||
|
languageList?: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type AppProps = Merge<
|
export type AppProps = Merge<
|
||||||
|
Loading…
x
Reference in New Issue
Block a user