fix: mark more props as optional for element (#6448)
* fix: mark more props as optional for element * fix
This commit is contained in:
parent
c3e8ddaf58
commit
21726e22cc
@ -1,5 +1,6 @@
|
|||||||
import oc from "open-color";
|
import oc from "open-color";
|
||||||
import {
|
import {
|
||||||
|
DEFAULT_ELEMENT_PROPS,
|
||||||
DEFAULT_FONT_FAMILY,
|
DEFAULT_FONT_FAMILY,
|
||||||
DEFAULT_FONT_SIZE,
|
DEFAULT_FONT_SIZE,
|
||||||
DEFAULT_TEXT_ALIGN,
|
DEFAULT_TEXT_ALIGN,
|
||||||
@ -23,18 +24,18 @@ export const getDefaultAppState = (): Omit<
|
|||||||
theme: THEME.LIGHT,
|
theme: THEME.LIGHT,
|
||||||
collaborators: new Map(),
|
collaborators: new Map(),
|
||||||
currentChartType: "bar",
|
currentChartType: "bar",
|
||||||
currentItemBackgroundColor: "transparent",
|
currentItemBackgroundColor: DEFAULT_ELEMENT_PROPS.backgroundColor,
|
||||||
currentItemEndArrowhead: "arrow",
|
currentItemEndArrowhead: "arrow",
|
||||||
currentItemFillStyle: "hachure",
|
currentItemFillStyle: DEFAULT_ELEMENT_PROPS.fillStyle,
|
||||||
currentItemFontFamily: DEFAULT_FONT_FAMILY,
|
currentItemFontFamily: DEFAULT_FONT_FAMILY,
|
||||||
currentItemFontSize: DEFAULT_FONT_SIZE,
|
currentItemFontSize: DEFAULT_FONT_SIZE,
|
||||||
currentItemOpacity: 100,
|
currentItemOpacity: DEFAULT_ELEMENT_PROPS.opacity,
|
||||||
currentItemRoughness: 1,
|
currentItemRoughness: DEFAULT_ELEMENT_PROPS.roughness,
|
||||||
currentItemStartArrowhead: null,
|
currentItemStartArrowhead: null,
|
||||||
currentItemStrokeColor: oc.black,
|
currentItemStrokeColor: DEFAULT_ELEMENT_PROPS.strokeColor,
|
||||||
currentItemRoundness: "round",
|
currentItemRoundness: "round",
|
||||||
currentItemStrokeStyle: "solid",
|
currentItemStrokeStyle: DEFAULT_ELEMENT_PROPS.strokeStyle,
|
||||||
currentItemStrokeWidth: 1,
|
currentItemStrokeWidth: DEFAULT_ELEMENT_PROPS.strokeWidth,
|
||||||
currentItemTextAlign: DEFAULT_TEXT_ALIGN,
|
currentItemTextAlign: DEFAULT_TEXT_ALIGN,
|
||||||
cursorButton: "up",
|
cursorButton: "up",
|
||||||
draggingElement: null,
|
draggingElement: null,
|
||||||
@ -44,7 +45,7 @@ export const getDefaultAppState = (): Omit<
|
|||||||
activeTool: {
|
activeTool: {
|
||||||
type: "selection",
|
type: "selection",
|
||||||
customType: null,
|
customType: null,
|
||||||
locked: false,
|
locked: DEFAULT_ELEMENT_PROPS.locked,
|
||||||
lastActiveTool: null,
|
lastActiveTool: null,
|
||||||
},
|
},
|
||||||
penMode: false,
|
penMode: false,
|
||||||
|
@ -1,10 +1,5 @@
|
|||||||
import colors from "./colors";
|
import colors from "./colors";
|
||||||
import {
|
import { DEFAULT_FONT_SIZE, ENV } from "./constants";
|
||||||
DEFAULT_FONT_FAMILY,
|
|
||||||
DEFAULT_FONT_SIZE,
|
|
||||||
ENV,
|
|
||||||
VERTICAL_ALIGN,
|
|
||||||
} from "./constants";
|
|
||||||
import { newElement, newLinearElement, newTextElement } from "./element";
|
import { newElement, newLinearElement, newTextElement } from "./element";
|
||||||
import { NonDeletedExcalidrawElement } from "./element/types";
|
import { NonDeletedExcalidrawElement } from "./element/types";
|
||||||
import { randomId } from "./random";
|
import { randomId } from "./random";
|
||||||
@ -166,17 +161,7 @@ const bgColors = colors.elementBackground.slice(
|
|||||||
// Put all the common properties here so when the whole chart is selected
|
// Put all the common properties here so when the whole chart is selected
|
||||||
// the properties dialog shows the correct selected values
|
// the properties dialog shows the correct selected values
|
||||||
const commonProps = {
|
const commonProps = {
|
||||||
fillStyle: "hachure",
|
|
||||||
fontFamily: DEFAULT_FONT_FAMILY,
|
|
||||||
fontSize: DEFAULT_FONT_SIZE,
|
|
||||||
opacity: 100,
|
|
||||||
roughness: 1,
|
|
||||||
strokeColor: colors.elementStroke[0],
|
strokeColor: colors.elementStroke[0],
|
||||||
roundness: null,
|
|
||||||
strokeStyle: "solid",
|
|
||||||
strokeWidth: 1,
|
|
||||||
verticalAlign: VERTICAL_ALIGN.MIDDLE,
|
|
||||||
locked: false,
|
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
const getChartDimentions = (spreadsheet: Spreadsheet) => {
|
const getChartDimentions = (spreadsheet: Spreadsheet) => {
|
||||||
@ -323,7 +308,6 @@ const chartBaseElements = (
|
|||||||
x: x + chartWidth / 2,
|
x: x + chartWidth / 2,
|
||||||
y: y - BAR_HEIGHT - BAR_GAP * 2 - DEFAULT_FONT_SIZE,
|
y: y - BAR_HEIGHT - BAR_GAP * 2 - DEFAULT_FONT_SIZE,
|
||||||
roundness: null,
|
roundness: null,
|
||||||
strokeStyle: "solid",
|
|
||||||
textAlign: "center",
|
textAlign: "center",
|
||||||
})
|
})
|
||||||
: null;
|
: null;
|
||||||
|
@ -2732,7 +2732,6 @@ class App extends React.Component<AppProps, AppState> {
|
|||||||
strokeStyle: this.state.currentItemStrokeStyle,
|
strokeStyle: this.state.currentItemStrokeStyle,
|
||||||
roughness: this.state.currentItemRoughness,
|
roughness: this.state.currentItemRoughness,
|
||||||
opacity: this.state.currentItemOpacity,
|
opacity: this.state.currentItemOpacity,
|
||||||
roundness: null,
|
|
||||||
text: "",
|
text: "",
|
||||||
fontSize,
|
fontSize,
|
||||||
fontFamily,
|
fontFamily,
|
||||||
@ -2744,7 +2743,6 @@ class App extends React.Component<AppProps, AppState> {
|
|||||||
: DEFAULT_VERTICAL_ALIGN,
|
: DEFAULT_VERTICAL_ALIGN,
|
||||||
containerId: shouldBindToContainer ? container?.id : undefined,
|
containerId: shouldBindToContainer ? container?.id : undefined,
|
||||||
groupIds: container?.groupIds ?? [],
|
groupIds: container?.groupIds ?? [],
|
||||||
locked: false,
|
|
||||||
lineHeight,
|
lineHeight,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import cssVariables from "./css/variables.module.scss";
|
import cssVariables from "./css/variables.module.scss";
|
||||||
import { AppProps } from "./types";
|
import { AppProps } from "./types";
|
||||||
import { FontFamilyValues } from "./element/types";
|
import { ExcalidrawElement, FontFamilyValues } from "./element/types";
|
||||||
|
import oc from "open-color";
|
||||||
|
|
||||||
export const isDarwin = /Mac|iPod|iPhone|iPad/.test(navigator.platform);
|
export const isDarwin = /Mac|iPod|iPhone|iPad/.test(navigator.platform);
|
||||||
export const isWindows = /^Win/.test(navigator.platform);
|
export const isWindows = /^Win/.test(navigator.platform);
|
||||||
@ -254,3 +255,23 @@ export const ROUNDNESS = {
|
|||||||
/** key containt id of precedeing elemnt id we use in reconciliation during
|
/** key containt id of precedeing elemnt id we use in reconciliation during
|
||||||
* collaboration */
|
* collaboration */
|
||||||
export const PRECEDING_ELEMENT_KEY = "__precedingElement__";
|
export const PRECEDING_ELEMENT_KEY = "__precedingElement__";
|
||||||
|
|
||||||
|
export const DEFAULT_ELEMENT_PROPS: {
|
||||||
|
strokeColor: ExcalidrawElement["strokeColor"];
|
||||||
|
backgroundColor: ExcalidrawElement["backgroundColor"];
|
||||||
|
fillStyle: ExcalidrawElement["fillStyle"];
|
||||||
|
strokeWidth: ExcalidrawElement["strokeWidth"];
|
||||||
|
strokeStyle: ExcalidrawElement["strokeStyle"];
|
||||||
|
roughness: ExcalidrawElement["roughness"];
|
||||||
|
opacity: ExcalidrawElement["opacity"];
|
||||||
|
locked: ExcalidrawElement["locked"];
|
||||||
|
} = {
|
||||||
|
strokeColor: oc.black,
|
||||||
|
backgroundColor: "transparent",
|
||||||
|
fillStyle: "hachure",
|
||||||
|
strokeWidth: 1,
|
||||||
|
strokeStyle: "solid",
|
||||||
|
roughness: 1,
|
||||||
|
opacity: 100,
|
||||||
|
locked: false,
|
||||||
|
};
|
||||||
|
@ -36,7 +36,14 @@ import {
|
|||||||
getMaxContainerWidth,
|
getMaxContainerWidth,
|
||||||
getDefaultLineHeight,
|
getDefaultLineHeight,
|
||||||
} from "./textElement";
|
} from "./textElement";
|
||||||
import { VERTICAL_ALIGN } from "../constants";
|
import {
|
||||||
|
DEFAULT_ELEMENT_PROPS,
|
||||||
|
DEFAULT_FONT_FAMILY,
|
||||||
|
DEFAULT_FONT_SIZE,
|
||||||
|
DEFAULT_TEXT_ALIGN,
|
||||||
|
DEFAULT_VERTICAL_ALIGN,
|
||||||
|
VERTICAL_ALIGN,
|
||||||
|
} from "../constants";
|
||||||
import { isArrowElement } from "./typeChecks";
|
import { isArrowElement } from "./typeChecks";
|
||||||
import { MarkOptional, Merge, Mutable } from "../utility-types";
|
import { MarkOptional, Merge, Mutable } from "../utility-types";
|
||||||
|
|
||||||
@ -51,6 +58,15 @@ type ElementConstructorOpts = MarkOptional<
|
|||||||
| "version"
|
| "version"
|
||||||
| "versionNonce"
|
| "versionNonce"
|
||||||
| "link"
|
| "link"
|
||||||
|
| "strokeStyle"
|
||||||
|
| "fillStyle"
|
||||||
|
| "strokeColor"
|
||||||
|
| "backgroundColor"
|
||||||
|
| "roughness"
|
||||||
|
| "strokeWidth"
|
||||||
|
| "roundness"
|
||||||
|
| "locked"
|
||||||
|
| "opacity"
|
||||||
>;
|
>;
|
||||||
|
|
||||||
const _newElementBase = <T extends ExcalidrawElement>(
|
const _newElementBase = <T extends ExcalidrawElement>(
|
||||||
@ -58,13 +74,13 @@ const _newElementBase = <T extends ExcalidrawElement>(
|
|||||||
{
|
{
|
||||||
x,
|
x,
|
||||||
y,
|
y,
|
||||||
strokeColor,
|
strokeColor = DEFAULT_ELEMENT_PROPS.strokeColor,
|
||||||
backgroundColor,
|
backgroundColor = DEFAULT_ELEMENT_PROPS.backgroundColor,
|
||||||
fillStyle,
|
fillStyle = DEFAULT_ELEMENT_PROPS.fillStyle,
|
||||||
strokeWidth,
|
strokeWidth = DEFAULT_ELEMENT_PROPS.strokeWidth,
|
||||||
strokeStyle,
|
strokeStyle = DEFAULT_ELEMENT_PROPS.strokeStyle,
|
||||||
roughness,
|
roughness = DEFAULT_ELEMENT_PROPS.roughness,
|
||||||
opacity,
|
opacity = DEFAULT_ELEMENT_PROPS.opacity,
|
||||||
width = 0,
|
width = 0,
|
||||||
height = 0,
|
height = 0,
|
||||||
angle = 0,
|
angle = 0,
|
||||||
@ -72,7 +88,7 @@ const _newElementBase = <T extends ExcalidrawElement>(
|
|||||||
roundness = null,
|
roundness = null,
|
||||||
boundElements = null,
|
boundElements = null,
|
||||||
link = null,
|
link = null,
|
||||||
locked,
|
locked = DEFAULT_ELEMENT_PROPS.locked,
|
||||||
...rest
|
...rest
|
||||||
}: ElementConstructorOpts & Omit<Partial<ExcalidrawGenericElement>, "type">,
|
}: ElementConstructorOpts & Omit<Partial<ExcalidrawGenericElement>, "type">,
|
||||||
) => {
|
) => {
|
||||||
@ -138,27 +154,39 @@ const getTextElementPositionOffsets = (
|
|||||||
export const newTextElement = (
|
export const newTextElement = (
|
||||||
opts: {
|
opts: {
|
||||||
text: string;
|
text: string;
|
||||||
fontSize: number;
|
fontSize?: number;
|
||||||
fontFamily: FontFamilyValues;
|
fontFamily?: FontFamilyValues;
|
||||||
textAlign: TextAlign;
|
textAlign?: TextAlign;
|
||||||
verticalAlign: VerticalAlign;
|
verticalAlign?: VerticalAlign;
|
||||||
containerId?: ExcalidrawTextContainer["id"];
|
containerId?: ExcalidrawTextContainer["id"];
|
||||||
lineHeight?: ExcalidrawTextElement["lineHeight"];
|
lineHeight?: ExcalidrawTextElement["lineHeight"];
|
||||||
|
strokeWidth?: ExcalidrawTextElement["strokeWidth"];
|
||||||
} & ElementConstructorOpts,
|
} & ElementConstructorOpts,
|
||||||
): NonDeleted<ExcalidrawTextElement> => {
|
): NonDeleted<ExcalidrawTextElement> => {
|
||||||
const lineHeight = opts.lineHeight || getDefaultLineHeight(opts.fontFamily);
|
const fontFamily = opts.fontFamily || DEFAULT_FONT_FAMILY;
|
||||||
|
const fontSize = opts.fontSize || DEFAULT_FONT_SIZE;
|
||||||
|
const lineHeight = opts.lineHeight || getDefaultLineHeight(fontFamily);
|
||||||
const text = normalizeText(opts.text);
|
const text = normalizeText(opts.text);
|
||||||
const metrics = measureText(text, getFontString(opts), lineHeight);
|
const metrics = measureText(
|
||||||
const offsets = getTextElementPositionOffsets(opts, metrics);
|
text,
|
||||||
|
getFontString({ fontFamily, fontSize }),
|
||||||
|
lineHeight,
|
||||||
|
);
|
||||||
|
const textAlign = opts.textAlign || DEFAULT_TEXT_ALIGN;
|
||||||
|
const verticalAlign = opts.verticalAlign || DEFAULT_VERTICAL_ALIGN;
|
||||||
|
const offsets = getTextElementPositionOffsets(
|
||||||
|
{ textAlign, verticalAlign },
|
||||||
|
metrics,
|
||||||
|
);
|
||||||
|
|
||||||
const textElement = newElementWith(
|
const textElement = newElementWith(
|
||||||
{
|
{
|
||||||
..._newElementBase<ExcalidrawTextElement>("text", opts),
|
..._newElementBase<ExcalidrawTextElement>("text", opts),
|
||||||
text,
|
text,
|
||||||
fontSize: opts.fontSize,
|
fontSize,
|
||||||
fontFamily: opts.fontFamily,
|
fontFamily,
|
||||||
textAlign: opts.textAlign,
|
textAlign,
|
||||||
verticalAlign: opts.verticalAlign,
|
verticalAlign,
|
||||||
x: opts.x - offsets.x,
|
x: opts.x - offsets.x,
|
||||||
y: opts.y - offsets.y,
|
y: opts.y - offsets.y,
|
||||||
width: metrics.width,
|
width: metrics.width,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user