Compare commits

..

1 Commits

Author SHA1 Message Date
Aakansha Doshi 13e9dc80e3 hardcode public path to use unpkg 2021-02-19 18:49:19 +05:30
62 changed files with 31675 additions and 20627 deletions
+6 -6
View File
@@ -1,10 +1,10 @@
* *
!.env
!.eslintrc.json
!.npmrc
!.prettierrc
!package.json
!public/ !public/
!src/ !src/
!.npmrc
!.eslintrc.json
!.prettierrc
!package-lock.json
!package.json
!tsconfig.json !tsconfig.json
!yarn.lock !.env
+6 -3
View File
@@ -1,33 +1,36 @@
version: 2 version: 2
updates: updates:
- package-ecosystem: npm - package-ecosystem: npm
directory: / directory: "/"
schedule: schedule:
interval: weekly interval: weekly
day: sunday day: sunday
time: "01:00" time: "01:00"
open-pull-requests-limit: 99
reviewers: reviewers:
- lipis - lipis
assignees: assignees:
- lipis - lipis
- package-ecosystem: npm - package-ecosystem: npm
directory: /src/packages/excalidraw/ directory: "/src/packages/excalidraw/"
schedule: schedule:
interval: weekly interval: weekly
day: sunday day: sunday
time: "01:00" time: "01:00"
open-pull-requests-limit: 99
reviewers: reviewers:
- ad1992 - ad1992
assignees: assignees:
- ad1992 - ad1992
- package-ecosystem: npm - package-ecosystem: npm
directory: /src/packages/utils/ directory: "/src/packages/utils/"
schedule: schedule:
interval: weekly interval: weekly
day: sunday day: sunday
time: "01:00" time: "01:00"
open-pull-requests-limit: 99
reviewers: reviewers:
- ad1992 - ad1992
assignees: assignees:
+3 -2
View File
@@ -6,8 +6,9 @@ on:
- master - master
jobs: jobs:
build-docker: build:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v1
- run: docker build -t excalidraw . - run: docker build -t excalidraw .
+12 -8
View File
@@ -7,23 +7,27 @@ on:
pull_request: pull_request:
jobs: jobs:
packages: build:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v1
- name: Setup Node.js 14.x - name: Setup Node.js 14.x
uses: actions/setup-node@v2 uses: actions/setup-node@v1
with: with:
node-version: 14.x node-version: 14.x
- name: Install dependencies - name: Install dependencies
run: | run: |
yarn --frozen-lockfile npm ci
yarn --cwd src/packages/excalidraw npm ci --prefix src/packages/excalidraw
yarn --cwd src/packages/utils npm ci --prefix src/packages/utils
- name: Build @excalidraw/excalidraw - name: Build @excalidraw/excalidraw
run: | run: |
yarn --cwd src/packages/excalidraw run pack npm run pack --prefix src/packages/excalidraw
- name: Build @excalidraw/utils - name: Build @excalidraw/utils
run: | run: |
yarn --cwd src/packages/utils run pack npm run pack --prefix src/packages/utils
+1
View File
@@ -9,6 +9,7 @@ on:
jobs: jobs:
cancel: cancel:
runs-on: ubuntu-latest runs-on: ubuntu-latest
timeout-minutes: 3 timeout-minutes: 3
steps: steps:
- uses: styfle/cancel-workflow-action@0.6.0 - uses: styfle/cancel-workflow-action@0.6.0
+6 -6
View File
@@ -7,16 +7,16 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v1
- name: Setup Node.js 14.x - name: Setup Node.js 14.x
uses: actions/setup-node@v2 uses: actions/setup-node@v1
with: with:
node-version: 14.x node-version: 14.x
- name: Install and lint - name: Install and lint
run: | run: |
yarn --frozen-lockfile npm ci
yarn test:other npm run test:other
yarn test:code npm run test:code
yarn test:typecheck npm run test:typecheck
+4 -4
View File
@@ -3,7 +3,7 @@ name: Build locales coverage
on: on:
push: push:
branches: branches:
- l10n_master - "l10n_master"
jobs: jobs:
locales: locales:
@@ -15,13 +15,13 @@ jobs:
token: ${{ secrets.PUSH_TRANSLATIONS_COVERAGE_PAT }} token: ${{ secrets.PUSH_TRANSLATIONS_COVERAGE_PAT }}
- name: Setup Node.js 14.x - name: Setup Node.js 14.x
uses: actions/setup-node@v2 uses: actions/setup-node@v1
with: with:
node-version: 14.x node-version: 14.x
- name: Create report file - name: Create report file
run: | run: |
yarn locales-coverage npm run locales-coverage
FILE_CHANGED=$(git diff src/locales/percentages.json) FILE_CHANGED=$(git diff src/locales/percentages.json)
if [ ! -z "${FILE_CHANGED}" ]; then if [ ! -z "${FILE_CHANGED}" ]; then
git config --global user.name 'Excalidraw Bot' git config --global user.name 'Excalidraw Bot'
@@ -33,7 +33,7 @@ jobs:
- name: Construct comment body - name: Construct comment body
id: getCommentBody id: getCommentBody
run: | run: |
body=$(yarn locales-coverage:description | grep '^[^>]') body=$(npm run locales-coverage:description | grep '^[^>]')
body="${body//'%'/'%25'}" body="${body//'%'/'%25'}"
body="${body//$'\n'/'%0A'}" body="${body//$'\n'/'%0A'}"
body="${body//$'\r'/'%0D'}" body="${body//$'\r'/'%0D'}"
+3 -2
View File
@@ -1,4 +1,4 @@
name: Semantic PR title name: "Semantic PR title"
on: on:
pull_request_target: pull_request_target:
@@ -8,8 +8,9 @@ on:
- synchronize - synchronize
jobs: jobs:
semantic: main:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: amannn/action-semantic-pull-request@v3.0.0 - uses: amannn/action-semantic-pull-request@v3.0.0
env: env:
+11 -6
View File
@@ -1,4 +1,4 @@
name: New Sentry production release name: New Sentry Production Release
on: on:
push: push:
@@ -6,23 +6,28 @@ on:
- master - master
jobs: jobs:
sentry: release:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v1.0.0
- name: Setup Node.js 14.x - name: Setup Node.js 14.x
uses: actions/setup-node@v2 uses: actions/setup-node@v1
with: with:
node-version: 14.x node-version: 14.x
- name: Install and build - name: Install and build
run: | run: |
yarn --frozen-lockfile npm ci
yarn build:app npm run build:app
env: env:
CI: true CI: true
- name: Install Sentry - name: Install Sentry
run: | run: |
curl -sL https://sentry.io/get-cli/ | bash curl -sL https://sentry.io/get-cli/ | bash
- name: Create new Sentry release - name: Create new Sentry release
run: | run: |
export SENTRY_RELEASE=$(sentry-cli releases propose-version) export SENTRY_RELEASE=$(sentry-cli releases propose-version)
+7 -4
View File
@@ -5,13 +5,16 @@ on: pull_request
jobs: jobs:
test: test:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v1
- name: Setup Node.js 14.x - name: Setup Node.js 14.x
uses: actions/setup-node@v2 uses: actions/setup-node@v1
with: with:
node-version: 14.x node-version: 14.x
- name: Install and test - name: Install and test
run: | run: |
yarn --frozen-lockfile npm ci
yarn test:app npm run test:app
+1 -1
View File
@@ -16,7 +16,7 @@ firebase
logs logs
node_modules node_modules
npm-debug.log* npm-debug.log*
package-lock.json
static static
yarn-debug.log* yarn-debug.log*
yarn-error.log* yarn-error.log*
yarn.lock
+4
View File
@@ -0,0 +1,4 @@
{
"proseWrap": "never",
"trailingComma": "all"
}
+3 -3
View File
@@ -2,13 +2,13 @@ FROM node:14-alpine AS build
WORKDIR /opt/node_app WORKDIR /opt/node_app
COPY package.json yarn.lock ./ COPY package.json package-lock.json ./
RUN yarn --ignore-optional RUN npm i --no-optional
ARG NODE_ENV=production ARG NODE_ENV=production
COPY . . COPY . .
RUN yarn build:app:docker RUN npm run build:app:docker
FROM nginx:1.17-alpine FROM nginx:1.17-alpine
+8 -14
View File
@@ -86,12 +86,6 @@ Try out [`@excalidraw/excalidraw`](https://www.npmjs.com/package/@excalidraw/exc
These instructions will get you a copy of the project up and running on your local machine for development and testing purposes. These instructions will get you a copy of the project up and running on your local machine for development and testing purposes.
#### Requirements
- [Node.js](https://nodejs.org/en/)
- [Yarn](https://yarnpkg.com/getting-started/install)
- [Git](https://git-scm.com/downloads)
#### Clone the repo #### Clone the repo
```bash ```bash
@@ -100,14 +94,14 @@ git clone https://github.com/excalidraw/excalidraw.git
#### Commands #### Commands
| Command | Description | | Command | Description |
| ------------------ | --------------------------------- | | --------------------- | --------------------------------- |
| `yarn` | Install the dependencies | | `npm install` | Install the dependencies |
| `yarn start` | Run the project | | `npm start` | Run the project |
| `yarn fix` | Reformat all files with Prettier | | `npm run fix` | Reformat all files with Prettier |
| `yarn test` | Run tests | | `npm test` | Run tests |
| `yarn test:update` | Update test snapshots | | `npm run test:update` | Update test snapshots |
| `yarn test:code` | Test for formatting with Prettier | | `npm run test:code` | Test for formatting with Prettier |
#### Docker Compose #### Docker Compose
+1 -1
View File
@@ -18,7 +18,7 @@ services:
volumes: volumes:
- ./:/opt/node_app/app:delegated - ./:/opt/node_app/app:delegated
- ./package.json:/opt/node_app/package.json - ./package.json:/opt/node_app/package.json
- ./yarn.lock:/opt/node_app/yarn.lock - ./package-lock.json:/opt/node_app/package-lock.json
- notused:/opt/node_app/app/node_modules - notused:/opt/node_app/app/node_modules
volumes: volumes:
+23611
View File
File diff suppressed because it is too large Load Diff
+17 -19
View File
@@ -19,20 +19,21 @@
] ]
}, },
"dependencies": { "dependencies": {
"@sentry/browser": "6.2.0", "@sentry/browser": "6.1.0",
"@sentry/integrations": "6.2.0", "@sentry/integrations": "6.1.0",
"@testing-library/jest-dom": "5.11.9", "@testing-library/jest-dom": "5.11.9",
"@testing-library/react": "11.2.5", "@testing-library/react": "11.2.5",
"@types/jest": "26.0.20", "@types/jest": "26.0.20",
"@types/react": "17.0.2", "@types/react": "17.0.2",
"@types/react-dom": "17.0.1", "@types/react-dom": "17.0.1",
"@types/socket.io-client": "1.4.35", "@types/socket.io-client": "1.4.35",
"browser-fs-access": "0.14.0", "browser-fs-access": "0.13.1",
"clsx": "1.1.1", "clsx": "1.1.1",
"firebase": "8.2.9", "firebase": "8.2.7",
"i18next-browser-languagedetector": "6.0.1", "i18next-browser-languagedetector": "6.0.1",
"lodash.throttle": "4.1.1", "lodash.throttle": "4.1.1",
"nanoid": "3.1.20", "nanoid": "3.1.20",
"node-sass": "4.14.1",
"open-color": "1.8.0", "open-color": "1.8.0",
"pako": "1.0.11", "pako": "1.0.11",
"png-chunk-text": "1.0.0", "png-chunk-text": "1.0.0",
@@ -42,20 +43,18 @@
"pwacompat": "2.0.17", "pwacompat": "2.0.17",
"react": "17.0.1", "react": "17.0.1",
"react-dom": "17.0.1", "react-dom": "17.0.1",
"react-scripts": "4.0.3", "react-scripts": "4.0.2",
"roughjs": "4.3.1", "roughjs": "4.3.1",
"sass": "1.32.8",
"socket.io-client": "2.3.1", "socket.io-client": "2.3.1",
"typescript": "4.1.5" "typescript": "4.1.5"
}, },
"devDependencies": { "devDependencies": {
"@excalidraw/prettier-config": "1.0.2",
"@types/lodash.throttle": "4.1.6", "@types/lodash.throttle": "4.1.6",
"@types/pako": "1.0.1", "@types/pako": "1.0.1",
"@types/resize-observer-browser": "0.1.5", "@types/resize-observer-browser": "0.1.5",
"eslint-config-prettier": "8.1.0", "eslint-config-prettier": "7.2.0",
"eslint-plugin-prettier": "3.3.1", "eslint-plugin-prettier": "3.3.1",
"firebase-tools": "9.5.0", "firebase-tools": "9.3.0",
"husky": "4.3.8", "husky": "4.3.8",
"jest-canvas-mock": "2.3.1", "jest-canvas-mock": "2.3.1",
"lint-staged": "10.5.4", "lint-staged": "10.5.4",
@@ -64,7 +63,7 @@
"rewire": "5.0.0" "rewire": "5.0.0"
}, },
"engines": { "engines": {
"node": ">=14.0.0" "node": ">=12.0.0"
}, },
"homepage": ".", "homepage": ".",
"husky": { "husky": {
@@ -79,29 +78,28 @@
"resetMocks": false "resetMocks": false
}, },
"name": "excalidraw", "name": "excalidraw",
"prettier": "@excalidraw/prettier-config",
"private": true, "private": true,
"scripts": { "scripts": {
"build-node": "node ./scripts/build-node.js", "build-node": "node ./scripts/build-node.js",
"build:app:docker": "REACT_APP_DISABLE_SENTRY=true react-scripts build", "build:app:docker": "REACT_APP_DISABLE_SENTRY=true react-scripts build",
"build:app": "REACT_APP_GIT_SHA=$VERCEL_GIT_COMMIT_SHA react-scripts build", "build:app": "REACT_APP_GIT_SHA=$VERCEL_GIT_COMMIT_SHA react-scripts build",
"build:version": "node ./scripts/build-version.js", "build:version": "node ./scripts/build-version.js",
"build": "yarn build:app && yarn build:version", "build": "npm run build:app && npm run build:version",
"eject": "react-scripts eject", "eject": "react-scripts eject",
"fix:code": "yarn test:code --fix", "fix:code": "npm run test:code -- --fix",
"fix:other": "yarn prettier --write", "fix:other": "npm run prettier -- --write",
"fix": "yarn fix:other && yarn fix:code", "fix": "npm run fix:other && npm run fix:code",
"locales-coverage": "node scripts/build-locales-coverage.js", "locales-coverage": "node scripts/build-locales-coverage.js",
"locales-coverage:description": "node scripts/locales-coverage-description.js", "locales-coverage:description": "node scripts/locales-coverage-description.js",
"prettier": "prettier \"**/*.{css,scss,json,md,html,yml}\" --ignore-path=.eslintignore", "prettier": "prettier \"**/*.{css,scss,json,md,html,yml}\" --ignore-path=.eslintignore",
"start": "react-scripts start", "start": "react-scripts start",
"test:all": "yarn test:typecheck && yarn test:code && yarn test:other && yarn test:app --watchAll=false", "test:all": "npm run test:typecheck && npm run test:code && npm run test:other && npm run test:app -- --watchAll=false",
"test:app": "react-scripts test --passWithNoTests", "test:app": "react-scripts test --passWithNoTests",
"test:code": "eslint --max-warnings=0 --ignore-path .gitignore --ext .js,.ts,.tsx .", "test:code": "eslint --max-warnings=0 --ignore-path .gitignore --ext .js,.ts,.tsx .",
"test:debug": "react-scripts --inspect-brk test --runInBand --no-cache", "test:debug": "react-scripts --inspect-brk test --runInBand --no-cache",
"test:other": "yarn prettier --list-different", "test:other": "npm run prettier -- --list-different",
"test:typecheck": "tsc", "test:typecheck": "tsc",
"test:update": "yarn test:app --updateSnapshot --watchAll=false", "test:update": "npm run test:app -- --updateSnapshot --watchAll=false",
"test": "yarn test:app" "test": "npm run test:app"
} }
} }
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1,7 +1,7 @@
/* http://www.eaglefonts.com/fg-virgil-ttf-131249.htm */ /* http://www.eaglefonts.com/fg-virgil-ttf-131249.htm */
@font-face { @font-face {
font-family: "Virgil"; font-family: "Virgil";
src: url("Virgil.woff2"); src: url("FG_Virgil.woff2");
font-display: swap; font-display: swap;
} }
+2 -4
View File
@@ -60,7 +60,7 @@
<link <link
rel="preload" rel="preload"
href="Virgil.woff2" href="FG_Virgil.woff2"
as="font" as="font"
type="font/woff2" type="font/woff2"
crossorigin="anonymous" crossorigin="anonymous"
@@ -86,9 +86,7 @@
/> />
<link rel="stylesheet" href="fonts.css" type="text/css" /> <link rel="stylesheet" href="fonts.css" type="text/css" />
<script>
window.EXCALIDRAW_ASSET_PATH = "/";
</script>
<% if (process.env.REACT_APP_GOOGLE_ANALYTICS_ID) { %> <% if (process.env.REACT_APP_GOOGLE_ANALYTICS_ID) { %>
<script <script
async async
+1 -1
View File
@@ -5,7 +5,7 @@
// In order to run: // In order to run:
// npm install canvas # please do not check it in // npm install canvas # please do not check it in
// yarn build-node // npm run build-node
// node build/static/js/build-node.js // node build/static/js/build-node.js
// open test.png // open test.png
-29
View File
@@ -5,7 +5,6 @@ import { ProjectName } from "../components/ProjectName";
import { ToolButton } from "../components/ToolButton"; import { ToolButton } from "../components/ToolButton";
import "../components/ToolIcon.scss"; import "../components/ToolIcon.scss";
import { Tooltip } from "../components/Tooltip"; import { Tooltip } from "../components/Tooltip";
import { DarkModeToggle, Appearence } from "../components/DarkModeToggle";
import { loadFromJSON, saveAsJSON } from "../data"; import { loadFromJSON, saveAsJSON } from "../data";
import { t } from "../i18n"; import { t } from "../i18n";
import useIsMobile from "../is-mobile"; import useIsMobile from "../is-mobile";
@@ -205,31 +204,3 @@ export const actionLoadScene = register({
/> />
), ),
}); });
export const actionExportWithDarkMode = register({
name: "exportWithDarkMode",
perform: (_elements, appState, value) => {
return {
appState: { ...appState, exportWithDarkMode: value },
commitToHistory: false,
};
},
PanelComponent: ({ appState, updateData }) => (
<div
style={{
display: "flex",
justifyContent: "flex-end",
marginTop: "-45px",
marginBottom: "10px",
}}
>
<DarkModeToggle
value={appState.exportWithDarkMode ? "dark" : "light"}
onChange={(appearance: Appearence) => {
updateData(appearance === "dark");
}}
title={t("labels.toggleExportColorScheme")}
/>
</div>
),
});
+1 -2
View File
@@ -85,8 +85,7 @@ export type ActionName =
| "alignHorizontallyCentered" | "alignHorizontallyCentered"
| "distributeHorizontally" | "distributeHorizontally"
| "distributeVertically" | "distributeVertically"
| "viewMode" | "viewMode";
| "exportWithDarkMode";
export interface Action { export interface Action {
name: ActionName; name: ActionName;
-2
View File
@@ -40,7 +40,6 @@ export const getDefaultAppState = (): Omit<
errorMessage: null, errorMessage: null,
exportBackground: true, exportBackground: true,
exportEmbedScene: false, exportEmbedScene: false,
exportWithDarkMode: false,
fileHandle: null, fileHandle: null,
gridSize: null, gridSize: null,
height: window.innerHeight, height: window.innerHeight,
@@ -119,7 +118,6 @@ const APP_STATE_STORAGE_CONF = (<
errorMessage: { browser: false, export: false }, errorMessage: { browser: false, export: false },
exportBackground: { browser: true, export: false }, exportBackground: { browser: true, export: false },
exportEmbedScene: { browser: true, export: false }, exportEmbedScene: { browser: true, export: false },
exportWithDarkMode: { browser: true, export: false },
fileHandle: { browser: false, export: false }, fileHandle: { browser: false, export: false },
gridSize: { browser: true, export: true }, gridSize: { browser: true, export: true },
height: { browser: false, export: false }, height: { browser: false, export: false },
+11 -17
View File
@@ -672,24 +672,19 @@ class App extends React.Component<ExcalidrawProps, AppState> {
scene.appState = { scene.appState = {
...scene.appState, ...scene.appState,
...calculateScrollCenter(
scene.elements,
{
...scene.appState,
width: this.state.width,
height: this.state.height,
offsetTop: this.state.offsetTop,
offsetLeft: this.state.offsetLeft,
},
null,
),
isLoading: false, isLoading: false,
}; };
if (initialData?.scrollToCenter) {
scene.appState = {
...scene.appState,
...calculateScrollCenter(
scene.elements,
{
...scene.appState,
width: this.state.width,
height: this.state.height,
offsetTop: this.state.offsetTop,
offsetLeft: this.state.offsetLeft,
},
null,
),
};
}
this.resetHistory(); this.resetHistory();
this.syncActionResult({ this.syncActionResult({
@@ -977,7 +972,6 @@ class App extends React.Component<ExcalidrawProps, AppState> {
}, },
{ {
renderOptimizations: true, renderOptimizations: true,
renderScrollbars: !isMobile(),
}, },
); );
if (scrollBars) { if (scrollBars) {
+8 -9
View File
@@ -10,18 +10,13 @@ export type Appearence = "light" | "dark";
export const DarkModeToggle = (props: { export const DarkModeToggle = (props: {
value: Appearence; value: Appearence;
onChange: (value: Appearence) => void; onChange: (value: Appearence) => void;
title?: string;
}) => { }) => {
const title = props.title
? props.title
: props.value === "dark"
? t("buttons.lightMode")
: t("buttons.darkMode");
return ( return (
<label <label
className={`ToolIcon ToolIcon_type_floating ToolIcon_size_M`} className={`ToolIcon ToolIcon_type_floating ToolIcon_size_M`}
title={title} title={
props.value === "dark" ? t("buttons.lightMode") : t("buttons.darkMode")
}
> >
<input <input
className="ToolIcon_type_checkbox ToolIcon_toggle_opaque" className="ToolIcon_type_checkbox ToolIcon_toggle_opaque"
@@ -30,7 +25,11 @@ export const DarkModeToggle = (props: {
props.onChange(event.target.checked ? "dark" : "light") props.onChange(event.target.checked ? "dark" : "light")
} }
checked={props.value === "dark"} checked={props.value === "dark"}
aria-label={title} aria-label={
props.value === "dark"
? t("buttons.lightMode")
: t("buttons.darkMode")
}
/> />
<div className="ToolIcon__icon"> <div className="ToolIcon__icon">
{props.value === "light" ? ICONS.MOON : ICONS.SUN} {props.value === "light" ? ICONS.MOON : ICONS.SUN}
-5
View File
@@ -19,9 +19,6 @@ import { ToolButton } from "./ToolButton";
const scales = [1, 2, 3]; const scales = [1, 2, 3];
const defaultScale = scales.includes(devicePixelRatio) ? devicePixelRatio : 1; const defaultScale = scales.includes(devicePixelRatio) ? devicePixelRatio : 1;
const supportsContextFilters =
"filter" in document.createElement("canvas").getContext("2d")!;
export const ErrorCanvasPreview = () => { export const ErrorCanvasPreview = () => {
return ( return (
<div> <div>
@@ -131,8 +128,6 @@ const ExportModal = ({
return ( return (
<div className="ExportDialog"> <div className="ExportDialog">
<div className="ExportDialog__preview" ref={previewRef} /> <div className="ExportDialog__preview" ref={previewRef} />
{supportsContextFilters &&
actionManager.renderAction("exportWithDarkMode")}
<Stack.Col gap={2} align="center"> <Stack.Col gap={2} align="center">
<div className="ExportDialog__actions"> <div className="ExportDialog__actions">
<Stack.Row gap={2}> <Stack.Row gap={2}>
-3
View File
@@ -1,5 +1,4 @@
import { FontFamily } from "./element/types"; import { FontFamily } from "./element/types";
import cssVariables from "./css/variables.module.scss";
export const APP_NAME = "Excalidraw"; export const APP_NAME = "Excalidraw";
@@ -108,5 +107,3 @@ export const MODES = {
ZEN: "zenMode", ZEN: "zenMode",
GRID: "gridMode", GRID: "gridMode",
}; };
export const APPEARANCE_FILTER = cssVariables.appearanceFilter;
+1 -2
View File
@@ -1,5 +1,4 @@
@import "open-color/open-color.scss"; @import "open-color/open-color.scss";
@import "./variables.module.scss";
:root { :root {
--appearance-filter: none; --appearance-filter: none;
@@ -46,7 +45,7 @@
} }
&.Appearance_dark { &.Appearance_dark {
--appearance-filter: #{$appearance-filter}; --appearance-filter: invert(93%) hue-rotate(180deg);
--button-destructive-bg-color: #5a0000; --button-destructive-bg-color: #5a0000;
--button-destructive-color: #{$oc-red-3}; --button-destructive-color: #{$oc-red-3};
--button-gray-1: #363636; --button-gray-1: #363636;
-2
View File
@@ -2,9 +2,7 @@
// keep up to date with is-mobile.tsx // keep up to date with is-mobile.tsx
$is-mobile-query: "(max-width: 600px), (max-height: 500px) and (max-width: 1000px)"; $is-mobile-query: "(max-width: 600px), (max-height: 500px) and (max-width: 1000px)";
$appearance-filter: "invert(93%) hue-rotate(180deg)";
:export { :export {
isMobileQuery: unquote($is-mobile-query); isMobileQuery: unquote($is-mobile-query);
appearanceFilter: unquote($appearance-filter);
} }
-1
View File
@@ -41,7 +41,6 @@ export const exportCanvas = async (
if (type === "svg" || type === "clipboard-svg") { if (type === "svg" || type === "clipboard-svg") {
const tempSvg = exportToSvg(elements, { const tempSvg = exportToSvg(elements, {
exportBackground, exportBackground,
exportWithDarkMode: appState.exportWithDarkMode,
viewBackgroundColor, viewBackgroundColor,
exportPadding, exportPadding,
scale, scale,
-1
View File
@@ -15,7 +15,6 @@ export interface ImportedDataState {
source?: string; source?: string;
elements?: DataState["elements"] | null; elements?: DataState["elements"] | null;
appState?: Partial<DataState["appState"]> | null; appState?: Partial<DataState["appState"]> | null;
scrollToCenter?: boolean;
} }
export interface LibraryData { export interface LibraryData {
+1 -5
View File
@@ -256,7 +256,6 @@ class CollabWrapper extends PureComponent<Props, CollabState> {
if (elements) { if (elements) {
scenePromise.resolve({ scenePromise.resolve({
elements, elements,
scrollToCenter: true,
}); });
} }
} catch (error) { } catch (error) {
@@ -308,10 +307,7 @@ class CollabWrapper extends PureComponent<Props, CollabState> {
init: true, init: true,
}); });
// noop if already resolved via init from firebase // noop if already resolved via init from firebase
scenePromise.resolve({ scenePromise.resolve({ elements: reconciledElements });
elements: reconciledElements,
scrollToCenter: true,
});
} }
break; break;
} }
+2 -7
View File
@@ -13,7 +13,7 @@ import { ExcalidrawImperativeAPI } from "../components/App";
import { ErrorDialog } from "../components/ErrorDialog"; import { ErrorDialog } from "../components/ErrorDialog";
import { TopErrorBoundary } from "../components/TopErrorBoundary"; import { TopErrorBoundary } from "../components/TopErrorBoundary";
import { APP_NAME, EVENT, TITLE_TIMEOUT, VERSION_TIMEOUT } from "../constants"; import { APP_NAME, EVENT, TITLE_TIMEOUT, VERSION_TIMEOUT } from "../constants";
import { DataState, ImportedDataState } from "../data/types"; import { ImportedDataState } from "../data/types";
import { import {
ExcalidrawElement, ExcalidrawElement,
NonDeletedExcalidrawElement, NonDeletedExcalidrawElement,
@@ -75,11 +75,7 @@ const initializeScene = async (opts: {
const initialData = importFromLocalStorage(); const initialData = importFromLocalStorage();
let scene: DataState & { scrollToCenter?: boolean } = await loadScene( let scene = await loadScene(null, null, initialData);
null,
null,
initialData,
);
let roomLinkData = getCollaborationLinkData(window.location.href); let roomLinkData = getCollaborationLinkData(window.location.href);
const isExternalScene = !!(id || jsonMatch || roomLinkData); const isExternalScene = !!(id || jsonMatch || roomLinkData);
@@ -98,7 +94,6 @@ const initializeScene = async (opts: {
} else if (jsonMatch) { } else if (jsonMatch) {
scene = await loadScene(jsonMatch[1], jsonMatch[2], initialData); scene = await loadScene(jsonMatch[1], jsonMatch[2], initialData);
} }
scene.scrollToCenter = true;
if (!roomLinkData) { if (!roomLinkData) {
window.history.replaceState({}, APP_NAME, window.location.origin); window.history.replaceState({}, APP_NAME, window.location.origin);
} }
-1
View File
@@ -12,7 +12,6 @@ interface Document {
interface Window { interface Window {
ClipboardItem: any; ClipboardItem: any;
__EXCALIDRAW_SHA__: string | undefined; __EXCALIDRAW_SHA__: string | undefined;
EXCALIDRAW_ASSET_PATH: string | undefined;
gtag: Function; gtag: Function;
} }
+2 -2
View File
@@ -54,8 +54,8 @@ const elements = [
}, },
]; ];
registerFont("./public/Virgil.woff2", { family: "Virgil" }); registerFont("./public/FG_Virgil.ttf", { family: "Virgil" });
registerFont("./public/Cascadia.woff2", { family: "Cascadia" }); registerFont("./public/Cascadia.ttf", { family: "Cascadia" });
const canvas = exportToCanvas( const canvas = exportToCanvas(
elements as any, elements as any,
+1
View File
@@ -4,6 +4,7 @@ import ExcalidrawApp from "./excalidraw-app";
import "./excalidraw-app/pwa"; import "./excalidraw-app/pwa";
import "./excalidraw-app/sentry"; import "./excalidraw-app/sentry";
window.__EXCALIDRAW_SHA__ = process.env.REACT_APP_GIT_SHA; window.__EXCALIDRAW_SHA__ = process.env.REACT_APP_GIT_SHA;
ReactDOM.render(<ExcalidrawApp />, document.getElementById("root")); ReactDOM.render(<ExcalidrawApp />, document.getElementById("root"));
+1 -2
View File
@@ -92,8 +92,7 @@
"centerHorizontally": "Center horizontally", "centerHorizontally": "Center horizontally",
"distributeHorizontally": "Distribute horizontally", "distributeHorizontally": "Distribute horizontally",
"distributeVertically": "Distribute vertically", "distributeVertically": "Distribute vertically",
"viewMode": "View mode", "viewMode": "View mode"
"toggleExportColorScheme": "Toggle export color scheme"
}, },
"buttons": { "buttons": {
"clearReset": "Reset the canvas", "clearReset": "Reset the canvas",
+2 -18
View File
@@ -12,34 +12,18 @@ The change should be grouped under one of the below section and must contain PR
Please add the latest change on the top under the correct section. Please add the latest change on the top under the correct section.
--> -->
## 0.4.0 ## [Unreleased]
## Excalidraw API ## Excalidraw API
### Features ### Features
- Expose `window.EXCALIDRAW_ASSET_PATH` which host can use to load assets from a different URL. By default it will be loaded from `https://unpkg.com/@excalidraw/excalidraw{currentVersion}/dist/`[#3068](https://github.com/excalidraw/excalidraw/pull/3068). - Export [`restore`](https://github.com/excalidraw/excalidraw/blob/master/src/data/restore.ts#L182), [`restoreAppState`](https://github.com/excalidraw/excalidraw/blob/master/src/data/restore.ts#L144) and [`restoreElements`](https://github.com/excalidraw/excalidraw/blob/master/src/data/restore.ts#L128) to host
Also now the assets will have a hash in filename so cache bursting can easily happen with version bump.
- Add support for `scrollToCenter` in [initialData](https://github.com/excalidraw/excalidraw/blob/master/src/element/types.ts#L18) so host can control whether to scroll to center on mount [#3070](https://github.com/excalidraw/excalidraw/pull/3070).
- Export [`restore`](https://github.com/excalidraw/excalidraw/blob/master/src/data/restore.ts#L182), [`restoreAppState`](https://github.com/excalidraw/excalidraw/blob/master/src/data/restore.ts#L144) and [`restoreElements`](https://github.com/excalidraw/excalidraw/blob/master/src/data/restore.ts#L128) to host [#3049](https://github.com/excalidraw/excalidraw/pull/3049)
### Fixes ### Fixes
- Show user state only when [userState](https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L35) is passed on remote pointers during collaboration [#3050](https://github.com/excalidraw/excalidraw/pull/3050) - Show user state only when [userState](https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L35) is passed on remote pointers during collaboration [#3050](https://github.com/excalidraw/excalidraw/pull/3050)
## Excalidraw Library
### Features
- Adjust line-confirm-threshold based on zoom [#2884](https://github.com/excalidraw/excalidraw/pull/2884)
### Fixes
- Hide scrollbars on mobile [#3044](https://github.com/excalidraw/excalidraw/pull/3044)
## 0.3.1 ## 0.3.1
## Excalidraw API ## Excalidraw API
+10 -7
View File
@@ -20,9 +20,13 @@ After installation you will see a folder `excalidraw-assets` in `dist` directory
Move the folder `excalidraw-assets` to the path where your assets are served. Move the folder `excalidraw-assets` to the path where your assets are served.
By default it will try to load the files from `https://unpkg.com/@excalidraw/excalidraw/{currentVersion}/dist/` By default it will try to load the files from `{rootUrl}/excalidraw-assets/`
If you want to load assets from a different path you can set a variable `window.EXCALIDRAW_ASSET_PATH` to the url from where you want to load the assets. With **Webpack**, if you want to load the files from different path you can use <pre><a href="https://webpack.js.org/guides/public-path/#on-the-fly">`__webpack_public_path__`</a></pre>.
With **create-react-app**, the assets can be served from `public/static/js/excalidraw-assets`since CRA tries to load the assets from `{rootUrl}/static/js` path by default.
You can update the value of `PUBLIC_URL` if you want to serve it from a different URL.
### Demo ### Demo
@@ -282,11 +286,10 @@ Here you can try saving the data to your backend or local storage for example.
This helps to load Excalidraw with `initialData`. It must be an object or a [promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/Promise) which resolves to an object containing the below optional fields. This helps to load Excalidraw with `initialData`. It must be an object or a [promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/Promise) which resolves to an object containing the below optional fields.
| Name | Type | Descrption | | name | type |
| --- | --- | --- | | --- | --- |
| `elements` | [ExcalidrawElement[]](https://github.com/excalidraw/excalidraw/blob/master/src/element/types.ts#L78) | The elements with which Excalidraw should be mounted. | | elements | [ExcalidrawElement[]](https://github.com/excalidraw/excalidraw/blob/master/src/element/types.ts#L78) |
| `appState` | [AppState](https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L37) | The App state with which Excalidraw should be mounted. | | appState | [AppState](https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L37) |
| `scrollToCenter` | boolean | This attribute implies whether to scroll to the nearest element to center once Excalidraw is mounted. By default, it will not scroll the nearest element to the center. Make sure you pass `initialData.appState.scrollX` and `initialData.appState.scrollY` when `scrollToCenter` is false so that scroll positions are retained |
```json ```json
{ {
-1
View File
@@ -1,5 +1,4 @@
import React, { useEffect, forwardRef } from "react"; import React, { useEffect, forwardRef } from "react";
import "./publicPath";
import { InitializeApp } from "../../components/InitializeApp"; import { InitializeApp } from "../../components/InitializeApp";
import App from "../../components/App"; import App from "../../components/App";
File diff suppressed because it is too large Load Diff
+13 -13
View File
@@ -1,6 +1,6 @@
{ {
"name": "@excalidraw/excalidraw", "name": "aakansha-excalidraw",
"version": "0.4.0", "version": "0.4.3",
"main": "dist/excalidraw.min.js", "main": "dist/excalidraw.min.js",
"files": [ "files": [
"dist/*" "dist/*"
@@ -41,24 +41,24 @@
"react-dom": "^17.0.1" "react-dom": "^17.0.1"
}, },
"devDependencies": { "devDependencies": {
"@babel/core": "7.13.8", "@babel/core": "7.12.16",
"@babel/plugin-transform-arrow-functions": "7.13.0", "@babel/plugin-transform-arrow-functions": "7.12.13",
"@babel/plugin-transform-async-to-generator": "7.13.0", "@babel/plugin-transform-async-to-generator": "7.12.13",
"@babel/plugin-transform-runtime": "7.13.8", "@babel/plugin-transform-runtime": "7.12.15",
"@babel/plugin-transform-typescript": "7.13.0", "@babel/plugin-transform-typescript": "7.12.16",
"@babel/preset-env": "7.13.8", "@babel/preset-env": "7.12.16",
"@babel/preset-react": "7.12.13", "@babel/preset-react": "7.12.13",
"@babel/preset-typescript": "7.13.0", "@babel/preset-typescript": "7.12.16",
"babel-loader": "8.2.2", "babel-loader": "8.2.2",
"babel-plugin-transform-class-properties": "6.24.1", "babel-plugin-transform-class-properties": "6.24.1",
"cross-env": "7.0.3", "cross-env": "7.0.3",
"css-loader": "5.1.0", "css-loader": "5.0.2",
"file-loader": "6.2.0", "file-loader": "6.2.0",
"mini-css-extract-plugin": "1.3.9", "mini-css-extract-plugin": "1.3.6",
"sass-loader": "11.0.1", "sass-loader": "11.0.1",
"terser-webpack-plugin": "5.1.1", "terser-webpack-plugin": "5.1.1",
"ts-loader": "8.0.17", "ts-loader": "8.0.17",
"webpack": "5.24.2", "webpack": "5.21.2",
"webpack-bundle-analyzer": "4.4.0", "webpack-bundle-analyzer": "4.4.0",
"webpack-cli": "4.5.0" "webpack-cli": "4.5.0"
}, },
@@ -68,6 +68,6 @@
"scripts": { "scripts": {
"build:umd": "cross-env NODE_ENV=production webpack --config webpack.prod.config.js", "build:umd": "cross-env NODE_ENV=production webpack --config webpack.prod.config.js",
"build:umd:withAnalyzer": "cross-env NODE_ENV=production ANALYZER=true webpack --config webpack.prod.config.js", "build:umd:withAnalyzer": "cross-env NODE_ENV=production ANALYZER=true webpack --config webpack.prod.config.js",
"pack": "yarn build:umd && yarn pack" "pack": "npm run build:umd && npm pack"
} }
} }
-9
View File
@@ -1,9 +0,0 @@
import { ENV } from "../../constants";
import pkg from "./package.json";
if (process.env.NODE_ENV !== ENV.TEST) {
/* eslint-disable */
/* global __webpack_public_path__:writable */
__webpack_public_path__ =
window.EXCALIDRAW_ASSET_PATH ||
`https://unpkg.com/${pkg.name}@${pkg.version}/dist/`;
}
@@ -13,8 +13,8 @@ module.exports = {
library: "Excalidraw", library: "Excalidraw",
libraryTarget: "umd", libraryTarget: "umd",
filename: "[name].js", filename: "[name].js",
chunkFilename: "excalidraw-assets/[name]-[contenthash].js", chunkFilename: "excalidraw-assets/[name].js",
publicPath: "", publicPath: "https://unpkg.com/aakansha-excalidraw@0.4.3/dist/",
}, },
resolve: { resolve: {
extensions: [".js", ".ts", ".tsx", ".css", ".scss"], extensions: [".js", ".ts", ".tsx", ".css", ".scss"],
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+8 -10
View File
@@ -34,21 +34,19 @@
] ]
}, },
"devDependencies": { "devDependencies": {
"@babel/core": "7.13.8", "@babel/core": "7.12.16",
"@babel/plugin-transform-arrow-functions": "7.13.0", "@babel/plugin-transform-arrow-functions": "7.12.13",
"@babel/plugin-transform-async-to-generator": "7.13.0", "@babel/plugin-transform-async-to-generator": "7.12.13",
"@babel/plugin-transform-runtime": "^7.12.10", "@babel/plugin-transform-runtime": "^7.12.10",
"@babel/plugin-transform-typescript": "7.13.0", "@babel/plugin-transform-typescript": "7.12.16",
"@babel/preset-env": "7.13.8", "@babel/preset-env": "7.12.16",
"@babel/preset-typescript": "7.13.0", "@babel/preset-typescript": "7.12.16",
"babel-loader": "8.2.2", "babel-loader": "8.2.2",
"babel-plugin-transform-class-properties": "6.24.1", "babel-plugin-transform-class-properties": "6.24.1",
"cross-env": "7.0.3", "cross-env": "7.0.3",
"css-loader": "5.1.0",
"file-loader": "6.2.0", "file-loader": "6.2.0",
"sass-loader": "11.0.1",
"ts-loader": "8.0.17", "ts-loader": "8.0.17",
"webpack": "5.24.2", "webpack": "5.21.2",
"webpack-bundle-analyzer": "4.4.0", "webpack-bundle-analyzer": "4.4.0",
"webpack-cli": "4.5.0" "webpack-cli": "4.5.0"
}, },
@@ -57,6 +55,6 @@
"scripts": { "scripts": {
"build:umd": "cross-env NODE_ENV=production webpack --config webpack.prod.config.js", "build:umd": "cross-env NODE_ENV=production webpack --config webpack.prod.config.js",
"build:umd:withAnalyzer": "cross-env NODE_ENV=production ANALYZER=true webpack --config webpack.prod.config.js", "build:umd:withAnalyzer": "cross-env NODE_ENV=production ANALYZER=true webpack --config webpack.prod.config.js",
"pack": "yarn build:umd && npm pack" "pack": "npm run build:umd && npm pack"
} }
} }
+1 -6
View File
@@ -13,18 +13,13 @@ module.exports = {
libraryTarget: "umd", libraryTarget: "umd",
}, },
resolve: { resolve: {
extensions: [".tsx", ".ts", ".js", ".css", ".scss"], extensions: [".tsx", ".ts", ".js"],
}, },
optimization: { optimization: {
runtimeChunk: false, runtimeChunk: false,
}, },
module: { module: {
rules: [ rules: [
{
test: /\.(sa|sc|c)ss$/,
exclude: /node_modules/,
use: ["style-loader", { loader: "css-loader" }, "sass-loader"],
},
{ {
test: /\.(ts|tsx|js)$/, test: /\.(ts|tsx|js)$/,
use: [ use: [
File diff suppressed because it is too large Load Diff
-5
View File
@@ -49,7 +49,6 @@ import {
} from "../element/transformHandles"; } from "../element/transformHandles";
import { viewportCoordsToSceneCoords, supportsEmoji } from "../utils"; import { viewportCoordsToSceneCoords, supportsEmoji } from "../utils";
import { UserIdleState } from "../excalidraw-app/collab/types"; import { UserIdleState } from "../excalidraw-app/collab/types";
import { APPEARANCE_FILTER } from "../constants";
const hasEmojiSupport = supportsEmoji(); const hasEmojiSupport = supportsEmoji();
@@ -212,10 +211,6 @@ export const renderScene = (
const normalizedCanvasWidth = canvas.width / scale; const normalizedCanvasWidth = canvas.width / scale;
const normalizedCanvasHeight = canvas.height / scale; const normalizedCanvasHeight = canvas.height / scale;
if (sceneState.exportWithDarkMode) {
context.filter = APPEARANCE_FILTER;
}
// Paint background // Paint background
if (typeof sceneState.viewBackgroundColor === "string") { if (typeof sceneState.viewBackgroundColor === "string") {
const hasTransparence = const hasTransparence =
+2 -12
View File
@@ -7,11 +7,7 @@ import { renderScene, renderSceneToSvg } from "../renderer/renderScene";
import { distance, SVG_NS } from "../utils"; import { distance, SVG_NS } from "../utils";
import { AppState } from "../types"; import { AppState } from "../types";
import { t } from "../i18n"; import { t } from "../i18n";
import { import { DEFAULT_FONT_FAMILY, DEFAULT_VERTICAL_ALIGN } from "../constants";
DEFAULT_FONT_FAMILY,
DEFAULT_VERTICAL_ALIGN,
APPEARANCE_FILTER,
} from "../constants";
import { getDefaultAppState } from "../appState"; import { getDefaultAppState } from "../appState";
export const SVG_EXPORT_TAG = `<!-- svg-source:excalidraw -->`; export const SVG_EXPORT_TAG = `<!-- svg-source:excalidraw -->`;
@@ -65,7 +61,6 @@ export const exportToCanvas = (
tempCanvas, tempCanvas,
{ {
viewBackgroundColor: exportBackground ? viewBackgroundColor : null, viewBackgroundColor: exportBackground ? viewBackgroundColor : null,
exportWithDarkMode: appState.exportWithDarkMode,
scrollX: -minX + exportPadding, scrollX: -minX + exportPadding,
scrollY: -minY + exportPadding, scrollY: -minY + exportPadding,
zoom: getDefaultAppState().zoom, zoom: getDefaultAppState().zoom,
@@ -92,7 +87,6 @@ export const exportToSvg = (
exportBackground, exportBackground,
exportPadding = 10, exportPadding = 10,
viewBackgroundColor, viewBackgroundColor,
exportWithDarkMode,
scale = 1, scale = 1,
shouldAddWatermark, shouldAddWatermark,
metadata = "", metadata = "",
@@ -101,7 +95,6 @@ export const exportToSvg = (
exportPadding?: number; exportPadding?: number;
scale?: number; scale?: number;
viewBackgroundColor: string; viewBackgroundColor: string;
exportWithDarkMode?: boolean;
shouldAddWatermark: boolean; shouldAddWatermark: boolean;
metadata?: string; metadata?: string;
}, },
@@ -121,9 +114,6 @@ export const exportToSvg = (
svgRoot.setAttribute("viewBox", `0 0 ${width} ${height}`); svgRoot.setAttribute("viewBox", `0 0 ${width} ${height}`);
svgRoot.setAttribute("width", `${width * scale}`); svgRoot.setAttribute("width", `${width * scale}`);
svgRoot.setAttribute("height", `${height * scale}`); svgRoot.setAttribute("height", `${height * scale}`);
if (exportWithDarkMode) {
svgRoot.setAttribute("filter", APPEARANCE_FILTER);
}
svgRoot.innerHTML = ` svgRoot.innerHTML = `
${SVG_EXPORT_TAG} ${SVG_EXPORT_TAG}
@@ -132,7 +122,7 @@ export const exportToSvg = (
<style> <style>
@font-face { @font-face {
font-family: "Virgil"; font-family: "Virgil";
src: url("https://excalidraw.com/Virgil.woff2"); src: url("https://excalidraw.com/FG_Virgil.woff2");
} }
@font-face { @font-face {
font-family: "Cascadia"; font-family: "Cascadia";
-1
View File
@@ -6,7 +6,6 @@ export type SceneState = {
scrollY: number; scrollY: number;
// null indicates transparent bg // null indicates transparent bg
viewBackgroundColor: string | null; viewBackgroundColor: string | null;
exportWithDarkMode?: boolean;
zoom: Zoom; zoom: Zoom;
shouldCacheIgnoreZoom: boolean; shouldCacheIgnoreZoom: boolean;
remotePointerViewportCoords: { [id: string]: { x: number; y: number } }; remotePointerViewportCoords: { [id: string]: { x: number; y: number } };
@@ -29,7 +29,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -490,7 +489,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -957,7 +955,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -1733,7 +1730,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -1937,7 +1933,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -2395,7 +2390,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -2648,7 +2642,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -2812,7 +2805,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -3289,7 +3281,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -3597,7 +3588,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -3801,7 +3791,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -4045,7 +4034,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -4297,7 +4285,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -4680,7 +4667,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -4975,7 +4961,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -5282,7 +5267,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -5490,7 +5474,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -5654,7 +5637,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -6107,7 +6089,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -6425,7 +6406,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -8459,7 +8439,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -8821,7 +8800,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -9076,7 +9054,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -9329,7 +9306,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -9644,7 +9620,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -9808,7 +9783,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -9972,7 +9946,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -10136,7 +10109,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -10330,7 +10302,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -10524,7 +10495,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -10718,7 +10688,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -10912,7 +10881,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -11076,7 +11044,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -11240,7 +11207,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -11434,7 +11400,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -11598,7 +11563,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -11792,7 +11756,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -12508,7 +12471,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -12761,7 +12723,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -12863,7 +12824,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -12963,7 +12923,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -13127,7 +13086,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -13435,7 +13393,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -13743,7 +13700,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -13907,7 +13863,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -14103,7 +14058,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -14352,7 +14306,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -14676,7 +14629,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -15515,7 +15467,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -15823,7 +15774,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -16131,7 +16081,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -16510,7 +16459,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -16677,7 +16625,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -16998,7 +16945,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -17237,7 +17183,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -17492,7 +17437,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -17819,7 +17763,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -17919,7 +17862,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -18083,7 +18025,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -18904,7 +18845,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -19004,7 +18944,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -19758,7 +19697,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -20163,7 +20101,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -20436,7 +20373,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -20538,7 +20474,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -21036,7 +20971,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
@@ -21136,7 +21070,6 @@ Object {
"errorMessage": null, "errorMessage": null,
"exportBackground": true, "exportBackground": true,
"exportEmbedScene": false, "exportEmbedScene": false,
"exportWithDarkMode": false,
"fileHandle": null, "fileHandle": null,
"gridSize": null, "gridSize": null,
"height": 768, "height": 768,
+2 -2
View File
@@ -5,7 +5,7 @@
<style> <style>
@font-face { @font-face {
font-family: "Virgil"; font-family: "Virgil";
src: url("https://excalidraw.com/Virgil.woff2"); src: url("https://excalidraw.com/FG_Virgil.woff2");
} }
@font-face { @font-face {
font-family: "Cascadia"; font-family: "Cascadia";
@@ -13,4 +13,4 @@
} }
</style> </style>
</defs> </defs>
<rect x="0" y="0" width="56" height="77" fill="#ffffff"></rect><g transform="translate(10 10) rotate(0 18 28.5)"><text x="0" y="41" font-family="Virgil, Segoe UI Emoji" font-size="36px" fill="#c92a2a" text-anchor="start" style="white-space: pre;" direction="ltr">😀</text></g></svg> <rect x="0" y="0" width="56" height="77" fill="#ffffff"></rect><g transform="translate(10 10) rotate(0 18 28.5)"><text x="0" y="41" font-family="Virgil, Segoe UI Emoji" font-size="36px" fill="#c92a2a" text-anchor="start" style="white-space: pre;" direction="ltr">😀</text></g></svg>

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

+2 -2
View File
@@ -5,7 +5,7 @@
<style> <style>
@font-face { @font-face {
font-family: "Virgil"; font-family: "Virgil";
src: url("https://excalidraw.com/Virgil.woff2"); src: url("https://excalidraw.com/FG_Virgil.woff2");
} }
@font-face { @font-face {
font-family: "Cascadia"; font-family: "Cascadia";
@@ -13,4 +13,4 @@
} }
</style> </style>
</defs> </defs>
<rect x="0" y="0" width="97" height="77" fill="#ffffff"></rect><g transform="translate(10 10) rotate(0 38.5 28.5)"><text x="0" y="41" font-family="Virgil, Segoe UI Emoji" font-size="36px" fill="#000000" text-anchor="start" style="white-space: pre;" direction="ltr">test</text></g></svg> <rect x="0" y="0" width="97" height="77" fill="#ffffff"></rect><g transform="translate(10 10) rotate(0 38.5 28.5)"><text x="0" y="41" font-family="Virgil, Segoe UI Emoji" font-size="36px" fill="#000000" text-anchor="start" style="white-space: pre;" direction="ltr">test</text></g></svg>

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

-1
View File
@@ -30,7 +30,6 @@ describe("appState", () => {
height: ELEM_HEIGHT, height: ELEM_HEIGHT,
}), }),
], ],
scrollToCenter: true,
}} }}
/>, />,
); );
-1
View File
@@ -57,7 +57,6 @@ export type AppState = {
elementLocked: boolean; elementLocked: boolean;
exportBackground: boolean; exportBackground: boolean;
exportEmbedScene: boolean; exportEmbedScene: boolean;
exportWithDarkMode: boolean;
shouldAddWatermark: boolean; shouldAddWatermark: boolean;
currentItemStrokeColor: string; currentItemStrokeColor: string;
currentItemBackgroundColor: string; currentItemBackgroundColor: string;
-14933
View File
File diff suppressed because it is too large Load Diff