mirror of
https://github.com/excalidraw/excalidraw.git
synced 2025-09-07 01:27:10 +02:00
Compare commits
66 Commits
persist_fi
...
v0.10.0
Author | SHA1 | Date | |
---|---|---|---|
![]() |
39d45afc06 | ||
![]() |
00c6940851 | ||
![]() |
982cba2035 | ||
![]() |
54739cd2df | ||
![]() |
75aeaa6c38 | ||
![]() |
bea4a1e066 | ||
![]() |
e8b462cc31 | ||
![]() |
c86c176e10 | ||
![]() |
b09c11bb14 | ||
![]() |
7199d13f48 | ||
![]() |
7d1fddc144 | ||
![]() |
5da3207633 | ||
![]() |
8c9786e026 | ||
![]() |
f0f13ed694 | ||
![]() |
850d8eb47e | ||
![]() |
f287f9c002 | ||
![]() |
78df5bc852 | ||
![]() |
f0073c7e26 | ||
![]() |
fa7a313412 | ||
![]() |
8b3f236cd8 | ||
![]() |
621812d0eb | ||
![]() |
d607249205 | ||
![]() |
df28c3299f | ||
![]() |
b00a57b4be | ||
![]() |
9277e839db | ||
![]() |
0d5d60944f | ||
![]() |
489a652d73 | ||
![]() |
2b85d96121 | ||
![]() |
6ce535d3a4 | ||
![]() |
da43cf5635 | ||
![]() |
603ecfba34 | ||
![]() |
a589708737 | ||
![]() |
4df401d012 | ||
![]() |
b2c4552416 | ||
![]() |
5cae218f1b | ||
![]() |
4be726d405 | ||
![]() |
99623334d1 | ||
![]() |
685abac81a | ||
![]() |
9581c45522 | ||
![]() |
0749d2c1f3 | ||
![]() |
8787f3dc60 | ||
![]() |
5fabc57277 | ||
![]() |
e7cbb859f0 | ||
![]() |
aa860251c7 | ||
![]() |
380aaa30e6 | ||
![]() |
2e61fec7a6 | ||
![]() |
3c295559c7 | ||
![]() |
55d3287abf | ||
![]() |
e3e967421e | ||
![]() |
77aae63006 | ||
![]() |
ee64a7e264 | ||
![]() |
097362662d | ||
![]() |
038e9c13dd | ||
![]() |
bc8ba08ad0 | ||
![]() |
f861a9fdd0 | ||
![]() |
62303b8a22 | ||
![]() |
9cc741ab3a | ||
![]() |
2d279cbb02 | ||
![]() |
57ea4fdf9a | ||
![]() |
44402f42bf | ||
![]() |
bdead4d164 | ||
![]() |
bfc0656475 | ||
![]() |
a33a3334f7 | ||
![]() |
969d3c694a | ||
![]() |
5cd921549a | ||
![]() |
437afcbea4 |
2
.gitignore
vendored
2
.gitignore
vendored
@@ -5,9 +5,11 @@
|
||||
.env.test.local
|
||||
.envrc
|
||||
.eslintcache
|
||||
.history
|
||||
.idea
|
||||
.vercel
|
||||
.vscode
|
||||
.yarn
|
||||
*.log
|
||||
*.tgz
|
||||
build
|
||||
|
@@ -10,7 +10,7 @@ ARG NODE_ENV=production
|
||||
COPY . .
|
||||
RUN yarn build:app:docker
|
||||
|
||||
FROM nginx:1.17-alpine
|
||||
FROM nginx:1.21-alpine
|
||||
|
||||
COPY --from=build /opt/node_app/build /usr/share/nginx/html
|
||||
|
||||
|
@@ -70,6 +70,8 @@ The first set of digits is the room. This is visible from the server that’s go
|
||||
|
||||
The second set of digits is the encryption key. The Excalidraw server doesn’t know about it. This is what all the participants use to encrypt/decrypt the messages.
|
||||
|
||||
> Note: Please ensure that the encryption key is 22 characters long.
|
||||
|
||||
## Shape libraries
|
||||
|
||||
Find a growing list of libraries containing assets for your drawings at [libraries.excalidraw.com](https://libraries.excalidraw.com).
|
||||
@@ -93,7 +95,7 @@ These instructions will get you a copy of the project up and running on your loc
|
||||
#### Requirements
|
||||
|
||||
- [Node.js](https://nodejs.org/en/)
|
||||
- [Yarn](https://yarnpkg.com/getting-started/install)
|
||||
- [Yarn](https://yarnpkg.com/getting-started/install) (v1 or v2.4.2+)
|
||||
- [Git](https://git-scm.com/downloads)
|
||||
|
||||
#### Clone the repo
|
||||
|
@@ -19,24 +19,24 @@
|
||||
]
|
||||
},
|
||||
"dependencies": {
|
||||
"@dwelle/browser-fs-access": "0.21.1",
|
||||
"@sentry/browser": "6.2.5",
|
||||
"@sentry/integrations": "6.2.5",
|
||||
"@testing-library/jest-dom": "5.11.10",
|
||||
"@testing-library/react": "11.2.6",
|
||||
"@tldraw/vec": "0.0.106",
|
||||
"@types/jest": "26.0.22",
|
||||
"@types/react": "17.0.3",
|
||||
"@types/react-dom": "17.0.3",
|
||||
"@types/socket.io-client": "1.4.36",
|
||||
"browser-fs-access": "0.16.4",
|
||||
"clsx": "1.1.1",
|
||||
"firebase": "8.3.3",
|
||||
"i18next-browser-languagedetector": "6.1.0",
|
||||
"idb-keyval": "5.0.6",
|
||||
"lodash.throttle": "4.1.1",
|
||||
"nanoid": "3.1.22",
|
||||
"open-color": "1.8.0",
|
||||
"pako": "1.0.11",
|
||||
"perfect-freehand": "0.4.7",
|
||||
"perfect-freehand": "1.0.15",
|
||||
"png-chunk-text": "1.0.0",
|
||||
"png-chunks-encode": "1.0.0",
|
||||
"png-chunks-extract": "1.0.0",
|
||||
@@ -77,7 +77,7 @@
|
||||
},
|
||||
"jest": {
|
||||
"transformIgnorePatterns": [
|
||||
"node_modules/(?!(roughjs|points-on-curve|path-data-parser|points-on-path|browser-fs-access)/)"
|
||||
"node_modules/(?!(roughjs|points-on-curve|path-data-parser|points-on-path|@dwelle/browser-fs-access)/)"
|
||||
],
|
||||
"resetMocks": false
|
||||
},
|
||||
|
@@ -13,6 +13,18 @@
|
||||
|
||||
<meta name="theme-color" content="#000" />
|
||||
|
||||
<!-- Declarative Link Capturing (https://web.dev/declarative-link-capturing/) -->
|
||||
<meta
|
||||
http-equiv="origin-trial"
|
||||
content="Ak3VyzTheARtX2CnxBZ3ZKxImB0mNyvDakmMxeAChgxrWFMZ3IGN64VP+uj36VxM5OegsbLmrP258b1xvqp7+Q8AAABbeyJvcmlnaW4iOiJodHRwczovL2V4Y2FsaWRyYXcuY29tOjQ0MyIsImZlYXR1cmUiOiJXZWJBcHBMaW5rQ2FwdHVyaW5nIiwiZXhwaXJ5IjoxNjM0MDgzMTk5fQ=="
|
||||
/>
|
||||
|
||||
<!-- File Handling (https://web.dev/file-handling/) -->
|
||||
<meta
|
||||
http-equiv="origin-trial"
|
||||
content="AkMQsAnFmKfRfPKQHNCv2WmZREqgwkqhyt2M7aOwQiCStB+hPYnGnv+mNbkPDAsGXrwsj/waFi76wPzTDUaEeQ0AAABUeyJvcmlnaW4iOiJodHRwczovL2V4Y2FsaWRyYXcuY29tOjQ0MyIsImZlYXR1cmUiOiJGaWxlSGFuZGxpbmciLCJleHBpcnkiOjE2MzQwODMxOTl9"
|
||||
/>
|
||||
|
||||
<!-- General tags -->
|
||||
<meta
|
||||
name="description"
|
||||
|
@@ -26,7 +26,7 @@
|
||||
}
|
||||
}
|
||||
],
|
||||
"capture_links": "new_client",
|
||||
"capture_links": "new-client",
|
||||
"share_target": {
|
||||
"action": "/web-share-target",
|
||||
"method": "POST",
|
||||
|
@@ -38,7 +38,8 @@ const crowdinMap = {
|
||||
"zh-CN": "en-zhcn",
|
||||
"zh-TW": "en-zhtw",
|
||||
"lv-LV": "en-lv",
|
||||
"cs-CZ": "cs-cz",
|
||||
"cs-CZ": "en-cs",
|
||||
"kk-KZ": "en-kk",
|
||||
};
|
||||
|
||||
const flags = {
|
||||
@@ -78,6 +79,7 @@ const flags = {
|
||||
"zh-TW": "🇹🇼",
|
||||
"lv-LV": "🇱🇻",
|
||||
"cs-CZ": "🇨🇿",
|
||||
"kk-KZ": "🇰🇿",
|
||||
};
|
||||
|
||||
const languages = {
|
||||
@@ -117,6 +119,7 @@ const languages = {
|
||||
"zh-TW": "繁體中文",
|
||||
"lv-LV": "Latviešu",
|
||||
"cs-CZ": "Česky",
|
||||
"kk-KZ": "Қазақ тілі",
|
||||
};
|
||||
|
||||
const percentages = fs.readFileSync(
|
||||
|
39
scripts/release.js
Normal file
39
scripts/release.js
Normal file
@@ -0,0 +1,39 @@
|
||||
const fs = require("fs");
|
||||
const util = require("util");
|
||||
const exec = util.promisify(require("child_process").exec);
|
||||
const updateReadme = require("./updateReadme");
|
||||
const updateChangelog = require("./updateChangelog");
|
||||
|
||||
const excalidrawDir = `${__dirname}/../src/packages/excalidraw`;
|
||||
const excalidrawPackage = `${excalidrawDir}/package.json`;
|
||||
|
||||
const updatePackageVersion = (nextVersion) => {
|
||||
const pkg = require(excalidrawPackage);
|
||||
pkg.version = nextVersion;
|
||||
const content = `${JSON.stringify(pkg, null, 2)}\n`;
|
||||
fs.writeFileSync(excalidrawPackage, content, "utf-8");
|
||||
};
|
||||
|
||||
const release = async (nextVersion) => {
|
||||
try {
|
||||
updateReadme();
|
||||
await updateChangelog(nextVersion);
|
||||
updatePackageVersion(nextVersion);
|
||||
await exec(`git add -u`);
|
||||
await exec(
|
||||
`git commit -m "docs: release @excalidraw/excalidraw@${nextVersion} 🎉"`,
|
||||
);
|
||||
/* eslint-disable no-console */
|
||||
console.log("Done!");
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
process.exit(1);
|
||||
}
|
||||
};
|
||||
|
||||
const nextVersion = process.argv.slice(2)[0];
|
||||
if (!nextVersion) {
|
||||
console.error("Pass the next version to release!");
|
||||
process.exit(1);
|
||||
}
|
||||
release(nextVersion);
|
97
scripts/updateChangelog.js
Normal file
97
scripts/updateChangelog.js
Normal file
@@ -0,0 +1,97 @@
|
||||
const fs = require("fs");
|
||||
const util = require("util");
|
||||
const exec = util.promisify(require("child_process").exec);
|
||||
|
||||
const excalidrawDir = `${__dirname}/../src/packages/excalidraw`;
|
||||
const excalidrawPackage = `${excalidrawDir}/package.json`;
|
||||
const pkg = require(excalidrawPackage);
|
||||
const lastVersion = pkg.version;
|
||||
const existingChangeLog = fs.readFileSync(
|
||||
`${excalidrawDir}/CHANGELOG.md`,
|
||||
"utf8",
|
||||
);
|
||||
|
||||
const supportedTypes = ["feat", "fix", "style", "refactor", "perf", "build"];
|
||||
const headerForType = {
|
||||
feat: "Features",
|
||||
fix: "Fixes",
|
||||
style: "Styles",
|
||||
refactor: " Refactor",
|
||||
perf: "Performance",
|
||||
build: "Build",
|
||||
};
|
||||
|
||||
const getCommitHashForLastVersion = async () => {
|
||||
try {
|
||||
const commitMessage = `"release @excalidraw/excalidraw@${lastVersion}"`;
|
||||
const { stdout } = await exec(
|
||||
`git log --format=format:"%H" --grep=${commitMessage}`,
|
||||
);
|
||||
return stdout;
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
};
|
||||
|
||||
const getLibraryCommitsSinceLastRelease = async () => {
|
||||
const commitHash = await getCommitHashForLastVersion();
|
||||
const { stdout } = await exec(
|
||||
`git log --pretty=format:%s ${commitHash}...master`,
|
||||
);
|
||||
const commitsSinceLastRelease = stdout.split("\n");
|
||||
const commitList = {};
|
||||
supportedTypes.forEach((type) => {
|
||||
commitList[type] = [];
|
||||
});
|
||||
|
||||
commitsSinceLastRelease.forEach((commit) => {
|
||||
const indexOfColon = commit.indexOf(":");
|
||||
const type = commit.slice(0, indexOfColon);
|
||||
if (!supportedTypes.includes(type)) {
|
||||
return;
|
||||
}
|
||||
const messageWithoutType = commit.slice(indexOfColon + 1).trim();
|
||||
const messageWithCapitalizeFirst =
|
||||
messageWithoutType.charAt(0).toUpperCase() + messageWithoutType.slice(1);
|
||||
const prNumber = commit.match(/\(#([0-9]*)\)/)[1];
|
||||
|
||||
// return if the changelog already contains the pr number which would happen for package updates
|
||||
if (existingChangeLog.includes(prNumber)) {
|
||||
return;
|
||||
}
|
||||
const prMarkdown = `[#${prNumber}](https://github.com/excalidraw/excalidraw/pull/${prNumber})`;
|
||||
const messageWithPRLink = messageWithCapitalizeFirst.replace(
|
||||
/\(#[0-9]*\)/,
|
||||
prMarkdown,
|
||||
);
|
||||
commitList[type].push(messageWithPRLink);
|
||||
});
|
||||
return commitList;
|
||||
};
|
||||
|
||||
const updateChangelog = async (nextVersion) => {
|
||||
const commitList = await getLibraryCommitsSinceLastRelease();
|
||||
let changelogForLibrary =
|
||||
"## Excalidraw Library\n\n**_This section lists the updates made to the excalidraw library and will not affect the integration._**\n\n";
|
||||
supportedTypes.forEach((type) => {
|
||||
if (commitList[type].length) {
|
||||
changelogForLibrary += `### ${headerForType[type]}\n\n`;
|
||||
const commits = commitList[type];
|
||||
commits.forEach((commit) => {
|
||||
changelogForLibrary += `- ${commit}\n\n`;
|
||||
});
|
||||
}
|
||||
});
|
||||
changelogForLibrary += "---\n";
|
||||
const lastVersionIndex = existingChangeLog.indexOf(`## ${lastVersion}`);
|
||||
let updatedContent =
|
||||
existingChangeLog.slice(0, lastVersionIndex) +
|
||||
changelogForLibrary +
|
||||
existingChangeLog.slice(lastVersionIndex);
|
||||
const currentDate = new Date().toISOString().slice(0, 10);
|
||||
const newVersion = `## ${nextVersion} (${currentDate})`;
|
||||
updatedContent = updatedContent.replace(`## Unreleased`, newVersion);
|
||||
fs.writeFileSync(`${excalidrawDir}/CHANGELOG.md`, updatedContent, "utf8");
|
||||
};
|
||||
|
||||
module.exports = updateChangelog;
|
27
scripts/updateReadme.js
Normal file
27
scripts/updateReadme.js
Normal file
@@ -0,0 +1,27 @@
|
||||
const fs = require("fs");
|
||||
|
||||
const updateReadme = () => {
|
||||
const excalidrawDir = `${__dirname}/../src/packages/excalidraw`;
|
||||
let data = fs.readFileSync(`${excalidrawDir}/README_NEXT.md`, "utf8");
|
||||
|
||||
// remove note for unstable release
|
||||
data = data.replace(
|
||||
/<!-- unstable-readme-start-->[\s\S]*?<!-- unstable-readme-end-->/,
|
||||
"",
|
||||
);
|
||||
|
||||
// replace "excalidraw-next" with "excalidraw"
|
||||
data = data.replace(/excalidraw-next/g, "excalidraw");
|
||||
data = data.trim();
|
||||
|
||||
const demoIndex = data.indexOf("### Demo");
|
||||
const excalidrawNextNote =
|
||||
"#### Note\n\n**If you don't want to wait for the next stable release and try out the unreleased changes you can use [@excalidraw/excalidraw-next](https://www.npmjs.com/package/@excalidraw/excalidraw-next).**\n\n";
|
||||
// Add excalidraw next note to try out for unreleased changes
|
||||
data = data.slice(0, demoIndex) + excalidrawNextNote + data.slice(demoIndex);
|
||||
|
||||
// update readme
|
||||
fs.writeFileSync(`${excalidrawDir}/README.md`, data, "utf8");
|
||||
};
|
||||
|
||||
module.exports = updateReadme;
|
@@ -1,7 +1,7 @@
|
||||
import React from "react";
|
||||
import { getDefaultAppState } from "../appState";
|
||||
import { ColorPicker } from "../components/ColorPicker";
|
||||
import { resetZoom, trash, zoomIn, zoomOut } from "../components/icons";
|
||||
import { trash, zoomIn, zoomOut } from "../components/icons";
|
||||
import { ToolButton } from "../components/ToolButton";
|
||||
import { DarkModeToggle } from "../components/DarkModeToggle";
|
||||
import { ZOOM_STEP } from "../constants";
|
||||
@@ -17,6 +17,7 @@ import { getNewZoom } from "../scene/zoom";
|
||||
import { AppState, NormalizedZoomValue } from "../types";
|
||||
import { getShortcutKey } from "../utils";
|
||||
import { register } from "./register";
|
||||
import { Tooltip } from "../components/Tooltip";
|
||||
|
||||
export const actionChangeViewBackgroundColor = register({
|
||||
name: "changeViewBackgroundColor",
|
||||
@@ -108,6 +109,7 @@ export const actionZoomIn = register({
|
||||
onClick={() => {
|
||||
updateData(null);
|
||||
}}
|
||||
size="small"
|
||||
/>
|
||||
),
|
||||
keyTest: (event) =>
|
||||
@@ -142,6 +144,7 @@ export const actionZoomOut = register({
|
||||
onClick={() => {
|
||||
updateData(null);
|
||||
}}
|
||||
size="small"
|
||||
/>
|
||||
),
|
||||
keyTest: (event) =>
|
||||
@@ -168,16 +171,21 @@ export const actionResetZoom = register({
|
||||
commitToHistory: false,
|
||||
};
|
||||
},
|
||||
PanelComponent: ({ updateData }) => (
|
||||
<ToolButton
|
||||
type="button"
|
||||
icon={resetZoom}
|
||||
title={t("buttons.resetZoom")}
|
||||
aria-label={t("buttons.resetZoom")}
|
||||
onClick={() => {
|
||||
updateData(null);
|
||||
}}
|
||||
/>
|
||||
PanelComponent: ({ updateData, appState }) => (
|
||||
<Tooltip label={t("buttons.resetZoom")}>
|
||||
<ToolButton
|
||||
type="button"
|
||||
className="reset-zoom-button"
|
||||
title={t("buttons.resetZoom")}
|
||||
aria-label={t("buttons.resetZoom")}
|
||||
onClick={() => {
|
||||
updateData(null);
|
||||
}}
|
||||
size="small"
|
||||
>
|
||||
{(appState.zoom.value * 100).toFixed(0)}%
|
||||
</ToolButton>
|
||||
</Tooltip>
|
||||
),
|
||||
keyTest: (event) =>
|
||||
(event.code === CODES.ZERO || event.code === CODES.NUM_ZERO) &&
|
||||
|
@@ -7,18 +7,19 @@ import "../components/ToolIcon.scss";
|
||||
import { Tooltip } from "../components/Tooltip";
|
||||
import { DarkModeToggle, Appearence } from "../components/DarkModeToggle";
|
||||
import { loadFromJSON, saveAsJSON } from "../data";
|
||||
import { resaveAsImageWithScene } from "../data/resave";
|
||||
import { t } from "../i18n";
|
||||
import { useIsMobile } from "../components/App";
|
||||
import { KEYS } from "../keys";
|
||||
import { register } from "./register";
|
||||
import { supported as fsSupported } from "browser-fs-access";
|
||||
import { CheckboxItem } from "../components/CheckboxItem";
|
||||
import { getExportSize } from "../scene/export";
|
||||
import { DEFAULT_EXPORT_PADDING, EXPORT_SCALES, IDB_KEYS } from "../constants";
|
||||
import { DEFAULT_EXPORT_PADDING, EXPORT_SCALES } from "../constants";
|
||||
import { getSelectedElements, isSomeElementSelected } from "../scene";
|
||||
import { getNonDeletedElements } from "../element";
|
||||
import { ActiveFile } from "../components/ActiveFile";
|
||||
import * as idb from "idb-keyval";
|
||||
import { isImageFileHandle } from "../data/blob";
|
||||
import { nativeFileSystemSupported } from "../data/filesystem";
|
||||
|
||||
export const actionChangeProjectName = register({
|
||||
name: "changeProjectName",
|
||||
@@ -69,7 +70,7 @@ export const actionChangeExportScale = register({
|
||||
return (
|
||||
<ToolButton
|
||||
key={s}
|
||||
size="s"
|
||||
size="small"
|
||||
type="radio"
|
||||
icon={`${s}x`}
|
||||
name="export-canvas-scale"
|
||||
@@ -119,7 +120,7 @@ export const actionChangeExportEmbedScene = register({
|
||||
>
|
||||
{t("labels.exportEmbedScene")}
|
||||
<Tooltip label={t("labels.exportEmbedScene_details")} long={true}>
|
||||
<div className="Tooltip-icon">{questionCircle}</div>
|
||||
<div className="excalidraw-tooltip-icon">{questionCircle}</div>
|
||||
</Tooltip>
|
||||
</CheckboxItem>
|
||||
),
|
||||
@@ -129,15 +130,19 @@ export const actionSaveToActiveFile = register({
|
||||
name: "saveToActiveFile",
|
||||
perform: async (elements, appState, value) => {
|
||||
const fileHandleExists = !!appState.fileHandle;
|
||||
|
||||
try {
|
||||
const { fileHandle } = await saveAsJSON(elements, appState);
|
||||
const { fileHandle } = isImageFileHandle(appState.fileHandle)
|
||||
? await resaveAsImageWithScene(elements, appState)
|
||||
: await saveAsJSON(elements, appState);
|
||||
|
||||
return {
|
||||
commitToHistory: false,
|
||||
appState: {
|
||||
...appState,
|
||||
fileHandle,
|
||||
toastMessage: fileHandleExists
|
||||
? fileHandle.name
|
||||
? fileHandle?.name
|
||||
? t("toast.fileSavedToFilename").replace(
|
||||
"{filename}",
|
||||
`"${fileHandle.name}"`,
|
||||
@@ -150,22 +155,7 @@ export const actionSaveToActiveFile = register({
|
||||
if (error?.name !== "AbortError") {
|
||||
console.error(error);
|
||||
}
|
||||
|
||||
if (fileHandleExists && error.name === "AbortError") {
|
||||
try {
|
||||
await idb.del(IDB_KEYS.fileHandle);
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
}
|
||||
return {
|
||||
commitToHistory: false,
|
||||
appState: { ...appState, fileHandle: null },
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
commitToHistory: false,
|
||||
};
|
||||
return { commitToHistory: false };
|
||||
}
|
||||
},
|
||||
keyTest: (event) =>
|
||||
@@ -186,13 +176,6 @@ export const actionSaveFileToDisk = register({
|
||||
...appState,
|
||||
fileHandle: null,
|
||||
});
|
||||
try {
|
||||
if (fileHandle) {
|
||||
await idb.set(IDB_KEYS.fileHandle, fileHandle);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
}
|
||||
return { commitToHistory: false, appState: { ...appState, fileHandle } };
|
||||
} catch (error) {
|
||||
if (error?.name !== "AbortError") {
|
||||
@@ -210,7 +193,7 @@ export const actionSaveFileToDisk = register({
|
||||
title={t("buttons.saveAs")}
|
||||
aria-label={t("buttons.saveAs")}
|
||||
showAriaLabel={useIsMobile()}
|
||||
hidden={!fsSupported}
|
||||
hidden={!nativeFileSystemSupported}
|
||||
onClick={() => updateData(null)}
|
||||
data-testid="save-as-button"
|
||||
/>
|
||||
@@ -224,7 +207,7 @@ export const actionLoadScene = register({
|
||||
const {
|
||||
elements: loadedElements,
|
||||
appState: loadedAppState,
|
||||
} = await loadFromJSON(appState);
|
||||
} = await loadFromJSON(appState, elements);
|
||||
return {
|
||||
elements: loadedElements,
|
||||
appState: loadedAppState,
|
||||
|
@@ -69,12 +69,13 @@ export const createUndoAction: ActionCreator = (history) => ({
|
||||
event[KEYS.CTRL_OR_CMD] &&
|
||||
event.key.toLowerCase() === KEYS.Z &&
|
||||
!event.shiftKey,
|
||||
PanelComponent: ({ updateData }) => (
|
||||
PanelComponent: ({ updateData, data }) => (
|
||||
<ToolButton
|
||||
type="button"
|
||||
icon={undo}
|
||||
aria-label={t("buttons.undo")}
|
||||
onClick={updateData}
|
||||
size={data?.size || "medium"}
|
||||
/>
|
||||
),
|
||||
commitToHistory: () => false,
|
||||
@@ -89,12 +90,13 @@ export const createRedoAction: ActionCreator = (history) => ({
|
||||
event.shiftKey &&
|
||||
event.key.toLowerCase() === KEYS.Z) ||
|
||||
(isWindows && event.ctrlKey && !event.shiftKey && event.key === KEYS.Y),
|
||||
PanelComponent: ({ updateData }) => (
|
||||
PanelComponent: ({ updateData, data }) => (
|
||||
<ToolButton
|
||||
type="button"
|
||||
icon={redo}
|
||||
aria-label={t("buttons.redo")}
|
||||
onClick={updateData}
|
||||
size={data?.size || "medium"}
|
||||
/>
|
||||
),
|
||||
commitToHistory: () => false,
|
||||
|
@@ -30,8 +30,8 @@ export const actionGoToCollaborator = register({
|
||||
commitToHistory: false,
|
||||
};
|
||||
},
|
||||
PanelComponent: ({ appState, updateData, id }) => {
|
||||
const clientId = id;
|
||||
PanelComponent: ({ appState, updateData, data }) => {
|
||||
const clientId: string | undefined = data?.id;
|
||||
if (!clientId) {
|
||||
return null;
|
||||
}
|
||||
|
@@ -10,7 +10,6 @@ export const actionToggleViewMode = register({
|
||||
appState: {
|
||||
...appState,
|
||||
viewModeEnabled: !this.checked!(appState),
|
||||
selectedElementIds: {},
|
||||
},
|
||||
commitToHistory: false,
|
||||
};
|
||||
|
@@ -5,6 +5,7 @@ import {
|
||||
UpdaterFn,
|
||||
ActionName,
|
||||
ActionResult,
|
||||
PanelComponentProps,
|
||||
} from "./types";
|
||||
import { ExcalidrawElement } from "../element/types";
|
||||
import { AppProps, AppState } from "../types";
|
||||
@@ -107,11 +108,10 @@ export class ActionManager implements ActionsManagerInterface {
|
||||
);
|
||||
}
|
||||
|
||||
// Id is an attribute that we can use to pass in data like keys.
|
||||
// This is needed for dynamically generated action components
|
||||
// like the user list. We can use this key to extract more
|
||||
// data from app state. This is an alternative to generic prop hell!
|
||||
renderAction = (name: ActionName, id?: string) => {
|
||||
/**
|
||||
* @param data additional data sent to the PanelComponent
|
||||
*/
|
||||
renderAction = (name: ActionName, data?: PanelComponentProps["data"]) => {
|
||||
const canvasActions = this.app.props.UIOptions.canvasActions;
|
||||
|
||||
if (
|
||||
@@ -139,8 +139,8 @@ export class ActionManager implements ActionsManagerInterface {
|
||||
elements={this.getElementsIncludingDeleted()}
|
||||
appState={this.getAppState()}
|
||||
updateData={updateData}
|
||||
id={id}
|
||||
appProps={this.app.props}
|
||||
data={data}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
@@ -2,6 +2,7 @@ import React from "react";
|
||||
import { ExcalidrawElement } from "../element/types";
|
||||
import { AppState, ExcalidrawProps } from "../types";
|
||||
import Library from "../data/library";
|
||||
import { ToolButtonSize } from "../components/ToolButton";
|
||||
|
||||
/** if false, the action should be prevented */
|
||||
export type ActionResult =
|
||||
@@ -102,15 +103,17 @@ export type ActionName =
|
||||
| "exportWithDarkMode"
|
||||
| "toggleTheme";
|
||||
|
||||
export type PanelComponentProps = {
|
||||
elements: readonly ExcalidrawElement[];
|
||||
appState: AppState;
|
||||
updateData: (formData?: any) => void;
|
||||
appProps: ExcalidrawProps;
|
||||
data?: Partial<{ id: string; size: ToolButtonSize }>;
|
||||
};
|
||||
|
||||
export interface Action {
|
||||
name: ActionName;
|
||||
PanelComponent?: React.FC<{
|
||||
elements: readonly ExcalidrawElement[];
|
||||
appState: AppState;
|
||||
updateData: (formData?: any) => void;
|
||||
appProps: ExcalidrawProps;
|
||||
id?: string;
|
||||
}>;
|
||||
PanelComponent?: React.FC<PanelComponentProps>;
|
||||
perform: ActionFn;
|
||||
keyPriority?: number;
|
||||
keyTest?: (
|
||||
|
@@ -204,12 +204,9 @@ export const ZoomActions = ({
|
||||
}) => (
|
||||
<Stack.Col gap={1}>
|
||||
<Stack.Row gap={1} align="center">
|
||||
{renderAction("zoomIn")}
|
||||
{renderAction("zoomOut")}
|
||||
{renderAction("zoomIn")}
|
||||
{renderAction("resetZoom")}
|
||||
<div style={{ marginInlineStart: 4 }}>
|
||||
{(zoom.value * 100).toFixed(0)}%
|
||||
</div>
|
||||
</Stack.Row>
|
||||
</Stack.Col>
|
||||
);
|
||||
|
@@ -2,7 +2,6 @@ import React, { useContext } from "react";
|
||||
import { RoughCanvas } from "roughjs/bin/canvas";
|
||||
import rough from "roughjs/bin/rough";
|
||||
import clsx from "clsx";
|
||||
import { supported as fsSupported } from "browser-fs-access";
|
||||
import { nanoid } from "nanoid";
|
||||
|
||||
import {
|
||||
@@ -52,7 +51,6 @@ import {
|
||||
ENV,
|
||||
EVENT,
|
||||
GRID_SIZE,
|
||||
IDB_KEYS,
|
||||
LINE_CONFIRM_THRESHOLD,
|
||||
MIME_TYPES,
|
||||
MQ_MAX_HEIGHT_LANDSCAPE,
|
||||
@@ -157,6 +155,7 @@ import {
|
||||
getElementsWithinSelection,
|
||||
getNormalizedZoom,
|
||||
getSelectedElements,
|
||||
hasBackground,
|
||||
isOverScrollBars,
|
||||
isSomeElementSelected,
|
||||
} from "../scene";
|
||||
@@ -195,7 +194,7 @@ import LayerUI from "./LayerUI";
|
||||
import { Stats } from "./Stats";
|
||||
import { Toast } from "./Toast";
|
||||
import { actionToggleViewMode } from "../actions/actionToggleViewMode";
|
||||
import * as idb from "idb-keyval";
|
||||
import { nativeFileSystemSupported } from "../data/filesystem";
|
||||
|
||||
const IsMobileContext = React.createContext(false);
|
||||
export const useIsMobile = () => useContext(IsMobileContext);
|
||||
@@ -344,7 +343,7 @@ class App extends React.Component<AppProps, AppState> {
|
||||
style={{
|
||||
width: canvasDOMWidth,
|
||||
height: canvasDOMHeight,
|
||||
cursor: "grabbing",
|
||||
cursor: CURSOR_TYPE.GRAB,
|
||||
}}
|
||||
width={canvasWidth}
|
||||
height={canvasHeight}
|
||||
@@ -656,7 +655,11 @@ class App extends React.Component<AppProps, AppState> {
|
||||
const fileHandle = launchParams.files[0];
|
||||
const blob: Blob = await fileHandle.getFile();
|
||||
blob.handle = fileHandle;
|
||||
loadFromBlob(blob, this.state)
|
||||
loadFromBlob(
|
||||
blob,
|
||||
this.state,
|
||||
this.scene.getElementsIncludingDeleted(),
|
||||
)
|
||||
.then(({ elements, appState }) =>
|
||||
this.syncActionResult({
|
||||
elements,
|
||||
@@ -683,7 +686,7 @@ class App extends React.Component<AppProps, AppState> {
|
||||
if (initialData?.libraryItems) {
|
||||
this.libraryItemsFromStorage = initialData.libraryItems;
|
||||
}
|
||||
} catch (error) {
|
||||
} catch (error: any) {
|
||||
console.error(error);
|
||||
initialData = {
|
||||
appState: {
|
||||
@@ -694,7 +697,7 @@ class App extends React.Component<AppProps, AppState> {
|
||||
};
|
||||
}
|
||||
|
||||
const scene = restore(initialData, null);
|
||||
const scene = restore(initialData, null, null);
|
||||
scene.appState = {
|
||||
...scene.appState,
|
||||
isLoading: false,
|
||||
@@ -809,15 +812,6 @@ class App extends React.Component<AppProps, AppState> {
|
||||
} else {
|
||||
this.updateDOMRect(this.initializeScene);
|
||||
}
|
||||
|
||||
try {
|
||||
const fileHandle = await idb.get(IDB_KEYS.fileHandle);
|
||||
if (fileHandle) {
|
||||
this.setState({ fileHandle });
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
}
|
||||
}
|
||||
|
||||
public componentWillUnmount() {
|
||||
@@ -837,6 +831,7 @@ class App extends React.Component<AppProps, AppState> {
|
||||
});
|
||||
|
||||
private removeEventListeners() {
|
||||
document.removeEventListener(EVENT.POINTER_UP, this.removePointer);
|
||||
document.removeEventListener(EVENT.COPY, this.onCopy);
|
||||
document.removeEventListener(EVENT.PASTE, this.pasteFromClipboard);
|
||||
document.removeEventListener(EVENT.CUT, this.onCut);
|
||||
@@ -878,6 +873,7 @@ class App extends React.Component<AppProps, AppState> {
|
||||
|
||||
private addEventListeners() {
|
||||
this.removeEventListeners();
|
||||
document.addEventListener(EVENT.POINTER_UP, this.removePointer); // #3553
|
||||
document.addEventListener(EVENT.COPY, this.onCopy);
|
||||
if (this.props.handleKeyboardGlobally) {
|
||||
document.addEventListener(EVENT.KEYDOWN, this.onKeyDown, false);
|
||||
@@ -933,14 +929,12 @@ class App extends React.Component<AppProps, AppState> {
|
||||
}
|
||||
|
||||
if (prevProps.viewModeEnabled !== this.props.viewModeEnabled) {
|
||||
this.setState(
|
||||
{ viewModeEnabled: !!this.props.viewModeEnabled },
|
||||
this.addEventListeners,
|
||||
);
|
||||
this.setState({ viewModeEnabled: !!this.props.viewModeEnabled });
|
||||
}
|
||||
|
||||
if (prevState.viewModeEnabled !== this.state.viewModeEnabled) {
|
||||
this.addEventListeners();
|
||||
this.deselectElements();
|
||||
}
|
||||
|
||||
if (prevProps.zenModeEnabled !== this.props.zenModeEnabled) {
|
||||
@@ -1199,8 +1193,12 @@ class App extends React.Component<AppProps, AppState> {
|
||||
}
|
||||
const data = await parseClipboard(event);
|
||||
if (this.props.onPaste) {
|
||||
if (await this.props.onPaste(data, event)) {
|
||||
return;
|
||||
try {
|
||||
if ((await this.props.onPaste(data, event)) === false) {
|
||||
return;
|
||||
}
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
}
|
||||
if (data.errorMessage) {
|
||||
@@ -1214,7 +1212,7 @@ class App extends React.Component<AppProps, AppState> {
|
||||
});
|
||||
} else if (data.elements) {
|
||||
this.addElementsFromPasteOrLibrary({
|
||||
elements: restoreElements(data.elements),
|
||||
elements: data.elements,
|
||||
position: "cursor",
|
||||
});
|
||||
} else if (data.text) {
|
||||
@@ -1229,7 +1227,7 @@ class App extends React.Component<AppProps, AppState> {
|
||||
elements: readonly ExcalidrawElement[];
|
||||
position: { clientX: number; clientY: number } | "cursor" | "center";
|
||||
}) => {
|
||||
const elements = restoreElements(opts.elements);
|
||||
const elements = restoreElements(opts.elements, null);
|
||||
const [minX, minY, maxX, maxY] = getCommonBounds(elements);
|
||||
|
||||
const elementsCenterX = distance(minX, maxX) / 2;
|
||||
@@ -1295,6 +1293,7 @@ class App extends React.Component<AppProps, AppState> {
|
||||
this.scene.getElements(),
|
||||
),
|
||||
);
|
||||
this.selectShapeTool("selection");
|
||||
};
|
||||
|
||||
private addTextFromPaste(text: any) {
|
||||
@@ -1335,7 +1334,7 @@ class App extends React.Component<AppProps, AppState> {
|
||||
this.setState(obj);
|
||||
};
|
||||
|
||||
removePointer = (event: React.PointerEvent<HTMLElement>) => {
|
||||
removePointer = (event: React.PointerEvent<HTMLElement> | PointerEvent) => {
|
||||
// remove touch handler for context menu on touch devices
|
||||
if (event.pointerType === "touch" && touchTimeout) {
|
||||
clearTimeout(touchTimeout);
|
||||
@@ -1401,7 +1400,7 @@ class App extends React.Component<AppProps, AppState> {
|
||||
await webShareTargetCache.delete("shared-file");
|
||||
window.history.replaceState(null, APP_NAME, window.location.pathname);
|
||||
}
|
||||
} catch (error) {
|
||||
} catch (error: any) {
|
||||
this.setState({ errorMessage: error.message });
|
||||
}
|
||||
};
|
||||
@@ -1598,13 +1597,22 @@ class App extends React.Component<AppProps, AppState> {
|
||||
this.scene.getElements(),
|
||||
this.state,
|
||||
);
|
||||
if (selectedElements.length) {
|
||||
if (event.key === KEYS.G) {
|
||||
this.setState({ openPopup: "backgroundColorPicker" });
|
||||
}
|
||||
if (event.key === KEYS.S) {
|
||||
this.setState({ openPopup: "strokeColorPicker" });
|
||||
}
|
||||
if (
|
||||
this.state.elementType === "selection" &&
|
||||
!selectedElements.length
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (
|
||||
event.key === KEYS.G &&
|
||||
(hasBackground(this.state.elementType) ||
|
||||
selectedElements.some((element) => hasBackground(element.type)))
|
||||
) {
|
||||
this.setState({ openPopup: "backgroundColorPicker" });
|
||||
}
|
||||
if (event.key === KEYS.S) {
|
||||
this.setState({ openPopup: "strokeColorPicker" });
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -1612,7 +1620,9 @@ class App extends React.Component<AppProps, AppState> {
|
||||
|
||||
private onKeyUp = withBatchedUpdates((event: KeyboardEvent) => {
|
||||
if (event.key === KEYS.SPACE) {
|
||||
if (this.state.elementType === "selection") {
|
||||
if (this.state.viewModeEnabled) {
|
||||
setCursor(this.canvas, CURSOR_TYPE.GRAB);
|
||||
} else if (this.state.elementType === "selection") {
|
||||
resetCursor(this.canvas);
|
||||
} else {
|
||||
setCursorForShape(this.canvas, this.state.elementType);
|
||||
@@ -1760,7 +1770,8 @@ class App extends React.Component<AppProps, AppState> {
|
||||
[element.id]: true,
|
||||
},
|
||||
}));
|
||||
} else {
|
||||
}
|
||||
if (isDeleted) {
|
||||
fixBindingsAfterDeletion(this.scene.getElements(), [element]);
|
||||
}
|
||||
if (!isDeleted || isExistingElement) {
|
||||
@@ -1781,15 +1792,19 @@ class App extends React.Component<AppProps, AppState> {
|
||||
excalidrawContainer: this.excalidrawContainerRef.current,
|
||||
});
|
||||
// deselect all other elements when inserting text
|
||||
this.deselectElements();
|
||||
|
||||
// do an initial update to re-initialize element position since we were
|
||||
// modifying element's x/y for sake of editor (case: syncing to remote)
|
||||
updateElement(element.text);
|
||||
}
|
||||
|
||||
private deselectElements() {
|
||||
this.setState({
|
||||
selectedElementIds: {},
|
||||
selectedGroupIds: {},
|
||||
editingGroupId: null,
|
||||
});
|
||||
|
||||
// do an initial update to re-initialize element position since we were
|
||||
// modifying element's x/y for sake of editor (case: syncing to remote)
|
||||
updateElement(element.text);
|
||||
}
|
||||
|
||||
private getTextElementAtPosition(
|
||||
@@ -2232,6 +2247,8 @@ class App extends React.Component<AppProps, AppState> {
|
||||
this.canvas,
|
||||
isTextElement(hitElement) ? CURSOR_TYPE.TEXT : CURSOR_TYPE.CROSSHAIR,
|
||||
);
|
||||
} else if (this.state.viewModeEnabled) {
|
||||
setCursor(this.canvas, CURSOR_TYPE.GRAB);
|
||||
} else if (isOverScrollBar) {
|
||||
setCursor(this.canvas, CURSOR_TYPE.AUTO);
|
||||
} else if (
|
||||
@@ -2469,7 +2486,11 @@ class App extends React.Component<AppProps, AppState> {
|
||||
lastPointerUp = null;
|
||||
isPanning = false;
|
||||
if (!isHoldingSpace) {
|
||||
setCursorForShape(this.canvas, this.state.elementType);
|
||||
if (this.state.viewModeEnabled) {
|
||||
setCursor(this.canvas, CURSOR_TYPE.GRAB);
|
||||
} else {
|
||||
setCursorForShape(this.canvas, this.state.elementType);
|
||||
}
|
||||
}
|
||||
this.setState({
|
||||
cursorButton: "up",
|
||||
@@ -3473,6 +3494,7 @@ class App extends React.Component<AppProps, AppState> {
|
||||
mutateElement(draggingElement, {
|
||||
points: [...points, [dx, dy]],
|
||||
pressures,
|
||||
lastCommittedPoint: [dx, dy],
|
||||
});
|
||||
|
||||
this.actionManager.executeAction(actionFinalize);
|
||||
@@ -3812,7 +3834,22 @@ class App extends React.Component<AppProps, AppState> {
|
||||
try {
|
||||
const file = event.dataTransfer.files[0];
|
||||
if (file?.type === "image/png" || file?.type === "image/svg+xml") {
|
||||
const { elements, appState } = await loadFromBlob(file, this.state);
|
||||
if (nativeFileSystemSupported) {
|
||||
try {
|
||||
// This will only work as of Chrome 86,
|
||||
// but can be safely ignored on older releases.
|
||||
const item = event.dataTransfer.items[0];
|
||||
(file as any).handle = await (item as any).getAsFileSystemHandle();
|
||||
} catch (error: any) {
|
||||
console.warn(error.name, error.message);
|
||||
}
|
||||
}
|
||||
|
||||
const { elements, appState } = await loadFromBlob(
|
||||
file,
|
||||
this.state,
|
||||
this.scene.getElementsIncludingDeleted(),
|
||||
);
|
||||
this.syncActionResult({
|
||||
elements,
|
||||
appState: {
|
||||
@@ -3823,7 +3860,7 @@ class App extends React.Component<AppProps, AppState> {
|
||||
});
|
||||
return;
|
||||
}
|
||||
} catch (error) {
|
||||
} catch (error: any) {
|
||||
return this.setState({
|
||||
isLoading: false,
|
||||
errorMessage: error.message,
|
||||
@@ -3857,13 +3894,13 @@ class App extends React.Component<AppProps, AppState> {
|
||||
// default: assume an Excalidraw file regardless of extension/MimeType
|
||||
} else {
|
||||
this.setState({ isLoading: true });
|
||||
if (fsSupported) {
|
||||
if (nativeFileSystemSupported) {
|
||||
try {
|
||||
// This will only work as of Chrome 86,
|
||||
// but can be safely ignored on older releases.
|
||||
const item = event.dataTransfer.items[0];
|
||||
(file as any).handle = await (item as any).getAsFileSystemHandle();
|
||||
} catch (error) {
|
||||
} catch (error: any) {
|
||||
console.warn(error.name, error.message);
|
||||
}
|
||||
}
|
||||
@@ -3872,7 +3909,7 @@ class App extends React.Component<AppProps, AppState> {
|
||||
};
|
||||
|
||||
loadFileToCanvas = (file: Blob) => {
|
||||
loadFromBlob(file, this.state)
|
||||
loadFromBlob(file, this.state, this.scene.getElementsIncludingDeleted())
|
||||
.then(({ elements, appState }) =>
|
||||
this.syncActionResult({
|
||||
elements,
|
||||
@@ -4056,116 +4093,112 @@ class App extends React.Component<AppProps, AppState> {
|
||||
actionToggleStats,
|
||||
];
|
||||
|
||||
ContextMenu.push({
|
||||
options: viewModeOptions,
|
||||
top,
|
||||
left,
|
||||
actionManager: this.actionManager,
|
||||
appState: this.state,
|
||||
container: this.excalidrawContainerRef.current!,
|
||||
});
|
||||
|
||||
if (this.state.viewModeEnabled) {
|
||||
return;
|
||||
}
|
||||
|
||||
ContextMenu.push({
|
||||
options: [
|
||||
this.isMobile &&
|
||||
navigator.clipboard && {
|
||||
name: "paste",
|
||||
perform: (elements, appStates) => {
|
||||
this.pasteFromClipboard(null);
|
||||
return {
|
||||
commitToHistory: false,
|
||||
};
|
||||
ContextMenu.push({
|
||||
options: viewModeOptions,
|
||||
top,
|
||||
left,
|
||||
actionManager: this.actionManager,
|
||||
appState: this.state,
|
||||
container: this.excalidrawContainerRef.current!,
|
||||
});
|
||||
} else {
|
||||
ContextMenu.push({
|
||||
options: [
|
||||
this.isMobile &&
|
||||
navigator.clipboard && {
|
||||
name: "paste",
|
||||
perform: (elements, appStates) => {
|
||||
this.pasteFromClipboard(null);
|
||||
return {
|
||||
commitToHistory: false,
|
||||
};
|
||||
},
|
||||
contextItemLabel: "labels.paste",
|
||||
},
|
||||
contextItemLabel: "labels.paste",
|
||||
},
|
||||
this.isMobile && navigator.clipboard && separator,
|
||||
probablySupportsClipboardBlob &&
|
||||
elements.length > 0 &&
|
||||
actionCopyAsPng,
|
||||
probablySupportsClipboardWriteText &&
|
||||
elements.length > 0 &&
|
||||
actionCopyAsSvg,
|
||||
((probablySupportsClipboardBlob && elements.length > 0) ||
|
||||
(probablySupportsClipboardWriteText && elements.length > 0)) &&
|
||||
this.isMobile && navigator.clipboard && separator,
|
||||
probablySupportsClipboardBlob &&
|
||||
elements.length > 0 &&
|
||||
actionCopyAsPng,
|
||||
probablySupportsClipboardWriteText &&
|
||||
elements.length > 0 &&
|
||||
actionCopyAsSvg,
|
||||
((probablySupportsClipboardBlob && elements.length > 0) ||
|
||||
(probablySupportsClipboardWriteText && elements.length > 0)) &&
|
||||
separator,
|
||||
actionSelectAll,
|
||||
separator,
|
||||
actionSelectAll,
|
||||
separator,
|
||||
typeof this.props.gridModeEnabled === "undefined" &&
|
||||
actionToggleGridMode,
|
||||
typeof this.props.zenModeEnabled === "undefined" &&
|
||||
actionToggleZenMode,
|
||||
typeof this.props.viewModeEnabled === "undefined" &&
|
||||
actionToggleViewMode,
|
||||
actionToggleStats,
|
||||
],
|
||||
top,
|
||||
left,
|
||||
actionManager: this.actionManager,
|
||||
appState: this.state,
|
||||
container: this.excalidrawContainerRef.current!,
|
||||
});
|
||||
return;
|
||||
typeof this.props.gridModeEnabled === "undefined" &&
|
||||
actionToggleGridMode,
|
||||
typeof this.props.zenModeEnabled === "undefined" &&
|
||||
actionToggleZenMode,
|
||||
typeof this.props.viewModeEnabled === "undefined" &&
|
||||
actionToggleViewMode,
|
||||
actionToggleStats,
|
||||
],
|
||||
top,
|
||||
left,
|
||||
actionManager: this.actionManager,
|
||||
appState: this.state,
|
||||
container: this.excalidrawContainerRef.current!,
|
||||
});
|
||||
}
|
||||
} else if (type === "element") {
|
||||
if (this.state.viewModeEnabled) {
|
||||
ContextMenu.push({
|
||||
options: [navigator.clipboard && actionCopy, ...options],
|
||||
top,
|
||||
left,
|
||||
actionManager: this.actionManager,
|
||||
appState: this.state,
|
||||
container: this.excalidrawContainerRef.current!,
|
||||
});
|
||||
} else {
|
||||
ContextMenu.push({
|
||||
options: [
|
||||
this.isMobile && actionCut,
|
||||
this.isMobile && navigator.clipboard && actionCopy,
|
||||
this.isMobile &&
|
||||
navigator.clipboard && {
|
||||
name: "paste",
|
||||
perform: (elements, appStates) => {
|
||||
this.pasteFromClipboard(null);
|
||||
return {
|
||||
commitToHistory: false,
|
||||
};
|
||||
},
|
||||
contextItemLabel: "labels.paste",
|
||||
},
|
||||
this.isMobile && separator,
|
||||
...options,
|
||||
separator,
|
||||
actionCopyStyles,
|
||||
actionPasteStyles,
|
||||
separator,
|
||||
maybeGroupAction && actionGroup,
|
||||
maybeUngroupAction && actionUngroup,
|
||||
(maybeGroupAction || maybeUngroupAction) && separator,
|
||||
actionAddToLibrary,
|
||||
separator,
|
||||
actionSendBackward,
|
||||
actionBringForward,
|
||||
actionSendToBack,
|
||||
actionBringToFront,
|
||||
separator,
|
||||
maybeFlipHorizontal && actionFlipHorizontal,
|
||||
maybeFlipVertical && actionFlipVertical,
|
||||
(maybeFlipHorizontal || maybeFlipVertical) && separator,
|
||||
actionDuplicateSelection,
|
||||
actionDeleteSelected,
|
||||
],
|
||||
top,
|
||||
left,
|
||||
actionManager: this.actionManager,
|
||||
appState: this.state,
|
||||
container: this.excalidrawContainerRef.current!,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if (this.state.viewModeEnabled) {
|
||||
ContextMenu.push({
|
||||
options: [navigator.clipboard && actionCopy, ...options],
|
||||
top,
|
||||
left,
|
||||
actionManager: this.actionManager,
|
||||
appState: this.state,
|
||||
container: this.excalidrawContainerRef.current!,
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
ContextMenu.push({
|
||||
options: [
|
||||
this.isMobile && actionCut,
|
||||
this.isMobile && navigator.clipboard && actionCopy,
|
||||
this.isMobile &&
|
||||
navigator.clipboard && {
|
||||
name: "paste",
|
||||
perform: (elements, appStates) => {
|
||||
this.pasteFromClipboard(null);
|
||||
return {
|
||||
commitToHistory: false,
|
||||
};
|
||||
},
|
||||
contextItemLabel: "labels.paste",
|
||||
},
|
||||
this.isMobile && separator,
|
||||
...options,
|
||||
separator,
|
||||
actionCopyStyles,
|
||||
actionPasteStyles,
|
||||
separator,
|
||||
maybeGroupAction && actionGroup,
|
||||
maybeUngroupAction && actionUngroup,
|
||||
(maybeGroupAction || maybeUngroupAction) && separator,
|
||||
actionAddToLibrary,
|
||||
separator,
|
||||
actionSendBackward,
|
||||
actionBringForward,
|
||||
actionSendToBack,
|
||||
actionBringToFront,
|
||||
separator,
|
||||
maybeFlipHorizontal && actionFlipHorizontal,
|
||||
maybeFlipVertical && actionFlipVertical,
|
||||
(maybeFlipHorizontal || maybeFlipVertical) && separator,
|
||||
actionDuplicateSelection,
|
||||
actionDeleteSelected,
|
||||
],
|
||||
top,
|
||||
left,
|
||||
actionManager: this.actionManager,
|
||||
appState: this.state,
|
||||
container: this.excalidrawContainerRef.current!,
|
||||
});
|
||||
};
|
||||
|
||||
private handleWheel = withBatchedUpdates((event: WheelEvent) => {
|
||||
|
@@ -81,7 +81,7 @@
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.Tooltip-icon {
|
||||
.excalidraw-tooltip-icon {
|
||||
width: 1em;
|
||||
height: 1em;
|
||||
}
|
||||
|
@@ -1,3 +1,4 @@
|
||||
import React from "react";
|
||||
import clsx from "clsx";
|
||||
import { checkIcon } from "./icons";
|
||||
|
||||
|
@@ -1,5 +1,6 @@
|
||||
import React from "react";
|
||||
import { Popover } from "./Popover";
|
||||
import { isTransparent } from "../utils";
|
||||
|
||||
import "./ColorPicker.scss";
|
||||
import { isArrowKey, KEYS } from "../keys";
|
||||
@@ -14,7 +15,7 @@ const isValidColor = (color: string) => {
|
||||
};
|
||||
|
||||
const getColor = (color: string): string | null => {
|
||||
if (color === "transparent") {
|
||||
if (isTransparent(color)) {
|
||||
return color;
|
||||
}
|
||||
|
||||
@@ -137,36 +138,41 @@ const Picker = ({
|
||||
}}
|
||||
tabIndex={0}
|
||||
>
|
||||
{colors.map((_color, i) => (
|
||||
<button
|
||||
className="color-picker-swatch"
|
||||
onClick={(event) => {
|
||||
(event.currentTarget as HTMLButtonElement).focus();
|
||||
onChange(_color);
|
||||
}}
|
||||
title={`${_color} — ${keyBindings[i].toUpperCase()}`}
|
||||
aria-label={_color}
|
||||
aria-keyshortcuts={keyBindings[i]}
|
||||
style={{ color: _color }}
|
||||
key={_color}
|
||||
ref={(el) => {
|
||||
if (el && i === 0) {
|
||||
firstItem.current = el;
|
||||
}
|
||||
if (el && _color === color) {
|
||||
activeItem.current = el;
|
||||
}
|
||||
}}
|
||||
onFocus={() => {
|
||||
onChange(_color);
|
||||
}}
|
||||
>
|
||||
{_color === "transparent" ? (
|
||||
<div className="color-picker-transparent"></div>
|
||||
) : undefined}
|
||||
<span className="color-picker-keybinding">{keyBindings[i]}</span>
|
||||
</button>
|
||||
))}
|
||||
{colors.map((_color, i) => {
|
||||
const _colorWithoutHash = _color.replace("#", "");
|
||||
return (
|
||||
<button
|
||||
className="color-picker-swatch"
|
||||
onClick={(event) => {
|
||||
(event.currentTarget as HTMLButtonElement).focus();
|
||||
onChange(_color);
|
||||
}}
|
||||
title={`${t(`colors.${_colorWithoutHash}`)}${
|
||||
!isTransparent(_color) ? ` (${_color})` : ""
|
||||
} — ${keyBindings[i].toUpperCase()}`}
|
||||
aria-label={t(`colors.${_colorWithoutHash}`)}
|
||||
aria-keyshortcuts={keyBindings[i]}
|
||||
style={{ color: _color }}
|
||||
key={_color}
|
||||
ref={(el) => {
|
||||
if (el && i === 0) {
|
||||
firstItem.current = el;
|
||||
}
|
||||
if (el && _color === color) {
|
||||
activeItem.current = el;
|
||||
}
|
||||
}}
|
||||
onFocus={() => {
|
||||
onChange(_color);
|
||||
}}
|
||||
>
|
||||
{isTransparent(_color) ? (
|
||||
<div className="color-picker-transparent"></div>
|
||||
) : undefined}
|
||||
<span className="color-picker-keybinding">{keyBindings[i]}</span>
|
||||
</button>
|
||||
);
|
||||
})}
|
||||
{showInput && (
|
||||
<ColorInput
|
||||
color={color}
|
||||
|
@@ -15,10 +15,10 @@ import { clipboard, exportImage } from "./icons";
|
||||
import Stack from "./Stack";
|
||||
import { ToolButton } from "./ToolButton";
|
||||
import "./ExportDialog.scss";
|
||||
import { supported as fsSupported } from "browser-fs-access";
|
||||
import OpenColor from "open-color";
|
||||
import { CheckboxItem } from "./CheckboxItem";
|
||||
import { DEFAULT_EXPORT_PADDING } from "../constants";
|
||||
import { nativeFileSystemSupported } from "../data/filesystem";
|
||||
|
||||
const supportsContextFilters =
|
||||
"filter" in document.createElement("canvas").getContext("2d")!;
|
||||
@@ -182,7 +182,8 @@ const ImageExportModal = ({
|
||||
margin: ".6em 0",
|
||||
}}
|
||||
>
|
||||
{!fsSupported && actionManager.renderAction("changeProjectName")}
|
||||
{!nativeFileSystemSupported &&
|
||||
actionManager.renderAction("changeProjectName")}
|
||||
</div>
|
||||
<Stack.Row gap={2} justifyContent="center" style={{ margin: "2em 0" }}>
|
||||
<ExportButton
|
||||
|
@@ -11,7 +11,7 @@ import { actionSaveFileToDisk } from "../actions/actionExport";
|
||||
import { Card } from "./Card";
|
||||
|
||||
import "./ExportDialog.scss";
|
||||
import { supported as fsSupported } from "browser-fs-access";
|
||||
import { nativeFileSystemSupported } from "../data/filesystem";
|
||||
|
||||
export type ExportCB = (
|
||||
elements: readonly NonDeletedExcalidrawElement[],
|
||||
@@ -42,7 +42,8 @@ const JSONExportModal = ({
|
||||
<h2>{t("exportDialog.disk_title")}</h2>
|
||||
<div className="Card-details">
|
||||
{t("exportDialog.disk_details")}
|
||||
{!fsSupported && actionManager.renderAction("changeProjectName")}
|
||||
{!nativeFileSystemSupported &&
|
||||
actionManager.renderAction("changeProjectName")}
|
||||
</div>
|
||||
<ToolButton
|
||||
className="Card-button"
|
||||
|
@@ -73,10 +73,10 @@
|
||||
}
|
||||
|
||||
:root[dir="ltr"] &.layer-ui__wrapper__footer-left--transition-left {
|
||||
transform: translate(-92px, 0);
|
||||
transform: translate(-76px, 0);
|
||||
}
|
||||
:root[dir="rtl"] &.layer-ui__wrapper__footer-left--transition-left {
|
||||
transform: translate(92px, 0);
|
||||
transform: translate(76px, 0);
|
||||
}
|
||||
|
||||
&.layer-ui__wrapper__footer-left--transition-bottom {
|
||||
@@ -116,8 +116,19 @@
|
||||
}
|
||||
}
|
||||
.layer-ui__wrapper__footer-left,
|
||||
.layer-ui__wrapper__footer-right {
|
||||
.layer-ui__wrapper__footer-right,
|
||||
.disable-zen-mode--visible {
|
||||
pointer-events: all;
|
||||
}
|
||||
|
||||
.layer-ui__wrapper__footer-left {
|
||||
margin-bottom: 0.2em;
|
||||
}
|
||||
|
||||
.layer-ui__wrapper__footer-right {
|
||||
margin-top: auto;
|
||||
margin-bottom: auto;
|
||||
margin-inline-end: 1em;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -48,6 +48,7 @@ import { UserList } from "./UserList";
|
||||
import Library from "../data/library";
|
||||
import { JSONExportDialog } from "./JSONExportDialog";
|
||||
import { LibraryButton } from "./LibraryButton";
|
||||
import { isImageFileHandle } from "../data/blob";
|
||||
|
||||
interface LayerUIProps {
|
||||
actionManager: ActionManager;
|
||||
@@ -407,7 +408,7 @@ const LayerUI = ({
|
||||
const createExporter = (type: ExportType): ExportCB => async (
|
||||
exportedElements,
|
||||
) => {
|
||||
await exportCanvas(type, exportedElements, appState, {
|
||||
const fileHandle = await exportCanvas(type, exportedElements, appState, {
|
||||
exportBackground: appState.exportBackground,
|
||||
name: appState.name,
|
||||
viewBackgroundColor: appState.viewBackgroundColor,
|
||||
@@ -417,6 +418,14 @@ const LayerUI = ({
|
||||
console.error(error);
|
||||
setAppState({ errorMessage: error.message });
|
||||
});
|
||||
|
||||
if (
|
||||
appState.exportEmbedScene &&
|
||||
fileHandle &&
|
||||
isImageFileHandle(fileHandle)
|
||||
) {
|
||||
setAppState({ fileHandle });
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
@@ -623,7 +632,9 @@ const LayerUI = ({
|
||||
label={client.username || "Unknown user"}
|
||||
key={clientId}
|
||||
>
|
||||
{actionManager.renderAction("goToCollaborator", clientId)}
|
||||
{actionManager.renderAction("goToCollaborator", {
|
||||
id: clientId,
|
||||
})}
|
||||
</Tooltip>
|
||||
))}
|
||||
</UserList>
|
||||
@@ -656,6 +667,16 @@ const LayerUI = ({
|
||||
zoom={appState.zoom}
|
||||
/>
|
||||
</Island>
|
||||
{!viewModeEnabled && (
|
||||
<div
|
||||
className={clsx("undo-redo-buttons zen-mode-transition", {
|
||||
"layer-ui__wrapper__footer-left--transition-bottom": zenModeEnabled,
|
||||
})}
|
||||
>
|
||||
{actionManager.renderAction("undo", { size: "small" })}
|
||||
{actionManager.renderAction("redo", { size: "small" })}
|
||||
</div>
|
||||
)}
|
||||
</Section>
|
||||
</Stack.Col>
|
||||
</div>
|
||||
|
@@ -1,3 +1,4 @@
|
||||
import React from "react";
|
||||
import clsx from "clsx";
|
||||
import { t } from "../i18n";
|
||||
import { AppState } from "../types";
|
||||
@@ -20,7 +21,7 @@ export const LibraryButton: React.FC<{
|
||||
<label
|
||||
className={clsx(
|
||||
"ToolIcon ToolIcon_type_floating ToolIcon__library zen-mode-visibility",
|
||||
`ToolIcon_size_m`,
|
||||
`ToolIcon_size_medium`,
|
||||
{
|
||||
"zen-mode-visibility--hidden": appState.zenModeEnabled,
|
||||
},
|
||||
|
@@ -36,21 +36,27 @@ export const LibraryUnit = ({
|
||||
if (!elementsToRender) {
|
||||
return;
|
||||
}
|
||||
const svg = exportToSvg(elementsToRender, {
|
||||
exportBackground: false,
|
||||
viewBackgroundColor: oc.white,
|
||||
});
|
||||
for (const child of ref.current!.children) {
|
||||
if (child.tagName !== "svg") {
|
||||
continue;
|
||||
}
|
||||
ref.current!.removeChild(child);
|
||||
}
|
||||
ref.current!.appendChild(svg);
|
||||
|
||||
let svg: SVGSVGElement;
|
||||
const current = ref.current!;
|
||||
|
||||
(async () => {
|
||||
svg = await exportToSvg(elementsToRender, {
|
||||
exportBackground: false,
|
||||
viewBackgroundColor: oc.white,
|
||||
});
|
||||
for (const child of ref.current!.children) {
|
||||
if (child.tagName !== "svg") {
|
||||
continue;
|
||||
}
|
||||
current!.removeChild(child);
|
||||
}
|
||||
current!.appendChild(svg);
|
||||
})();
|
||||
|
||||
return () => {
|
||||
current.removeChild(svg);
|
||||
if (svg) {
|
||||
current.removeChild(svg);
|
||||
}
|
||||
};
|
||||
}, [elements, pendingElements]);
|
||||
|
||||
|
@@ -2,8 +2,7 @@ import "./ToolIcon.scss";
|
||||
|
||||
import React from "react";
|
||||
import clsx from "clsx";
|
||||
|
||||
type LockIconSize = "s" | "m";
|
||||
import { ToolButtonSize } from "./ToolButton";
|
||||
|
||||
type LockIconProps = {
|
||||
title?: string;
|
||||
@@ -13,7 +12,7 @@ type LockIconProps = {
|
||||
zenModeEnabled?: boolean;
|
||||
};
|
||||
|
||||
const DEFAULT_SIZE: LockIconSize = "m";
|
||||
const DEFAULT_SIZE: ToolButtonSize = "medium";
|
||||
|
||||
const ICONS = {
|
||||
CHECKED: (
|
||||
|
@@ -168,10 +168,9 @@ export const MobileMenu = ({
|
||||
)
|
||||
.map(([clientId, client]) => (
|
||||
<React.Fragment key={clientId}>
|
||||
{actionManager.renderAction(
|
||||
"goToCollaborator",
|
||||
clientId,
|
||||
)}
|
||||
{actionManager.renderAction("goToCollaborator", {
|
||||
id: clientId,
|
||||
})}
|
||||
</React.Fragment>
|
||||
))}
|
||||
</UserList>
|
||||
|
@@ -34,19 +34,21 @@ const ChartPreviewBtn = (props: {
|
||||
0,
|
||||
);
|
||||
setChartElements(elements);
|
||||
|
||||
const svg = exportToSvg(elements, {
|
||||
exportBackground: false,
|
||||
viewBackgroundColor: oc.white,
|
||||
});
|
||||
|
||||
let svg: SVGSVGElement;
|
||||
const previewNode = previewRef.current!;
|
||||
|
||||
previewNode.appendChild(svg);
|
||||
(async () => {
|
||||
svg = await exportToSvg(elements, {
|
||||
exportBackground: false,
|
||||
viewBackgroundColor: oc.white,
|
||||
});
|
||||
|
||||
if (props.selected) {
|
||||
(previewNode.parentNode as HTMLDivElement).focus();
|
||||
}
|
||||
previewNode.appendChild(svg);
|
||||
|
||||
if (props.selected) {
|
||||
(previewNode.parentNode as HTMLDivElement).focus();
|
||||
}
|
||||
})();
|
||||
|
||||
return () => {
|
||||
previewNode.removeChild(svg);
|
||||
|
@@ -4,7 +4,7 @@ import React from "react";
|
||||
import clsx from "clsx";
|
||||
import { useExcalidrawContainer } from "./App";
|
||||
|
||||
type ToolIconSize = "s" | "m";
|
||||
export type ToolButtonSize = "small" | "medium";
|
||||
|
||||
type ToolButtonBaseProps = {
|
||||
icon?: React.ReactNode;
|
||||
@@ -15,7 +15,7 @@ type ToolButtonBaseProps = {
|
||||
title?: string;
|
||||
name?: string;
|
||||
id?: string;
|
||||
size?: ToolIconSize;
|
||||
size?: ToolButtonSize;
|
||||
keyBindingLabel?: string;
|
||||
showAriaLabel?: boolean;
|
||||
hidden?: boolean;
|
||||
@@ -41,13 +41,11 @@ type ToolButtonProps =
|
||||
onChange?(): void;
|
||||
});
|
||||
|
||||
const DEFAULT_SIZE: ToolIconSize = "m";
|
||||
|
||||
export const ToolButton = React.forwardRef((props: ToolButtonProps, ref) => {
|
||||
const { id: excalId } = useExcalidrawContainer();
|
||||
const innerRef = React.useRef(null);
|
||||
React.useImperativeHandle(ref, () => innerRef.current);
|
||||
const sizeCn = `ToolIcon_size_${props.size || DEFAULT_SIZE}`;
|
||||
const sizeCn = `ToolIcon_size_${props.size}`;
|
||||
|
||||
if (props.type === "button" || props.type === "icon") {
|
||||
return (
|
||||
@@ -118,4 +116,5 @@ export const ToolButton = React.forwardRef((props: ToolButtonProps, ref) => {
|
||||
ToolButton.defaultProps = {
|
||||
visible: true,
|
||||
className: "",
|
||||
size: "medium",
|
||||
};
|
||||
|
@@ -60,9 +60,9 @@
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.ToolIcon_size_s .ToolIcon__icon {
|
||||
width: 1.4rem;
|
||||
height: 1.4rem;
|
||||
.ToolIcon_size_small .ToolIcon__icon {
|
||||
width: 2rem;
|
||||
height: 2rem;
|
||||
font-size: 0.8em;
|
||||
}
|
||||
|
||||
|
@@ -1,4 +1,6 @@
|
||||
@import "../css/variables.module";
|
||||
|
||||
// container in body where the actual tooltip is appended to
|
||||
.excalidraw-tooltip {
|
||||
position: absolute;
|
||||
z-index: 1000;
|
||||
@@ -24,16 +26,20 @@
|
||||
}
|
||||
}
|
||||
|
||||
.excalidraw {
|
||||
.Tooltip-icon {
|
||||
width: 0.9em;
|
||||
height: 0.9em;
|
||||
margin-left: 5px;
|
||||
margin-top: 1px;
|
||||
display: flex;
|
||||
// wraps the element we want to apply the tooltip to
|
||||
.excalidraw-tooltip-wrapper {
|
||||
display: flex;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
@include isMobile {
|
||||
display: none;
|
||||
}
|
||||
.excalidraw-tooltip-icon {
|
||||
width: 0.9em;
|
||||
height: 0.9em;
|
||||
margin-left: 5px;
|
||||
margin-top: 1px;
|
||||
display: flex;
|
||||
|
||||
@include isMobile {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
@@ -74,6 +74,7 @@ export const Tooltip = ({ children, label, long = false }: TooltipProps) => {
|
||||
|
||||
return (
|
||||
<div
|
||||
className="excalidraw-tooltip-wrapper"
|
||||
onPointerEnter={(event) =>
|
||||
updateTooltip(
|
||||
event.currentTarget as HTMLDivElement,
|
||||
|
@@ -14,6 +14,7 @@ export const CURSOR_TYPE = {
|
||||
TEXT: "text",
|
||||
CROSSHAIR: "crosshair",
|
||||
GRABBING: "grabbing",
|
||||
GRAB: "grab",
|
||||
POINTER: "pointer",
|
||||
MOVE: "move",
|
||||
AUTO: "",
|
||||
@@ -34,6 +35,7 @@ export enum EVENT {
|
||||
MOUSE_MOVE = "mousemove",
|
||||
RESIZE = "resize",
|
||||
UNLOAD = "unload",
|
||||
FOCUS = "focus",
|
||||
BLUR = "blur",
|
||||
DRAG_OVER = "dragover",
|
||||
DROP = "drop",
|
||||
@@ -83,7 +85,7 @@ export const GRID_SIZE = 20; // TODO make it configurable?
|
||||
export const MIME_TYPES = {
|
||||
excalidraw: "application/vnd.excalidraw+json",
|
||||
excalidrawlib: "application/vnd.excalidrawlib+json",
|
||||
};
|
||||
} as const;
|
||||
|
||||
export const EXPORT_DATA_TYPES = {
|
||||
excalidraw: "excalidraw",
|
||||
@@ -97,10 +99,6 @@ export const STORAGE_KEYS = {
|
||||
LOCAL_STORAGE_LIBRARY: "excalidraw-library",
|
||||
} as const;
|
||||
|
||||
export const IDB_KEYS = {
|
||||
fileHandle: "fileHandle",
|
||||
} as const;
|
||||
|
||||
// time in milliseconds
|
||||
export const TAP_TWICE_TIMEOUT = 300;
|
||||
export const TOUCH_CTX_MENU_TIMEOUT = 500;
|
||||
|
@@ -414,22 +414,6 @@
|
||||
&:active {
|
||||
background-color: var(--button-gray-2);
|
||||
}
|
||||
|
||||
&.dropdown-select--floating {
|
||||
margin: 0.5em;
|
||||
}
|
||||
}
|
||||
|
||||
.dropdown-select__language.dropdown-select--floating {
|
||||
bottom: 10px;
|
||||
|
||||
:root[dir="ltr"] & {
|
||||
right: 44px;
|
||||
}
|
||||
|
||||
:root[dir="rtl"] & {
|
||||
left: 44px;
|
||||
}
|
||||
}
|
||||
|
||||
.zIndexButton {
|
||||
@@ -456,26 +440,38 @@
|
||||
}
|
||||
|
||||
.help-icon {
|
||||
display: flex;
|
||||
cursor: pointer;
|
||||
fill: $oc-gray-6;
|
||||
width: 1.5rem;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
margin-top: 5px;
|
||||
background: none;
|
||||
color: var(--icon-fill-color);
|
||||
|
||||
svg {
|
||||
width: 1.5rem;
|
||||
height: 1.5rem;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background: none;
|
||||
}
|
||||
}
|
||||
|
||||
:root[dir="ltr"] & {
|
||||
margin-right: 14px;
|
||||
}
|
||||
.reset-zoom-button {
|
||||
padding: 0.2em;
|
||||
background: transparent;
|
||||
color: var(--text-primary-color);
|
||||
font-family: var(--ui-font);
|
||||
}
|
||||
|
||||
:root[dir="rtl"] & {
|
||||
margin-left: 14px;
|
||||
}
|
||||
.undo-redo-buttons {
|
||||
display: grid;
|
||||
grid-auto-flow: column;
|
||||
gap: 0.4em;
|
||||
margin-top: auto;
|
||||
margin-bottom: auto;
|
||||
margin-inline-start: 0.6em;
|
||||
}
|
||||
|
||||
@include isMobile {
|
||||
|
@@ -1,10 +1,12 @@
|
||||
import { cleanAppStateForExport } from "../appState";
|
||||
import { EXPORT_DATA_TYPES } from "../constants";
|
||||
import { clearElementsForExport } from "../element";
|
||||
import { ExcalidrawElement } from "../element/types";
|
||||
import { CanvasError } from "../errors";
|
||||
import { t } from "../i18n";
|
||||
import { calculateScrollCenter } from "../scene";
|
||||
import { AppState } from "../types";
|
||||
import { FileSystemHandle } from "./filesystem";
|
||||
import { isValidExcalidrawData } from "./json";
|
||||
import { restore } from "./restore";
|
||||
import { ImportedLibraryData } from "./types";
|
||||
@@ -79,10 +81,30 @@ export const getMimeType = (blob: Blob | string): string => {
|
||||
return "";
|
||||
};
|
||||
|
||||
export const getFileHandleType = (handle: FileSystemHandle | null) => {
|
||||
if (!handle) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return handle.name.match(/\.(json|excalidraw|png|svg)$/)?.[1] || null;
|
||||
};
|
||||
|
||||
export const isImageFileHandleType = (
|
||||
type: string | null,
|
||||
): type is "png" | "svg" => {
|
||||
return type === "png" || type === "svg";
|
||||
};
|
||||
|
||||
export const isImageFileHandle = (handle: FileSystemHandle | null) => {
|
||||
const type = getFileHandleType(handle);
|
||||
return type === "png" || type === "svg";
|
||||
};
|
||||
|
||||
export const loadFromBlob = async (
|
||||
blob: Blob,
|
||||
/** @see restore.localAppState */
|
||||
localAppState: AppState | null,
|
||||
localElements: readonly ExcalidrawElement[] | null,
|
||||
) => {
|
||||
const contents = await parseFileContents(blob);
|
||||
try {
|
||||
@@ -95,7 +117,7 @@ export const loadFromBlob = async (
|
||||
elements: clearElementsForExport(data.elements || []),
|
||||
appState: {
|
||||
theme: localAppState?.theme,
|
||||
fileHandle: (!blob.type.startsWith("image/") && blob.handle) || null,
|
||||
fileHandle: blob.handle || null,
|
||||
...cleanAppStateForExport(data.appState || {}),
|
||||
...(localAppState
|
||||
? calculateScrollCenter(data.elements || [], localAppState, null)
|
||||
@@ -103,6 +125,7 @@ export const loadFromBlob = async (
|
||||
},
|
||||
},
|
||||
localAppState,
|
||||
localElements,
|
||||
);
|
||||
|
||||
return result;
|
||||
|
122
src/data/filesystem.ts
Normal file
122
src/data/filesystem.ts
Normal file
@@ -0,0 +1,122 @@
|
||||
import {
|
||||
FileWithHandle,
|
||||
fileOpen as _fileOpen,
|
||||
fileSave as _fileSave,
|
||||
FileSystemHandle,
|
||||
supported as nativeFileSystemSupported,
|
||||
} from "@dwelle/browser-fs-access";
|
||||
import { EVENT, MIME_TYPES } from "../constants";
|
||||
import { AbortError } from "../errors";
|
||||
import { debounce } from "../utils";
|
||||
|
||||
type FILE_EXTENSION =
|
||||
| "jpg"
|
||||
| "png"
|
||||
| "svg"
|
||||
| "json"
|
||||
| "excalidraw"
|
||||
| "excalidrawlib";
|
||||
|
||||
const FILE_TYPE_TO_MIME_TYPE: Record<FILE_EXTENSION, string> = {
|
||||
jpg: "image/jpeg",
|
||||
png: "image/png",
|
||||
svg: "image/svg+xml",
|
||||
json: "application/json",
|
||||
excalidraw: MIME_TYPES.excalidraw,
|
||||
excalidrawlib: MIME_TYPES.excalidrawlib,
|
||||
};
|
||||
|
||||
const INPUT_CHANGE_INTERVAL_MS = 500;
|
||||
|
||||
export const fileOpen = <M extends boolean | undefined = false>(opts: {
|
||||
extensions?: FILE_EXTENSION[];
|
||||
description?: string;
|
||||
multiple?: M;
|
||||
}): Promise<
|
||||
M extends false | undefined ? FileWithHandle : FileWithHandle[]
|
||||
> => {
|
||||
// an unsafe TS hack, alas not much we can do AFAIK
|
||||
type RetType = M extends false | undefined
|
||||
? FileWithHandle
|
||||
: FileWithHandle[];
|
||||
|
||||
const mimeTypes = opts.extensions?.reduce((mimeTypes, type) => {
|
||||
mimeTypes.push(FILE_TYPE_TO_MIME_TYPE[type]);
|
||||
|
||||
return mimeTypes;
|
||||
}, [] as string[]);
|
||||
|
||||
const extensions = opts.extensions?.reduce((acc, ext) => {
|
||||
if (ext === "jpg") {
|
||||
return acc.concat(".jpg", ".jpeg");
|
||||
}
|
||||
return acc.concat(`.${ext}`);
|
||||
}, [] as string[]);
|
||||
|
||||
return _fileOpen({
|
||||
description: opts.description,
|
||||
extensions,
|
||||
mimeTypes,
|
||||
multiple: opts.multiple ?? false,
|
||||
legacySetup: (resolve, reject, input) => {
|
||||
const scheduleRejection = debounce(reject, INPUT_CHANGE_INTERVAL_MS);
|
||||
const focusHandler = () => {
|
||||
checkForFile();
|
||||
document.addEventListener(EVENT.KEYUP, scheduleRejection);
|
||||
document.addEventListener(EVENT.POINTER_UP, scheduleRejection);
|
||||
scheduleRejection();
|
||||
};
|
||||
const checkForFile = () => {
|
||||
// this hack might not work when expecting multiple files
|
||||
if (input.files?.length) {
|
||||
const ret = opts.multiple ? [...input.files] : input.files[0];
|
||||
resolve(ret as RetType);
|
||||
}
|
||||
};
|
||||
requestAnimationFrame(() => {
|
||||
window.addEventListener(EVENT.FOCUS, focusHandler);
|
||||
});
|
||||
const interval = window.setInterval(() => {
|
||||
checkForFile();
|
||||
}, INPUT_CHANGE_INTERVAL_MS);
|
||||
return (rejectPromise) => {
|
||||
clearInterval(interval);
|
||||
scheduleRejection.cancel();
|
||||
window.removeEventListener(EVENT.FOCUS, focusHandler);
|
||||
document.removeEventListener(EVENT.KEYUP, scheduleRejection);
|
||||
document.removeEventListener(EVENT.POINTER_UP, scheduleRejection);
|
||||
if (rejectPromise) {
|
||||
// so that something is shown in console if we need to debug this
|
||||
console.warn("Opening the file was canceled (legacy-fs).");
|
||||
rejectPromise(new AbortError());
|
||||
}
|
||||
};
|
||||
},
|
||||
}) as Promise<RetType>;
|
||||
};
|
||||
|
||||
export const fileSave = (
|
||||
blob: Blob,
|
||||
opts: {
|
||||
/** supply without the extension */
|
||||
name: string;
|
||||
/** file extension */
|
||||
extension: FILE_EXTENSION;
|
||||
description?: string;
|
||||
/** existing FileSystemHandle */
|
||||
fileHandle?: FileSystemHandle | null;
|
||||
},
|
||||
) => {
|
||||
return _fileSave(
|
||||
blob,
|
||||
{
|
||||
fileName: `${opts.name}.${opts.extension}`,
|
||||
description: opts.description,
|
||||
extensions: [`.${opts.extension}`],
|
||||
},
|
||||
opts.fileHandle,
|
||||
);
|
||||
};
|
||||
|
||||
export type { FileSystemHandle };
|
||||
export { nativeFileSystemSupported };
|
@@ -1,4 +1,3 @@
|
||||
import { fileSave } from "browser-fs-access";
|
||||
import {
|
||||
copyBlobToClipboardAsPng,
|
||||
copyTextToSystemClipboard,
|
||||
@@ -10,6 +9,7 @@ import { exportToCanvas, exportToSvg } from "../scene/export";
|
||||
import { ExportType } from "../scene/types";
|
||||
import { AppState } from "../types";
|
||||
import { canvasToBlob } from "./blob";
|
||||
import { fileSave, FileSystemHandle } from "./filesystem";
|
||||
import { serializeAsJSON } from "./json";
|
||||
|
||||
export { loadFromBlob } from "./blob";
|
||||
@@ -24,40 +24,38 @@ export const exportCanvas = async (
|
||||
exportPadding = DEFAULT_EXPORT_PADDING,
|
||||
viewBackgroundColor,
|
||||
name,
|
||||
fileHandle = null,
|
||||
}: {
|
||||
exportBackground: boolean;
|
||||
exportPadding?: number;
|
||||
viewBackgroundColor: string;
|
||||
name: string;
|
||||
fileHandle?: FileSystemHandle | null;
|
||||
},
|
||||
) => {
|
||||
if (elements.length === 0) {
|
||||
throw new Error(t("alerts.cannotExportEmptyCanvas"));
|
||||
}
|
||||
if (type === "svg" || type === "clipboard-svg") {
|
||||
const tempSvg = exportToSvg(elements, {
|
||||
const tempSvg = await exportToSvg(elements, {
|
||||
exportBackground,
|
||||
exportWithDarkMode: appState.exportWithDarkMode,
|
||||
viewBackgroundColor,
|
||||
exportPadding,
|
||||
exportScale: appState.exportScale,
|
||||
metadata:
|
||||
appState.exportEmbedScene && type === "svg"
|
||||
? await (
|
||||
await import(/* webpackChunkName: "image" */ "./image")
|
||||
).encodeSvgMetadata({
|
||||
text: serializeAsJSON(elements, appState),
|
||||
})
|
||||
: undefined,
|
||||
exportEmbedScene: appState.exportEmbedScene && type === "svg",
|
||||
});
|
||||
if (type === "svg") {
|
||||
await fileSave(new Blob([tempSvg.outerHTML], { type: "image/svg+xml" }), {
|
||||
fileName: `${name}.svg`,
|
||||
extensions: [".svg"],
|
||||
});
|
||||
return;
|
||||
return await fileSave(
|
||||
new Blob([tempSvg.outerHTML], { type: "image/svg+xml" }),
|
||||
{
|
||||
name,
|
||||
extension: "svg",
|
||||
fileHandle,
|
||||
},
|
||||
);
|
||||
} else if (type === "clipboard-svg") {
|
||||
copyTextToSystemClipboard(tempSvg.outerHTML);
|
||||
await copyTextToSystemClipboard(tempSvg.outerHTML);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -73,7 +71,6 @@ export const exportCanvas = async (
|
||||
tempCanvas.remove();
|
||||
|
||||
if (type === "png") {
|
||||
const fileName = `${name}.png`;
|
||||
if (appState.exportEmbedScene) {
|
||||
blob = await (
|
||||
await import(/* webpackChunkName: "image" */ "./image")
|
||||
@@ -83,9 +80,10 @@ export const exportCanvas = async (
|
||||
});
|
||||
}
|
||||
|
||||
await fileSave(blob, {
|
||||
fileName,
|
||||
extensions: [".png"],
|
||||
return await fileSave(blob, {
|
||||
name,
|
||||
extension: "png",
|
||||
fileHandle,
|
||||
});
|
||||
} else if (type === "clipboard") {
|
||||
try {
|
||||
|
@@ -1,10 +1,10 @@
|
||||
import { fileOpen, fileSave, FileSystemHandle } from "browser-fs-access";
|
||||
import { fileOpen, fileSave } from "./filesystem";
|
||||
import { cleanAppStateForExport } from "../appState";
|
||||
import { EXPORT_DATA_TYPES, EXPORT_SOURCE, MIME_TYPES } from "../constants";
|
||||
import { clearElementsForExport } from "../element";
|
||||
import { ExcalidrawElement } from "../element/types";
|
||||
import { AppState } from "../types";
|
||||
import { loadFromBlob } from "./blob";
|
||||
import { isImageFileHandle, loadFromBlob } from "./blob";
|
||||
|
||||
import {
|
||||
ExportedDataState,
|
||||
@@ -12,11 +12,10 @@ import {
|
||||
ExportedLibraryData,
|
||||
} from "./types";
|
||||
import Library from "./library";
|
||||
import { AbortError } from "../errors";
|
||||
|
||||
export const serializeAsJSON = (
|
||||
elements: readonly ExcalidrawElement[],
|
||||
appState: AppState,
|
||||
appState: Partial<AppState>,
|
||||
): string => {
|
||||
const data: ExportedDataState = {
|
||||
type: EXPORT_DATA_TYPES.excalidraw,
|
||||
@@ -29,26 +28,6 @@ export const serializeAsJSON = (
|
||||
return JSON.stringify(data, null, 2);
|
||||
};
|
||||
|
||||
// adapted from https://web.dev/file-system-access
|
||||
const verifyPermission = async (fileHandle: FileSystemHandle) => {
|
||||
try {
|
||||
const options = { mode: "readwrite" } as any;
|
||||
// Check if permission was already granted. If so, return true.
|
||||
if ((await fileHandle.queryPermission(options)) === "granted") {
|
||||
return true;
|
||||
}
|
||||
// Request permission. If the user grants permission, return true.
|
||||
if ((await fileHandle.requestPermission(options)) === "granted") {
|
||||
return true;
|
||||
}
|
||||
// The user didn't grant permission, so return false.
|
||||
return false;
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
export const saveAsJSON = async (
|
||||
elements: readonly ExcalidrawElement[],
|
||||
appState: AppState,
|
||||
@@ -58,25 +37,21 @@ export const saveAsJSON = async (
|
||||
type: MIME_TYPES.excalidraw,
|
||||
});
|
||||
|
||||
if (appState.fileHandle) {
|
||||
if (!(await verifyPermission(appState.fileHandle))) {
|
||||
throw new AbortError();
|
||||
}
|
||||
}
|
||||
|
||||
const fileHandle = await fileSave(
|
||||
blob,
|
||||
{
|
||||
fileName: `${appState.name}.excalidraw`,
|
||||
description: "Excalidraw file",
|
||||
extensions: [".excalidraw"],
|
||||
},
|
||||
appState.fileHandle,
|
||||
);
|
||||
const fileHandle = await fileSave(blob, {
|
||||
name: appState.name,
|
||||
extension: "excalidraw",
|
||||
description: "Excalidraw file",
|
||||
fileHandle: isImageFileHandle(appState.fileHandle)
|
||||
? null
|
||||
: appState.fileHandle,
|
||||
});
|
||||
return { fileHandle };
|
||||
};
|
||||
|
||||
export const loadFromJSON = async (localAppState: AppState) => {
|
||||
export const loadFromJSON = async (
|
||||
localAppState: AppState,
|
||||
localElements: readonly ExcalidrawElement[] | null,
|
||||
) => {
|
||||
const blob = await fileOpen({
|
||||
description: "Excalidraw files",
|
||||
// ToDo: Be over-permissive until https://bugs.webkit.org/show_bug.cgi?id=34442
|
||||
@@ -91,7 +66,7 @@ export const loadFromJSON = async (localAppState: AppState) => {
|
||||
],
|
||||
*/
|
||||
});
|
||||
return loadFromBlob(blob, localAppState);
|
||||
return loadFromBlob(blob, localAppState, localElements);
|
||||
};
|
||||
|
||||
export const isValidExcalidrawData = (data?: {
|
||||
@@ -125,15 +100,16 @@ export const saveLibraryAsJSON = async (library: Library) => {
|
||||
library: libraryItems,
|
||||
};
|
||||
const serialized = JSON.stringify(data, null, 2);
|
||||
const fileName = "library.excalidrawlib";
|
||||
const blob = new Blob([serialized], {
|
||||
type: MIME_TYPES.excalidrawlib,
|
||||
});
|
||||
await fileSave(blob, {
|
||||
fileName,
|
||||
description: "Excalidraw library file",
|
||||
extensions: [".excalidrawlib"],
|
||||
});
|
||||
await fileSave(
|
||||
new Blob([serialized], {
|
||||
type: MIME_TYPES.excalidrawlib,
|
||||
}),
|
||||
{
|
||||
name: "library",
|
||||
extension: "excalidrawlib",
|
||||
description: "Excalidraw library file",
|
||||
},
|
||||
);
|
||||
};
|
||||
|
||||
export const importLibraryFromJSON = async (library: Library) => {
|
||||
|
@@ -18,7 +18,7 @@ class Library {
|
||||
};
|
||||
|
||||
restoreLibraryItem = (libraryItem: LibraryItem): LibraryItem | null => {
|
||||
const elements = getNonDeletedElements(restoreElements(libraryItem));
|
||||
const elements = getNonDeletedElements(restoreElements(libraryItem, null));
|
||||
return elements.length ? elements : null;
|
||||
};
|
||||
|
||||
|
38
src/data/resave.ts
Normal file
38
src/data/resave.ts
Normal file
@@ -0,0 +1,38 @@
|
||||
import { ExcalidrawElement } from "../element/types";
|
||||
import { AppState } from "../types";
|
||||
import { exportCanvas } from ".";
|
||||
import { getNonDeletedElements } from "../element";
|
||||
import { getFileHandleType, isImageFileHandleType } from "./blob";
|
||||
|
||||
export const resaveAsImageWithScene = async (
|
||||
elements: readonly ExcalidrawElement[],
|
||||
appState: AppState,
|
||||
) => {
|
||||
const { exportBackground, viewBackgroundColor, name, fileHandle } = appState;
|
||||
|
||||
const fileHandleType = getFileHandleType(fileHandle);
|
||||
|
||||
if (!fileHandle || !isImageFileHandleType(fileHandleType)) {
|
||||
throw new Error(
|
||||
"fileHandle should exist and should be of type svg or png when resaving",
|
||||
);
|
||||
}
|
||||
appState = {
|
||||
...appState,
|
||||
exportEmbedScene: true,
|
||||
};
|
||||
|
||||
await exportCanvas(
|
||||
fileHandleType,
|
||||
getNonDeletedElements(elements),
|
||||
appState,
|
||||
{
|
||||
exportBackground,
|
||||
viewBackgroundColor,
|
||||
name,
|
||||
fileHandle,
|
||||
},
|
||||
);
|
||||
|
||||
return { fileHandle };
|
||||
};
|
@@ -5,7 +5,11 @@ import {
|
||||
} from "../element/types";
|
||||
import { AppState, NormalizedZoomValue } from "../types";
|
||||
import { ImportedDataState } from "./types";
|
||||
import { getNormalizedDimensions, isInvisiblySmallElement } from "../element";
|
||||
import {
|
||||
getElementMap,
|
||||
getNormalizedDimensions,
|
||||
isInvisiblySmallElement,
|
||||
} from "../element";
|
||||
import { isLinearElementType } from "../element/typeChecks";
|
||||
import { randomId } from "../random";
|
||||
import {
|
||||
@@ -16,6 +20,7 @@ import {
|
||||
} from "../constants";
|
||||
import { getDefaultAppState } from "../appState";
|
||||
import { LinearElementEditor } from "../element/linearElementEditor";
|
||||
import { bumpVersion } from "../element/mutateElement";
|
||||
|
||||
type RestoredAppState = Omit<
|
||||
AppState,
|
||||
@@ -181,13 +186,20 @@ const restoreElement = (
|
||||
|
||||
export const restoreElements = (
|
||||
elements: ImportedDataState["elements"],
|
||||
/** NOTE doesn't serve for reconciliation */
|
||||
localElements: readonly ExcalidrawElement[] | null | undefined,
|
||||
): ExcalidrawElement[] => {
|
||||
const localElementsMap = localElements ? getElementMap(localElements) : null;
|
||||
return (elements || []).reduce((elements, element) => {
|
||||
// filtering out selection, which is legacy, no longer kept in elements,
|
||||
// and causing issues if retained
|
||||
if (element.type !== "selection" && !isInvisiblySmallElement(element)) {
|
||||
const migratedElement = restoreElement(element);
|
||||
let migratedElement: ExcalidrawElement = restoreElement(element);
|
||||
if (migratedElement) {
|
||||
const localElement = localElementsMap?.[element.id];
|
||||
if (localElement && localElement.version > migratedElement.version) {
|
||||
migratedElement = bumpVersion(migratedElement, localElement.version);
|
||||
}
|
||||
elements.push(migratedElement);
|
||||
}
|
||||
}
|
||||
@@ -197,25 +209,25 @@ export const restoreElements = (
|
||||
|
||||
export const restoreAppState = (
|
||||
appState: ImportedDataState["appState"],
|
||||
localAppState: Partial<AppState> | null,
|
||||
localAppState: Partial<AppState> | null | undefined,
|
||||
): RestoredAppState => {
|
||||
appState = appState || {};
|
||||
|
||||
const defaultAppState = getDefaultAppState();
|
||||
const nextAppState = {} as typeof defaultAppState;
|
||||
|
||||
for (const [key, val] of Object.entries(defaultAppState) as [
|
||||
for (const [key, defaultValue] of Object.entries(defaultAppState) as [
|
||||
keyof typeof defaultAppState,
|
||||
any,
|
||||
][]) {
|
||||
const restoredValue = appState[key];
|
||||
const suppliedValue = appState[key];
|
||||
const localValue = localAppState ? localAppState[key] : undefined;
|
||||
(nextAppState as any)[key] =
|
||||
restoredValue !== undefined
|
||||
? restoredValue
|
||||
suppliedValue !== undefined
|
||||
? suppliedValue
|
||||
: localValue !== undefined
|
||||
? localValue
|
||||
: val;
|
||||
: defaultValue;
|
||||
}
|
||||
|
||||
return {
|
||||
@@ -243,9 +255,10 @@ export const restore = (
|
||||
* Supply `null` if you can't get access to it.
|
||||
*/
|
||||
localAppState: Partial<AppState> | null | undefined,
|
||||
localElements: readonly ExcalidrawElement[] | null | undefined,
|
||||
): RestoredDataState => {
|
||||
return {
|
||||
elements: restoreElements(data?.elements),
|
||||
elements: restoreElements(data?.elements, localElements),
|
||||
appState: restoreAppState(data?.appState, localAppState || null),
|
||||
};
|
||||
};
|
||||
|
@@ -328,15 +328,15 @@ const hitTestFreeDrawElement = (
|
||||
let P: readonly [number, number];
|
||||
|
||||
// For freedraw dots
|
||||
if (element.points.length === 2) {
|
||||
return (
|
||||
distance2d(A[0], A[1], x, y) < threshold ||
|
||||
distance2d(B[0], B[1], x, y) < threshold
|
||||
);
|
||||
if (
|
||||
distance2d(A[0], A[1], x, y) < threshold ||
|
||||
distance2d(B[0], B[1], x, y) < threshold
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// For freedraw lines
|
||||
for (let i = 1; i < element.points.length - 1; i++) {
|
||||
for (let i = 0; i < element.points.length; i++) {
|
||||
const delta = [B[0] - A[0], B[1] - A[1]];
|
||||
const length = Math.hypot(delta[1], delta[0]);
|
||||
|
||||
|
@@ -120,8 +120,11 @@ export const newElementWith = <TElement extends ExcalidrawElement>(
|
||||
*
|
||||
* NOTE: does not trigger re-render.
|
||||
*/
|
||||
export const bumpVersion = (element: Mutable<ExcalidrawElement>) => {
|
||||
element.version = element.version + 1;
|
||||
export const bumpVersion = (
|
||||
element: Mutable<ExcalidrawElement>,
|
||||
version?: ExcalidrawElement["version"],
|
||||
) => {
|
||||
element.version = (version ?? element.version) + 1;
|
||||
element.versionNonce = randomInteger();
|
||||
return element;
|
||||
};
|
||||
|
@@ -11,10 +11,8 @@ export class CanvasError extends Error {
|
||||
}
|
||||
}
|
||||
|
||||
export class AbortError extends Error {
|
||||
constructor(message: string = "Request aborted") {
|
||||
super();
|
||||
this.name = "AbortError";
|
||||
this.message = message;
|
||||
export class AbortError extends DOMException {
|
||||
constructor(message: string = "Request Aborted") {
|
||||
super(message, "AbortError");
|
||||
}
|
||||
}
|
||||
|
@@ -1,23 +1,18 @@
|
||||
import React from "react";
|
||||
import clsx from "clsx";
|
||||
import * as i18n from "../../i18n";
|
||||
|
||||
export const LanguageList = ({
|
||||
onChange,
|
||||
languages = i18n.languages,
|
||||
currentLangCode = i18n.getLanguage().code,
|
||||
floating,
|
||||
}: {
|
||||
languages?: { code: string; label: string }[];
|
||||
onChange: (langCode: i18n.Language["code"]) => void;
|
||||
currentLangCode?: i18n.Language["code"];
|
||||
floating?: boolean;
|
||||
}) => (
|
||||
<React.Fragment>
|
||||
<select
|
||||
className={clsx("dropdown-select dropdown-select__language", {
|
||||
"dropdown-select--floating": floating,
|
||||
})}
|
||||
className="dropdown-select dropdown-select__language"
|
||||
onChange={({ target }) => onChange(target.value)}
|
||||
value={currentLangCode}
|
||||
aria-label={i18n.t("buttons.selectLanguage")}
|
||||
|
@@ -196,5 +196,5 @@ export const loadFromFirebase = async (
|
||||
firebaseSceneVersionCache.set(socket, getSceneVersion(elements));
|
||||
}
|
||||
|
||||
return restoreElements(elements);
|
||||
return restoreElements(elements, null);
|
||||
};
|
||||
|
@@ -137,6 +137,10 @@ export const decryptAESGEM = async (
|
||||
export const getCollaborationLinkData = (link: string) => {
|
||||
const hash = new URL(link).hash;
|
||||
const match = hash.match(/^#room=([a-zA-Z0-9_-]+),([a-zA-Z0-9_-]+)$/);
|
||||
if (match && match[2].length !== 22) {
|
||||
window.alert(t("alerts.invalidEncryptionKey"));
|
||||
return null;
|
||||
}
|
||||
return match ? { roomId: match[1], roomKey: match[2] } : null;
|
||||
};
|
||||
|
||||
@@ -257,9 +261,10 @@ export const loadScene = async (
|
||||
data = restore(
|
||||
await importFromBackend(id, privateKey),
|
||||
localDataState?.appState,
|
||||
localDataState?.elements,
|
||||
);
|
||||
} else {
|
||||
data = restore(localDataState || null, null);
|
||||
data = restore(localDataState || null, null, null);
|
||||
}
|
||||
|
||||
return {
|
||||
|
@@ -2,12 +2,18 @@
|
||||
.layer-ui__wrapper__footer-center {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
margin-top: auto;
|
||||
margin-bottom: auto;
|
||||
margin-inline-start: auto;
|
||||
}
|
||||
|
||||
.encrypted-icon {
|
||||
border-radius: var(--space-factor);
|
||||
color: var(--icon-green-fill-color);
|
||||
margin-top: 13px;
|
||||
margin-top: auto;
|
||||
margin-bottom: auto;
|
||||
margin-inline-start: auto;
|
||||
margin-inline-end: 0.6em;
|
||||
|
||||
svg {
|
||||
width: 1.2rem;
|
||||
|
@@ -141,7 +141,7 @@ const initializeScene = async (opts: {
|
||||
const url = externalUrlMatch[1];
|
||||
try {
|
||||
const request = await fetch(window.decodeURIComponent(url));
|
||||
const data = await loadFromBlob(await request.blob(), null);
|
||||
const data = await loadFromBlob(await request.blob(), null, null);
|
||||
if (
|
||||
!scene.elements.length ||
|
||||
window.confirm(t("alerts.loadSceneOverridePrompt"))
|
||||
@@ -348,11 +348,8 @@ const ExcalidrawWrapper = () => {
|
||||
|
||||
const renderLanguageList = () => (
|
||||
<LanguageList
|
||||
onChange={(langCode) => {
|
||||
setLangCode(langCode);
|
||||
}}
|
||||
onChange={(langCode) => setLangCode(langCode)}
|
||||
languages={languages}
|
||||
floating={!isMobile}
|
||||
currentLangCode={langCode}
|
||||
/>
|
||||
);
|
||||
|
@@ -49,6 +49,7 @@ const allLanguages: Language[] = [
|
||||
{ code: "zh-TW", label: "繁體中文" },
|
||||
{ code: "lv-LV", label: "Latviešu" },
|
||||
{ code: "cs-CZ", label: "Česky" },
|
||||
{ code: "kk-KZ", label: "Қазақ тілі" },
|
||||
].concat([defaultLang]);
|
||||
|
||||
export const languages: Language[] = allLanguages
|
||||
|
@@ -4,7 +4,7 @@
|
||||
"pasteCharts": "لصق الرسوم البيانية",
|
||||
"selectAll": "تحديد الكل",
|
||||
"multiSelect": "إضافة عنصر للتحديد",
|
||||
"moveCanvas": "نقل لوح رسم",
|
||||
"moveCanvas": "نقل لوح الرسم",
|
||||
"cut": "قص",
|
||||
"copy": "نسخ",
|
||||
"copyAsPng": "نسخ إلى الحافظة بصيغة PNG",
|
||||
@@ -14,18 +14,18 @@
|
||||
"bringToFront": "أحضر للأمام",
|
||||
"sendBackward": "أرسل للخلف",
|
||||
"delete": "حذف",
|
||||
"copyStyles": "نسخ النمط",
|
||||
"pasteStyles": "لصق النمط",
|
||||
"stroke": "الحدود",
|
||||
"copyStyles": "نسخ الأنماط",
|
||||
"pasteStyles": "لصق الأنماط",
|
||||
"stroke": "الخط",
|
||||
"background": "الخلفية",
|
||||
"fill": "التعبئة",
|
||||
"strokeWidth": "حجم الحدود",
|
||||
"strokeShape": "",
|
||||
"strokeShape_gel": "",
|
||||
"strokeShape_fountain": "",
|
||||
"strokeShape_brush": "",
|
||||
"strokeStyle": "نمط الحدود",
|
||||
"strokeStyle_solid": "صلبة",
|
||||
"strokeWidth": "سُمك الخط",
|
||||
"strokeShape": "شكل الخط",
|
||||
"strokeShape_gel": "قلم جل",
|
||||
"strokeShape_fountain": "قلم رش",
|
||||
"strokeShape_brush": "فرشاه",
|
||||
"strokeStyle": "نمط الخط",
|
||||
"strokeStyle_solid": "كامل",
|
||||
"strokeStyle_dashed": "متقطع",
|
||||
"strokeStyle_dotted": "منقط",
|
||||
"sloppiness": "الإمالة",
|
||||
@@ -43,12 +43,12 @@
|
||||
"fontFamily": "نوع الخط",
|
||||
"onlySelected": "المحدد فقط",
|
||||
"withBackground": "الخلفية",
|
||||
"exportEmbedScene": "",
|
||||
"exportEmbedScene": "تضمين المشهد",
|
||||
"exportEmbedScene_details": "سيتم حفظ بيانات المشهد في ملف PNG/SVG المصدّر بحيث يمكن استعادة المشهد منه.\nسيزيد حجم الملف المصدر.",
|
||||
"addWatermark": "إضافة \"مصنوعة بواسطة Excalidraw\"",
|
||||
"handDrawn": "رسم باليد",
|
||||
"normal": "عادي",
|
||||
"code": "الرمز",
|
||||
"code": "رمز",
|
||||
"small": "صغير",
|
||||
"medium": "متوسط",
|
||||
"large": "كبير",
|
||||
@@ -66,7 +66,7 @@
|
||||
"artist": "رسام",
|
||||
"cartoonist": "كرتوني",
|
||||
"fileTitle": "إسم الملف",
|
||||
"colorPicker": "اختيار الألوان",
|
||||
"colorPicker": "منتقي اللون",
|
||||
"canvasBackground": "خلفية اللوحة",
|
||||
"drawingCanvas": "لوحة الرسم",
|
||||
"layers": "الطبقات",
|
||||
@@ -99,10 +99,10 @@
|
||||
"flipHorizontal": "قلب عامودي",
|
||||
"flipVertical": "قلب أفقي",
|
||||
"viewMode": "نمط العرض",
|
||||
"toggleExportColorScheme": "",
|
||||
"toggleExportColorScheme": "تبديل نظام ألوان الصادرات",
|
||||
"share": "مشاركة",
|
||||
"showStroke": "",
|
||||
"showBackground": "",
|
||||
"showStroke": "إظهار منتقي لون الخط",
|
||||
"showBackground": "إظهار منتقي لون الخلفية",
|
||||
"toggleTheme": "غير النمط"
|
||||
},
|
||||
"buttons": {
|
||||
@@ -151,13 +151,14 @@
|
||||
"loadSceneOverridePrompt": "تحميل الرسم الخارجي سيحل محل المحتوى الموجود لديك. هل ترغب في المتابعة؟",
|
||||
"collabStopOverridePrompt": "إيقاف الجلسة سيؤدي إلى الكتابة فوق رسومك السابقة المخزنة داخليا. هل أنت متأكد؟\n\n(إذا كنت ترغب في الاحتفاظ برسمك المخزن داخليا، ببساطة أغلق علامة تبويب المتصفح بدلاً من ذلك.)",
|
||||
"errorLoadingLibrary": "حصل خطأ أثناء تحميل مكتبة الطرف الثالث.",
|
||||
"errorAddingToLibrary": "",
|
||||
"errorRemovingFromLibrary": "",
|
||||
"errorAddingToLibrary": "تعذر إضافة العنصر للمكتبة",
|
||||
"errorRemovingFromLibrary": "تعذر إزالة العنصر من المكتبة",
|
||||
"confirmAddLibrary": "هذا سيضيف {{numShapes}} شكل إلى مكتبتك. هل أنت متأكد؟",
|
||||
"imageDoesNotContainScene": "استيراد الصور غير مدعوم في الوقت الراهن.\n\nهل تريد استيراد مشهد؟ لا يبدو أن هذه الصورة تحتوي على أي بيانات مشهد. هل قمت بسماح هذا أثناء التصدير؟",
|
||||
"cannotRestoreFromImage": "تعذر استعادة المشهد من ملف الصورة",
|
||||
"invalidSceneUrl": "",
|
||||
"resetLibrary": ""
|
||||
"invalidSceneUrl": "تعذر استيراد المشهد من عنوان URL المتوفر. إما أنها مشوهة، أو لا تحتوي على بيانات Excalidraw JSON صالحة.",
|
||||
"resetLibrary": "هذا سوف يمسح مكتبتك. هل أنت متأكد؟",
|
||||
"invalidEncryptionKey": "مفتاح التشفير يجب أن يكون من 22 حرفاً. التعاون المباشر معطل."
|
||||
},
|
||||
"toolBar": {
|
||||
"selection": "تحديد",
|
||||
@@ -166,7 +167,7 @@
|
||||
"ellipse": "دائرة",
|
||||
"arrow": "سهم",
|
||||
"line": "خط",
|
||||
"freedraw": "",
|
||||
"freedraw": "رسم",
|
||||
"text": "نص",
|
||||
"library": "مكتبة",
|
||||
"lock": "الحفاظ على أداة التحديد نشطة بعد الرسم"
|
||||
@@ -180,6 +181,8 @@
|
||||
"linearElement": "انقر لبدء نقاط متعددة، اسحب لخط واحد",
|
||||
"freeDraw": "انقر واسحب، افرج عند الانتهاء",
|
||||
"text": "نصيحة: يمكنك أيضًا إضافة نص بالنقر المزدوج في أي مكان بأداة الاختيار",
|
||||
"text_selected": "انقر نقراً مزدوجاً أو اضغط ادخال لتعديل النص",
|
||||
"text_editing": "اضغط على Esc أو (Ctrl أو Cmd) + Enter لإنهاء التعديل",
|
||||
"linearElementMulti": "انقر فوق النقطة الأخيرة أو اضغط على Esc أو Enter للإنهاء",
|
||||
"lockAngle": "يمكنك تقييد الزاوية بالضغط على SHIFT",
|
||||
"resize": "يمكنك تقييد النسب بالضغط على SHIFT أثناء تغيير الحجم،\nاضغط على ALT لتغيير الحجم من المركز",
|
||||
@@ -214,21 +217,21 @@
|
||||
"desc_inProgressIntro": "تجري الآن المشاركة الحية.",
|
||||
"desc_shareLink": "شارك هذا الرابط مع أي شخص تريده أن يشاركك الجلسة:",
|
||||
"desc_exitSession": "إيقاف الجلسة سيؤدي إلى قطع الاتصال الخاص بك من الغرفة، ولكن ستتمكن من مواصلة العمل مع المشهد، محليا. لاحظ أن هذا لن يؤثر على الأشخاص الآخرين، و سيظلون قادرين على التعاون في إصدارهم.",
|
||||
"shareTitle": ""
|
||||
"shareTitle": "الانضمام إلى جلسة تعاون حية على Excalidraw"
|
||||
},
|
||||
"errorDialog": {
|
||||
"title": "خطأ"
|
||||
},
|
||||
"exportDialog": {
|
||||
"disk_title": "حفظ الملف للجهاز",
|
||||
"disk_details": "",
|
||||
"disk_details": "تصدير بيانات المشهد إلى ملف يمكنك الاستيراد منه لاحقاً.",
|
||||
"disk_button": "إحفظ لملف",
|
||||
"link_title": "رابط قابل للمشاركة",
|
||||
"link_details": "صدر الملف للمشاهدة فقط.",
|
||||
"link_button": "التصدير كرابط",
|
||||
"excalidrawplus_description": "",
|
||||
"excalidrawplus_button": "",
|
||||
"excalidrawplus_exportError": ""
|
||||
"excalidrawplus_description": "حفظ المشهد إلى مساحة العمل +Excalidraw الخاصة بك.",
|
||||
"excalidrawplus_button": "تصدير",
|
||||
"excalidrawplus_exportError": "تعذر التصدير إلى +Excalidraw في الوقت الحالي..."
|
||||
},
|
||||
"helpDialog": {
|
||||
"blog": "اقرأ مدونتنا",
|
||||
@@ -236,16 +239,18 @@
|
||||
"curvedArrow": "سهم مائل",
|
||||
"curvedLine": "خط مائل",
|
||||
"documentation": "دليل الاستخدام",
|
||||
"doubleClick": "انقر مرتين",
|
||||
"drag": "اسحب",
|
||||
"editor": "المحرر",
|
||||
"editSelectedShape": "تعديل الشكل المحدد (النص/السهم/الخط)",
|
||||
"github": "عثرت على مشكلة؟ إرسال",
|
||||
"howto": "اتبع التعليمات",
|
||||
"or": "أو",
|
||||
"preventBinding": "منع ارتبط السهم",
|
||||
"shapes": "أشكال",
|
||||
"shortcuts": "اختصارات لوحة المفاتيح",
|
||||
"textFinish": "الانتهاء من التحرير (نص)",
|
||||
"textNewLine": "اضف سطر جديد (نص)",
|
||||
"textFinish": "إنهاء التعديل (محرر النص)",
|
||||
"textNewLine": "أضف سطر جديد (محرر نص)",
|
||||
"title": "المساعدة",
|
||||
"view": "عرض",
|
||||
"zoomToFit": "تكبير للملائمة",
|
||||
@@ -271,12 +276,59 @@
|
||||
"width": "العرض"
|
||||
},
|
||||
"toast": {
|
||||
"copyStyles": "نسخ النمط.",
|
||||
"copyStyles": "نسخت الانماط.",
|
||||
"copyToClipboard": "نسخ إلى الحافظة.",
|
||||
"copyToClipboardAsPng": "تم نسخ {{exportSelection}} إلى الحافظة بصيغةPNG\n({{exportColorScheme}})",
|
||||
"copyToClipboardAsPng": "تم نسخ {{exportSelection}} إلى الحافظة بصيغة PNG\n({{exportColorScheme}})",
|
||||
"fileSaved": "تم حفظ الملف.",
|
||||
"fileSavedToFilename": "حفظ باسم {filename}",
|
||||
"canvas": "لوحة الرسم",
|
||||
"selection": "العنصر المحدد"
|
||||
},
|
||||
"colors": {
|
||||
"ffffff": "أبيض",
|
||||
"f8f9fa": "رمادي 0",
|
||||
"f1f3f5": "رمادي 1",
|
||||
"fff5f5": "أحمر 0",
|
||||
"fff0f6": "وردي 0",
|
||||
"f8f0fc": "عنبي 0",
|
||||
"f3f0ff": "بنفسجي 0",
|
||||
"edf2ff": "نيلي 0",
|
||||
"e7f5ff": "أزرق 0",
|
||||
"e3fafc": "سماوي 0",
|
||||
"e6fcf5": "تركواز 0",
|
||||
"ebfbee": "أخضر 0",
|
||||
"f4fce3": "ليموني 0",
|
||||
"fff9db": "أصفر 0",
|
||||
"fff4e6": "برتقالي 0",
|
||||
"transparent": "شفاف",
|
||||
"ced4da": "رمادي 4",
|
||||
"868e96": "رمادي 6",
|
||||
"fa5252": "أحمر 6",
|
||||
"e64980": "وردي 6",
|
||||
"be4bdb": "عنبي 6",
|
||||
"7950f2": "بنفسجي 6",
|
||||
"4c6ef5": "نيلي 6",
|
||||
"228be6": "أزرق 6",
|
||||
"15aabf": "سماوي 6",
|
||||
"12b886": "تركواز 6",
|
||||
"40c057": "أخضر 6",
|
||||
"82c91e": "ليموني 6",
|
||||
"fab005": "أصفر 6",
|
||||
"fd7e14": "برتقالي 6",
|
||||
"000000": "أسود",
|
||||
"343a40": "رمادي 8",
|
||||
"495057": "رمادي 7",
|
||||
"c92a2a": "أحمر 9",
|
||||
"a61e4d": "وردي 9",
|
||||
"862e9c": "عنبي 9",
|
||||
"5f3dc4": "بنفسجي 9",
|
||||
"364fc7": "نيلي 9",
|
||||
"1864ab": "أزرق 9",
|
||||
"0b7285": "سماوي 9",
|
||||
"087f5b": "تركواز 9",
|
||||
"2b8a3e": "أخضر 9",
|
||||
"5c940d": "ليموني 9",
|
||||
"e67700": "أصفر 9",
|
||||
"d9480f": "برتقالي 9"
|
||||
}
|
||||
}
|
||||
|
@@ -157,7 +157,8 @@
|
||||
"imageDoesNotContainScene": "Импортирането на картинки не се поддържва в момента.\n\nИскате да импортнете сцена? Тази картинка не съдържа данни от сцена. Разрешили ли сте последното при експортирането?",
|
||||
"cannotRestoreFromImage": "Не може да бъде възстановена сцена от този файл",
|
||||
"invalidSceneUrl": "",
|
||||
"resetLibrary": ""
|
||||
"resetLibrary": "",
|
||||
"invalidEncryptionKey": ""
|
||||
},
|
||||
"toolBar": {
|
||||
"selection": "Селекция",
|
||||
@@ -180,6 +181,8 @@
|
||||
"linearElement": "Кликнете, за да стартирате няколко точки, плъзнете за една линия",
|
||||
"freeDraw": "Натиснете и влачете, пуснете като сте готови",
|
||||
"text": "Подсказка: Можете също да добавите текст като натиснете някъде два път с инструмента за селекция",
|
||||
"text_selected": "",
|
||||
"text_editing": "",
|
||||
"linearElementMulti": "Кликнете върху последната точка или натиснете Escape или Enter, за да завършите",
|
||||
"lockAngle": "Можете да ограничите ъгъла, като задържите SHIFT",
|
||||
"resize": "Може да ограничите при преоразмеряване като задържите SHIFT,\nзадръжте ALT за преоразмерите през центъра",
|
||||
@@ -236,16 +239,18 @@
|
||||
"curvedArrow": "Извита стрелка",
|
||||
"curvedLine": "Извита линия",
|
||||
"documentation": "Документация",
|
||||
"doubleClick": "",
|
||||
"drag": "плъзнете",
|
||||
"editor": "Редактор",
|
||||
"editSelectedShape": "",
|
||||
"github": "Намерихте проблем? Изпратете",
|
||||
"howto": "Следвайте нашите ръководства",
|
||||
"or": "или",
|
||||
"preventBinding": "Спри прилепяне на стрелките",
|
||||
"shapes": "Фигури",
|
||||
"shortcuts": "Клавиши за бърз достъп",
|
||||
"textFinish": "Завършете редактирането (текст)",
|
||||
"textNewLine": "Добавяне на нов ред (текст)",
|
||||
"textFinish": "",
|
||||
"textNewLine": "",
|
||||
"title": "Помощ",
|
||||
"view": "Преглед",
|
||||
"zoomToFit": "Приближи докато се виждат всички елементи",
|
||||
@@ -278,5 +283,52 @@
|
||||
"fileSavedToFilename": "",
|
||||
"canvas": "",
|
||||
"selection": ""
|
||||
},
|
||||
"colors": {
|
||||
"ffffff": "",
|
||||
"f8f9fa": "",
|
||||
"f1f3f5": "",
|
||||
"fff5f5": "",
|
||||
"fff0f6": "",
|
||||
"f8f0fc": "",
|
||||
"f3f0ff": "",
|
||||
"edf2ff": "",
|
||||
"e7f5ff": "",
|
||||
"e3fafc": "",
|
||||
"e6fcf5": "",
|
||||
"ebfbee": "",
|
||||
"f4fce3": "",
|
||||
"fff9db": "",
|
||||
"fff4e6": "",
|
||||
"transparent": "",
|
||||
"ced4da": "",
|
||||
"868e96": "",
|
||||
"fa5252": "",
|
||||
"e64980": "",
|
||||
"be4bdb": "",
|
||||
"7950f2": "",
|
||||
"4c6ef5": "",
|
||||
"228be6": "",
|
||||
"15aabf": "",
|
||||
"12b886": "",
|
||||
"40c057": "",
|
||||
"82c91e": "",
|
||||
"fab005": "",
|
||||
"fd7e14": "",
|
||||
"000000": "",
|
||||
"343a40": "",
|
||||
"495057": "",
|
||||
"c92a2a": "",
|
||||
"a61e4d": "",
|
||||
"862e9c": "",
|
||||
"5f3dc4": "",
|
||||
"364fc7": "",
|
||||
"1864ab": "",
|
||||
"0b7285": "",
|
||||
"087f5b": "",
|
||||
"2b8a3e": "",
|
||||
"5c940d": "",
|
||||
"e67700": "",
|
||||
"d9480f": ""
|
||||
}
|
||||
}
|
||||
|
@@ -1,29 +1,29 @@
|
||||
{
|
||||
"labels": {
|
||||
"paste": "Enganxar",
|
||||
"pasteCharts": "Enganxar diagrames",
|
||||
"selectAll": "Seleccionar tot",
|
||||
"multiSelect": "Afegir element a la selecció",
|
||||
"moveCanvas": "Moure el llenç",
|
||||
"cut": "Tallar",
|
||||
"copy": "Copiar",
|
||||
"copyAsPng": "Copiar al porta-retalls com a PNG",
|
||||
"copyAsSvg": "Copiar al porta-retalls com a SVG",
|
||||
"bringForward": "Portar endavant",
|
||||
"sendToBack": "Enviar endarrere",
|
||||
"bringToFront": "Portar al capdavant",
|
||||
"sendBackward": "Enviar al fons",
|
||||
"delete": "Eliminar",
|
||||
"copyStyles": "Copiar estils",
|
||||
"pasteStyles": "Enganxar estils",
|
||||
"paste": "Enganxa",
|
||||
"pasteCharts": "Enganxa els diagrames",
|
||||
"selectAll": "Selecciona-ho tot",
|
||||
"multiSelect": "Afegeix un element a la selecció",
|
||||
"moveCanvas": "Mou el llenç",
|
||||
"cut": "Retalla",
|
||||
"copy": "Copia",
|
||||
"copyAsPng": "Copia al porta-retalls com a PNG",
|
||||
"copyAsSvg": "Copia al porta-retalls com a SVG",
|
||||
"bringForward": "Porta endavant",
|
||||
"sendToBack": "Envia enrere",
|
||||
"bringToFront": "Porta al davant",
|
||||
"sendBackward": "Envia al fons",
|
||||
"delete": "Elimina",
|
||||
"copyStyles": "Copia els estils",
|
||||
"pasteStyles": "Enganxa els estils",
|
||||
"stroke": "Color del traç",
|
||||
"background": "Color del fons",
|
||||
"fill": "Estil del fons",
|
||||
"strokeWidth": "Amplada del traç",
|
||||
"strokeShape": "Estil del traç",
|
||||
"strokeShape_gel": "Bolígraf de gel",
|
||||
"strokeShape_fountain": "",
|
||||
"strokeShape_brush": "",
|
||||
"strokeShape_fountain": "Bolígraf de font",
|
||||
"strokeShape_brush": "Bolígraf de raspall",
|
||||
"strokeStyle": "Estil del traç",
|
||||
"strokeStyle_solid": "Sòlid",
|
||||
"strokeStyle_dashed": "Guions",
|
||||
@@ -43,9 +43,9 @@
|
||||
"fontFamily": "Tipus de lletra",
|
||||
"onlySelected": "Només seleccionats",
|
||||
"withBackground": "Fons",
|
||||
"exportEmbedScene": "",
|
||||
"exportEmbedScene": "Insereix l'escena",
|
||||
"exportEmbedScene_details": "Les dades de l’escena es desaran al fitxer PNG/SVG de manera que es pugui restaurar l’escena.\nAugmentarà la mida del fitxer exportat.",
|
||||
"addWatermark": "Afegir \"Fet amb Excalidraw\"",
|
||||
"addWatermark": "Afegeix-hi «Fet amb Excalidraw»",
|
||||
"handDrawn": "Dibuixat a mà",
|
||||
"normal": "Normal",
|
||||
"code": "Codi",
|
||||
@@ -73,75 +73,75 @@
|
||||
"actions": "Accions",
|
||||
"language": "Llengua",
|
||||
"liveCollaboration": "Col·laboració en directe",
|
||||
"duplicateSelection": "Duplicar",
|
||||
"duplicateSelection": "Duplica",
|
||||
"untitled": "Sense títol",
|
||||
"name": "Nom",
|
||||
"yourName": "El teu nom",
|
||||
"yourName": "El vostre nom",
|
||||
"madeWithExcalidraw": "Fet amb Excalidraw",
|
||||
"group": "Agrupar la selecció",
|
||||
"ungroup": "Desagrupar la selecció",
|
||||
"group": "Agrupa la selecció",
|
||||
"ungroup": "Desagrupa la selecció",
|
||||
"collaborators": "Col·laboradors",
|
||||
"showGrid": "Mostra la graella",
|
||||
"addToLibrary": "Afegir a la biblioteca",
|
||||
"removeFromLibrary": "Eliminar de la biblioteca",
|
||||
"libraryLoadingMessage": "Carregant la biblioteca…",
|
||||
"libraries": "Explorar biblioteques",
|
||||
"loadingScene": "Carregant escena…",
|
||||
"align": "Alinear",
|
||||
"alignTop": "Alinear a dalt",
|
||||
"alignBottom": "Alinear a baix",
|
||||
"alignLeft": "Alinear a l’esquerra",
|
||||
"alignRight": "Alinear a la dreta",
|
||||
"centerVertically": "Centrar verticalment",
|
||||
"centerHorizontally": "Centrar horitzontalment",
|
||||
"distributeHorizontally": "Distribuir horitzontalment",
|
||||
"distributeVertically": "Distribuir verticalment",
|
||||
"libraryLoadingMessage": "S'està carregant la biblioteca…",
|
||||
"libraries": "Explora les biblioteques",
|
||||
"loadingScene": "S'està carregant l'escena…",
|
||||
"align": "Alinea",
|
||||
"alignTop": "Alinea a la part superior",
|
||||
"alignBottom": "Alinea a la part inferior",
|
||||
"alignLeft": "Alinea a l’esquerra",
|
||||
"alignRight": "Alinea a la dreta",
|
||||
"centerVertically": "Centra verticalment",
|
||||
"centerHorizontally": "Centra horitzontalment",
|
||||
"distributeHorizontally": "Distribueix horitzontalment",
|
||||
"distributeVertically": "Distribueix verticalment",
|
||||
"flipHorizontal": "Capgira horitzontalment",
|
||||
"flipVertical": "Capgira verticalment",
|
||||
"viewMode": "Mode de visualització",
|
||||
"toggleExportColorScheme": "Canvia l'esquema de colors de l'exportació",
|
||||
"share": "Compartir",
|
||||
"showStroke": "",
|
||||
"showBackground": "",
|
||||
"toggleTheme": ""
|
||||
"share": "Comparteix",
|
||||
"showStroke": "Mostra el selector de color del traç",
|
||||
"showBackground": "Mostra el selector de color de fons",
|
||||
"toggleTheme": "Activa o desactiva el tema"
|
||||
},
|
||||
"buttons": {
|
||||
"clearReset": "Netejar el llenç",
|
||||
"clearReset": "Neteja el llenç",
|
||||
"exportJSON": "Exporta a un fitxer",
|
||||
"exportImage": "Desa com a imatge",
|
||||
"export": "Exportar",
|
||||
"exportToPng": "Exportar a PNG",
|
||||
"exportToSvg": "Exportar a SNG",
|
||||
"copyToClipboard": "Copiar al porta-retalls",
|
||||
"copyPngToClipboard": "Copiar PNG al porta-retalls",
|
||||
"export": "Exporta",
|
||||
"exportToPng": "Exporta a PNG",
|
||||
"exportToSvg": "Exporta a SNG",
|
||||
"copyToClipboard": "Copia al porta-retalls",
|
||||
"copyPngToClipboard": "Copia el PNG al porta-retalls",
|
||||
"scale": "Escala",
|
||||
"save": "Desa al fitxer actual",
|
||||
"saveAs": "Desar com",
|
||||
"load": "Carregar",
|
||||
"getShareableLink": "Obtenir enllaç per compartir",
|
||||
"close": "Tancar",
|
||||
"selectLanguage": "Triar idioma",
|
||||
"scrollBackToContent": "Tornar al contingut",
|
||||
"zoomIn": "Ampliar",
|
||||
"zoomOut": "Reduir",
|
||||
"resetZoom": "Restablir zoom",
|
||||
"saveAs": "Anomena i desa",
|
||||
"load": "Carrega",
|
||||
"getShareableLink": "Obté l'enllaç per a compartir",
|
||||
"close": "Tanca",
|
||||
"selectLanguage": "Trieu la llengua",
|
||||
"scrollBackToContent": "Torna al contingut",
|
||||
"zoomIn": "Apropa't",
|
||||
"zoomOut": "Allunya't",
|
||||
"resetZoom": "Restableix el zoom",
|
||||
"menu": "Menú",
|
||||
"done": "Fet",
|
||||
"edit": "Editar",
|
||||
"undo": "Desfer",
|
||||
"redo": "Refer",
|
||||
"resetLibrary": "Restablir biblioteca",
|
||||
"createNewRoom": "Crear sala nova",
|
||||
"edit": "Edita",
|
||||
"undo": "Desfés",
|
||||
"redo": "Refés",
|
||||
"resetLibrary": "Restableix la biblioteca",
|
||||
"createNewRoom": "Crea una sala nova",
|
||||
"fullScreen": "Pantalla completa",
|
||||
"darkMode": "Mode fosc",
|
||||
"lightMode": "Mode clar",
|
||||
"zenMode": "Mode Zen",
|
||||
"exitZenMode": "Sortir de modo zen"
|
||||
"zenMode": "Mode zen",
|
||||
"exitZenMode": "Surt de mode zen"
|
||||
},
|
||||
"alerts": {
|
||||
"clearReset": "Tot el llenç s'esborrarà. Estàs segur?",
|
||||
"couldNotCreateShareableLink": "No s'ha pogut crear un enllaç per compartir.",
|
||||
"couldNotCreateShareableLinkTooBig": "No s’ha pogut crear un enllaç per compartir: l’escena és massa gran",
|
||||
"clearReset": "S'esborrarà tot el llenç. N'esteu segur?",
|
||||
"couldNotCreateShareableLink": "No s'ha pogut crear un enllaç per a compartir.",
|
||||
"couldNotCreateShareableLinkTooBig": "No s’ha pogut crear un enllaç per a compartir: l’escena és massa gran",
|
||||
"couldNotLoadInvalidFile": "No s'ha pogut carregar un fitxer no vàlid",
|
||||
"importBackendFailed": "Importació fallida.",
|
||||
"cannotExportEmptyCanvas": "No es pot exportar un llenç buit.",
|
||||
@@ -151,13 +151,14 @@
|
||||
"loadSceneOverridePrompt": "Si carregas aquest dibuix extern, substituirá el que tens. Vols continuar?",
|
||||
"collabStopOverridePrompt": "Aturar la sessió provocarà la sobreescriptura del dibuix previ, que hi ha desat en l'emmagatzematge local. N'esteu segur?\n\n(Si voleu conservar el dibuix local, tanqueu la pentanya del navegador en comptes d'aturar la sessió).",
|
||||
"errorLoadingLibrary": "S'ha produït un error en carregar la biblioteca de tercers.",
|
||||
"errorAddingToLibrary": "",
|
||||
"errorRemovingFromLibrary": "",
|
||||
"errorAddingToLibrary": "No s'ha pogut afegir l'element a la biblioteca",
|
||||
"errorRemovingFromLibrary": "No s'ha pogut eliminar l'element de la biblioteca",
|
||||
"confirmAddLibrary": "Això afegirà {{numShapes}} forma(es) a la vostra biblioteca. Estàs segur?",
|
||||
"imageDoesNotContainScene": "En aquest moment no s’admet la importació d’imatges.\n\nVolies importar una escena? Sembla que aquesta imatge no conté cap dada d’escena. Ho has activat durant l'exportació?",
|
||||
"cannotRestoreFromImage": "L’escena no s’ha pogut restaurar des d’aquest fitxer d’imatge",
|
||||
"invalidSceneUrl": "No s'ha pogut importar l'escena des de l'adreça URL proporcionada. Està malformada o no conté dades Excalidraw JSON vàlides.",
|
||||
"resetLibrary": "Tot el llenç s'esborrarà. Estàs segur?"
|
||||
"resetLibrary": "Això buidarà la biblioteca. N'esteu segur?",
|
||||
"invalidEncryptionKey": ""
|
||||
},
|
||||
"toolBar": {
|
||||
"selection": "Selecció",
|
||||
@@ -177,56 +178,58 @@
|
||||
"shapes": "Formes"
|
||||
},
|
||||
"hints": {
|
||||
"linearElement": "Fer clic per dibuixar múltiples punts; arrossegar per una sola línea",
|
||||
"freeDraw": "Fer clic i arrosegar, deixar anar al punt final",
|
||||
"text": "Consell: també pots afegir text fent doble clic a qualsevol lloc amb l'eina de selecció",
|
||||
"linearElementMulti": "Fer clic a l'ultim punt, o polsar Escape o Enter per acabar",
|
||||
"linearElement": "Feu clic per a dibuixar múltiples punts; arrossegueu per a una sola línia",
|
||||
"freeDraw": "Feu clic i arrossegueu, deixeu anar per a finalitzar",
|
||||
"text": "Consell: també podeu afegir text fent doble clic en qualsevol lloc amb l'eina de selecció",
|
||||
"text_selected": "Feu doble clic o premeu Retorn per a editar el text",
|
||||
"text_editing": "Premeu Escapada o Ctrl+Retorn (o Ordre+Retorn) per a finalitzar l'edició",
|
||||
"linearElementMulti": "Feu clic a l'ultim punt, o pitgeu Esc o Retorn per a finalitzar",
|
||||
"lockAngle": "Per restringir els angles, mantenir premut el majúscul (SHIFT)",
|
||||
"resize": "Per restringir les proporcions mentres es canvia la mida, mantenir premut el majúscul (SHIFT); per canviar la mida des del centre, mantenir premut ALT",
|
||||
"rotate": "Per restringir els angles mentre gira, mantenir premut el majúscul (SHIFT)",
|
||||
"lineEditor_info": "Fes doble clic o premi Enter per editar punts",
|
||||
"lineEditor_pointSelected": "Premi Suprimir per eliminar el punt, CtrlOrCmd+D per duplicar-lo, o arrosega'l per moure'l",
|
||||
"lineEditor_pointSelected": "Premeu Suprimir per a eliminar el punt, CtrlOrCmd+D per a duplicar-lo, o arrossegueu-lo per a moure'l",
|
||||
"lineEditor_nothingSelected": "Selecciona un punt per moure o eliminar, o manté premut Alt i fes clic per afegir punts nous"
|
||||
},
|
||||
"canvasError": {
|
||||
"cannotShowPreview": "No es pot mostrar la vista prèvia",
|
||||
"cannotShowPreview": "No es pot mostrar la previsualització",
|
||||
"canvasTooBig": "Pot ser que el llenç sigui massa gran.",
|
||||
"canvasTooBigTip": "Consell: prova d’acostar una mica els elements més allunyats."
|
||||
"canvasTooBigTip": "Consell: proveu d’acostar una mica els elements més allunyats."
|
||||
},
|
||||
"errorSplash": {
|
||||
"headingMain_pre": "S'ha produït un error. Intentar ",
|
||||
"headingMain_pre": "S'ha produït un error. Proveu ",
|
||||
"headingMain_button": "recarregar la pàgina.",
|
||||
"clearCanvasMessage": "Si la recarrega no funciona, intentar ",
|
||||
"clearCanvasMessage": "Si la recàrrega no funciona, proveu ",
|
||||
"clearCanvasMessage_button": "esborrar el llenç.",
|
||||
"clearCanvasCaveat": " Això resultarà en pèrdua de feina ",
|
||||
"clearCanvasCaveat": " Això resultarà en la pèrdua de feina ",
|
||||
"trackedToSentry_pre": "L'error amb l'identificador ",
|
||||
"trackedToSentry_post": " s'ha rastrejat en el nostre sistema.",
|
||||
"openIssueMessage_pre": "Estàvem molt amb compte de no incloure la teva informació de l'escena en l'error. Si la teva escena no és privada, pots fer el seguiment al nostre ",
|
||||
"openIssueMessage_pre": "Anàvem amb molta cura de no incloure la informació de la vostra escena en l'error. Si l'escena no és privada, podeu fer-ne el seguiment al nostre ",
|
||||
"openIssueMessage_button": "rastrejador d'errors.",
|
||||
"openIssueMessage_post": " Si us plau incloure la informació a continuació copiant i enganxant a GitHub Issues.",
|
||||
"openIssueMessage_post": " Incloeu la informació a continuació copiant i enganxant a GitHub Issues.",
|
||||
"sceneContent": "Contingut de l'escena:"
|
||||
},
|
||||
"roomDialog": {
|
||||
"desc_intro": "Pots convidar persones a la teva escena actual a col·laborar amb tu.",
|
||||
"desc_privacy": "No et preocupis, la sessió utilitza el xifratge de punta a punta, de manera que qualsevol cosa que dibuixis quedarà privada. Ni tan sols el nostre servidor podrà veure el que fas.",
|
||||
"button_startSession": "Iniciar sessió",
|
||||
"button_stopSession": "Aturar sessió",
|
||||
"desc_intro": "Podeu convidar persones a la vostra escena actual a col·laborar amb vós.",
|
||||
"desc_privacy": "No us preocupeu, la sessió utilitza el xifratge de punta a punta, de manera que qualsevol cosa que dibuixeu romandrà privada. Ni tan sols el nostre servidor podrà veure què feu.",
|
||||
"button_startSession": "Inicia la sessió",
|
||||
"button_stopSession": "Atura la sessió",
|
||||
"desc_inProgressIntro": "La sessió de col·laboració en directe està en marxa.",
|
||||
"desc_shareLink": "Comparteix aquest enllaç amb qualsevol persona amb qui vulguis col·laborar:",
|
||||
"desc_exitSession": "Si aturas la sessió, et desconectarás de la sala, però podrás continuar treballant amb el dibuix localment. Tingues en compte que això no afectarà a altres persones, i encara podran col·laborar en la seva versió.",
|
||||
"desc_shareLink": "Comparteix aquest enllaç amb qualsevol persona amb qui vulgueu col·laborar:",
|
||||
"desc_exitSession": "Si atureu la sessió, us desconectareu de la sala, però podreu continuar treballant amb el dibuix localment. Tingues en compte que això no afectarà a altres persones, i encara podran col·laborar en la seva versió.",
|
||||
"shareTitle": "Uniu-vos a una sessió de col·laboració en directe a Excalidraw"
|
||||
},
|
||||
"errorDialog": {
|
||||
"title": "Error"
|
||||
},
|
||||
"exportDialog": {
|
||||
"disk_title": "Desa la disc",
|
||||
"disk_details": "",
|
||||
"disk_title": "Desa al disc",
|
||||
"disk_details": "Exporta les dades de l'escena a un fitxer que després podreu importar.",
|
||||
"disk_button": "Desa en un fitxer",
|
||||
"link_title": "",
|
||||
"link_details": "",
|
||||
"link_button": "",
|
||||
"excalidrawplus_description": "",
|
||||
"link_title": "Enllaç per a compartir",
|
||||
"link_details": "Exporta com a un enllaç de només lectura.",
|
||||
"link_button": "Exporta a un enllaç",
|
||||
"excalidrawplus_description": "Desa l'escena en el vostre espai de treball Excalidraw+.",
|
||||
"excalidrawplus_button": "Exporta",
|
||||
"excalidrawplus_exportError": "No és possible exportar a Excalidraw+ ara mateix..."
|
||||
},
|
||||
@@ -236,16 +239,18 @@
|
||||
"curvedArrow": "Fletxa corba",
|
||||
"curvedLine": "Línia corba",
|
||||
"documentation": "Documentació",
|
||||
"doubleClick": "doble clic",
|
||||
"drag": "arrossega",
|
||||
"editor": "Editor",
|
||||
"editSelectedShape": "Edita la forma seleccionada (text, fletxa o línia)",
|
||||
"github": "Hi heu trobat un problema? Informeu-ne",
|
||||
"howto": "Seguiu les nostres guies",
|
||||
"or": "o",
|
||||
"preventBinding": "Prevenir vinculació de la fletxa",
|
||||
"shapes": "Formes",
|
||||
"shortcuts": "Dreceres de teclat",
|
||||
"textFinish": "Acaba d'editar (text)",
|
||||
"textNewLine": "Afegeix línea nova (text)",
|
||||
"textFinish": "Finalitza l'edició (editor de text)",
|
||||
"textNewLine": "Afegeix una línia nova (editor de text)",
|
||||
"title": "Ajuda",
|
||||
"view": "Visualització",
|
||||
"zoomToFit": "Zoom per veure tots els elements",
|
||||
@@ -278,5 +283,52 @@
|
||||
"fileSavedToFilename": "S'ha desat a {filename}",
|
||||
"canvas": "el llenç",
|
||||
"selection": "la selecció"
|
||||
},
|
||||
"colors": {
|
||||
"ffffff": "",
|
||||
"f8f9fa": "",
|
||||
"f1f3f5": "",
|
||||
"fff5f5": "",
|
||||
"fff0f6": "",
|
||||
"f8f0fc": "",
|
||||
"f3f0ff": "",
|
||||
"edf2ff": "",
|
||||
"e7f5ff": "",
|
||||
"e3fafc": "",
|
||||
"e6fcf5": "",
|
||||
"ebfbee": "",
|
||||
"f4fce3": "",
|
||||
"fff9db": "",
|
||||
"fff4e6": "",
|
||||
"transparent": "",
|
||||
"ced4da": "",
|
||||
"868e96": "",
|
||||
"fa5252": "",
|
||||
"e64980": "",
|
||||
"be4bdb": "",
|
||||
"7950f2": "",
|
||||
"4c6ef5": "",
|
||||
"228be6": "",
|
||||
"15aabf": "",
|
||||
"12b886": "",
|
||||
"40c057": "",
|
||||
"82c91e": "",
|
||||
"fab005": "",
|
||||
"fd7e14": "",
|
||||
"000000": "",
|
||||
"343a40": "",
|
||||
"495057": "",
|
||||
"c92a2a": "",
|
||||
"a61e4d": "",
|
||||
"862e9c": "",
|
||||
"5f3dc4": "",
|
||||
"364fc7": "",
|
||||
"1864ab": "",
|
||||
"0b7285": "",
|
||||
"087f5b": "",
|
||||
"2b8a3e": "",
|
||||
"5c940d": "",
|
||||
"e67700": "",
|
||||
"d9480f": ""
|
||||
}
|
||||
}
|
||||
|
@@ -157,7 +157,8 @@
|
||||
"imageDoesNotContainScene": "",
|
||||
"cannotRestoreFromImage": "",
|
||||
"invalidSceneUrl": "",
|
||||
"resetLibrary": ""
|
||||
"resetLibrary": "",
|
||||
"invalidEncryptionKey": ""
|
||||
},
|
||||
"toolBar": {
|
||||
"selection": "Výběr",
|
||||
@@ -180,6 +181,8 @@
|
||||
"linearElement": "",
|
||||
"freeDraw": "",
|
||||
"text": "",
|
||||
"text_selected": "",
|
||||
"text_editing": "",
|
||||
"linearElementMulti": "",
|
||||
"lockAngle": "",
|
||||
"resize": "",
|
||||
@@ -236,8 +239,10 @@
|
||||
"curvedArrow": "",
|
||||
"curvedLine": "",
|
||||
"documentation": "",
|
||||
"doubleClick": "",
|
||||
"drag": "tažení",
|
||||
"editor": "",
|
||||
"editSelectedShape": "",
|
||||
"github": "",
|
||||
"howto": "",
|
||||
"or": "nebo",
|
||||
@@ -278,5 +283,52 @@
|
||||
"fileSavedToFilename": "",
|
||||
"canvas": "plátno",
|
||||
"selection": "výběr"
|
||||
},
|
||||
"colors": {
|
||||
"ffffff": "",
|
||||
"f8f9fa": "",
|
||||
"f1f3f5": "",
|
||||
"fff5f5": "",
|
||||
"fff0f6": "",
|
||||
"f8f0fc": "",
|
||||
"f3f0ff": "",
|
||||
"edf2ff": "",
|
||||
"e7f5ff": "",
|
||||
"e3fafc": "",
|
||||
"e6fcf5": "",
|
||||
"ebfbee": "",
|
||||
"f4fce3": "",
|
||||
"fff9db": "",
|
||||
"fff4e6": "",
|
||||
"transparent": "",
|
||||
"ced4da": "",
|
||||
"868e96": "",
|
||||
"fa5252": "",
|
||||
"e64980": "",
|
||||
"be4bdb": "",
|
||||
"7950f2": "",
|
||||
"4c6ef5": "",
|
||||
"228be6": "",
|
||||
"15aabf": "",
|
||||
"12b886": "",
|
||||
"40c057": "",
|
||||
"82c91e": "",
|
||||
"fab005": "",
|
||||
"fd7e14": "",
|
||||
"000000": "",
|
||||
"343a40": "",
|
||||
"495057": "",
|
||||
"c92a2a": "",
|
||||
"a61e4d": "",
|
||||
"862e9c": "",
|
||||
"5f3dc4": "",
|
||||
"364fc7": "",
|
||||
"1864ab": "",
|
||||
"0b7285": "",
|
||||
"087f5b": "",
|
||||
"2b8a3e": "",
|
||||
"5c940d": "",
|
||||
"e67700": "",
|
||||
"d9480f": ""
|
||||
}
|
||||
}
|
||||
|
334
src/locales/da-DK.json
Normal file
334
src/locales/da-DK.json
Normal file
@@ -0,0 +1,334 @@
|
||||
{
|
||||
"labels": {
|
||||
"paste": "Indsæt",
|
||||
"pasteCharts": "",
|
||||
"selectAll": "Marker alle",
|
||||
"multiSelect": "",
|
||||
"moveCanvas": "",
|
||||
"cut": "",
|
||||
"copy": "Kopier",
|
||||
"copyAsPng": "Kopier til klippebord som PNG",
|
||||
"copyAsSvg": "Kopier til klippebord som SVG",
|
||||
"bringForward": "",
|
||||
"sendToBack": "",
|
||||
"bringToFront": "",
|
||||
"sendBackward": "",
|
||||
"delete": "Fjern",
|
||||
"copyStyles": "",
|
||||
"pasteStyles": "",
|
||||
"stroke": "Linje",
|
||||
"background": "Baggrund",
|
||||
"fill": "",
|
||||
"strokeWidth": "Linjebredde",
|
||||
"strokeShape": "Linjeform",
|
||||
"strokeShape_gel": "",
|
||||
"strokeShape_fountain": "",
|
||||
"strokeShape_brush": "",
|
||||
"strokeStyle": "",
|
||||
"strokeStyle_solid": "",
|
||||
"strokeStyle_dashed": "",
|
||||
"strokeStyle_dotted": "",
|
||||
"sloppiness": "",
|
||||
"opacity": "",
|
||||
"textAlign": "",
|
||||
"edges": "",
|
||||
"sharp": "",
|
||||
"round": "",
|
||||
"arrowheads": "",
|
||||
"arrowhead_none": "",
|
||||
"arrowhead_arrow": "Pil",
|
||||
"arrowhead_bar": "",
|
||||
"arrowhead_dot": "",
|
||||
"fontSize": "",
|
||||
"fontFamily": "",
|
||||
"onlySelected": "",
|
||||
"withBackground": "",
|
||||
"exportEmbedScene": "",
|
||||
"exportEmbedScene_details": "",
|
||||
"addWatermark": "",
|
||||
"handDrawn": "",
|
||||
"normal": "",
|
||||
"code": "",
|
||||
"small": "",
|
||||
"medium": "",
|
||||
"large": "",
|
||||
"veryLarge": "",
|
||||
"solid": "",
|
||||
"hachure": "",
|
||||
"crossHatch": "",
|
||||
"thin": "",
|
||||
"bold": "Fed",
|
||||
"left": "Venstre",
|
||||
"center": "Centrere",
|
||||
"right": "Højre",
|
||||
"extraBold": "Extra fed",
|
||||
"architect": "",
|
||||
"artist": "",
|
||||
"cartoonist": "",
|
||||
"fileTitle": "Filnavn",
|
||||
"colorPicker": "Farvevælger",
|
||||
"canvasBackground": "",
|
||||
"drawingCanvas": "",
|
||||
"layers": "",
|
||||
"actions": "",
|
||||
"language": "Sprog",
|
||||
"liveCollaboration": "Direkte samarbejde",
|
||||
"duplicateSelection": "",
|
||||
"untitled": "",
|
||||
"name": "",
|
||||
"yourName": "Dit navn",
|
||||
"madeWithExcalidraw": "Fremstillet med Excalidraw",
|
||||
"group": "",
|
||||
"ungroup": "",
|
||||
"collaborators": "",
|
||||
"showGrid": "",
|
||||
"addToLibrary": "",
|
||||
"removeFromLibrary": "",
|
||||
"libraryLoadingMessage": "",
|
||||
"libraries": "",
|
||||
"loadingScene": "",
|
||||
"align": "",
|
||||
"alignTop": "",
|
||||
"alignBottom": "",
|
||||
"alignLeft": "",
|
||||
"alignRight": "",
|
||||
"centerVertically": "",
|
||||
"centerHorizontally": "",
|
||||
"distributeHorizontally": "",
|
||||
"distributeVertically": "",
|
||||
"flipHorizontal": "",
|
||||
"flipVertical": "",
|
||||
"viewMode": "",
|
||||
"toggleExportColorScheme": "",
|
||||
"share": "Del",
|
||||
"showStroke": "",
|
||||
"showBackground": "",
|
||||
"toggleTheme": ""
|
||||
},
|
||||
"buttons": {
|
||||
"clearReset": "",
|
||||
"exportJSON": "",
|
||||
"exportImage": "",
|
||||
"export": "",
|
||||
"exportToPng": "",
|
||||
"exportToSvg": "",
|
||||
"copyToClipboard": "Kopier til klippebord",
|
||||
"copyPngToClipboard": "Kopier PNG til klippebord",
|
||||
"scale": "",
|
||||
"save": "",
|
||||
"saveAs": "",
|
||||
"load": "",
|
||||
"getShareableLink": "",
|
||||
"close": "",
|
||||
"selectLanguage": "Vælg sprog",
|
||||
"scrollBackToContent": "Scroll tilbage til indhold",
|
||||
"zoomIn": "Zoom ind",
|
||||
"zoomOut": "Zoom ud",
|
||||
"resetZoom": "Nulstil zoom",
|
||||
"menu": "Menu",
|
||||
"done": "Færdig",
|
||||
"edit": "Rediger",
|
||||
"undo": "Fortryd",
|
||||
"redo": "Gendan",
|
||||
"resetLibrary": "",
|
||||
"createNewRoom": "Opret nyt rum",
|
||||
"fullScreen": "Fuld skærm",
|
||||
"darkMode": "Mørk tilstand",
|
||||
"lightMode": "Lys baggrund",
|
||||
"zenMode": "",
|
||||
"exitZenMode": ""
|
||||
},
|
||||
"alerts": {
|
||||
"clearReset": "",
|
||||
"couldNotCreateShareableLink": "",
|
||||
"couldNotCreateShareableLinkTooBig": "",
|
||||
"couldNotLoadInvalidFile": "",
|
||||
"importBackendFailed": "",
|
||||
"cannotExportEmptyCanvas": "",
|
||||
"couldNotCopyToClipboard": "Kunne ikke kopiere til klippebord. Prøv at bruge Chrome browser.",
|
||||
"decryptFailed": "",
|
||||
"uploadedSecurly": "",
|
||||
"loadSceneOverridePrompt": "",
|
||||
"collabStopOverridePrompt": "",
|
||||
"errorLoadingLibrary": "",
|
||||
"errorAddingToLibrary": "",
|
||||
"errorRemovingFromLibrary": "",
|
||||
"confirmAddLibrary": "",
|
||||
"imageDoesNotContainScene": "",
|
||||
"cannotRestoreFromImage": "",
|
||||
"invalidSceneUrl": "",
|
||||
"resetLibrary": "",
|
||||
"invalidEncryptionKey": ""
|
||||
},
|
||||
"toolBar": {
|
||||
"selection": "",
|
||||
"rectangle": "",
|
||||
"diamond": "",
|
||||
"ellipse": "",
|
||||
"arrow": "",
|
||||
"line": "",
|
||||
"freedraw": "",
|
||||
"text": "",
|
||||
"library": "",
|
||||
"lock": ""
|
||||
},
|
||||
"headings": {
|
||||
"canvasActions": "",
|
||||
"selectedShapeActions": "",
|
||||
"shapes": ""
|
||||
},
|
||||
"hints": {
|
||||
"linearElement": "",
|
||||
"freeDraw": "Klik og træk, slip når du er færdig",
|
||||
"text": "",
|
||||
"text_selected": "",
|
||||
"text_editing": "",
|
||||
"linearElementMulti": "",
|
||||
"lockAngle": "",
|
||||
"resize": "",
|
||||
"rotate": "",
|
||||
"lineEditor_info": "",
|
||||
"lineEditor_pointSelected": "",
|
||||
"lineEditor_nothingSelected": ""
|
||||
},
|
||||
"canvasError": {
|
||||
"cannotShowPreview": "",
|
||||
"canvasTooBig": "",
|
||||
"canvasTooBigTip": ""
|
||||
},
|
||||
"errorSplash": {
|
||||
"headingMain_pre": "",
|
||||
"headingMain_button": "",
|
||||
"clearCanvasMessage": "",
|
||||
"clearCanvasMessage_button": "",
|
||||
"clearCanvasCaveat": "",
|
||||
"trackedToSentry_pre": "",
|
||||
"trackedToSentry_post": "",
|
||||
"openIssueMessage_pre": "",
|
||||
"openIssueMessage_button": "",
|
||||
"openIssueMessage_post": " Kopiere og indsæt venligst oplysningerne nedenfor i et GitHub problem.",
|
||||
"sceneContent": "Scene indhold:"
|
||||
},
|
||||
"roomDialog": {
|
||||
"desc_intro": "Du kan invitere folk til din nuværende scene, så de kan samarbejde med dig.",
|
||||
"desc_privacy": "Bare rolig, sessionen bruger end-to-end kryptering, så uanset hvad du tegner vil det forblive privat. Ikke engang vores server vil kunne se, hvad du kommer op med.",
|
||||
"button_startSession": "Start session",
|
||||
"button_stopSession": "Stop session",
|
||||
"desc_inProgressIntro": "Live-samarbejde session er nu begyndt.",
|
||||
"desc_shareLink": "Del dette link med enhver, du ønsker at samarbejde med:",
|
||||
"desc_exitSession": "",
|
||||
"shareTitle": ""
|
||||
},
|
||||
"errorDialog": {
|
||||
"title": "Fejl"
|
||||
},
|
||||
"exportDialog": {
|
||||
"disk_title": "Gem til disk",
|
||||
"disk_details": "",
|
||||
"disk_button": "",
|
||||
"link_title": "",
|
||||
"link_details": "",
|
||||
"link_button": "",
|
||||
"excalidrawplus_description": "",
|
||||
"excalidrawplus_button": "",
|
||||
"excalidrawplus_exportError": ""
|
||||
},
|
||||
"helpDialog": {
|
||||
"blog": "Læs vores blog",
|
||||
"click": "",
|
||||
"curvedArrow": "",
|
||||
"curvedLine": "",
|
||||
"documentation": "",
|
||||
"doubleClick": "",
|
||||
"drag": "",
|
||||
"editor": "",
|
||||
"editSelectedShape": "",
|
||||
"github": "",
|
||||
"howto": "",
|
||||
"or": "",
|
||||
"preventBinding": "",
|
||||
"shapes": "",
|
||||
"shortcuts": "",
|
||||
"textFinish": "",
|
||||
"textNewLine": "",
|
||||
"title": "",
|
||||
"view": "",
|
||||
"zoomToFit": "",
|
||||
"zoomToSelection": ""
|
||||
},
|
||||
"encrypted": {
|
||||
"tooltip": "",
|
||||
"link": ""
|
||||
},
|
||||
"stats": {
|
||||
"angle": "",
|
||||
"element": "",
|
||||
"elements": "",
|
||||
"height": "",
|
||||
"scene": "",
|
||||
"selected": "",
|
||||
"storage": "",
|
||||
"title": "Statistik for nørder",
|
||||
"total": "",
|
||||
"version": "",
|
||||
"versionCopy": "Klik for at kopiere",
|
||||
"versionNotAvailable": "",
|
||||
"width": "Bredde"
|
||||
},
|
||||
"toast": {
|
||||
"copyStyles": "Kopieret stilarter.",
|
||||
"copyToClipboard": "Kopieret til klippebord.",
|
||||
"copyToClipboardAsPng": "Kopieret {{exportSelection}} til klippebord som PNG\n({{exportColorScheme}})",
|
||||
"fileSaved": "Fil gemt.",
|
||||
"fileSavedToFilename": "Gemt som {filename}",
|
||||
"canvas": "canvas",
|
||||
"selection": "markering"
|
||||
},
|
||||
"colors": {
|
||||
"ffffff": "",
|
||||
"f8f9fa": "",
|
||||
"f1f3f5": "",
|
||||
"fff5f5": "",
|
||||
"fff0f6": "",
|
||||
"f8f0fc": "",
|
||||
"f3f0ff": "",
|
||||
"edf2ff": "",
|
||||
"e7f5ff": "",
|
||||
"e3fafc": "",
|
||||
"e6fcf5": "",
|
||||
"ebfbee": "",
|
||||
"f4fce3": "",
|
||||
"fff9db": "",
|
||||
"fff4e6": "",
|
||||
"transparent": "",
|
||||
"ced4da": "",
|
||||
"868e96": "",
|
||||
"fa5252": "",
|
||||
"e64980": "",
|
||||
"be4bdb": "",
|
||||
"7950f2": "",
|
||||
"4c6ef5": "",
|
||||
"228be6": "",
|
||||
"15aabf": "",
|
||||
"12b886": "",
|
||||
"40c057": "",
|
||||
"82c91e": "",
|
||||
"fab005": "",
|
||||
"fd7e14": "",
|
||||
"000000": "",
|
||||
"343a40": "",
|
||||
"495057": "",
|
||||
"c92a2a": "",
|
||||
"a61e4d": "",
|
||||
"862e9c": "",
|
||||
"5f3dc4": "",
|
||||
"364fc7": "",
|
||||
"1864ab": "",
|
||||
"0b7285": "",
|
||||
"087f5b": "",
|
||||
"2b8a3e": "",
|
||||
"5c940d": "",
|
||||
"e67700": "",
|
||||
"d9480f": ""
|
||||
}
|
||||
}
|
@@ -102,7 +102,7 @@
|
||||
"toggleExportColorScheme": "Exportfarbschema umschalten",
|
||||
"share": "Teilen",
|
||||
"showStroke": "Auswahl für Strichfarbe anzeigen",
|
||||
"showBackground": "Auswahl für Hintergrundfarbe anzeigen",
|
||||
"showBackground": "Hintergrundfarbe auswählen",
|
||||
"toggleTheme": "Design umschalten"
|
||||
},
|
||||
"buttons": {
|
||||
@@ -157,7 +157,8 @@
|
||||
"imageDoesNotContainScene": "Das Importieren von Bildern wird derzeit nicht unterstützt.\n\nMöchtest du eine Szene importieren? Dieses Bild scheint keine Zeichnungsdaten zu enthalten. Hast du dies beim Exportieren aktiviert?",
|
||||
"cannotRestoreFromImage": "Die Zeichnung konnte aus dieser Bilddatei nicht wiederhergestellt werden",
|
||||
"invalidSceneUrl": "Die Szene konnte nicht von der angegebenen URL importiert werden. Sie ist entweder fehlerhaft oder enthält keine gültigen Excalidraw JSON-Daten.",
|
||||
"resetLibrary": "Dieses löscht deine Bibliothek. Bist du sicher?"
|
||||
"resetLibrary": "Dieses löscht deine Bibliothek. Bist du sicher?",
|
||||
"invalidEncryptionKey": "Verschlüsselungsschlüssel muss 22 Zeichen lang sein. Die Live-Zusammenarbeit ist deaktiviert."
|
||||
},
|
||||
"toolBar": {
|
||||
"selection": "Auswahl",
|
||||
@@ -180,6 +181,8 @@
|
||||
"linearElement": "Klicken für Linie mit mehreren Punkten, Ziehen für einzelne Linie",
|
||||
"freeDraw": "Klicke und ziehe. Lass los, wenn du fertig bist",
|
||||
"text": "Tipp: Du kannst auch Text hinzufügen, indem du mit dem Auswahlwerkzeug auf eine beliebige Stelle doppelklickst",
|
||||
"text_selected": "Doppelklicken oder Eingabetaste drücken, um Text zu bearbeiten",
|
||||
"text_editing": "Drücke Escape oder Strg/Cmd+Eingabetaste, um die Bearbeitung abzuschließen",
|
||||
"linearElementMulti": "Zum Beenden auf den letzten Punkt klicken oder Escape oder Eingabe drücken",
|
||||
"lockAngle": "Du kannst Winkel einschränken, indem du SHIFT gedrückt hältst",
|
||||
"resize": "Du kannst die Proportionen einschränken, indem du SHIFT während der Größenänderung gedrückt hältst. Halte ALT gedrückt, um die Größe vom Zentrum aus zu ändern",
|
||||
@@ -236,16 +239,18 @@
|
||||
"curvedArrow": "Gebogener Pfeil",
|
||||
"curvedLine": "Gebogene Linie",
|
||||
"documentation": "Dokumentation",
|
||||
"doubleClick": "doppelklicken",
|
||||
"drag": "ziehen",
|
||||
"editor": "Editor",
|
||||
"editSelectedShape": "Ausgewählte Form bearbeiten (Text/Pfeil/Linie)",
|
||||
"github": "Ein Problem gefunden? Informiere uns",
|
||||
"howto": "Folge unseren Anleitungen",
|
||||
"or": "oder",
|
||||
"preventBinding": "Pfeil-Bindung verhindern",
|
||||
"shapes": "Formen",
|
||||
"shortcuts": "Tastaturkürzel",
|
||||
"textFinish": "Bearbeiten beenden (Text)",
|
||||
"textNewLine": "Neue Zeile hinzufügen (Text)",
|
||||
"textFinish": "Bearbeitung beenden (Texteditor)",
|
||||
"textNewLine": "Neue Zeile hinzufügen (Texteditor)",
|
||||
"title": "Hilfe",
|
||||
"view": "Ansicht",
|
||||
"zoomToFit": "Zoomen um alle Elemente einzupassen",
|
||||
@@ -278,5 +283,52 @@
|
||||
"fileSavedToFilename": "Als {filename} gespeichert",
|
||||
"canvas": "Zeichenfläche",
|
||||
"selection": "Auswahl"
|
||||
},
|
||||
"colors": {
|
||||
"ffffff": "Weiß",
|
||||
"f8f9fa": "Grau 0",
|
||||
"f1f3f5": "Grau 1",
|
||||
"fff5f5": "Rot 0",
|
||||
"fff0f6": "Pink 0",
|
||||
"f8f0fc": "Traube 0",
|
||||
"f3f0ff": "Violett 0",
|
||||
"edf2ff": "Indigo 0",
|
||||
"e7f5ff": "Blau 0",
|
||||
"e3fafc": "Cyan 0",
|
||||
"e6fcf5": "Teal 0",
|
||||
"ebfbee": "Grün 0",
|
||||
"f4fce3": "Limette 0",
|
||||
"fff9db": "Gelb 0",
|
||||
"fff4e6": "Orange 0",
|
||||
"transparent": "Transparent",
|
||||
"ced4da": "Grau 4",
|
||||
"868e96": "Grau 6",
|
||||
"fa5252": "Rot 6",
|
||||
"e64980": "Pink 6",
|
||||
"be4bdb": "Traube 6",
|
||||
"7950f2": "Violett 6",
|
||||
"4c6ef5": "Indigo 6",
|
||||
"228be6": "Blau 6",
|
||||
"15aabf": "Cyan 6",
|
||||
"12b886": "Teal 6",
|
||||
"40c057": "Grün 6",
|
||||
"82c91e": "Limette 6",
|
||||
"fab005": "Gelb 6",
|
||||
"fd7e14": "Orange 6",
|
||||
"000000": "Schwarz",
|
||||
"343a40": "Grau 8",
|
||||
"495057": "Grau 7",
|
||||
"c92a2a": "Rot 9",
|
||||
"a61e4d": "Pink 9",
|
||||
"862e9c": "Traube 9",
|
||||
"5f3dc4": "Violett 9",
|
||||
"364fc7": "Indigo 9",
|
||||
"1864ab": "Blau 9",
|
||||
"0b7285": "Cyan 9",
|
||||
"087f5b": "Teal 9",
|
||||
"2b8a3e": "Grün 9",
|
||||
"5c940d": "Limette 9",
|
||||
"e67700": "Gelb 9",
|
||||
"d9480f": "Orange 9"
|
||||
}
|
||||
}
|
||||
|
@@ -157,7 +157,8 @@
|
||||
"imageDoesNotContainScene": "Η εισαγωγή εικόνων δεν υποστηρίζεται αυτή τη στιγμή.\n\nΜήπως θέλετε να εισαγάγετε μια σκηνή; Αυτή η εικόνα δεν φαίνεται να περιέχει δεδομένα σκηνής. Έχετε ενεργοποιήσει αυτό κατά την εξαγωγή;",
|
||||
"cannotRestoreFromImage": "Η σκηνή δεν ήταν δυνατό να αποκατασταθεί από αυτό το αρχείο εικόνας",
|
||||
"invalidSceneUrl": "",
|
||||
"resetLibrary": "Αυτό θα καθαρίσει τη βιβλιοθήκη σας. Είστε σίγουροι;"
|
||||
"resetLibrary": "Αυτό θα καθαρίσει τη βιβλιοθήκη σας. Είστε σίγουροι;",
|
||||
"invalidEncryptionKey": "Το κλειδί κρυπτογράφησης πρέπει να είναι 22 χαρακτήρες. Η ζωντανή συνεργασία είναι απενεργοποιημένη."
|
||||
},
|
||||
"toolBar": {
|
||||
"selection": "Επιλογή",
|
||||
@@ -166,7 +167,7 @@
|
||||
"ellipse": "Έλλειψη",
|
||||
"arrow": "Βέλος",
|
||||
"line": "Γραμμή",
|
||||
"freedraw": "",
|
||||
"freedraw": "Σχεδίαση",
|
||||
"text": "Κείμενο",
|
||||
"library": "Βιβλιοθήκη",
|
||||
"lock": "Κράτησε επιλεγμένο το εργαλείο μετά το σχέδιο"
|
||||
@@ -180,6 +181,8 @@
|
||||
"linearElement": "Κάνε κλικ για να ξεκινήσεις πολλαπλά σημεία, σύρε για μια γραμμή",
|
||||
"freeDraw": "Κάντε κλικ και σύρτε, απελευθερώσατε όταν έχετε τελειώσει",
|
||||
"text": "Tip: μπορείτε επίσης να προσθέστε κείμενο με διπλό-κλικ οπουδήποτε με το εργαλείο επιλογών",
|
||||
"text_selected": "Κάντε διπλό κλικ ή πατήστε ENTER για να επεξεργαστείτε το κείμενο",
|
||||
"text_editing": "Πατήστε Escape ή CtrlOrCmd+ENTER για να ολοκληρώσετε την επεξεργασία",
|
||||
"linearElementMulti": "Κάνε κλικ στο τελευταίο σημείο ή πάτησε Escape ή Enter για να τελειώσεις",
|
||||
"lockAngle": "Μπορείτε να περιορίσετε τη γωνία κρατώντας πατημένο το SHIFT",
|
||||
"resize": "Μπορείς να περιορίσεις τις αναλογίες κρατώντας το SHIFT ενώ αλλάζεις μέγεθος,\nκράτησε πατημένο το ALT για αλλαγή μεγέθους από το κέντρο",
|
||||
@@ -236,16 +239,18 @@
|
||||
"curvedArrow": "Κυρτό βέλος",
|
||||
"curvedLine": "Κυρτή γραμμή",
|
||||
"documentation": "Εγχειρίδιο",
|
||||
"doubleClick": "",
|
||||
"drag": "σύρε",
|
||||
"editor": "Επεξεργαστής",
|
||||
"editSelectedShape": "",
|
||||
"github": "Βρήκατε πρόβλημα; Υποβάλετε το",
|
||||
"howto": "Ακολουθήστε τους οδηγούς μας",
|
||||
"or": "ή",
|
||||
"preventBinding": "Αποτροπή δέσμευσης βέλων",
|
||||
"shapes": "Σχήματα",
|
||||
"shortcuts": "Συντομεύσεις πληκτρολογίου",
|
||||
"textFinish": "Ολοκλήρωση επεξεργασίας (κείμενο)",
|
||||
"textNewLine": "Προσθήκη νέας γραμμής (κείμενο)",
|
||||
"textFinish": "",
|
||||
"textNewLine": "",
|
||||
"title": "Βοήθεια",
|
||||
"view": "Προβολή",
|
||||
"zoomToFit": "Zoom ώστε να χωρέσουν όλα τα στοιχεία",
|
||||
@@ -278,5 +283,52 @@
|
||||
"fileSavedToFilename": "Αποθηκεύτηκε στο {filename}",
|
||||
"canvas": "καμβάς",
|
||||
"selection": "επιλογή"
|
||||
},
|
||||
"colors": {
|
||||
"ffffff": "",
|
||||
"f8f9fa": "",
|
||||
"f1f3f5": "",
|
||||
"fff5f5": "",
|
||||
"fff0f6": "",
|
||||
"f8f0fc": "",
|
||||
"f3f0ff": "",
|
||||
"edf2ff": "",
|
||||
"e7f5ff": "",
|
||||
"e3fafc": "",
|
||||
"e6fcf5": "",
|
||||
"ebfbee": "",
|
||||
"f4fce3": "",
|
||||
"fff9db": "",
|
||||
"fff4e6": "",
|
||||
"transparent": "",
|
||||
"ced4da": "",
|
||||
"868e96": "",
|
||||
"fa5252": "",
|
||||
"e64980": "",
|
||||
"be4bdb": "",
|
||||
"7950f2": "",
|
||||
"4c6ef5": "",
|
||||
"228be6": "",
|
||||
"15aabf": "",
|
||||
"12b886": "",
|
||||
"40c057": "",
|
||||
"82c91e": "",
|
||||
"fab005": "",
|
||||
"fd7e14": "",
|
||||
"000000": "",
|
||||
"343a40": "",
|
||||
"495057": "",
|
||||
"c92a2a": "",
|
||||
"a61e4d": "",
|
||||
"862e9c": "",
|
||||
"5f3dc4": "",
|
||||
"364fc7": "",
|
||||
"1864ab": "",
|
||||
"0b7285": "",
|
||||
"087f5b": "",
|
||||
"2b8a3e": "",
|
||||
"5c940d": "",
|
||||
"e67700": "",
|
||||
"d9480f": ""
|
||||
}
|
||||
}
|
||||
|
@@ -157,7 +157,8 @@
|
||||
"imageDoesNotContainScene": "Importing images isn't supported at the moment.\n\nDid you want to import a scene? This image does not seem to contain any scene data. Have you enabled this during export?",
|
||||
"cannotRestoreFromImage": "Scene couldn't be restored from this image file",
|
||||
"invalidSceneUrl": "Couldn't import scene from the supplied URL. It's either malformed, or doesn't contain valid Excalidraw JSON data.",
|
||||
"resetLibrary": "This will clear your library. Are you sure?"
|
||||
"resetLibrary": "This will clear your library. Are you sure?",
|
||||
"invalidEncryptionKey": "Encryption key must be of 22 characters. Live collaboration is disabled."
|
||||
},
|
||||
"toolBar": {
|
||||
"selection": "Selection",
|
||||
@@ -282,5 +283,52 @@
|
||||
"fileSavedToFilename": "Saved to {filename}",
|
||||
"canvas": "canvas",
|
||||
"selection": "selection"
|
||||
},
|
||||
"colors": {
|
||||
"ffffff": "White",
|
||||
"f8f9fa": "Gray 0",
|
||||
"f1f3f5": "Gray 1",
|
||||
"fff5f5": "Red 0",
|
||||
"fff0f6": "Pink 0",
|
||||
"f8f0fc": "Grape 0",
|
||||
"f3f0ff": "Violet 0",
|
||||
"edf2ff": "Indigo 0",
|
||||
"e7f5ff": "Blue 0",
|
||||
"e3fafc": "Cyan 0",
|
||||
"e6fcf5": "Teal 0",
|
||||
"ebfbee": "Green 0",
|
||||
"f4fce3": "Lime 0",
|
||||
"fff9db": "Yellow 0",
|
||||
"fff4e6": "Orange 0",
|
||||
"transparent": "Transparent",
|
||||
"ced4da": "Gray 4",
|
||||
"868e96": "Gray 6",
|
||||
"fa5252": "Red 6",
|
||||
"e64980": "Pink 6",
|
||||
"be4bdb": "Grape 6",
|
||||
"7950f2": "Violet 6",
|
||||
"4c6ef5": "Indigo 6",
|
||||
"228be6": "Blue 6",
|
||||
"15aabf": "Cyan 6",
|
||||
"12b886": "Teal 6",
|
||||
"40c057": "Green 6",
|
||||
"82c91e": "Lime 6",
|
||||
"fab005": "Yellow 6",
|
||||
"fd7e14": "Orange 6",
|
||||
"000000": "Black",
|
||||
"343a40": "Gray 8",
|
||||
"495057": "Gray 7",
|
||||
"c92a2a": "Red 9",
|
||||
"a61e4d": "Pink 9",
|
||||
"862e9c": "Grape 9",
|
||||
"5f3dc4": "Violet 9",
|
||||
"364fc7": "Indigo 9",
|
||||
"1864ab": "Blue 9",
|
||||
"0b7285": "Cyan 9",
|
||||
"087f5b": "Teal 9",
|
||||
"2b8a3e": "Green 9",
|
||||
"5c940d": "Lime 9",
|
||||
"e67700": "Yellow 9",
|
||||
"d9480f": "Orange 9"
|
||||
}
|
||||
}
|
||||
|
@@ -20,10 +20,10 @@
|
||||
"background": "Fondo",
|
||||
"fill": "Rellenar",
|
||||
"strokeWidth": "Grosor del trazo",
|
||||
"strokeShape": "",
|
||||
"strokeShape_gel": "",
|
||||
"strokeShape_fountain": "",
|
||||
"strokeShape_brush": "",
|
||||
"strokeShape": "Estilo del trazo",
|
||||
"strokeShape_gel": "Bolígrafo de gel",
|
||||
"strokeShape_fountain": "Pluma estilográfica",
|
||||
"strokeShape_brush": "Rotulador",
|
||||
"strokeStyle": "Estilo del trazo",
|
||||
"strokeStyle_solid": "Sólido",
|
||||
"strokeStyle_dashed": "Discontinua",
|
||||
@@ -157,7 +157,8 @@
|
||||
"imageDoesNotContainScene": "La importación de imágenes no está homologada en este momento.\n\n¿Deseas importar una escena? Esta imagen no parece contener ningún dato de escena. ¿Lo has activado durante la exportación?",
|
||||
"cannotRestoreFromImage": "No se pudo restaurar la escena desde este archivo de imagen",
|
||||
"invalidSceneUrl": "No se ha podido importar la escena desde la URL proporcionada. Está mal formada, o no contiene datos de Excalidraw JSON válidos.",
|
||||
"resetLibrary": "Esto eliminará tu librería. ¿Estás seguro?"
|
||||
"resetLibrary": "Esto eliminará tu librería. ¿Estás seguro?",
|
||||
"invalidEncryptionKey": "La clave de cifrado debe tener 22 caracteres. La colaboración en vivo está deshabilitada."
|
||||
},
|
||||
"toolBar": {
|
||||
"selection": "Selección",
|
||||
@@ -180,6 +181,8 @@
|
||||
"linearElement": "Haz clic para dibujar múltiples puntos, arrastrar para solo una línea",
|
||||
"freeDraw": "Haz clic y arrastra, suelta al terminar",
|
||||
"text": "Consejo: también puedes añadir texto haciendo doble clic en cualquier lugar con la herramienta de selección",
|
||||
"text_selected": "Doble clic o pulse ENTER para editar el texto",
|
||||
"text_editing": "Pulse Escape o CtrlOrCmd+ENTER para terminar de editar",
|
||||
"linearElementMulti": "Haz clic en el último punto o presiona Escape o Enter para finalizar",
|
||||
"lockAngle": "Puedes restringir el ángulo manteniendo presionado el botón SHIFT",
|
||||
"resize": "Para mantener las proporciones mantén SHIFT presionado mientras modificas el tamaño, \nmantén presionado ALT para modificar el tamaño desde el centro",
|
||||
@@ -236,16 +239,18 @@
|
||||
"curvedArrow": "Flecha curvada",
|
||||
"curvedLine": "Línea curva",
|
||||
"documentation": "Documentación",
|
||||
"doubleClick": "doble clic",
|
||||
"drag": "arrastrar",
|
||||
"editor": "Editor",
|
||||
"editSelectedShape": "Editar la forma seleccionada (texto/flecha/línea)",
|
||||
"github": "¿Has encontrado un problema? Envíalo",
|
||||
"howto": "Siga nuestras guías",
|
||||
"or": "o",
|
||||
"preventBinding": "Evitar yuxtaposición de flechas",
|
||||
"shapes": "Formas",
|
||||
"shortcuts": "Atajos del teclado",
|
||||
"textFinish": "Finalizar edición (texto)",
|
||||
"textNewLine": "Añadir nueva línea (texto)",
|
||||
"textFinish": "Finalizar edición (editor de texto)",
|
||||
"textNewLine": "Añadir nueva linea (editor de texto)",
|
||||
"title": "Ayuda",
|
||||
"view": "Vista",
|
||||
"zoomToFit": "Ajustar la vista para mostrar todos los elementos",
|
||||
@@ -278,5 +283,52 @@
|
||||
"fileSavedToFilename": "Guardado en {filename}",
|
||||
"canvas": "lienzo",
|
||||
"selection": "selección"
|
||||
},
|
||||
"colors": {
|
||||
"ffffff": "Blanco",
|
||||
"f8f9fa": "Gris 0",
|
||||
"f1f3f5": "Gris 1",
|
||||
"fff5f5": "Rojo 0",
|
||||
"fff0f6": "Rosa 0",
|
||||
"f8f0fc": "Uva 0",
|
||||
"f3f0ff": "Violeta 0",
|
||||
"edf2ff": "Indigo 0",
|
||||
"e7f5ff": "Azul 0",
|
||||
"e3fafc": "Cian 0",
|
||||
"e6fcf5": "Turquesa 0",
|
||||
"ebfbee": "Verde 0",
|
||||
"f4fce3": "Lima 0",
|
||||
"fff9db": "Amarillo 0",
|
||||
"fff4e6": "Naranja 0",
|
||||
"transparent": "Transparente",
|
||||
"ced4da": "Gris 4",
|
||||
"868e96": "Gris 6",
|
||||
"fa5252": "Rojo 6",
|
||||
"e64980": "Rosa 6",
|
||||
"be4bdb": "Uva 6",
|
||||
"7950f2": "Violeta 6",
|
||||
"4c6ef5": "Indigo 6",
|
||||
"228be6": "Azul 6",
|
||||
"15aabf": "Cian 6",
|
||||
"12b886": "Turquesa 6",
|
||||
"40c057": "Verde 6",
|
||||
"82c91e": "Lima 6",
|
||||
"fab005": "Amarillo 6",
|
||||
"fd7e14": "Naranja 6",
|
||||
"000000": "Negro",
|
||||
"343a40": "Gris 8",
|
||||
"495057": "Gris 7",
|
||||
"c92a2a": "Rojo 9",
|
||||
"a61e4d": "Rosa 9",
|
||||
"862e9c": "Uva 9",
|
||||
"5f3dc4": "Violeta 9",
|
||||
"364fc7": "Indigo 9",
|
||||
"1864ab": "Azul 9",
|
||||
"0b7285": "Cian 9",
|
||||
"087f5b": "Turquesa 9",
|
||||
"2b8a3e": "Verde 9",
|
||||
"5c940d": "Lima 9",
|
||||
"e67700": "Amarillo 9",
|
||||
"d9480f": "Naranja 9"
|
||||
}
|
||||
}
|
||||
|
@@ -1,11 +1,11 @@
|
||||
{
|
||||
"labels": {
|
||||
"paste": "جای گذاری",
|
||||
"pasteCharts": "قراردادن نمودار",
|
||||
"pasteCharts": "قراردادن نمودارها",
|
||||
"selectAll": "انتخاب همه",
|
||||
"multiSelect": "یک ایتم به انتخاب شده ها اضافه کنید.",
|
||||
"moveCanvas": "بوم را حرکت بدهید",
|
||||
"cut": "جابجایی",
|
||||
"moveCanvas": "جابجایی بوم",
|
||||
"cut": "بریدن",
|
||||
"copy": "کپی",
|
||||
"copyAsPng": "کپی در حافطه موقت به صورت PNG",
|
||||
"copyAsSvg": "کپی در حافطه موقت به صورت SVG",
|
||||
@@ -16,33 +16,33 @@
|
||||
"delete": "حذف",
|
||||
"copyStyles": "کپی سبک",
|
||||
"pasteStyles": "جای گذاری سبک",
|
||||
"stroke": "خط",
|
||||
"stroke": "حاشیه",
|
||||
"background": "پس زمینه",
|
||||
"fill": "رنگ آمیزی",
|
||||
"strokeWidth": "ضخامت خط",
|
||||
"strokeShape": "",
|
||||
"strokeWidth": "ضخامت حاشیه",
|
||||
"strokeShape": "حاشیه شکل",
|
||||
"strokeShape_gel": "",
|
||||
"strokeShape_fountain": "",
|
||||
"strokeShape_brush": "",
|
||||
"strokeStyle": "استایل خط",
|
||||
"strokeStyle": "استایل حاشیه",
|
||||
"strokeStyle_solid": "یکدست",
|
||||
"strokeStyle_dashed": "خط چین",
|
||||
"strokeStyle_dotted": "نقطه چین",
|
||||
"sloppiness": "دقت",
|
||||
"opacity": "تاری",
|
||||
"opacity": "شفافیت",
|
||||
"textAlign": "چیدمان متن",
|
||||
"edges": "لبه ها",
|
||||
"sharp": "تیز",
|
||||
"round": "دور",
|
||||
"arrowheads": "سر پیکان",
|
||||
"arrowhead_none": "هیچ کدام",
|
||||
"arrowhead_arrow": "فلش",
|
||||
"arrowhead_arrow": "پیکان",
|
||||
"arrowhead_bar": "میله ای",
|
||||
"arrowhead_dot": "نقطه",
|
||||
"fontSize": "اندازه قلم",
|
||||
"fontFamily": "نوع قلم",
|
||||
"onlySelected": "فقط انتخاب شده ها",
|
||||
"withBackground": "",
|
||||
"withBackground": "پس زمینه",
|
||||
"exportEmbedScene": "",
|
||||
"exportEmbedScene_details": "متحوای صحنه به فایل خروجی SVG/PNG اضافه خواهد شد برای بازیابی صحنه به آن اضافه خواهد شد.\nباعث افزایش حجم فایل خروجی میشود.",
|
||||
"addWatermark": "\"ساخته شده با Excalidraw\" را اضافه کن",
|
||||
@@ -65,7 +65,7 @@
|
||||
"architect": "معمار",
|
||||
"artist": "هنرمند",
|
||||
"cartoonist": "کارتونیست",
|
||||
"fileTitle": "",
|
||||
"fileTitle": "نام فایل",
|
||||
"colorPicker": "انتخابگر رنگ",
|
||||
"canvasBackground": "بوم",
|
||||
"drawingCanvas": "بوم نقاشی",
|
||||
@@ -81,7 +81,7 @@
|
||||
"group": "گروهبندی انتخابها",
|
||||
"ungroup": "حذف گروهبندی انتخابها",
|
||||
"collaborators": "همکاران",
|
||||
"showGrid": "",
|
||||
"showGrid": "نمایش گرید",
|
||||
"addToLibrary": "افزودن به کتابخانه",
|
||||
"removeFromLibrary": "حذف از کتابخانه",
|
||||
"libraryLoadingMessage": "بارگذاری کتابخانه…",
|
||||
@@ -96,26 +96,26 @@
|
||||
"centerHorizontally": "وسط قرار دادن به صورت افقی",
|
||||
"distributeHorizontally": "توزیع کردن به صورت افقی",
|
||||
"distributeVertically": "توزیع کردن به صورت عمودی",
|
||||
"flipHorizontal": "",
|
||||
"flipVertical": "",
|
||||
"viewMode": "",
|
||||
"flipHorizontal": "چرخش افقی",
|
||||
"flipVertical": "چرخش عمودی",
|
||||
"viewMode": "حالت نمایش",
|
||||
"toggleExportColorScheme": "",
|
||||
"share": "",
|
||||
"showStroke": "",
|
||||
"showBackground": "",
|
||||
"toggleTheme": ""
|
||||
"share": "اشتراکگذاری",
|
||||
"showStroke": "نمایش انتخاب کننده رنگ حاشیه",
|
||||
"showBackground": "نمایش انتخاب کننده رنگ پس زمینه",
|
||||
"toggleTheme": "تغییر تم"
|
||||
},
|
||||
"buttons": {
|
||||
"clearReset": "پاکسازی بوم نقاشی",
|
||||
"exportJSON": "",
|
||||
"exportImage": "",
|
||||
"exportJSON": "خروجی در فایل",
|
||||
"exportImage": "ذخیره به عنوان عکس",
|
||||
"export": "تبدیل",
|
||||
"exportToPng": "تبدیل به PNG",
|
||||
"exportToSvg": "تبدیل به SVG",
|
||||
"copyToClipboard": "کپی در حافظه موقت",
|
||||
"copyPngToClipboard": "کپی PNG در حافظه موقت",
|
||||
"scale": "مقیاس",
|
||||
"save": "",
|
||||
"save": "ذخیره در همین فایل",
|
||||
"saveAs": "ذخیره با نام",
|
||||
"load": "بارگذاری",
|
||||
"getShareableLink": "دریافت لینک قابل اشتراک",
|
||||
@@ -151,13 +151,14 @@
|
||||
"loadSceneOverridePrompt": "بارگزاری یک طرح خارجی محتوای فعلی رو از بین میبرد. آیا میخواهید ادامه دهید؟",
|
||||
"collabStopOverridePrompt": "",
|
||||
"errorLoadingLibrary": "خطایی در بارگذاری کتابخانه ثالث وجود داشت.",
|
||||
"errorAddingToLibrary": "",
|
||||
"errorRemovingFromLibrary": "",
|
||||
"errorAddingToLibrary": "مورد به کتابخانه اضافه نشد",
|
||||
"errorRemovingFromLibrary": "مورد از کتابخانه حذف نشد",
|
||||
"confirmAddLibrary": "{{numShapes}} از اشکال به کتابخانه شما اضافه خواهد شد. مطمئن هستید؟",
|
||||
"imageDoesNotContainScene": "وارد کردن تصویر در این لحظه امکان پذیر نمی باشد.\nآیا مایل به وارد کردن یک صحنه هستید؟ این تصویر به نظر می رسد که فاقد هرگونه اطلاعاتی مربوط به صحنه باشد. آیا این گزینه را در زمان وارد کردن تصویر فعال کرده اید؟",
|
||||
"cannotRestoreFromImage": "صحنه را نمی توان از این فایل تصویری بازیابی کرد",
|
||||
"invalidSceneUrl": "",
|
||||
"resetLibrary": ""
|
||||
"resetLibrary": "",
|
||||
"invalidEncryptionKey": ""
|
||||
},
|
||||
"toolBar": {
|
||||
"selection": "گزینش",
|
||||
@@ -166,7 +167,7 @@
|
||||
"ellipse": "بیضی",
|
||||
"arrow": "پیکان",
|
||||
"line": "خط",
|
||||
"freedraw": "",
|
||||
"freedraw": "کشیدن",
|
||||
"text": "متن",
|
||||
"library": "کتابخانه",
|
||||
"lock": "ابزار انتخاب شده را بعد از کشیدن نگه دار"
|
||||
@@ -180,6 +181,8 @@
|
||||
"linearElement": "برای چند نقطه کلیک و برای یک خط بکشید",
|
||||
"freeDraw": "کلیک کنید و بکشید و وقتی کار تمام شد رها کنید",
|
||||
"text": "نکته: با برنامه انتخاب شده شما میتوانید با دوبار کلیک کردن هرکجا میخواید متن اظاف کنید",
|
||||
"text_selected": "",
|
||||
"text_editing": "",
|
||||
"linearElementMulti": "روی آخرین نقطه کلیک کنید یا کلید ESC را بزنید یا کلید Enter را بزنید برای اتمام کار",
|
||||
"lockAngle": "با نگه داشتن SHIFT هنگام چرخش می توانید زاویه ها را محدود کنید",
|
||||
"resize": "می توانید با نگه داشتن SHIFT در هنگام تغییر اندازه، نسبت ها را محدود کنید،ALT را برای تغییر اندازه از مرکز نگه دارید",
|
||||
@@ -220,32 +223,34 @@
|
||||
"title": "خطا"
|
||||
},
|
||||
"exportDialog": {
|
||||
"disk_title": "",
|
||||
"disk_title": "ذخیره در دیسک",
|
||||
"disk_details": "",
|
||||
"disk_button": "",
|
||||
"link_title": "",
|
||||
"disk_button": "ذخیره در فایل",
|
||||
"link_title": "لینک قابل اشتراکگذاری",
|
||||
"link_details": "",
|
||||
"link_button": "",
|
||||
"excalidrawplus_description": "",
|
||||
"excalidrawplus_button": "",
|
||||
"excalidrawplus_button": "خروجی گرفتن",
|
||||
"excalidrawplus_exportError": ""
|
||||
},
|
||||
"helpDialog": {
|
||||
"blog": "بلاگ ما را بخوانید",
|
||||
"click": "",
|
||||
"click": "کلیک",
|
||||
"curvedArrow": "فلش خمیده",
|
||||
"curvedLine": "منحنی",
|
||||
"documentation": "مستندات",
|
||||
"drag": "",
|
||||
"doubleClick": "دابل کلیک",
|
||||
"drag": "کشیدن",
|
||||
"editor": "ویرایشگر",
|
||||
"editSelectedShape": "ویرایش شکل انتخاب شده (متن/فلش/خط)",
|
||||
"github": "اشکالی می بینید؟ گزارش دهید",
|
||||
"howto": "راهنمای ما را دنبال کنید",
|
||||
"or": "یا",
|
||||
"preventBinding": "مانع شدن از چسبیدن فلش ها",
|
||||
"shapes": "شکلها",
|
||||
"shortcuts": "میانبرهای صفحه کلید",
|
||||
"textFinish": "",
|
||||
"textNewLine": "یک خط جدید اضافه کنید (متن)",
|
||||
"textFinish": "پایان ویرایش (ویرایشگر متن)",
|
||||
"textNewLine": "افزودن خط جدید (ویرایشگر متن)",
|
||||
"title": "راهنما",
|
||||
"view": "مشاهده",
|
||||
"zoomToFit": "بزرگنمایی برای دیدن تمام آیتم ها",
|
||||
@@ -265,18 +270,65 @@
|
||||
"storage": "حافظه",
|
||||
"title": "آمار برای نردها",
|
||||
"total": "مجموع",
|
||||
"version": "",
|
||||
"versionCopy": "",
|
||||
"versionNotAvailable": "",
|
||||
"version": "نسخه",
|
||||
"versionCopy": "برای کپی کردن کلیک کنید",
|
||||
"versionNotAvailable": "نسخه غیرقابل دسترس",
|
||||
"width": "عرض"
|
||||
},
|
||||
"toast": {
|
||||
"copyStyles": "کپی سبک.",
|
||||
"copyToClipboard": "",
|
||||
"copyToClipboard": "در کلیپبورد کپی شد.",
|
||||
"copyToClipboardAsPng": "",
|
||||
"fileSaved": "",
|
||||
"fileSavedToFilename": "",
|
||||
"canvas": "",
|
||||
"selection": ""
|
||||
"fileSaved": "فایل ذخیره شد.",
|
||||
"fileSavedToFilename": "ذخیره در {filename}",
|
||||
"canvas": "بوم",
|
||||
"selection": "انتخاب"
|
||||
},
|
||||
"colors": {
|
||||
"ffffff": "",
|
||||
"f8f9fa": "",
|
||||
"f1f3f5": "",
|
||||
"fff5f5": "",
|
||||
"fff0f6": "",
|
||||
"f8f0fc": "",
|
||||
"f3f0ff": "",
|
||||
"edf2ff": "",
|
||||
"e7f5ff": "",
|
||||
"e3fafc": "",
|
||||
"e6fcf5": "",
|
||||
"ebfbee": "",
|
||||
"f4fce3": "",
|
||||
"fff9db": "",
|
||||
"fff4e6": "",
|
||||
"transparent": "",
|
||||
"ced4da": "",
|
||||
"868e96": "",
|
||||
"fa5252": "",
|
||||
"e64980": "",
|
||||
"be4bdb": "",
|
||||
"7950f2": "",
|
||||
"4c6ef5": "",
|
||||
"228be6": "",
|
||||
"15aabf": "",
|
||||
"12b886": "",
|
||||
"40c057": "",
|
||||
"82c91e": "",
|
||||
"fab005": "",
|
||||
"fd7e14": "",
|
||||
"000000": "",
|
||||
"343a40": "",
|
||||
"495057": "",
|
||||
"c92a2a": "",
|
||||
"a61e4d": "",
|
||||
"862e9c": "",
|
||||
"5f3dc4": "",
|
||||
"364fc7": "",
|
||||
"1864ab": "",
|
||||
"0b7285": "",
|
||||
"087f5b": "",
|
||||
"2b8a3e": "",
|
||||
"5c940d": "",
|
||||
"e67700": "",
|
||||
"d9480f": ""
|
||||
}
|
||||
}
|
||||
|
@@ -157,7 +157,8 @@
|
||||
"imageDoesNotContainScene": "Kuvien lisääminen ei ole tällä hetkellä mahdollista.\n\nHaluatko tuoda piirroksen? Tämä kuva ei näytä sisältävän tarvittavia tietoja. Oletko ottanut piirrostietojen tallennuksen käyttöön viennin aikana?",
|
||||
"cannotRestoreFromImage": "Teosta ei voitu palauttaa tästä kuvatiedostosta",
|
||||
"invalidSceneUrl": "Teosta ei voitu tuoda annetusta URL-osoitteesta. Tallenne on vioittunut, tai osoitteessa ei ole Excalidraw JSON-dataa.",
|
||||
"resetLibrary": "Tämä tyhjentää kirjastosi. Jatketaanko?"
|
||||
"resetLibrary": "Tämä tyhjentää kirjastosi. Jatketaanko?",
|
||||
"invalidEncryptionKey": "Salausavaimen on oltava 22 merkkiä pitkä. Live-yhteistyö ei ole käytössä."
|
||||
},
|
||||
"toolBar": {
|
||||
"selection": "Valinta",
|
||||
@@ -180,6 +181,8 @@
|
||||
"linearElement": "Klikkaa piirtääksesi useampi piste, raahaa piirtääksesi yksittäinen viiva",
|
||||
"freeDraw": "Paina ja raahaa, päästä irti kun olet valmis",
|
||||
"text": "Vinkki: voit myös lisätä tekstiä kaksoisnapsauttamalla mihin tahansa valintatyökalulla",
|
||||
"text_selected": "Kaksoisnapsauta tai paina ENTER muokataksesi tekstiä",
|
||||
"text_editing": "Paina Escape tai CtrlOrCmd+ENTER lopettaaksesi muokkaamisen",
|
||||
"linearElementMulti": "Lopeta klikkaamalla viimeistä pistettä, painamalla Escape- tai Enter-näppäintä",
|
||||
"lockAngle": "Voit rajoittaa kulmaa pitämällä SHIFT-näppäintä alaspainettuna",
|
||||
"resize": "Voit rajoittaa mittasuhteet pitämällä SHIFT-näppäintä alaspainettuna kun muutat kokoa, pidä ALT-näppäintä alaspainettuna muuttaaksesi kokoa keskipisteen suhteen",
|
||||
@@ -236,16 +239,18 @@
|
||||
"curvedArrow": "Kaareva nuoli",
|
||||
"curvedLine": "Kaareva viiva",
|
||||
"documentation": "Käyttöohjeet",
|
||||
"doubleClick": "kaksoisnapsautus",
|
||||
"drag": "vedä",
|
||||
"editor": "Muokkausohjelma",
|
||||
"editSelectedShape": "Muokkaa valittua muotoa (teksti/nuoli/viiva)",
|
||||
"github": "Löysitkö ongelman? Kerro meille",
|
||||
"howto": "Seuraa oppaitamme",
|
||||
"or": "tai",
|
||||
"preventBinding": "Estä nuolten kiinnitys",
|
||||
"shapes": "Muodot",
|
||||
"shortcuts": "Pikanäppäimet",
|
||||
"textFinish": "Lopeta muokkaus (teksti)",
|
||||
"textNewLine": "Lisää uusi rivi (teksti)",
|
||||
"textFinish": "Lopeta muokkaus (tekstieditori)",
|
||||
"textNewLine": "Lisää uusi rivi (tekstieditori)",
|
||||
"title": "Ohjeet",
|
||||
"view": "Näkymä",
|
||||
"zoomToFit": "Näytä kaikki elementit",
|
||||
@@ -253,7 +258,7 @@
|
||||
},
|
||||
"encrypted": {
|
||||
"tooltip": "Piirroksesi ovat päästä-päähän-salattuja, joten Excalidrawin palvelimet eivät koskaan näe niitä.",
|
||||
"link": ""
|
||||
"link": "Blogiartikkeli päästä päähän -salauksesta Excalidraw:ssa"
|
||||
},
|
||||
"stats": {
|
||||
"angle": "Kulma",
|
||||
@@ -278,5 +283,52 @@
|
||||
"fileSavedToFilename": "Tallennettiin kohteeseen {filename}",
|
||||
"canvas": "piirtoalue",
|
||||
"selection": "valinta"
|
||||
},
|
||||
"colors": {
|
||||
"ffffff": "Valkoinen",
|
||||
"f8f9fa": "Harmaa 0",
|
||||
"f1f3f5": "Harmaa 1",
|
||||
"fff5f5": "Punainen 0",
|
||||
"fff0f6": "Pinkki 0",
|
||||
"f8f0fc": "Rypäle 0",
|
||||
"f3f0ff": "Violetti 0",
|
||||
"edf2ff": "Indigo 0",
|
||||
"e7f5ff": "Sininen 0",
|
||||
"e3fafc": "Syaani 0",
|
||||
"e6fcf5": "Sinivihreä 0",
|
||||
"ebfbee": "Vihreä 0",
|
||||
"f4fce3": "Limenvihreä 0",
|
||||
"fff9db": "Keltainen 0",
|
||||
"fff4e6": "Oranssi 0",
|
||||
"transparent": "Läpinäkyvä",
|
||||
"ced4da": "Harmaa 4",
|
||||
"868e96": "Harmaa 6",
|
||||
"fa5252": "Punainen 6",
|
||||
"e64980": "Pinkki 6",
|
||||
"be4bdb": "Rypäle 6",
|
||||
"7950f2": "Violetti 6",
|
||||
"4c6ef5": "Indigo 6",
|
||||
"228be6": "Sininen 6",
|
||||
"15aabf": "Syaani 6",
|
||||
"12b886": "Sinivihreä 6",
|
||||
"40c057": "Vihreä 6",
|
||||
"82c91e": "Limenvihreä 6",
|
||||
"fab005": "Keltainen 6",
|
||||
"fd7e14": "Oranssi 6",
|
||||
"000000": "Musta",
|
||||
"343a40": "Harmaa 8",
|
||||
"495057": "Harmaa 7",
|
||||
"c92a2a": "Punainen 9",
|
||||
"a61e4d": "Pinkki 9",
|
||||
"862e9c": "Rypäle 9",
|
||||
"5f3dc4": "Violetti 9",
|
||||
"364fc7": "Indigo 9",
|
||||
"1864ab": "Sininen 9",
|
||||
"0b7285": "Syaani 9",
|
||||
"087f5b": "Sinivihreä 9",
|
||||
"2b8a3e": "Vihreä 9",
|
||||
"5c940d": "Limenvihreä 9",
|
||||
"e67700": "Keltainen 9",
|
||||
"d9480f": "Oranssi 9"
|
||||
}
|
||||
}
|
||||
|
@@ -46,7 +46,7 @@
|
||||
"exportEmbedScene": "Intégrer la scène",
|
||||
"exportEmbedScene_details": "Les données de scène seront enregistrées dans le fichier PNG/SVG exporté, afin que la scène puisse être restaurée à partir de celui-ci.\nCela augmentera la taille du fichier exporté.",
|
||||
"addWatermark": "Ajouter \"Fait avec Excalidraw\"",
|
||||
"handDrawn": "À main levée",
|
||||
"handDrawn": "Manuscrit",
|
||||
"normal": "Normale",
|
||||
"code": "Code",
|
||||
"small": "Petit",
|
||||
@@ -157,7 +157,8 @@
|
||||
"imageDoesNotContainScene": "L'importation d'images n'est pas prise en charge pour le moment.\n\nVouliez-vous importer une scène ? Cette image ne semble pas contenir de données de scène. Avez-vous activé cette option lors de l'exportation ?",
|
||||
"cannotRestoreFromImage": "Impossible de restaurer la scène depuis ce fichier image",
|
||||
"invalidSceneUrl": "Impossible d'importer la scène depuis l'URL fournie. Elle est soit incorrecte, soit ne contient pas de données JSON Excalidraw valides.",
|
||||
"resetLibrary": "Cela va effacer votre bibliothèque. Êtes-vous sûr·e ?"
|
||||
"resetLibrary": "Cela va effacer votre bibliothèque. Êtes-vous sûr·e ?",
|
||||
"invalidEncryptionKey": "La clé de chiffrement doit comporter 22 caractères. La collaboration en direct est désactivée."
|
||||
},
|
||||
"toolBar": {
|
||||
"selection": "Sélection",
|
||||
@@ -180,6 +181,8 @@
|
||||
"linearElement": "Cliquez pour démarrer plusieurs points, faites glisser pour une seule ligne",
|
||||
"freeDraw": "Cliquez et faites glissez, relâchez quand vous avez terminé",
|
||||
"text": "Astuce : vous pouvez aussi ajouter du texte en double-cliquant n'importe où avec l'outil de sélection",
|
||||
"text_selected": "Double-cliquez ou appuyez sur ENTRÉE pour modifier le texte",
|
||||
"text_editing": "Appuyez sur ÉCHAP ou Ctrl/Cmd+ENTRÉE pour terminer l'édition",
|
||||
"linearElementMulti": "Cliquez sur le dernier point ou appuyez sur Échap ou Entrée pour terminer",
|
||||
"lockAngle": "Vous pouvez restreindre l'angle en maintenant MAJ",
|
||||
"resize": "Vous pouvez conserver les proportions en maintenant la touche MAJ pendant le redimensionnement,\nmaintenez la touche ALT pour redimensionner par rapport au centre",
|
||||
@@ -236,16 +239,18 @@
|
||||
"curvedArrow": "Flèche courbée",
|
||||
"curvedLine": "Ligne courbée",
|
||||
"documentation": "Documentation",
|
||||
"doubleClick": "double-clic",
|
||||
"drag": "glisser",
|
||||
"editor": "Éditeur",
|
||||
"editSelectedShape": "Modifier la forme sélectionnée (texte/flèche/ligne)",
|
||||
"github": "Problème trouvé ? Soumettre",
|
||||
"howto": "Suivez nos guides",
|
||||
"or": "ou",
|
||||
"preventBinding": "Empêcher la liaison de flèche",
|
||||
"shapes": "Formes",
|
||||
"shortcuts": "Raccourcis clavier",
|
||||
"textFinish": "Terminer l'édition (texte)",
|
||||
"textNewLine": "Ajouter une nouvelle ligne (texte)",
|
||||
"textFinish": "Terminer l'édition (éditeur de texte)",
|
||||
"textNewLine": "Ajouter une nouvelle ligne (éditeur de texte)",
|
||||
"title": "Aide",
|
||||
"view": "Affichage",
|
||||
"zoomToFit": "Zoomer pour voir tous les éléments",
|
||||
@@ -278,5 +283,52 @@
|
||||
"fileSavedToFilename": "Enregistré sous {filename}",
|
||||
"canvas": "canevas",
|
||||
"selection": "sélection"
|
||||
},
|
||||
"colors": {
|
||||
"ffffff": "Blanc",
|
||||
"f8f9fa": "Gris 0",
|
||||
"f1f3f5": "Gris 1",
|
||||
"fff5f5": "Rouge 0",
|
||||
"fff0f6": "Rose 0",
|
||||
"f8f0fc": "Mauve 0",
|
||||
"f3f0ff": "Violet 0",
|
||||
"edf2ff": "Indigo 0",
|
||||
"e7f5ff": "Bleu 0",
|
||||
"e3fafc": "Cyan 0",
|
||||
"e6fcf5": "Turquoise 0",
|
||||
"ebfbee": "Vert 0",
|
||||
"f4fce3": "Citron vert 0",
|
||||
"fff9db": "Jaune 0",
|
||||
"fff4e6": "Orange 0",
|
||||
"transparent": "Transparent",
|
||||
"ced4da": "Gris 4",
|
||||
"868e96": "Gris 6",
|
||||
"fa5252": "Rouge 6",
|
||||
"e64980": "Rose 6",
|
||||
"be4bdb": "Mauve 6",
|
||||
"7950f2": "Violet 6",
|
||||
"4c6ef5": "Indigo 6",
|
||||
"228be6": "Bleu 6",
|
||||
"15aabf": "Cyan 6",
|
||||
"12b886": "Turquoise 6",
|
||||
"40c057": "Vert 6",
|
||||
"82c91e": "Citron vert 6",
|
||||
"fab005": "Jaune 6",
|
||||
"fd7e14": "Orange 6",
|
||||
"000000": "Noir",
|
||||
"343a40": "Gris 8",
|
||||
"495057": "Gris 7",
|
||||
"c92a2a": "Rouge 9",
|
||||
"a61e4d": "Rose 9",
|
||||
"862e9c": "Mauve 9",
|
||||
"5f3dc4": "Violet 9",
|
||||
"364fc7": "Indigo 9",
|
||||
"1864ab": "Bleu 9",
|
||||
"0b7285": "Cyan 9",
|
||||
"087f5b": "Turquoise 9",
|
||||
"2b8a3e": "Vert 9",
|
||||
"5c940d": "Citron vert 9",
|
||||
"e67700": "Jaune 9",
|
||||
"d9480f": "Orange 9"
|
||||
}
|
||||
}
|
||||
|
@@ -20,10 +20,10 @@
|
||||
"background": "רקע",
|
||||
"fill": "מילוי",
|
||||
"strokeWidth": "עובי קו מתאר",
|
||||
"strokeShape": "",
|
||||
"strokeShape_gel": "",
|
||||
"strokeShape_fountain": "",
|
||||
"strokeShape_brush": "",
|
||||
"strokeShape": "סגנון קו המתאר",
|
||||
"strokeShape_gel": "עט נובע",
|
||||
"strokeShape_fountain": "עט נובע",
|
||||
"strokeShape_brush": "מברשת",
|
||||
"strokeStyle": "סגנון קו המתאר",
|
||||
"strokeStyle_solid": "מלא",
|
||||
"strokeStyle_dashed": "מקווקו",
|
||||
@@ -42,8 +42,8 @@
|
||||
"fontSize": "גודל גופן",
|
||||
"fontFamily": "סוג הגופן",
|
||||
"onlySelected": "רק מה שנבחר",
|
||||
"withBackground": "",
|
||||
"exportEmbedScene": "",
|
||||
"withBackground": "רקע",
|
||||
"exportEmbedScene": "הטמעה של מידע הסצנה",
|
||||
"exportEmbedScene_details": "מידע התצוגה יישמר לקובץ המיוצא מסוג PNG/SVG כך שיהיה ניתן לשחזרה ממנו.\nהפעולה תגדיל את גודל הקובץ המיוצא.",
|
||||
"addWatermark": "הוסף \"נוצר באמצעות Excalidraw\"",
|
||||
"handDrawn": "כתב יד",
|
||||
@@ -65,14 +65,14 @@
|
||||
"architect": "ארכיטקט",
|
||||
"artist": "אמן",
|
||||
"cartoonist": "קריקטוריסט",
|
||||
"fileTitle": "",
|
||||
"fileTitle": "שם קובץ",
|
||||
"colorPicker": "בחירת צבע",
|
||||
"canvasBackground": "רקע הלוח",
|
||||
"drawingCanvas": "לוח ציור",
|
||||
"layers": "שכבות",
|
||||
"actions": "פעולות",
|
||||
"language": "שפה",
|
||||
"liveCollaboration": "",
|
||||
"liveCollaboration": "התחל שיתוף חי",
|
||||
"duplicateSelection": "שכפל",
|
||||
"untitled": "ללא כותרת",
|
||||
"name": "שם",
|
||||
@@ -81,7 +81,7 @@
|
||||
"group": "אחד לקבוצה",
|
||||
"ungroup": "פרק קבוצה",
|
||||
"collaborators": "שותפים",
|
||||
"showGrid": "",
|
||||
"showGrid": "הצג רשת",
|
||||
"addToLibrary": "הוסף לספריה",
|
||||
"removeFromLibrary": "הסר מספריה",
|
||||
"libraryLoadingMessage": "טוען ספריה…",
|
||||
@@ -96,26 +96,26 @@
|
||||
"centerHorizontally": "מרכז אופקית",
|
||||
"distributeHorizontally": "חלוקה אופקית",
|
||||
"distributeVertically": "חלוקה אנכית",
|
||||
"flipHorizontal": "",
|
||||
"flipVertical": "",
|
||||
"flipHorizontal": "סובב אופקית",
|
||||
"flipVertical": "סובב אנכית",
|
||||
"viewMode": "מצב תצוגה",
|
||||
"toggleExportColorScheme": "",
|
||||
"share": "",
|
||||
"showStroke": "",
|
||||
"showBackground": "",
|
||||
"toggleTheme": ""
|
||||
"toggleExportColorScheme": "שנה את ערכת צבעי הייצוא",
|
||||
"share": "שתף",
|
||||
"showStroke": "הצג צבעי קו מתאר",
|
||||
"showBackground": "הצג צבעי רקע",
|
||||
"toggleTheme": "שינוי ערכת העיצוב"
|
||||
},
|
||||
"buttons": {
|
||||
"clearReset": "אפס את הלוח",
|
||||
"exportJSON": "",
|
||||
"exportImage": "",
|
||||
"exportJSON": "ייצא לקובץ",
|
||||
"exportImage": "שמירה כתמונה",
|
||||
"export": "ייצא",
|
||||
"exportToPng": "יצא ל PNG",
|
||||
"exportToSvg": "יצא ל SVG",
|
||||
"copyToClipboard": "העתק ללוח",
|
||||
"copyPngToClipboard": "העתק PNG ללוח",
|
||||
"scale": "קנה מידה",
|
||||
"save": "",
|
||||
"save": "שמירת קובץ נוכחי",
|
||||
"saveAs": "שמירה בשם",
|
||||
"load": "טען",
|
||||
"getShareableLink": "קבל קישור לשיתוף",
|
||||
@@ -149,15 +149,16 @@
|
||||
"decryptFailed": "לא ניתן לפענח מידע.",
|
||||
"uploadedSecurly": "ההעלאה הוצפנה מקצה לקצה, ולכן שרת Excalidraw וצד שלישי לא יכולים לקרוא את התוכן.",
|
||||
"loadSceneOverridePrompt": "טעינה של ציור חיצוני תחליף את התוכן הקיים שלך. האם תרצה להמשיך?",
|
||||
"collabStopOverridePrompt": "",
|
||||
"collabStopOverridePrompt": "עצירת השיתוף תוביל למחיקת התרשימים השמורים בדפדפן. האם את/ה בטוח/ה?\n(אם תרצה לשמור את התרשימים הקיימים, תוכל לסגור את הדפדפן מבלי לסיים את השיתוף.)",
|
||||
"errorLoadingLibrary": "קרתה שגיאה בטעינת הספריה החיצונית.",
|
||||
"errorAddingToLibrary": "",
|
||||
"errorRemovingFromLibrary": "",
|
||||
"errorAddingToLibrary": "לא ניתן להוסיף פריט לספרייה",
|
||||
"errorRemovingFromLibrary": "לא ניתן למחוק פריט מהספריה",
|
||||
"confirmAddLibrary": "הפעולה תוסיף {{numShapes}} צורה(ות) לספריה שלך. האם אתה בטוח?",
|
||||
"imageDoesNotContainScene": "אין תמיכה בייבוא תמונות כעת.\n\nהאם אתה רוצה לייבא תצוגה? התמונה הזאת אינה מכילה מידע על תצוגה. האם הפעלת את האפשרות הזאת בזמן הוצאת המידע?",
|
||||
"cannotRestoreFromImage": "לא הצלחנו לשחזר את התצוגה מקובץ התמונה",
|
||||
"invalidSceneUrl": "",
|
||||
"resetLibrary": ""
|
||||
"invalidSceneUrl": "ייבוא המידע מן סצינה מכתובת האינטרנט נכשלה. המידע בנוי באופן משובש או שהוא אינו קובץ JSON תקין של Excalidraw.",
|
||||
"resetLibrary": "פעולה זו תנקה את כל הלוח. אתה בטוח?",
|
||||
"invalidEncryptionKey": ""
|
||||
},
|
||||
"toolBar": {
|
||||
"selection": "בחירה",
|
||||
@@ -166,7 +167,7 @@
|
||||
"ellipse": "אליפסה",
|
||||
"arrow": "חץ",
|
||||
"line": "קו",
|
||||
"freedraw": "",
|
||||
"freedraw": "צייר",
|
||||
"text": "טקסט",
|
||||
"library": "ספריה",
|
||||
"lock": "השאר את הכלי הנבחר פעיל גם לאחר סיום הציור"
|
||||
@@ -180,6 +181,8 @@
|
||||
"linearElement": "הקלק בשביל לבחור נקודות מרובות, גרור בשביל קו בודד",
|
||||
"freeDraw": "לחץ וגרור, שחרר כשסיימת",
|
||||
"text": "טיפ: אפשר להוסיף טקסט על ידי לחיצה כפולה בכל מקום עם כלי הבחירה",
|
||||
"text_selected": "לחץ לחיצה כפולה או אנטר לעריכת הנקודות",
|
||||
"text_editing": "כדי לסיים את העריכה לחצו על מקש Escape או על Ctrl ומקש Enter (Cmd במחשבי אפל)",
|
||||
"linearElementMulti": "הקלק על הנקודה האחרונה או הקש Escape או Enter לסיום",
|
||||
"lockAngle": "אתה יכול להגביל זווית ע״י לחיצה על SHIFT",
|
||||
"resize": "ניתן להגביל פרופורציות על ידי לחיצה על SHIFT תוך כדי שינוי גודל,\nהחזק ALT בשביל לשנות גודל ביחס למרכז",
|
||||
@@ -214,46 +217,48 @@
|
||||
"desc_inProgressIntro": "שיתוף חי כרגע בפעולה.",
|
||||
"desc_shareLink": "שתף את הקישור עם כל מי שאתה מעוניין לעבוד אתו:",
|
||||
"desc_exitSession": "עצירת השיתוף תנתק אותך מהחדר, אבל עדיין תוכל להמשיך לעבוד על הלוח, מקומית. שים לב שזה לא ישפיע על אנשים אחרים, והם עדיין יוכלו לשתף פעולה עם הגירסה שלהם.",
|
||||
"shareTitle": ""
|
||||
"shareTitle": "הצטרף לסשן שיתוף בזמן אמת של Excalidraw"
|
||||
},
|
||||
"errorDialog": {
|
||||
"title": "שגיאה"
|
||||
},
|
||||
"exportDialog": {
|
||||
"disk_title": "",
|
||||
"disk_details": "",
|
||||
"disk_button": "",
|
||||
"link_title": "",
|
||||
"link_details": "",
|
||||
"link_button": "",
|
||||
"excalidrawplus_description": "",
|
||||
"excalidrawplus_button": "",
|
||||
"excalidrawplus_exportError": ""
|
||||
"disk_title": "שמור לכונן",
|
||||
"disk_details": "ייצוא מידע הסצינה לקובץ אותו ניתן יהיה לייבא בהמשך.",
|
||||
"disk_button": "שמירה לקובץ",
|
||||
"link_title": "העתקת קישור לשיתוף",
|
||||
"link_details": "ייצוא כקישור לקריאה בלבד.",
|
||||
"link_button": "ייצוא כקישור",
|
||||
"excalidrawplus_description": "שמור את המפה לסביבת העבודה שלך ב-Excalidraw+.",
|
||||
"excalidrawplus_button": "ייצוא",
|
||||
"excalidrawplus_exportError": "הייצוא ל-Excalidraw+ לא הצליח לעת עתה..."
|
||||
},
|
||||
"helpDialog": {
|
||||
"blog": "קרא את הבלוג שלנו",
|
||||
"click": "קליק",
|
||||
"curvedArrow": "",
|
||||
"curvedLine": "",
|
||||
"curvedArrow": "חץ מעוגל",
|
||||
"curvedLine": "קו מעוגל",
|
||||
"documentation": "תיעוד",
|
||||
"doubleClick": "לחיצה כפולה",
|
||||
"drag": "לגרור",
|
||||
"editor": "עורך",
|
||||
"editSelectedShape": "ערוך את הצורה הנבחרת (טקסט/חץ/קו)",
|
||||
"github": "מצאת בעיה? דווח",
|
||||
"howto": "עקוב אחר המדריכים שלנו",
|
||||
"or": "או",
|
||||
"preventBinding": "",
|
||||
"preventBinding": "למנוע נעיצת חיצים",
|
||||
"shapes": "צורות",
|
||||
"shortcuts": "קיצורי מקלדת",
|
||||
"textFinish": "סיים עריכה (טקסט)",
|
||||
"textNewLine": "הוסף שורה חדשה (טקסט)",
|
||||
"title": "עזרה",
|
||||
"view": "תצוגה",
|
||||
"zoomToFit": "",
|
||||
"zoomToFit": "גלילה להצגת כל האלמנטים במסך",
|
||||
"zoomToSelection": "התמקד בבחירה"
|
||||
},
|
||||
"encrypted": {
|
||||
"tooltip": "הרישומים שלך מוצפנים מקצה לקצה כך שהשרתים של Excalidraw לא יראו אותם לעולם.",
|
||||
"link": ""
|
||||
"link": "פוסט בבלוג על הצפנה מקצה לקצב ב-Excalidraw"
|
||||
},
|
||||
"stats": {
|
||||
"angle": "זווית",
|
||||
@@ -265,18 +270,65 @@
|
||||
"storage": "אחסון",
|
||||
"title": "סטטיסטיקות לחנונים",
|
||||
"total": "סה״כ",
|
||||
"version": "",
|
||||
"version": "גרסה",
|
||||
"versionCopy": "לחץ להעתקה",
|
||||
"versionNotAvailable": "",
|
||||
"versionNotAvailable": "הגרסה אינה זמינה",
|
||||
"width": "רוחב"
|
||||
},
|
||||
"toast": {
|
||||
"copyStyles": "העתק סגנונות.",
|
||||
"copyToClipboard": "",
|
||||
"copyToClipboardAsPng": "",
|
||||
"copyToClipboard": "הועתק אל הלוח.",
|
||||
"copyToClipboardAsPng": "{{exportSelection}} הועתקה ללוח כ-PNG\n({{exportColorScheme}})",
|
||||
"fileSaved": "קובץ נשמר.",
|
||||
"fileSavedToFilename": "",
|
||||
"canvas": "",
|
||||
"selection": ""
|
||||
"fileSavedToFilename": "נשמר לקובץ {filename}",
|
||||
"canvas": "משטח ציור",
|
||||
"selection": "בחירה"
|
||||
},
|
||||
"colors": {
|
||||
"ffffff": "לבן",
|
||||
"f8f9fa": "אפור 0",
|
||||
"f1f3f5": "אפור 1",
|
||||
"fff5f5": "אדום 0",
|
||||
"fff0f6": "ורוד 0",
|
||||
"f8f0fc": "ענבים 0",
|
||||
"f3f0ff": "סגול 0",
|
||||
"edf2ff": "כחול כהה 0",
|
||||
"e7f5ff": "כחול 0",
|
||||
"e3fafc": "טורקיז 0",
|
||||
"e6fcf5": "ירקרק 0",
|
||||
"ebfbee": "ירוק 0",
|
||||
"f4fce3": "ליים 0",
|
||||
"fff9db": "צהוב",
|
||||
"fff4e6": "כתום 0",
|
||||
"transparent": "שקוף",
|
||||
"ced4da": "אפור 4",
|
||||
"868e96": "אפור 6",
|
||||
"fa5252": "אדום 6",
|
||||
"e64980": "ורוד 6",
|
||||
"be4bdb": "ענבים 6",
|
||||
"7950f2": "סגול 6",
|
||||
"4c6ef5": "כחול כהה 6",
|
||||
"228be6": "כחול 6",
|
||||
"15aabf": "טורקיז 6",
|
||||
"12b886": "ירקרק 6",
|
||||
"40c057": "ירוק 6",
|
||||
"82c91e": "ליים 6",
|
||||
"fab005": "צהוב 6",
|
||||
"fd7e14": "כתום 6",
|
||||
"000000": "שחור",
|
||||
"343a40": "אפור 8",
|
||||
"495057": "אפור 7",
|
||||
"c92a2a": "אדום 9",
|
||||
"a61e4d": "ורוד 9",
|
||||
"862e9c": "ענבים 9",
|
||||
"5f3dc4": "סגול 9",
|
||||
"364fc7": "כחול כהה 9",
|
||||
"1864ab": "כחול 9",
|
||||
"0b7285": "טורקיז 9",
|
||||
"087f5b": "ירקרק 9",
|
||||
"2b8a3e": "ירוק 9",
|
||||
"5c940d": "ליים 9",
|
||||
"e67700": "ירוק 9",
|
||||
"d9480f": "כתום 9"
|
||||
}
|
||||
}
|
||||
|
@@ -157,7 +157,8 @@
|
||||
"imageDoesNotContainScene": "दृश्य में छवि नहीं है",
|
||||
"cannotRestoreFromImage": "छवि फ़ाइल बहाल दृश्य नहीं है",
|
||||
"invalidSceneUrl": "",
|
||||
"resetLibrary": ""
|
||||
"resetLibrary": "",
|
||||
"invalidEncryptionKey": ""
|
||||
},
|
||||
"toolBar": {
|
||||
"selection": "चयन",
|
||||
@@ -180,6 +181,8 @@
|
||||
"linearElement": "कई बिंदुओं को शुरू करने के लिए क्लिक करें, सिंगल लाइन के लिए खींचें",
|
||||
"freeDraw": "क्लिक करें और खींचें। समाप्त करने के लिए, छोड़ो",
|
||||
"text": "आप चयन टूल से कहीं भी डबल-क्लिक करके टेक्स्ट जोड़ सकते हैं",
|
||||
"text_selected": "",
|
||||
"text_editing": "",
|
||||
"linearElementMulti": "अंतिम बिंदु पर क्लिक करें या समाप्त होने के लिए एस्केप या एंटर दबाएं",
|
||||
"lockAngle": "आप घूर्णन करते समय SHIFT पकड़कर कोणों को मोड़ सकते हैं",
|
||||
"resize": "आकार बदलते समय आप SHIFT को पकड़ कर अनुपात में कमी कर सकते हैं,\nकेंद्र से आकार बदलने के लिए ALT दबाए रखें",
|
||||
@@ -236,16 +239,18 @@
|
||||
"curvedArrow": "वक्र तीर",
|
||||
"curvedLine": "वक्र रेखा",
|
||||
"documentation": "",
|
||||
"doubleClick": "",
|
||||
"drag": "खींचें",
|
||||
"editor": "संपादक",
|
||||
"editSelectedShape": "",
|
||||
"github": "मुद्दा मिला? प्रस्तुत करें",
|
||||
"howto": "हमारे गाइड का पालन करें",
|
||||
"or": "या",
|
||||
"preventBinding": "तीर बंधन रोकें",
|
||||
"shapes": "आकृतियाँ",
|
||||
"shortcuts": "कीबोर्ड के शॉर्टकट्स",
|
||||
"textFinish": "संपादन समाप्त करें (पाठ)",
|
||||
"textNewLine": "नई पंक्ति जोड़ें (पाठ)",
|
||||
"textFinish": "",
|
||||
"textNewLine": "",
|
||||
"title": "मदद",
|
||||
"view": "दृश्य",
|
||||
"zoomToFit": "सभी तत्वों को फिट करने के लिए ज़ूम करें",
|
||||
@@ -278,5 +283,52 @@
|
||||
"fileSavedToFilename": "",
|
||||
"canvas": "",
|
||||
"selection": ""
|
||||
},
|
||||
"colors": {
|
||||
"ffffff": "",
|
||||
"f8f9fa": "",
|
||||
"f1f3f5": "",
|
||||
"fff5f5": "",
|
||||
"fff0f6": "",
|
||||
"f8f0fc": "",
|
||||
"f3f0ff": "",
|
||||
"edf2ff": "",
|
||||
"e7f5ff": "",
|
||||
"e3fafc": "",
|
||||
"e6fcf5": "",
|
||||
"ebfbee": "",
|
||||
"f4fce3": "",
|
||||
"fff9db": "",
|
||||
"fff4e6": "",
|
||||
"transparent": "",
|
||||
"ced4da": "",
|
||||
"868e96": "",
|
||||
"fa5252": "",
|
||||
"e64980": "",
|
||||
"be4bdb": "",
|
||||
"7950f2": "",
|
||||
"4c6ef5": "",
|
||||
"228be6": "",
|
||||
"15aabf": "",
|
||||
"12b886": "",
|
||||
"40c057": "",
|
||||
"82c91e": "",
|
||||
"fab005": "",
|
||||
"fd7e14": "",
|
||||
"000000": "",
|
||||
"343a40": "",
|
||||
"495057": "",
|
||||
"c92a2a": "",
|
||||
"a61e4d": "",
|
||||
"862e9c": "",
|
||||
"5f3dc4": "",
|
||||
"364fc7": "",
|
||||
"1864ab": "",
|
||||
"0b7285": "",
|
||||
"087f5b": "",
|
||||
"2b8a3e": "",
|
||||
"5c940d": "",
|
||||
"e67700": "",
|
||||
"d9480f": ""
|
||||
}
|
||||
}
|
||||
|
@@ -157,7 +157,8 @@
|
||||
"imageDoesNotContainScene": "Képek importálása egyelőre nem támogatott.\n\nEgy jelenetet szeretnél betölteni? Úgy tűnik ez a kép fájl nem tartalmazza a szükséges adatokat. Exportáláskor ezt egy külön opcióval lehet beállítani.",
|
||||
"cannotRestoreFromImage": "A jelenet visszaállítása nem sikerült ebből a kép fájlból",
|
||||
"invalidSceneUrl": "",
|
||||
"resetLibrary": ""
|
||||
"resetLibrary": "",
|
||||
"invalidEncryptionKey": ""
|
||||
},
|
||||
"toolBar": {
|
||||
"selection": "Kijelölés",
|
||||
@@ -180,6 +181,8 @@
|
||||
"linearElement": "Kattintással görbe, az eger húzásával pedig egyenes nyilat rajzolhatsz",
|
||||
"freeDraw": "Kattints és húzd, majd engedd el, amikor végeztél",
|
||||
"text": "Tipp: A kijelölés eszközzel a dupla kattintás új szöveget hoz létre",
|
||||
"text_selected": "",
|
||||
"text_editing": "",
|
||||
"linearElementMulti": "Kattints a következő ív pozíciójára, vagy fejezd be a nyilat az Escape vagy Enter megnyomásával",
|
||||
"lockAngle": "A SHIFT billentyű lenyomva tartásával korlátozhatja forgatás szögét",
|
||||
"resize": "A SHIFT billentyű lenyomva tartásával az átméretezés megtartja az arányokat,\naz ALT lenyomva tartásával pedig a középpont egy helyben marad",
|
||||
@@ -236,8 +239,10 @@
|
||||
"curvedArrow": "",
|
||||
"curvedLine": "",
|
||||
"documentation": "",
|
||||
"doubleClick": "",
|
||||
"drag": "",
|
||||
"editor": "",
|
||||
"editSelectedShape": "",
|
||||
"github": "",
|
||||
"howto": "",
|
||||
"or": "",
|
||||
@@ -278,5 +283,52 @@
|
||||
"fileSavedToFilename": "",
|
||||
"canvas": "",
|
||||
"selection": ""
|
||||
},
|
||||
"colors": {
|
||||
"ffffff": "",
|
||||
"f8f9fa": "",
|
||||
"f1f3f5": "",
|
||||
"fff5f5": "",
|
||||
"fff0f6": "",
|
||||
"f8f0fc": "",
|
||||
"f3f0ff": "",
|
||||
"edf2ff": "",
|
||||
"e7f5ff": "",
|
||||
"e3fafc": "",
|
||||
"e6fcf5": "",
|
||||
"ebfbee": "",
|
||||
"f4fce3": "",
|
||||
"fff9db": "",
|
||||
"fff4e6": "",
|
||||
"transparent": "",
|
||||
"ced4da": "",
|
||||
"868e96": "",
|
||||
"fa5252": "",
|
||||
"e64980": "",
|
||||
"be4bdb": "",
|
||||
"7950f2": "",
|
||||
"4c6ef5": "",
|
||||
"228be6": "",
|
||||
"15aabf": "",
|
||||
"12b886": "",
|
||||
"40c057": "",
|
||||
"82c91e": "",
|
||||
"fab005": "",
|
||||
"fd7e14": "",
|
||||
"000000": "",
|
||||
"343a40": "",
|
||||
"495057": "",
|
||||
"c92a2a": "",
|
||||
"a61e4d": "",
|
||||
"862e9c": "",
|
||||
"5f3dc4": "",
|
||||
"364fc7": "",
|
||||
"1864ab": "",
|
||||
"0b7285": "",
|
||||
"087f5b": "",
|
||||
"2b8a3e": "",
|
||||
"5c940d": "",
|
||||
"e67700": "",
|
||||
"d9480f": ""
|
||||
}
|
||||
}
|
||||
|
@@ -157,7 +157,8 @@
|
||||
"imageDoesNotContainScene": "Mengimpor gambar tidak didukung saat ini.\n\nApakah Anda ingin impor pemandangan? Gambar ini tidak berisi data pemandangan. Sudah ka Anda aktifkan ini ketika ekspor?",
|
||||
"cannotRestoreFromImage": "Pemandangan tidak dapat dipulihkan dari file gambar ini",
|
||||
"invalidSceneUrl": "Tidak dapat impor pemandangan dari URL. Kemungkinan URL itu rusak atau tidak berisi data JSON Excalidraw yang valid.",
|
||||
"resetLibrary": "Ini akan menghapus pustaka Anda. Anda yakin?"
|
||||
"resetLibrary": "Ini akan menghapus pustaka Anda. Anda yakin?",
|
||||
"invalidEncryptionKey": "Sandi enkripsi harus 22 karakter. Kolaborasi langsung dinonaktifkan."
|
||||
},
|
||||
"toolBar": {
|
||||
"selection": "Pilihan",
|
||||
@@ -180,6 +181,8 @@
|
||||
"linearElement": "Klik untuk memulai banyak poin, seret untuk satu baris",
|
||||
"freeDraw": "Klik dan seret, lepaskan jika Anda selesai",
|
||||
"text": "Tip: Anda juga dapat menambahkan teks dengan klik ganda di mana saja dengan alat pemilihan",
|
||||
"text_selected": "Klik ganda atau tekan ENTER untuk edit teks",
|
||||
"text_editing": "Tekan Escape atau CtrlAtauCmd+ENTER untuk selesai mengedit",
|
||||
"linearElementMulti": "Klik pada titik akhir atau tekan Escape atau Enter untuk menyelesaikan",
|
||||
"lockAngle": "Anda dapat menjaga sudut dengan menahan SHIFT",
|
||||
"resize": "Anda dapat menjaga proposi dengan menekan SHIFT sambil mengubah ukuran,\ntekan AlT untuk mengubah ukuran dari tengah",
|
||||
@@ -236,16 +239,18 @@
|
||||
"curvedArrow": "Panah lengkung",
|
||||
"curvedLine": "Garis lengkung",
|
||||
"documentation": "Dokumentasi",
|
||||
"doubleClick": "klik-ganda",
|
||||
"drag": "seret",
|
||||
"editor": "Editor",
|
||||
"editSelectedShape": "Edit bentuk yang dipilih (teks/panah/garis)",
|
||||
"github": "Menemukan masalah? Kirimkan",
|
||||
"howto": "Ikuti panduan kami",
|
||||
"or": "atau",
|
||||
"preventBinding": "Cegah pengikatan panah",
|
||||
"shapes": "Bentuk",
|
||||
"shortcuts": "Pintasan keyboard",
|
||||
"textFinish": "Selesai mengedit (teks)",
|
||||
"textNewLine": "Tambahkan baris baru (teks)",
|
||||
"textFinish": "Selesai mengedit (editor teks)",
|
||||
"textNewLine": "Tambahkan garis baru (editor teks)",
|
||||
"title": "Bantuan",
|
||||
"view": "Tampilan",
|
||||
"zoomToFit": "Perbesar agar sesuai dengan semua elemen",
|
||||
@@ -278,5 +283,52 @@
|
||||
"fileSavedToFilename": "Disimpan ke {filename}",
|
||||
"canvas": "kanvas",
|
||||
"selection": "pilihan"
|
||||
},
|
||||
"colors": {
|
||||
"ffffff": "Putih",
|
||||
"f8f9fa": "Abu-abu 0",
|
||||
"f1f3f5": "Abu-abu 1",
|
||||
"fff5f5": "Merah 0",
|
||||
"fff0f6": "Merah muda 0",
|
||||
"f8f0fc": "Ungu 0",
|
||||
"f3f0ff": "Violet 0",
|
||||
"edf2ff": "Indigo 0",
|
||||
"e7f5ff": "Biru 0",
|
||||
"e3fafc": "Cyan 0",
|
||||
"e6fcf5": "Teal 0",
|
||||
"ebfbee": "Hijau 0",
|
||||
"f4fce3": "Lime 0",
|
||||
"fff9db": "Kuning 0",
|
||||
"fff4e6": "Jingga 0",
|
||||
"transparent": "Transparan",
|
||||
"ced4da": "Abu-abu 4",
|
||||
"868e96": "Abu-abu 6",
|
||||
"fa5252": "Merah 6",
|
||||
"e64980": "Merah muda 6",
|
||||
"be4bdb": "Ungu 6",
|
||||
"7950f2": "Violet 6",
|
||||
"4c6ef5": "Indigo 6",
|
||||
"228be6": "Biru 6",
|
||||
"15aabf": "Cyan 6",
|
||||
"12b886": "Teal 6",
|
||||
"40c057": "Hijau 6",
|
||||
"82c91e": "Lime 6",
|
||||
"fab005": "Kuning 6",
|
||||
"fd7e14": "Jingga 6",
|
||||
"000000": "Hitam",
|
||||
"343a40": "Abu-abu 8",
|
||||
"495057": "Abu-abu 7",
|
||||
"c92a2a": "Merah 9",
|
||||
"a61e4d": "Merah muda 9",
|
||||
"862e9c": "Ungu 9",
|
||||
"5f3dc4": "Violet 9",
|
||||
"364fc7": "Indigo 9",
|
||||
"1864ab": "Biru 9",
|
||||
"0b7285": "Cyan 9",
|
||||
"087f5b": "Teal 9",
|
||||
"2b8a3e": "Hijau 9",
|
||||
"5c940d": "Lime 9",
|
||||
"e67700": "Kuning 9",
|
||||
"d9480f": "Jingga 9"
|
||||
}
|
||||
}
|
||||
|
@@ -157,7 +157,8 @@
|
||||
"imageDoesNotContainScene": "L'importazione di immagini al momento non è supportata.\n\nVuoi importare una scena? Questa immagine non sembra contenere alcun dato di scena. Hai abilitato questa opzione durante l'esportazione?",
|
||||
"cannotRestoreFromImage": "Impossibile ripristinare la scena da questo file immagine",
|
||||
"invalidSceneUrl": "Impossibile importare la scena dall'URL fornito. Potrebbe essere malformato o non contenere dati JSON Excalidraw validi.",
|
||||
"resetLibrary": "Questa azione cancellerà l'intera libreria. Sei sicuro?"
|
||||
"resetLibrary": "Questa azione cancellerà l'intera libreria. Sei sicuro?",
|
||||
"invalidEncryptionKey": "La chiave di cifratura deve essere composta da 22 caratteri. La collaborazione live è disabilitata."
|
||||
},
|
||||
"toolBar": {
|
||||
"selection": "Selezione",
|
||||
@@ -166,7 +167,7 @@
|
||||
"ellipse": "Ellisse",
|
||||
"arrow": "Freccia",
|
||||
"line": "Linea",
|
||||
"freedraw": "",
|
||||
"freedraw": "Disegno",
|
||||
"text": "Testo",
|
||||
"library": "Libreria",
|
||||
"lock": "Mantieni lo strumento selezionato attivo dopo aver disegnato"
|
||||
@@ -180,6 +181,8 @@
|
||||
"linearElement": "Clicca per iniziare una linea in più punti, trascina per singola linea",
|
||||
"freeDraw": "Clicca e trascina, rilascia quando avrai finito",
|
||||
"text": "Suggerimento: puoi anche aggiungere del testo facendo doppio clic ovunque con lo strumento di selezione",
|
||||
"text_selected": "Fai doppio click o premi INVIO per modificare il testo",
|
||||
"text_editing": "Premi ESC o CtrlOCmd+INVIO per completare le modifiche",
|
||||
"linearElementMulti": "Clicca sull'ultimo punto o premi Esc o Invio per finire",
|
||||
"lockAngle": "Puoi limitare l'angolo tenendo premuto SHIFT",
|
||||
"resize": "Per vincolare le proporzioni, tieni premuto MAIUSC durante il ridimensionamento;\nper ridimensionare dal centro, tieni premuto ALT",
|
||||
@@ -236,16 +239,18 @@
|
||||
"curvedArrow": "Freccia curva",
|
||||
"curvedLine": "Linea curva",
|
||||
"documentation": "Documentazione",
|
||||
"doubleClick": "doppio-click",
|
||||
"drag": "trascina",
|
||||
"editor": "Editor",
|
||||
"editSelectedShape": "Modifica la forma selezionata (testo/freccia/linea)",
|
||||
"github": "Trovato un problema? Segnalalo",
|
||||
"howto": "Segui le nostre guide",
|
||||
"or": "oppure",
|
||||
"preventBinding": "Impedisci legame della freccia",
|
||||
"shapes": "Forme",
|
||||
"shortcuts": "Scorciatoie da tastiera",
|
||||
"textFinish": "Termina la modifica (testo)",
|
||||
"textNewLine": "Aggiungi nuova riga (testo)",
|
||||
"textFinish": "Completa la modifica (editor di testo)",
|
||||
"textNewLine": "Aggiungi nuova riga (editor di testo)",
|
||||
"title": "Guida",
|
||||
"view": "Vista",
|
||||
"zoomToFit": "Adatta zoom per mostrare tutti gli elementi",
|
||||
@@ -278,5 +283,52 @@
|
||||
"fileSavedToFilename": "Salvato in {filename}",
|
||||
"canvas": "tela",
|
||||
"selection": "selezione"
|
||||
},
|
||||
"colors": {
|
||||
"ffffff": "Bianco",
|
||||
"f8f9fa": "Grigio 0",
|
||||
"f1f3f5": "Grigio 1",
|
||||
"fff5f5": "Rosso 0",
|
||||
"fff0f6": "Rosa 0",
|
||||
"f8f0fc": "Uva 0",
|
||||
"f3f0ff": "Viola 0",
|
||||
"edf2ff": "Indaco 0",
|
||||
"e7f5ff": "Blu 0",
|
||||
"e3fafc": "Ciano 0",
|
||||
"e6fcf5": "Verde acqua 0",
|
||||
"ebfbee": "Verde 0",
|
||||
"f4fce3": "Lime 0",
|
||||
"fff9db": "Giallo 0",
|
||||
"fff4e6": "Arancio 0",
|
||||
"transparent": "Trasparente",
|
||||
"ced4da": "Grigio 4",
|
||||
"868e96": "Grigio 6",
|
||||
"fa5252": "Rosso 6",
|
||||
"e64980": "Rosa 6",
|
||||
"be4bdb": "Uva 6",
|
||||
"7950f2": "Viola 6",
|
||||
"4c6ef5": "Indaco 6",
|
||||
"228be6": "Blu 6",
|
||||
"15aabf": "Ciano 6",
|
||||
"12b886": "Verde acqua 6",
|
||||
"40c057": "Verde 6",
|
||||
"82c91e": "Lime 6",
|
||||
"fab005": "Giallo 6",
|
||||
"fd7e14": "Arancio 6",
|
||||
"000000": "Nero",
|
||||
"343a40": "Grigio 8",
|
||||
"495057": "Grigio 7",
|
||||
"c92a2a": "Rosso 9",
|
||||
"a61e4d": "Rosa 9",
|
||||
"862e9c": "Uva 9",
|
||||
"5f3dc4": "Viola 9",
|
||||
"364fc7": "Indaco 9",
|
||||
"1864ab": "Blu 9",
|
||||
"0b7285": "Ciano 9",
|
||||
"087f5b": "Verde acqua 9",
|
||||
"2b8a3e": "Verde 9",
|
||||
"5c940d": "Lime 9",
|
||||
"e67700": "Giallo 9",
|
||||
"d9480f": "Arancio 9"
|
||||
}
|
||||
}
|
||||
|
@@ -22,7 +22,7 @@
|
||||
"strokeWidth": "線の幅",
|
||||
"strokeShape": "ストロークの形状",
|
||||
"strokeShape_gel": "ジェルペン",
|
||||
"strokeShape_fountain": "噴水ペン",
|
||||
"strokeShape_fountain": "万年筆",
|
||||
"strokeShape_brush": "ブラシペン",
|
||||
"strokeStyle": "線の種類",
|
||||
"strokeStyle_solid": "実線",
|
||||
@@ -43,7 +43,7 @@
|
||||
"fontFamily": "フォントの種類",
|
||||
"onlySelected": "選択中のみ",
|
||||
"withBackground": "背景",
|
||||
"exportEmbedScene": "",
|
||||
"exportEmbedScene": "埋め込みシーン",
|
||||
"exportEmbedScene_details": "シーンデータはエクスポートされたPNG/SVGファイルに保存され、シーンを復元することができます。\nエクスポートされたファイルのサイズは増加します。",
|
||||
"addWatermark": "\"Made with Excalidraw\"と表示",
|
||||
"handDrawn": "手描き風",
|
||||
@@ -99,10 +99,10 @@
|
||||
"flipHorizontal": "水平方向に反転",
|
||||
"flipVertical": "垂直方向に反転",
|
||||
"viewMode": "閲覧モード",
|
||||
"toggleExportColorScheme": "",
|
||||
"toggleExportColorScheme": "エクスポートカラースキームの切り替え",
|
||||
"share": "共有",
|
||||
"showStroke": "",
|
||||
"showBackground": "",
|
||||
"showStroke": "ストロークカラーピッカーを表示",
|
||||
"showBackground": "背景色ピッカーを表示",
|
||||
"toggleTheme": "テーマの切り替え"
|
||||
},
|
||||
"buttons": {
|
||||
@@ -157,7 +157,8 @@
|
||||
"imageDoesNotContainScene": "現在、画像のインポートはサポートされていません。\n\nシーンをインポートしようとしましたか?この画像にはシーンデータが含まれていないようです。エクスポート中に有効にしていましたか?",
|
||||
"cannotRestoreFromImage": "このイメージファイルからシーンを復元できませんでした",
|
||||
"invalidSceneUrl": "指定された URL からシーンをインポートできませんでした。不正な形式であるか、有効な Excalidraw JSON データが含まれていません。",
|
||||
"resetLibrary": "ライブラリを消去します。本当によろしいですか?"
|
||||
"resetLibrary": "ライブラリを消去します。本当によろしいですか?",
|
||||
"invalidEncryptionKey": "暗号化キーは22文字でなければなりません。ライブコラボレーションは無効化されています。"
|
||||
},
|
||||
"toolBar": {
|
||||
"selection": "選択",
|
||||
@@ -177,9 +178,11 @@
|
||||
"shapes": "図形"
|
||||
},
|
||||
"hints": {
|
||||
"linearElement": "クリックして複数の点を開始し、1行にドラッグします。",
|
||||
"linearElement": "クリックして複数の点を開始し、ドラッグで直線を引きます。",
|
||||
"freeDraw": "クリックしてドラッグします。離すと終了します",
|
||||
"text": "ヒント: 選択ツールを使用して任意の場所をダブルクリックしてテキストを追加することもできます",
|
||||
"text_selected": "テキストを編集するには、ダブルクリックまたはEnterキーを押します",
|
||||
"text_editing": "Esc キーまたは CtrlOrCmd+ENTER キーを押して編集を終了します",
|
||||
"linearElementMulti": "最後のポイントをクリックするか、エスケープまたはEnterを押して終了します",
|
||||
"lockAngle": "SHIFTを押したままにすると、角度を制限することができます",
|
||||
"resize": "サイズを変更中にSHIFTを押しすと比率を制御できます。Altを押すと中央からサイズを変更できます。",
|
||||
@@ -236,15 +239,17 @@
|
||||
"curvedArrow": "カーブした矢印",
|
||||
"curvedLine": "曲線",
|
||||
"documentation": "ドキュメント",
|
||||
"doubleClick": "ダブルクリック",
|
||||
"drag": "ドラッグ",
|
||||
"editor": "エディタ",
|
||||
"editSelectedShape": "選択した図形の編集 (テキスト/矢印/線)",
|
||||
"github": "不具合報告はこちら",
|
||||
"howto": "ヘルプ・マニュアル",
|
||||
"or": "または",
|
||||
"preventBinding": "矢印を結合しない",
|
||||
"shapes": "図形",
|
||||
"shortcuts": "キーボードショートカット",
|
||||
"textFinish": "編集を終了する (テキスト)",
|
||||
"textFinish": "編集を終了 (テキストエディタ)",
|
||||
"textNewLine": "新しい行を追加 (テキスト)",
|
||||
"title": "ヘルプ",
|
||||
"view": "表示",
|
||||
@@ -278,5 +283,52 @@
|
||||
"fileSavedToFilename": "{filename} に保存しました",
|
||||
"canvas": "キャンバス",
|
||||
"selection": "選択"
|
||||
},
|
||||
"colors": {
|
||||
"ffffff": "ホワイト",
|
||||
"f8f9fa": "グレー 0",
|
||||
"f1f3f5": "グレー 1",
|
||||
"fff5f5": "レッド 0",
|
||||
"fff0f6": "ピンク 0",
|
||||
"f8f0fc": "グレープ 0",
|
||||
"f3f0ff": "バイオレット 0",
|
||||
"edf2ff": "インディゴ 0",
|
||||
"e7f5ff": "ブルー 0",
|
||||
"e3fafc": "シアン 0",
|
||||
"e6fcf5": "ティール 0",
|
||||
"ebfbee": "グリーン 0",
|
||||
"f4fce3": "ライム 0",
|
||||
"fff9db": "イエロー 0",
|
||||
"fff4e6": "オレンジ 0",
|
||||
"transparent": "透明",
|
||||
"ced4da": "グレー 4",
|
||||
"868e96": "グレー 6",
|
||||
"fa5252": "レッド 6",
|
||||
"e64980": "ピンク 6",
|
||||
"be4bdb": "グレープ 6",
|
||||
"7950f2": "バイオレット 6",
|
||||
"4c6ef5": "インディゴ 6",
|
||||
"228be6": "ブルー 6",
|
||||
"15aabf": "シアン 6",
|
||||
"12b886": "ティール 6",
|
||||
"40c057": "グリーン 6",
|
||||
"82c91e": "ライム 6",
|
||||
"fab005": "イエロー 6",
|
||||
"fd7e14": "オレンジ 6",
|
||||
"000000": "ブラック",
|
||||
"343a40": "グレー 8",
|
||||
"495057": "グレー 7",
|
||||
"c92a2a": "レッド 9",
|
||||
"a61e4d": "ピンク 9",
|
||||
"862e9c": "グレープ 9",
|
||||
"5f3dc4": "バイオレット 9",
|
||||
"364fc7": "インディゴ 9",
|
||||
"1864ab": "ブルー 9",
|
||||
"0b7285": "シアン 9",
|
||||
"087f5b": "ティール 9",
|
||||
"2b8a3e": "グリーン 9",
|
||||
"5c940d": "ライム 9",
|
||||
"e67700": "イエロー 9",
|
||||
"d9480f": "オレンジ 9"
|
||||
}
|
||||
}
|
||||
|
@@ -157,7 +157,8 @@
|
||||
"imageDoesNotContainScene": "Taktert n tugniwin ur tettwadhel ara akka tura.\nTebɣiḍ ad tketreḍ asayes? Tugna-agi tettban-d ur tegbir ara isefka n usnas. Tesremdeḍ ayagi deg usifeḍ?",
|
||||
"cannotRestoreFromImage": "Asayes ulamek ara d-yettwarr seg ufaylu-agi n tugna",
|
||||
"invalidSceneUrl": "Ulamek taktert n usayes seg URL i d-ittunefken. Ahat mačči d tameɣtut neɣ ur tegbir ara isefka JSON n Excalidraw.",
|
||||
"resetLibrary": "Ayagi ad isfeḍ tamkarḍit-inek•m. Tetḥeqqeḍ?"
|
||||
"resetLibrary": "Ayagi ad isfeḍ tamkarḍit-inek•m. Tetḥeqqeḍ?",
|
||||
"invalidEncryptionKey": ""
|
||||
},
|
||||
"toolBar": {
|
||||
"selection": "Tafrayt",
|
||||
@@ -180,6 +181,8 @@
|
||||
"linearElement": "Ssit akken ad tebduḍ aṭas n tenqiḍin, zuɣer i yiwen n yizirig",
|
||||
"freeDraw": "Ssit yerna zuɣer, serreḥ ticki tfukeḍ",
|
||||
"text": "Tixidest: tzemreḍ daɣen ad ternuḍ aḍris s usiti snat n tikkal anida tebɣiḍ s ufecku n tefrayt",
|
||||
"text_selected": "Ssit snat n tikkal neɣ ssed taqeffalt Kcem akken ad tẓergeḍ aḍris",
|
||||
"text_editing": "Ssit Escape neɣ CtrlOrCmd+ENTER akken ad tfakkeḍ asiẓreg",
|
||||
"linearElementMulti": "Ssit ɣef tenqiḍt taneggarut neɣ ssed taqeffalt Escape neɣ taqeffalt Kcem akken ad tfakkeḍ",
|
||||
"lockAngle": "Tzemreḍ ad tḥettmeḍ tiɣmert s tuṭṭfa n tqeffalt SHIFT",
|
||||
"resize": "Tzemreḍ ad tḥettemeḍ assaɣ s tuṭṭfa n tqeffalt SHIFT mi ara tettbeddileḍ tiddi,\nma teṭṭfeḍ ALT abeddel n tiddi ad yili si tlemmast",
|
||||
@@ -236,16 +239,18 @@
|
||||
"curvedArrow": "Taneccabt izelgen",
|
||||
"curvedLine": "Izirig izelgen",
|
||||
"documentation": "Tasemlit",
|
||||
"doubleClick": "ssit snat n tikkal",
|
||||
"drag": "zuɣer",
|
||||
"editor": "Amaẓrag",
|
||||
"editSelectedShape": "Ẓreg talɣa yettwafernen (aḍris/taneccabt/izirig)",
|
||||
"github": "Tufiḍ-d ugur? Azen-aɣ-d",
|
||||
"howto": "Ḍfer imniren-nneɣ",
|
||||
"or": "neɣ",
|
||||
"preventBinding": "Seḥbes tuqqna n tneccabin",
|
||||
"shapes": "Talɣiwin",
|
||||
"shortcuts": "Inegzumen n unasiw",
|
||||
"textFinish": "Fak asiẓreg (aḍris)",
|
||||
"textNewLine": "Rnu ajerriḍ amaynut (aḍris)",
|
||||
"textFinish": "Fak asiẓreg (amaẓrag n uḍris)",
|
||||
"textNewLine": "Rnu ajerriḍ amaynut (amaẓrag n uḍris)",
|
||||
"title": "Tallelt",
|
||||
"view": "Tamuɣli",
|
||||
"zoomToFit": "Simɣur akken ad twliḍ akk iferdisen",
|
||||
@@ -278,5 +283,52 @@
|
||||
"fileSavedToFilename": "Yettwasekles di {filename}",
|
||||
"canvas": "taɣzut n usuneɣ",
|
||||
"selection": "tafrayt"
|
||||
},
|
||||
"colors": {
|
||||
"ffffff": "Amellal",
|
||||
"f8f9fa": "Aɣiɣdi 0",
|
||||
"f1f3f5": "Aɣiɣdi 1",
|
||||
"fff5f5": "Azeggaɣ",
|
||||
"fff0f6": "Axuxi 0",
|
||||
"f8f0fc": "",
|
||||
"f3f0ff": "Amidadi 0",
|
||||
"edf2ff": "",
|
||||
"e7f5ff": "Anili 0",
|
||||
"e3fafc": "",
|
||||
"e6fcf5": "",
|
||||
"ebfbee": "Azegzaw 0",
|
||||
"f4fce3": "",
|
||||
"fff9db": "Awraɣ 0",
|
||||
"fff4e6": "Aččinawi 0",
|
||||
"transparent": "Afrawan",
|
||||
"ced4da": "Aɣiɣdi 4",
|
||||
"868e96": "Aɣiɣdi 6",
|
||||
"fa5252": "Azeggaɣ 6",
|
||||
"e64980": "Axuxi 6",
|
||||
"be4bdb": "",
|
||||
"7950f2": "Amidadi 6",
|
||||
"4c6ef5": "",
|
||||
"228be6": "Anili 6",
|
||||
"15aabf": "",
|
||||
"12b886": "",
|
||||
"40c057": "Azegzaw 0",
|
||||
"82c91e": "",
|
||||
"fab005": "Awraɣ 6",
|
||||
"fd7e14": "Aččinawi 6",
|
||||
"000000": "Aberkan",
|
||||
"343a40": "Aɣiɣdi 8",
|
||||
"495057": "Aɣiɣdi 7",
|
||||
"c92a2a": "Azeggaɣ 9",
|
||||
"a61e4d": "Axuxi 9",
|
||||
"862e9c": "",
|
||||
"5f3dc4": "Amidadi 9",
|
||||
"364fc7": "",
|
||||
"1864ab": "Anili 9",
|
||||
"0b7285": "",
|
||||
"087f5b": "",
|
||||
"2b8a3e": "Azegzaw 9",
|
||||
"5c940d": "",
|
||||
"e67700": "Awraɣ 9",
|
||||
"d9480f": "Aččinawi 9"
|
||||
}
|
||||
}
|
||||
|
334
src/locales/kk-KZ.json
Normal file
334
src/locales/kk-KZ.json
Normal file
@@ -0,0 +1,334 @@
|
||||
{
|
||||
"labels": {
|
||||
"paste": "Қою",
|
||||
"pasteCharts": "Диаграммаларды қою",
|
||||
"selectAll": "Бәрін таңдау",
|
||||
"multiSelect": "",
|
||||
"moveCanvas": "",
|
||||
"cut": "Қию",
|
||||
"copy": "Көшіру",
|
||||
"copyAsPng": "",
|
||||
"copyAsSvg": "",
|
||||
"bringForward": "",
|
||||
"sendToBack": "",
|
||||
"bringToFront": "",
|
||||
"sendBackward": "",
|
||||
"delete": "Жою",
|
||||
"copyStyles": "Стильдерді көшіру",
|
||||
"pasteStyles": "Стильдерді қою",
|
||||
"stroke": "",
|
||||
"background": "",
|
||||
"fill": "",
|
||||
"strokeWidth": "",
|
||||
"strokeShape": "",
|
||||
"strokeShape_gel": "",
|
||||
"strokeShape_fountain": "",
|
||||
"strokeShape_brush": "",
|
||||
"strokeStyle": "",
|
||||
"strokeStyle_solid": "",
|
||||
"strokeStyle_dashed": "",
|
||||
"strokeStyle_dotted": "",
|
||||
"sloppiness": "",
|
||||
"opacity": "",
|
||||
"textAlign": "",
|
||||
"edges": "",
|
||||
"sharp": "",
|
||||
"round": "",
|
||||
"arrowheads": "Нұсқар ұштары",
|
||||
"arrowhead_none": "Жоқ",
|
||||
"arrowhead_arrow": "Нұсқар",
|
||||
"arrowhead_bar": "Тосқауыл",
|
||||
"arrowhead_dot": "Нүкте",
|
||||
"fontSize": "Қаріп өлшемі",
|
||||
"fontFamily": "Қаріп тобы",
|
||||
"onlySelected": "",
|
||||
"withBackground": "",
|
||||
"exportEmbedScene": "",
|
||||
"exportEmbedScene_details": "",
|
||||
"addWatermark": "",
|
||||
"handDrawn": "",
|
||||
"normal": "Қалыпты",
|
||||
"code": "",
|
||||
"small": "Кіші",
|
||||
"medium": "Орта",
|
||||
"large": "Үлкен",
|
||||
"veryLarge": "Өте үлкен",
|
||||
"solid": "",
|
||||
"hachure": "",
|
||||
"crossHatch": "",
|
||||
"thin": "",
|
||||
"bold": "",
|
||||
"left": "Солға",
|
||||
"center": "Ортаға",
|
||||
"right": "Оңға",
|
||||
"extraBold": "",
|
||||
"architect": "",
|
||||
"artist": "",
|
||||
"cartoonist": "",
|
||||
"fileTitle": "Файл атауы",
|
||||
"colorPicker": "",
|
||||
"canvasBackground": "",
|
||||
"drawingCanvas": "",
|
||||
"layers": "",
|
||||
"actions": "",
|
||||
"language": "Тіл",
|
||||
"liveCollaboration": "",
|
||||
"duplicateSelection": "Көшірме",
|
||||
"untitled": "Атауысыз",
|
||||
"name": "",
|
||||
"yourName": "",
|
||||
"madeWithExcalidraw": "",
|
||||
"group": "",
|
||||
"ungroup": "",
|
||||
"collaborators": "",
|
||||
"showGrid": "",
|
||||
"addToLibrary": "",
|
||||
"removeFromLibrary": "",
|
||||
"libraryLoadingMessage": "",
|
||||
"libraries": "",
|
||||
"loadingScene": "",
|
||||
"align": "",
|
||||
"alignTop": "",
|
||||
"alignBottom": "",
|
||||
"alignLeft": "",
|
||||
"alignRight": "",
|
||||
"centerVertically": "",
|
||||
"centerHorizontally": "",
|
||||
"distributeHorizontally": "",
|
||||
"distributeVertically": "",
|
||||
"flipHorizontal": "",
|
||||
"flipVertical": "",
|
||||
"viewMode": "",
|
||||
"toggleExportColorScheme": "",
|
||||
"share": "",
|
||||
"showStroke": "",
|
||||
"showBackground": "",
|
||||
"toggleTheme": ""
|
||||
},
|
||||
"buttons": {
|
||||
"clearReset": "",
|
||||
"exportJSON": "",
|
||||
"exportImage": "",
|
||||
"export": "Экспорт",
|
||||
"exportToPng": "",
|
||||
"exportToSvg": "",
|
||||
"copyToClipboard": "",
|
||||
"copyPngToClipboard": "",
|
||||
"scale": "",
|
||||
"save": "",
|
||||
"saveAs": "",
|
||||
"load": "",
|
||||
"getShareableLink": "",
|
||||
"close": "Жабу",
|
||||
"selectLanguage": "Тілді таңдау",
|
||||
"scrollBackToContent": "",
|
||||
"zoomIn": "",
|
||||
"zoomOut": "",
|
||||
"resetZoom": "",
|
||||
"menu": "Mәзір",
|
||||
"done": "Дайын",
|
||||
"edit": "",
|
||||
"undo": "",
|
||||
"redo": "",
|
||||
"resetLibrary": "",
|
||||
"createNewRoom": "",
|
||||
"fullScreen": "",
|
||||
"darkMode": "",
|
||||
"lightMode": "",
|
||||
"zenMode": "",
|
||||
"exitZenMode": ""
|
||||
},
|
||||
"alerts": {
|
||||
"clearReset": "",
|
||||
"couldNotCreateShareableLink": "",
|
||||
"couldNotCreateShareableLinkTooBig": "",
|
||||
"couldNotLoadInvalidFile": "",
|
||||
"importBackendFailed": "",
|
||||
"cannotExportEmptyCanvas": "",
|
||||
"couldNotCopyToClipboard": "",
|
||||
"decryptFailed": "",
|
||||
"uploadedSecurly": "",
|
||||
"loadSceneOverridePrompt": "",
|
||||
"collabStopOverridePrompt": "",
|
||||
"errorLoadingLibrary": "",
|
||||
"errorAddingToLibrary": "",
|
||||
"errorRemovingFromLibrary": "",
|
||||
"confirmAddLibrary": "",
|
||||
"imageDoesNotContainScene": "",
|
||||
"cannotRestoreFromImage": "",
|
||||
"invalidSceneUrl": "",
|
||||
"resetLibrary": "",
|
||||
"invalidEncryptionKey": ""
|
||||
},
|
||||
"toolBar": {
|
||||
"selection": "",
|
||||
"rectangle": "",
|
||||
"diamond": "",
|
||||
"ellipse": "",
|
||||
"arrow": "Нұсқар",
|
||||
"line": "",
|
||||
"freedraw": "",
|
||||
"text": "Мәтін",
|
||||
"library": "",
|
||||
"lock": ""
|
||||
},
|
||||
"headings": {
|
||||
"canvasActions": "",
|
||||
"selectedShapeActions": "",
|
||||
"shapes": ""
|
||||
},
|
||||
"hints": {
|
||||
"linearElement": "",
|
||||
"freeDraw": "",
|
||||
"text": "",
|
||||
"text_selected": "",
|
||||
"text_editing": "",
|
||||
"linearElementMulti": "",
|
||||
"lockAngle": "",
|
||||
"resize": "",
|
||||
"rotate": "",
|
||||
"lineEditor_info": "",
|
||||
"lineEditor_pointSelected": "",
|
||||
"lineEditor_nothingSelected": ""
|
||||
},
|
||||
"canvasError": {
|
||||
"cannotShowPreview": "",
|
||||
"canvasTooBig": "",
|
||||
"canvasTooBigTip": ""
|
||||
},
|
||||
"errorSplash": {
|
||||
"headingMain_pre": "",
|
||||
"headingMain_button": "",
|
||||
"clearCanvasMessage": "",
|
||||
"clearCanvasMessage_button": "",
|
||||
"clearCanvasCaveat": "",
|
||||
"trackedToSentry_pre": "",
|
||||
"trackedToSentry_post": "",
|
||||
"openIssueMessage_pre": "",
|
||||
"openIssueMessage_button": "",
|
||||
"openIssueMessage_post": "",
|
||||
"sceneContent": ""
|
||||
},
|
||||
"roomDialog": {
|
||||
"desc_intro": "",
|
||||
"desc_privacy": "",
|
||||
"button_startSession": "",
|
||||
"button_stopSession": "",
|
||||
"desc_inProgressIntro": "",
|
||||
"desc_shareLink": "",
|
||||
"desc_exitSession": "",
|
||||
"shareTitle": ""
|
||||
},
|
||||
"errorDialog": {
|
||||
"title": "Қате"
|
||||
},
|
||||
"exportDialog": {
|
||||
"disk_title": "",
|
||||
"disk_details": "Сахна деректерін кейін қайта импорттауға болатын файлға экспорттаңыз.",
|
||||
"disk_button": "Файлға сақтау",
|
||||
"link_title": "Ортақ сілтеме",
|
||||
"link_details": "Тек оқуға арналған сілтеме ретінде экспорттау.",
|
||||
"link_button": "Сілтемеге экспорттау",
|
||||
"excalidrawplus_description": "Сахнаны өзіңіздің Excalidraw+ жұмыс кеңістігінде сақтаңыз.",
|
||||
"excalidrawplus_button": "Экспорт",
|
||||
"excalidrawplus_exportError": "Қазіргі уақытта Excalidraw+ үшін экспорттау мүмкін емес..."
|
||||
},
|
||||
"helpDialog": {
|
||||
"blog": "Біздің блогты оқу",
|
||||
"click": "шерту",
|
||||
"curvedArrow": "Майысқан нұсқар",
|
||||
"curvedLine": "Майысқан сызық",
|
||||
"documentation": "Құжаттама",
|
||||
"doubleClick": "қос шерту",
|
||||
"drag": "апару",
|
||||
"editor": "Өңдеу",
|
||||
"editSelectedShape": "Таңдалған пішінді өңдеу (мәтін/нұсқар/сызық)",
|
||||
"github": "Қате таптыңыз ба? Жолдаңыз",
|
||||
"howto": "Біздің нұсқаулықтарды орындаңыз",
|
||||
"or": "немесе",
|
||||
"preventBinding": "Нұсқарды байланыстыруға жол бермеу",
|
||||
"shapes": "Пішіндер",
|
||||
"shortcuts": "Пернетақта пәрмендері",
|
||||
"textFinish": "Өңдеуді аяқтау (мәтіндік редактор)",
|
||||
"textNewLine": "Жаңа жолға көшу (мәтіндік редактор)",
|
||||
"title": "Көмек",
|
||||
"view": "Көру",
|
||||
"zoomToFit": "Барлық элементтердің көлеміне сәйкес үлкейту",
|
||||
"zoomToSelection": "Таңдалғанды үлкейту"
|
||||
},
|
||||
"encrypted": {
|
||||
"tooltip": "Сіздің сызбаларыңыз өтпелі шифрлеу арқылы шифрланған, сондықтан Excalidraw серверлері оларды ешқашан көрмейді.",
|
||||
"link": "Excalidraw қолданатын өтпелі шифрлеу туралы блог жазбасы"
|
||||
},
|
||||
"stats": {
|
||||
"angle": "Бұрыш",
|
||||
"element": "Элемент",
|
||||
"elements": "Элементтер",
|
||||
"height": "Биіктігі",
|
||||
"scene": "Сахна",
|
||||
"selected": "Таңдалды",
|
||||
"storage": "Сақтау көлемі",
|
||||
"title": "",
|
||||
"total": "Барлығы",
|
||||
"version": "Нұсқа",
|
||||
"versionCopy": "Көшіру үшін басыңыз",
|
||||
"versionNotAvailable": "Бұл нұсқа қолжетімсіз",
|
||||
"width": "Ені"
|
||||
},
|
||||
"toast": {
|
||||
"copyStyles": "Стильдер көшірілді.",
|
||||
"copyToClipboard": "",
|
||||
"copyToClipboardAsPng": "",
|
||||
"fileSaved": "Файл сақталды.",
|
||||
"fileSavedToFilename": "{filename} сақталды",
|
||||
"canvas": "",
|
||||
"selection": "таңдау"
|
||||
},
|
||||
"colors": {
|
||||
"ffffff": "",
|
||||
"f8f9fa": "",
|
||||
"f1f3f5": "",
|
||||
"fff5f5": "",
|
||||
"fff0f6": "",
|
||||
"f8f0fc": "",
|
||||
"f3f0ff": "",
|
||||
"edf2ff": "",
|
||||
"e7f5ff": "",
|
||||
"e3fafc": "",
|
||||
"e6fcf5": "",
|
||||
"ebfbee": "",
|
||||
"f4fce3": "",
|
||||
"fff9db": "",
|
||||
"fff4e6": "",
|
||||
"transparent": "",
|
||||
"ced4da": "",
|
||||
"868e96": "",
|
||||
"fa5252": "",
|
||||
"e64980": "",
|
||||
"be4bdb": "",
|
||||
"7950f2": "",
|
||||
"4c6ef5": "",
|
||||
"228be6": "",
|
||||
"15aabf": "",
|
||||
"12b886": "",
|
||||
"40c057": "",
|
||||
"82c91e": "",
|
||||
"fab005": "",
|
||||
"fd7e14": "",
|
||||
"000000": "",
|
||||
"343a40": "",
|
||||
"495057": "",
|
||||
"c92a2a": "",
|
||||
"a61e4d": "",
|
||||
"862e9c": "",
|
||||
"5f3dc4": "",
|
||||
"364fc7": "",
|
||||
"1864ab": "",
|
||||
"0b7285": "",
|
||||
"087f5b": "",
|
||||
"2b8a3e": "",
|
||||
"5c940d": "",
|
||||
"e67700": "",
|
||||
"d9480f": ""
|
||||
}
|
||||
}
|
@@ -157,7 +157,8 @@
|
||||
"imageDoesNotContainScene": "이미지에서 불러오기는 현재 지원되지 않습니다.\n\n화면을 불러오려고 하셨나요? 이미지에 화면 정보가 없는 것 같습니다. 내보낼 때 화면을 포함했나요?",
|
||||
"cannotRestoreFromImage": "이미지 파일에서 화면을 복구할 수 없었습니다",
|
||||
"invalidSceneUrl": "",
|
||||
"resetLibrary": ""
|
||||
"resetLibrary": "",
|
||||
"invalidEncryptionKey": ""
|
||||
},
|
||||
"toolBar": {
|
||||
"selection": "선택",
|
||||
@@ -180,6 +181,8 @@
|
||||
"linearElement": "여러 점을 연결하려면 클릭하고, 직선을 그리려면 바로 드래그하세요.",
|
||||
"freeDraw": "클릭 후 드래그하세요. 완료되면 놓으세요.",
|
||||
"text": "팁: 선택 툴로 아무 곳이나 더블 클릭해 텍스트를 추가할 수도 있습니다.",
|
||||
"text_selected": "",
|
||||
"text_editing": "",
|
||||
"linearElementMulti": "마지막 지점을 클릭하거나 Esc 또는 Enter 키를 눌러 완료하세요.",
|
||||
"lockAngle": "SHIFT 키를 누르면서 회전하면 각도를 제한할 수 있습니다.",
|
||||
"resize": "SHIFT 키를 누르면서 조정하면 크기의 비율이 제한됩니다.\nALT를 누르면서 조정하면 중앙을 기준으로 크기를 조정합니다.",
|
||||
@@ -236,16 +239,18 @@
|
||||
"curvedArrow": "곡선 화살표",
|
||||
"curvedLine": "곡선",
|
||||
"documentation": "설명서",
|
||||
"doubleClick": "",
|
||||
"drag": "드래그",
|
||||
"editor": "에디터",
|
||||
"editSelectedShape": "",
|
||||
"github": "문제 제보하기",
|
||||
"howto": "가이드 참고하기",
|
||||
"or": "또는",
|
||||
"preventBinding": "화살표가 붙지 않게 하기",
|
||||
"shapes": "도형",
|
||||
"shortcuts": "키보드 단축키",
|
||||
"textFinish": "편집 완료 (텍스트)",
|
||||
"textNewLine": "줄바꿈 (텍스트)",
|
||||
"textFinish": "",
|
||||
"textNewLine": "",
|
||||
"title": "도움말",
|
||||
"view": "보기",
|
||||
"zoomToFit": "모든 요소가 보이도록 확대/축소",
|
||||
@@ -278,5 +283,52 @@
|
||||
"fileSavedToFilename": "",
|
||||
"canvas": "",
|
||||
"selection": ""
|
||||
},
|
||||
"colors": {
|
||||
"ffffff": "",
|
||||
"f8f9fa": "",
|
||||
"f1f3f5": "",
|
||||
"fff5f5": "",
|
||||
"fff0f6": "",
|
||||
"f8f0fc": "",
|
||||
"f3f0ff": "",
|
||||
"edf2ff": "",
|
||||
"e7f5ff": "",
|
||||
"e3fafc": "",
|
||||
"e6fcf5": "",
|
||||
"ebfbee": "",
|
||||
"f4fce3": "",
|
||||
"fff9db": "",
|
||||
"fff4e6": "",
|
||||
"transparent": "",
|
||||
"ced4da": "",
|
||||
"868e96": "",
|
||||
"fa5252": "",
|
||||
"e64980": "",
|
||||
"be4bdb": "",
|
||||
"7950f2": "",
|
||||
"4c6ef5": "",
|
||||
"228be6": "",
|
||||
"15aabf": "",
|
||||
"12b886": "",
|
||||
"40c057": "",
|
||||
"82c91e": "",
|
||||
"fab005": "",
|
||||
"fd7e14": "",
|
||||
"000000": "",
|
||||
"343a40": "",
|
||||
"495057": "",
|
||||
"c92a2a": "",
|
||||
"a61e4d": "",
|
||||
"862e9c": "",
|
||||
"5f3dc4": "",
|
||||
"364fc7": "",
|
||||
"1864ab": "",
|
||||
"0b7285": "",
|
||||
"087f5b": "",
|
||||
"2b8a3e": "",
|
||||
"5c940d": "",
|
||||
"e67700": "",
|
||||
"d9480f": ""
|
||||
}
|
||||
}
|
||||
|
@@ -157,7 +157,8 @@
|
||||
"imageDoesNotContainScene": "",
|
||||
"cannotRestoreFromImage": "",
|
||||
"invalidSceneUrl": "",
|
||||
"resetLibrary": ""
|
||||
"resetLibrary": "",
|
||||
"invalidEncryptionKey": ""
|
||||
},
|
||||
"toolBar": {
|
||||
"selection": "",
|
||||
@@ -180,6 +181,8 @@
|
||||
"linearElement": "",
|
||||
"freeDraw": "",
|
||||
"text": "",
|
||||
"text_selected": "",
|
||||
"text_editing": "",
|
||||
"linearElementMulti": "",
|
||||
"lockAngle": "",
|
||||
"resize": "",
|
||||
@@ -236,8 +239,10 @@
|
||||
"curvedArrow": "",
|
||||
"curvedLine": "",
|
||||
"documentation": "",
|
||||
"doubleClick": "",
|
||||
"drag": "",
|
||||
"editor": "",
|
||||
"editSelectedShape": "",
|
||||
"github": "",
|
||||
"howto": "",
|
||||
"or": "",
|
||||
@@ -278,5 +283,52 @@
|
||||
"fileSavedToFilename": "",
|
||||
"canvas": "",
|
||||
"selection": ""
|
||||
},
|
||||
"colors": {
|
||||
"ffffff": "",
|
||||
"f8f9fa": "",
|
||||
"f1f3f5": "",
|
||||
"fff5f5": "",
|
||||
"fff0f6": "",
|
||||
"f8f0fc": "",
|
||||
"f3f0ff": "",
|
||||
"edf2ff": "",
|
||||
"e7f5ff": "",
|
||||
"e3fafc": "",
|
||||
"e6fcf5": "",
|
||||
"ebfbee": "",
|
||||
"f4fce3": "",
|
||||
"fff9db": "",
|
||||
"fff4e6": "",
|
||||
"transparent": "",
|
||||
"ced4da": "",
|
||||
"868e96": "",
|
||||
"fa5252": "",
|
||||
"e64980": "",
|
||||
"be4bdb": "",
|
||||
"7950f2": "",
|
||||
"4c6ef5": "",
|
||||
"228be6": "",
|
||||
"15aabf": "",
|
||||
"12b886": "",
|
||||
"40c057": "",
|
||||
"82c91e": "",
|
||||
"fab005": "",
|
||||
"fd7e14": "",
|
||||
"000000": "",
|
||||
"343a40": "",
|
||||
"495057": "",
|
||||
"c92a2a": "",
|
||||
"a61e4d": "",
|
||||
"862e9c": "",
|
||||
"5f3dc4": "",
|
||||
"364fc7": "",
|
||||
"1864ab": "",
|
||||
"0b7285": "",
|
||||
"087f5b": "",
|
||||
"2b8a3e": "",
|
||||
"5c940d": "",
|
||||
"e67700": "",
|
||||
"d9480f": ""
|
||||
}
|
||||
}
|
||||
|
@@ -157,7 +157,8 @@
|
||||
"imageDoesNotContainScene": "",
|
||||
"cannotRestoreFromImage": "ဤပုံဖြင့်မြင်ကွင်းပြန်လည်မရယူနိုင်ပါ။",
|
||||
"invalidSceneUrl": "",
|
||||
"resetLibrary": ""
|
||||
"resetLibrary": "",
|
||||
"invalidEncryptionKey": ""
|
||||
},
|
||||
"toolBar": {
|
||||
"selection": "ရွေးချယ်",
|
||||
@@ -180,6 +181,8 @@
|
||||
"linearElement": "အမှတ်များချမှတ်ရေးဆွဲရန်ကလစ်နှိပ်ပါ၊ မျဉ်းတစ်ကြောင်းတည်းအတွက် တရွတ်ဆွဲပါ။",
|
||||
"freeDraw": "ကလစ်နှိပ်၍ တရွတ်ဆွဲပါ၊ ပြီးလျှင်လွှတ်ပါ။",
|
||||
"text": "မှတ်ချက်။ ။မည်သည့်ကိရိယာရွေးထားသည်ဖြစ်စေ ကလစ်နှစ်ချက်နှိပ်၍စာသားထည့်နိုင်သည်",
|
||||
"text_selected": "",
|
||||
"text_editing": "",
|
||||
"linearElementMulti": "နောက်ဆုံးအမှတ်ပေါ်တွင်ကလစ်နှိပ်ခြင်း၊ Escape (သို့) Enter နှိပ်ခြင်းတို့ဖြင့်အဆုံးသတ်နိုင်",
|
||||
"lockAngle": "",
|
||||
"resize": "အချိုးအစားကန့်သတ်ရန် Shift နှင့် ဗဟိုမှချိန်ညှိရန် Alt တို့ကိုနှိပ်ထားနိုင်သည်",
|
||||
@@ -236,8 +239,10 @@
|
||||
"curvedArrow": "",
|
||||
"curvedLine": "",
|
||||
"documentation": "",
|
||||
"doubleClick": "",
|
||||
"drag": "",
|
||||
"editor": "",
|
||||
"editSelectedShape": "",
|
||||
"github": "",
|
||||
"howto": "",
|
||||
"or": "",
|
||||
@@ -278,5 +283,52 @@
|
||||
"fileSavedToFilename": "",
|
||||
"canvas": "",
|
||||
"selection": ""
|
||||
},
|
||||
"colors": {
|
||||
"ffffff": "",
|
||||
"f8f9fa": "",
|
||||
"f1f3f5": "",
|
||||
"fff5f5": "",
|
||||
"fff0f6": "",
|
||||
"f8f0fc": "",
|
||||
"f3f0ff": "",
|
||||
"edf2ff": "",
|
||||
"e7f5ff": "",
|
||||
"e3fafc": "",
|
||||
"e6fcf5": "",
|
||||
"ebfbee": "",
|
||||
"f4fce3": "",
|
||||
"fff9db": "",
|
||||
"fff4e6": "",
|
||||
"transparent": "",
|
||||
"ced4da": "",
|
||||
"868e96": "",
|
||||
"fa5252": "",
|
||||
"e64980": "",
|
||||
"be4bdb": "",
|
||||
"7950f2": "",
|
||||
"4c6ef5": "",
|
||||
"228be6": "",
|
||||
"15aabf": "",
|
||||
"12b886": "",
|
||||
"40c057": "",
|
||||
"82c91e": "",
|
||||
"fab005": "",
|
||||
"fd7e14": "",
|
||||
"000000": "",
|
||||
"343a40": "",
|
||||
"495057": "",
|
||||
"c92a2a": "",
|
||||
"a61e4d": "",
|
||||
"862e9c": "",
|
||||
"5f3dc4": "",
|
||||
"364fc7": "",
|
||||
"1864ab": "",
|
||||
"0b7285": "",
|
||||
"087f5b": "",
|
||||
"2b8a3e": "",
|
||||
"5c940d": "",
|
||||
"e67700": "",
|
||||
"d9480f": ""
|
||||
}
|
||||
}
|
||||
|
@@ -157,7 +157,8 @@
|
||||
"imageDoesNotContainScene": "Importering av bilder støttes ikke for øyeblikket.\n\nVil du importere en scene? Dette bildet ser ikke ut til å inneholde noen scene-data. Har du aktivert dette under eksporten?",
|
||||
"cannotRestoreFromImage": "Scenen kunne ikke gjenopprettes fra denne bildefilen",
|
||||
"invalidSceneUrl": "Kunne ikke importere scene fra den oppgitte URL-en. Den er enten ødelagt, eller inneholder ikke gyldig Excalidraw JSON-data.",
|
||||
"resetLibrary": "Dette vil tømme biblioteket ditt. Er du sikker?"
|
||||
"resetLibrary": "Dette vil tømme biblioteket ditt. Er du sikker?",
|
||||
"invalidEncryptionKey": "Krypteringsnøkkel må ha 22 tegn. Live-samarbeid er deaktivert."
|
||||
},
|
||||
"toolBar": {
|
||||
"selection": "Velg",
|
||||
@@ -180,6 +181,8 @@
|
||||
"linearElement": "Klikk for å starte linje med flere punkter, eller dra for en enkel linje",
|
||||
"freeDraw": "Klikk og dra, slipp når du er ferdig",
|
||||
"text": "Tips: du kan også legge til tekst ved å dobbeltklikke hvor som helst med utvalgsverktøyet",
|
||||
"text_selected": "Dobbeltklikk eller trykk ENTER for å redigere tekst",
|
||||
"text_editing": "Trykk Escape eller Ctrl/Cmd+Enter for å fullføre redigering",
|
||||
"linearElementMulti": "Klikk på siste punkt eller trykk Escape eller Enter for å fullføre",
|
||||
"lockAngle": "Du kan låse vinkelen ved å holde nede SHIFT",
|
||||
"resize": "Du kan beholde forholdet ved å trykke SHIFT mens du endrer størrelse,\ntrykk ALT for å endre størrelsen fra midten",
|
||||
@@ -236,16 +239,18 @@
|
||||
"curvedArrow": "Buet pil",
|
||||
"curvedLine": "Buet linje",
|
||||
"documentation": "Dokumentasjon",
|
||||
"doubleClick": "dobbeltklikk",
|
||||
"drag": "dra",
|
||||
"editor": "Redigeringsvisning",
|
||||
"editSelectedShape": "Rediger valgt figur (tekst/pil/linje)",
|
||||
"github": "Funnet et problem? Send inn",
|
||||
"howto": "Følg våre veiledninger",
|
||||
"or": "eller",
|
||||
"preventBinding": "Forhindre pilbinding",
|
||||
"shapes": "Former",
|
||||
"shortcuts": "Tastatursnarveier",
|
||||
"textFinish": "Fullfør redigering (tekst)",
|
||||
"textNewLine": "Legg til ny linje (tekst)",
|
||||
"textFinish": "Fullfør redigering (teksteditor)",
|
||||
"textNewLine": "Legg til ny linje (teksteditor)",
|
||||
"title": "Hjelp",
|
||||
"view": "Vis",
|
||||
"zoomToFit": "Zoom for å se alle elementer",
|
||||
@@ -278,5 +283,52 @@
|
||||
"fileSavedToFilename": "Lagret til {filename}",
|
||||
"canvas": "lerret",
|
||||
"selection": "utvalg"
|
||||
},
|
||||
"colors": {
|
||||
"ffffff": "Hvit",
|
||||
"f8f9fa": "Grå 0",
|
||||
"f1f3f5": "Grå 1",
|
||||
"fff5f5": "Rød 0",
|
||||
"fff0f6": "Rosa 0",
|
||||
"f8f0fc": "Drue 0",
|
||||
"f3f0ff": "Fiolett 0",
|
||||
"edf2ff": "Indigo 0",
|
||||
"e7f5ff": "Blå 0",
|
||||
"e3fafc": "Turkis 0",
|
||||
"e6fcf5": "Blågrønn 0",
|
||||
"ebfbee": "Grønn 0",
|
||||
"f4fce3": "Limegrønn 0",
|
||||
"fff9db": "Gul 0",
|
||||
"fff4e6": "Oransje 0",
|
||||
"transparent": "Gjennomsiktig",
|
||||
"ced4da": "Grå 4",
|
||||
"868e96": "Grå 6",
|
||||
"fa5252": "Rød 6",
|
||||
"e64980": "Rosa 6",
|
||||
"be4bdb": "Drue 6",
|
||||
"7950f2": "Fiolett 6",
|
||||
"4c6ef5": "Indigo 6",
|
||||
"228be6": "Blå 6",
|
||||
"15aabf": "Turkis 6",
|
||||
"12b886": "Blågrønn 6",
|
||||
"40c057": "Grønn 6",
|
||||
"82c91e": "Limegrønn 6",
|
||||
"fab005": "Gul 6",
|
||||
"fd7e14": "Oransje 6",
|
||||
"000000": "Sort",
|
||||
"343a40": "Grå 8",
|
||||
"495057": "Grå 7",
|
||||
"c92a2a": "Rød 9",
|
||||
"a61e4d": "Rosa 9",
|
||||
"862e9c": "Drue 9",
|
||||
"5f3dc4": "Fiolett 9",
|
||||
"364fc7": "Indigo 9",
|
||||
"1864ab": "Blå 9",
|
||||
"0b7285": "Turkis 9",
|
||||
"087f5b": "Blågrønn 9",
|
||||
"2b8a3e": "Grønn 9",
|
||||
"5c940d": "Limegrønn 9",
|
||||
"e67700": "Gul 9",
|
||||
"d9480f": "Oransje 9"
|
||||
}
|
||||
}
|
||||
|
@@ -157,7 +157,8 @@
|
||||
"imageDoesNotContainScene": "Afbeeldingen importeren wordt op dit moment niet ondersteund.\n\nWil je een scène importeren? Deze afbeelding lijkt geen scène gegevens te bevatten. Heb je dit geactiveerd tijdens het exporteren?",
|
||||
"cannotRestoreFromImage": "Scène kan niet worden hersteld vanuit dit afbeeldingsbestand",
|
||||
"invalidSceneUrl": "Kan scène niet importeren vanuit de opgegeven URL. Het is onjuist of bevat geen geldige Excalidraw JSON-gegevens.",
|
||||
"resetLibrary": "Dit zal je bibliotheek wissen. Weet je het zeker?"
|
||||
"resetLibrary": "Dit zal je bibliotheek wissen. Weet je het zeker?",
|
||||
"invalidEncryptionKey": "Encryptiesleutel moet 22 tekens zijn. Live samenwerking is uitgeschakeld."
|
||||
},
|
||||
"toolBar": {
|
||||
"selection": "Selectie",
|
||||
@@ -180,6 +181,8 @@
|
||||
"linearElement": "Klik om meerdere punten te starten, sleep voor één lijn",
|
||||
"freeDraw": "Klik en sleep, laat los als je klaar bent",
|
||||
"text": "Tip: je kunt tekst toevoegen door ergens dubbel te klikken met de selectietool",
|
||||
"text_selected": "Dubbelklik of druk op ENTER om tekst te bewerken",
|
||||
"text_editing": "Druk op Escape of CtrlOrCmd+ENTER om het bewerken te voltooien",
|
||||
"linearElementMulti": "Klik op het laatste punt of druk op Escape of Enter om te stoppen",
|
||||
"lockAngle": "Je kunt de hoek beperken door SHIFT ingedrukt te houden",
|
||||
"resize": "Houd tijdens het vergroten SHIFT ingedrukt om verhoudingen te behouden,\ngebruik ALT om vanuit het midden te vergroten/verkleinen",
|
||||
@@ -236,16 +239,18 @@
|
||||
"curvedArrow": "Gebogen pijl",
|
||||
"curvedLine": "Kromme lijn",
|
||||
"documentation": "Documentatie",
|
||||
"doubleClick": "dubbelklikken",
|
||||
"drag": "slepen",
|
||||
"editor": "Editor",
|
||||
"editSelectedShape": "Bewerk geselecteerde vorm (tekst/pijl/lijn)",
|
||||
"github": "Probleem gevonden? Verzenden",
|
||||
"howto": "Volg onze handleidingen",
|
||||
"or": "of",
|
||||
"preventBinding": "Pijlbinding voorkomen",
|
||||
"shapes": "Vormen",
|
||||
"shortcuts": "Sneltoetsen",
|
||||
"textFinish": "Voltooi bewerken (tekst)",
|
||||
"textNewLine": "Nieuwe regel toevoegen (tekst)",
|
||||
"textFinish": "Voltooi het bewerken (teksteditor)",
|
||||
"textNewLine": "Nieuwe regel toevoegen (teksteditor)",
|
||||
"title": "Help",
|
||||
"view": "Weergave",
|
||||
"zoomToFit": "Zoom in op alle elementen",
|
||||
@@ -278,5 +283,52 @@
|
||||
"fileSavedToFilename": "Opgeslagen als {filename}",
|
||||
"canvas": "canvas",
|
||||
"selection": "selectie"
|
||||
},
|
||||
"colors": {
|
||||
"ffffff": "Wit",
|
||||
"f8f9fa": "Grijs 0",
|
||||
"f1f3f5": "Grijs 1",
|
||||
"fff5f5": "Rood 0",
|
||||
"fff0f6": "Roze 0",
|
||||
"f8f0fc": "Druiven 0",
|
||||
"f3f0ff": "Violet 0",
|
||||
"edf2ff": "Indigo 0",
|
||||
"e7f5ff": "Blauw 0",
|
||||
"e3fafc": "Cyaan 0",
|
||||
"e6fcf5": "Groenblauw 0",
|
||||
"ebfbee": "Groen 0",
|
||||
"f4fce3": "Limoen 0",
|
||||
"fff9db": "Geel 0",
|
||||
"fff4e6": "Oranje 0",
|
||||
"transparent": "Transparant",
|
||||
"ced4da": "Grijs 4",
|
||||
"868e96": "Grijs 6",
|
||||
"fa5252": "Rood 6",
|
||||
"e64980": "Roze 6",
|
||||
"be4bdb": "Druiven 6",
|
||||
"7950f2": "Violet",
|
||||
"4c6ef5": "Indigo 6",
|
||||
"228be6": "Blauw 6",
|
||||
"15aabf": "Cyaan 6",
|
||||
"12b886": "Groenblauw 6",
|
||||
"40c057": "Groen 6",
|
||||
"82c91e": "Limoen 6",
|
||||
"fab005": "Geel 6",
|
||||
"fd7e14": "Oranje 6",
|
||||
"000000": "Zwart",
|
||||
"343a40": "Grijs 8",
|
||||
"495057": "Grijs 7",
|
||||
"c92a2a": "Rood 9",
|
||||
"a61e4d": "Roze 9",
|
||||
"862e9c": "Druiven 9",
|
||||
"5f3dc4": "Violet 9",
|
||||
"364fc7": "Indigo 9",
|
||||
"1864ab": "Blauw 9",
|
||||
"0b7285": "Cyaan 9",
|
||||
"087f5b": "Groenblauw 9",
|
||||
"2b8a3e": "Groen 9",
|
||||
"5c940d": "Limoen 9",
|
||||
"e67700": "Geel 9",
|
||||
"d9480f": "Oranje 9"
|
||||
}
|
||||
}
|
||||
|
@@ -157,7 +157,8 @@
|
||||
"imageDoesNotContainScene": "Importering av bilder støttes ikkje for p. t.\n\nVil du importere ein scene? Dette bildet ser ikkje ut til å inneholde noen scene-data. Har du aktivert dette under eksporten?",
|
||||
"cannotRestoreFromImage": "Scena kunne ikkje gjenopprettast frå denne biletfila",
|
||||
"invalidSceneUrl": "Kunne ikkje hente noko scene frå den URL-en. Ho er anten øydelagd eller inneheld ikkje gyldig Excalidraw JSON-data.",
|
||||
"resetLibrary": "Dette vil fjerne alt innhald frå biblioteket. Er du sikker?"
|
||||
"resetLibrary": "Dette vil fjerne alt innhald frå biblioteket. Er du sikker?",
|
||||
"invalidEncryptionKey": ""
|
||||
},
|
||||
"toolBar": {
|
||||
"selection": "Vel",
|
||||
@@ -180,6 +181,8 @@
|
||||
"linearElement": "Klikk for å starte linje med fleire punkt, eller drag for ei enkel linje",
|
||||
"freeDraw": "Klikk og drag, slepp når du er ferdig",
|
||||
"text": "Tips: du kan òg leggje til tekst ved å dobbeltklikke kor som helst med utvalgsverktyet",
|
||||
"text_selected": "",
|
||||
"text_editing": "",
|
||||
"linearElementMulti": "Klikk på siste punkt eller trykk Escape eller Enter for å fullføre",
|
||||
"lockAngle": "Du kan begrense vinkelen ved å holde nede SKIFT",
|
||||
"resize": "Du kan halde fram med forholdet ved å trykke SHIFT medan du endrar storleik,\ntrykk ALT for å endre storleiken frå midten",
|
||||
@@ -236,16 +239,18 @@
|
||||
"curvedArrow": "Boga pil",
|
||||
"curvedLine": "Boga linje",
|
||||
"documentation": "Dokumentasjon",
|
||||
"doubleClick": "",
|
||||
"drag": "drag",
|
||||
"editor": "Redigering",
|
||||
"editSelectedShape": "",
|
||||
"github": "Funne eit problem? Send inn",
|
||||
"howto": "Følg vegleiinga vår",
|
||||
"or": "eller",
|
||||
"preventBinding": "Hindre pilkopling",
|
||||
"shapes": "Formar",
|
||||
"shortcuts": "Tastatursnarvegar",
|
||||
"textFinish": "Fullfør redigering (tekst)",
|
||||
"textNewLine": "Legg til ny linje (tekst)",
|
||||
"textFinish": "",
|
||||
"textNewLine": "",
|
||||
"title": "Hjelp",
|
||||
"view": "Vising",
|
||||
"zoomToFit": "Zoom for å sjå alle elementa",
|
||||
@@ -278,5 +283,52 @@
|
||||
"fileSavedToFilename": "Lagra som {filename}",
|
||||
"canvas": "lerret",
|
||||
"selection": "val"
|
||||
},
|
||||
"colors": {
|
||||
"ffffff": "",
|
||||
"f8f9fa": "",
|
||||
"f1f3f5": "",
|
||||
"fff5f5": "",
|
||||
"fff0f6": "",
|
||||
"f8f0fc": "",
|
||||
"f3f0ff": "",
|
||||
"edf2ff": "",
|
||||
"e7f5ff": "",
|
||||
"e3fafc": "",
|
||||
"e6fcf5": "",
|
||||
"ebfbee": "",
|
||||
"f4fce3": "",
|
||||
"fff9db": "",
|
||||
"fff4e6": "",
|
||||
"transparent": "",
|
||||
"ced4da": "",
|
||||
"868e96": "",
|
||||
"fa5252": "",
|
||||
"e64980": "",
|
||||
"be4bdb": "",
|
||||
"7950f2": "",
|
||||
"4c6ef5": "",
|
||||
"228be6": "",
|
||||
"15aabf": "",
|
||||
"12b886": "",
|
||||
"40c057": "",
|
||||
"82c91e": "",
|
||||
"fab005": "",
|
||||
"fd7e14": "",
|
||||
"000000": "",
|
||||
"343a40": "",
|
||||
"495057": "",
|
||||
"c92a2a": "",
|
||||
"a61e4d": "",
|
||||
"862e9c": "",
|
||||
"5f3dc4": "",
|
||||
"364fc7": "",
|
||||
"1864ab": "",
|
||||
"0b7285": "",
|
||||
"087f5b": "",
|
||||
"2b8a3e": "",
|
||||
"5c940d": "",
|
||||
"e67700": "",
|
||||
"d9480f": ""
|
||||
}
|
||||
}
|
||||
|
@@ -157,7 +157,8 @@
|
||||
"imageDoesNotContainScene": "L’importacion d’imatge es pas encara presa en carga pel moment.\n\nVoliatz importar una scèna ? Aqueste imatge sembla pas conténer cap de donada de scèna. Aviatz activar aquò pendent l’export ?",
|
||||
"cannotRestoreFromImage": "Restauracion impossibla de la scèna a partir del fichièr imatge",
|
||||
"invalidSceneUrl": "Importacion impossibla de la scèna a partir de l’URL provesida. Es siá mal formatada o siá conten pas cap de donada JSON Excalidraw valida.",
|
||||
"resetLibrary": "Aquò suprimirà vòstra bibliotèca. Ne sètz vertadièrament ?"
|
||||
"resetLibrary": "Aquò suprimirà vòstra bibliotèca. Ne sètz vertadièrament ?",
|
||||
"invalidEncryptionKey": "La clau de chiframent deu conténer 22 caractèrs. La collaboracion en dirèct es desactivada."
|
||||
},
|
||||
"toolBar": {
|
||||
"selection": "Seleccion",
|
||||
@@ -180,6 +181,8 @@
|
||||
"linearElement": "Clicatz per començar mantun punt, lisatz per una sola linha",
|
||||
"freeDraw": "Clicatz e lisatz, relargatz un còp acabat",
|
||||
"text": "Astúcia : podètz tanben apondre de tèxt en doble clicant ont que siá amb l’aisina de seleccion",
|
||||
"text_selected": "Clicatz dos còps o quichatz ENTRADA per modificar lo tèxt",
|
||||
"text_editing": "Quichatz ESCAPAR o CtrlOrCmd+ENTRADA per acabar la modificacion",
|
||||
"linearElementMulti": "Clicatz sul darrièr punt o quichatz Ecap o Entrada per acabar",
|
||||
"lockAngle": "Podètz restrénger l’angle en mantenent MAJ",
|
||||
"resize": "Podètz servar las proporcions en mantenent la tòca MAJ pendent lo redimensionament,\nmantenètz la tòca ALT per redimensionar a partir del centre",
|
||||
@@ -236,16 +239,18 @@
|
||||
"curvedArrow": "Sageta corba",
|
||||
"curvedLine": "Linha corba",
|
||||
"documentation": "Documentacion",
|
||||
"doubleClick": "doble clic",
|
||||
"drag": "lisar",
|
||||
"editor": "Editor",
|
||||
"editSelectedShape": "Modificar la fòrma seleccionada (tèxt/sageta/linha)",
|
||||
"github": "Problèma trobat ? Senhalatz-lo",
|
||||
"howto": "Seguissètz nòstras guidas",
|
||||
"or": "o",
|
||||
"preventBinding": "Empachar la fixacion de sagetas",
|
||||
"shapes": "Formas",
|
||||
"shortcuts": "Acorchis clavièr",
|
||||
"textFinish": "Terminar l’edicion (tèxt)",
|
||||
"textNewLine": "Apondre linha novèl (tèxt)",
|
||||
"textFinish": "Terminar l’edicion (editor de tèxt)",
|
||||
"textNewLine": "Apondre linha novèl (editor de tèxt)",
|
||||
"title": "Ajuda",
|
||||
"view": "Vista",
|
||||
"zoomToFit": "Zoomar per veire totes los elements",
|
||||
@@ -278,5 +283,52 @@
|
||||
"fileSavedToFilename": "Enregistrat jos {filename}",
|
||||
"canvas": "canabàs",
|
||||
"selection": "seleccion"
|
||||
},
|
||||
"colors": {
|
||||
"ffffff": "Blanc",
|
||||
"f8f9fa": "Gris 0",
|
||||
"f1f3f5": "Gris 0",
|
||||
"fff5f5": "Roge 0",
|
||||
"fff0f6": "Ròse 0",
|
||||
"f8f0fc": "Bordèu 0",
|
||||
"f3f0ff": "Violet 0",
|
||||
"edf2ff": "Indigo 0",
|
||||
"e7f5ff": "Blau 0",
|
||||
"e3fafc": "Cian 0",
|
||||
"e6fcf5": "Esmerauda 0",
|
||||
"ebfbee": "Verd 0",
|
||||
"f4fce3": "Verd citron 0",
|
||||
"fff9db": "Jaune 0",
|
||||
"fff4e6": "Irange 0",
|
||||
"transparent": "Transparéncia",
|
||||
"ced4da": "Gris 4",
|
||||
"868e96": "Gris 6",
|
||||
"fa5252": "Roge 6",
|
||||
"e64980": "Ròse 6",
|
||||
"be4bdb": "Bordèu 6",
|
||||
"7950f2": "Violet 6",
|
||||
"4c6ef5": "Indigo 6",
|
||||
"228be6": "Blau 6",
|
||||
"15aabf": "Cian 6",
|
||||
"12b886": "Esmerauda 6",
|
||||
"40c057": "Verd 6",
|
||||
"82c91e": "Verd citron 6",
|
||||
"fab005": "Jaune 6",
|
||||
"fd7e14": "Irange 6",
|
||||
"000000": "Negre",
|
||||
"343a40": "Gris 8",
|
||||
"495057": "Gris 7",
|
||||
"c92a2a": "Roge 9",
|
||||
"a61e4d": "Ròse 9",
|
||||
"862e9c": "Bordèu 9",
|
||||
"5f3dc4": "Violet 9",
|
||||
"364fc7": "Indigo 9",
|
||||
"1864ab": "Blau 9",
|
||||
"0b7285": "Cian 9",
|
||||
"087f5b": "Esmerauda 9",
|
||||
"2b8a3e": "Verd 9",
|
||||
"5c940d": "Verd citron 9",
|
||||
"e67700": "Jaune 9",
|
||||
"d9480f": "Irange 9"
|
||||
}
|
||||
}
|
||||
|
@@ -20,7 +20,7 @@
|
||||
"background": "ਬੈਕਗਰਾਉਂਡ",
|
||||
"fill": "ਭਰਨਾ",
|
||||
"strokeWidth": "ਰੇਖਾ ਦੀ ਚੌੜਾਈ",
|
||||
"strokeShape": "",
|
||||
"strokeShape": "ਰੇਖਾ ਦਾ ਰੂਪ",
|
||||
"strokeShape_gel": "ਜੈੱਲ ਪੈੱਨ",
|
||||
"strokeShape_fountain": "ਫਾਉਨਟੇਨ ਪੈੱਨ",
|
||||
"strokeShape_brush": "ਬੁਰਸ਼ ਪੈੱਨ",
|
||||
@@ -42,8 +42,8 @@
|
||||
"fontSize": "ਫੌਂਟ ਅਕਾਰ",
|
||||
"fontFamily": "ਫੌਂਟ ਪਰਿਵਾਰ",
|
||||
"onlySelected": "ਸਿਰਫ ਚੁਣੇ ਹੋਏ ਹੀ",
|
||||
"withBackground": "",
|
||||
"exportEmbedScene": "",
|
||||
"withBackground": "ਬੈਕਗਰਾਉਂਡ",
|
||||
"exportEmbedScene": "ਦ੍ਰਿਸ਼ ਮੜ੍ਹੋ",
|
||||
"exportEmbedScene_details": "ਦ੍ਰਿਸ਼ ਦਾ ਡਾਟਾ ਨਿਰਯਾਤ ਕੀਤੀ PNG/SVG ਫਾਈਲ ਵਿੱਚ ਸਾਂਭ ਦਿੱਤਾ ਜਾਵੇਗਾ ਤਾਂ ਜੋ ਇਸ ਵਿੱਚੋਂ ਦ੍ਰਿਸ਼ ਨੂੰ ਬਹਾਲ ਕੀਤਾ ਜਾ ਸਕੇ। ਇਹ ਨਿਰਯਾਤ ਕੀਤੀ ਜਾਣ ਵਾਲੀ ਫਾਈਲ ਦਾ ਅਕਾਰ ਵਧਾ ਦੇਵੇਗਾ।",
|
||||
"addWatermark": "\"Excalidraw ਨਾਲ ਬਣਾਇਆ\" ਜੋੜੋ",
|
||||
"handDrawn": "ਹੱਥਲਿਖਤ",
|
||||
@@ -96,26 +96,26 @@
|
||||
"centerHorizontally": "ਖੜ੍ਹਵੇਂ ਵਿਚਕਾਰ ਕਰੋ",
|
||||
"distributeHorizontally": "ਖੜ੍ਹਵੇਂ ਇਕਸਾਰ ਵੰਡੋ",
|
||||
"distributeVertically": "ਲੇਟਵੇਂ ਇਕਸਾਰ ਵੰਡੋ",
|
||||
"flipHorizontal": "",
|
||||
"flipVertical": "",
|
||||
"viewMode": "ਦੇਖੋ ਮੋਡ",
|
||||
"toggleExportColorScheme": "",
|
||||
"flipHorizontal": "ਲੇਟਵੇਂ ਪਾਸੇ ਪਲਟੋ",
|
||||
"flipVertical": "ਖੜ੍ਹਵੇਂ ਪਾਸੇ ਪਲਟੋ",
|
||||
"viewMode": "ਦੇਖਣ ਵਾਲਾ ਮੋਡ",
|
||||
"toggleExportColorScheme": "ਨਿਰਯਾਤ ਦੇ ਰੰਗਾਂ ਦੀ ਸਕੀਮ ਟਾਗਲ ਕਰੋ",
|
||||
"share": "ਸਾਂਝਾ ਕਰੋ",
|
||||
"showStroke": "",
|
||||
"showBackground": "",
|
||||
"showStroke": "ਰੇਖਾ ਦਾ ਰੰਗ ਚੋਣਕਾਰ ਦਿਖਾਓ",
|
||||
"showBackground": "ਬੈਕਗਰਾਉਂਡ ਦਾ ਰੰਗ ਚੋਣਕਾਰ ਦਿਖਾਓ",
|
||||
"toggleTheme": "ਥੀਮ ਬਦਲੋ"
|
||||
},
|
||||
"buttons": {
|
||||
"clearReset": "ਕੈਨਵਸ ਰੀਸੈੱਟ ਕਰੋ",
|
||||
"exportJSON": "",
|
||||
"exportImage": "",
|
||||
"exportJSON": "ਫਾਈਲ ਵਿੱਚ ਨਿਰਯਾਤ ਕਰੋ",
|
||||
"exportImage": "ਤਸਵੀਰ ਵਜੋਂ ਸਾਂਭੋ",
|
||||
"export": "ਨਿਰਯਾਤ",
|
||||
"exportToPng": "PNG ਵਿੱਚ ਨਿਰਯਾਤ ਕਰੋ",
|
||||
"exportToSvg": "SVG ਵਿੱਚ ਨਿਰਯਾਤ ਕਰੋ",
|
||||
"copyToClipboard": "ਕਲਿੱਪਬੋਰਡ 'ਤੇ ਕਾਪੀ ਕਰੋ",
|
||||
"copyPngToClipboard": "PNG ਨੂੰ ਕਲਿੱਪਬੋਰਡ 'ਤੇ ਕਾਪੀ ਕਰੋ",
|
||||
"scale": "ਪੈਮਾਇਸ਼",
|
||||
"save": "",
|
||||
"save": "ਮੌਜੂਦਾ ਫਾਈਲ ਵਿੱਚ ਸਾਂਭੋ",
|
||||
"saveAs": "ਇਸ ਵਜੋਂ ਸਾਂਭੋ",
|
||||
"load": "ਲੋਡ ਕਰੋ",
|
||||
"getShareableLink": "ਸਾਂਝੀ ਕਰਨ ਵਾਲੀ ਲਿੰਕ ਲਵੋ",
|
||||
@@ -156,8 +156,9 @@
|
||||
"confirmAddLibrary": "ਇਹ ਤੁਹਾਡੀ ਲਾਇਬ੍ਰੇਰੀ ਵਿੱਚ {{numShapes}} ਆਕ੍ਰਿਤੀ(ਆਂ) ਨੂੰ ਜੋੜ ਦੇਵੇਗਾ। ਕੀ ਤੁਸੀਂ ਪੱਕਾ ਇੰਝ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?",
|
||||
"imageDoesNotContainScene": "ਫਿਲਹਾਲ ਤਸਵੀਰਾਂ ਨੂੰ ਆਯਾਤ ਕਰਨ ਦਾ ਸਮਰਥਨ ਨਹੀਂ ਕਰਦਾ।\n\nਕੀ ਤੁਸੀਂ ਦ੍ਰਿਸ਼ ਨੂੰ ਆਯਾਤ ਕਰਨਾ ਚਾਹੁੰਦੇ ਸੀ? ਇਸ ਤਸਵੀਰ ਵਿੱਚ ਦ੍ਰਿਸ਼ ਦਾ ਕੋਈ ਵੀ ਡਾਟਾ ਨਜ਼ਰ ਨਹੀਂ ਆ ਰਿਹਾ। ਕੀ ਨਿਰਯਾਤ ਦੌਰਾਨ ਤੁਸੀਂ ਇਹ ਸਮਰੱਥ ਕੀਤਾ ਸੀ?",
|
||||
"cannotRestoreFromImage": "ਇਸ ਤਸਵੀਰ ਫਾਈਲ ਤੋਂ ਦ੍ਰਿਸ਼ ਬਹਾਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ",
|
||||
"invalidSceneUrl": "",
|
||||
"resetLibrary": "ਇਹ ਤੁਹਾਡੀ ਲਾਇਬ੍ਰੇਰੀ ਨੂੰ ਸਾਫ ਕਰ ਦੇਵੇਗਾ। ਕੀ ਤੁਸੀਂ ਪੱਕਾ ਇੰਝ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?"
|
||||
"invalidSceneUrl": "ਦਿੱਤੀ ਗਈ URL 'ਚੋਂ ਦ੍ਰਿਸ਼ ਨੂੰ ਆਯਾਤ ਨਹੀਂ ਕਰ ਸਕੇ। ਇਹ ਜਾਂ ਤਾਂ ਖਰਾਬ ਹੈ, ਜਾਂ ਇਸ ਵਿੱਚ ਜਾਇਜ਼ Excalidraw JSON ਡਾਟਾ ਸ਼ਾਮਲ ਨਹੀਂ ਹੈ।",
|
||||
"resetLibrary": "ਇਹ ਤੁਹਾਡੀ ਲਾਇਬ੍ਰੇਰੀ ਨੂੰ ਸਾਫ ਕਰ ਦੇਵੇਗਾ। ਕੀ ਤੁਸੀਂ ਪੱਕਾ ਇੰਝ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?",
|
||||
"invalidEncryptionKey": ""
|
||||
},
|
||||
"toolBar": {
|
||||
"selection": "ਚੋਣਕਾਰ",
|
||||
@@ -166,7 +167,7 @@
|
||||
"ellipse": "ਅੰਡਾਕਾਰ",
|
||||
"arrow": "ਤੀਰ",
|
||||
"line": "ਲਕੀਰ",
|
||||
"freedraw": "",
|
||||
"freedraw": "ਵਾਹੋ",
|
||||
"text": "ਪਾਠ",
|
||||
"library": "ਲਾਇਬ੍ਰੇਰੀ",
|
||||
"lock": "ਡਰਾਇੰਗ ਤੋਂ ਬਾਅਦ ਵੀ ਚੁਣੇ ਹੋਏ ਸੰਦ ਨੂੰ ਸਰਗਰਮ ਰੱਖੋ "
|
||||
@@ -180,6 +181,8 @@
|
||||
"linearElement": "ਇੱਕ ਤੋਂ ਜ਼ਿਆਦਾ ਬਿੰਦੂਆਂ ਲਈ ਕਲਿੱਕ ਕਰਕੇ ਸ਼ੁਰੂਆਤ ਕਰੋ, ਇਕਹਿਰੀ ਲਕੀਰ ਲਈ ਘਸੀਟੋ",
|
||||
"freeDraw": "ਕਲਿੱਕ ਕਰਕੇ ਘਸੀਟੋ, ਪੂਰਾ ਹੋਣ 'ਤੇ ਛੱਡ ਦਿਉ",
|
||||
"text": "ਨੁਸਖਾ: ਤੁਸੀਂ ਚੋਣਕਾਰ ਸੰਦ ਰਾਹੀਂ ਕਿਤੇ ਵੀ ਡਬਲ-ਕਲਿੱਕ ਕਰਕੇ ਵੀ ਪਾਠ ਜੋੜ ਸਕਦੇ ਹੋ",
|
||||
"text_selected": "ਪਾਠ ਨੂੰ ਸੋਧਣ ਲਈ ਡਬਲ-ਕਲਿੱਕ ਕਰੋ ਜਾਂ ਐਂਟਰ ਦਬਾਓ",
|
||||
"text_editing": "ਸੋਧ ਮੁਕੰਮਲ ਕਰਨ ਲਈ ਐਸਕੇਪ (Esc) ਜਾਂ Ctrl-ਜਾਂ-Cmd+ਐਂਟਰ (enter) ਦਬਾਓ",
|
||||
"linearElementMulti": "ਮੁਕੰਮਲ ਕਰਨ ਲਈ ਆਖਰੀ ਬਿੰਦੂ 'ਤੇ ਕਲਿੱਕ ਕਰੋ ਜਾਂ ਇਸਕੇਪ ਜਾਂ ਐਂਟਰ ਦਬਾਓ",
|
||||
"lockAngle": "ਤੁਸੀਂ SHIFT ਦਬਾਈ ਰੱਖ ਕੇ ਕੋਣਾਂ ਨੂੰ ਕਾਬੂ ਕਰ ਸਕਦੇ ਹੋ",
|
||||
"resize": "ਤੁਸੀਂ ਅਕਾਰ ਬਦਲਦੇ ਸਮੇਂ SHIFT ਦਬਾਈ ਰੱਖ ਕੇ ਅਨੁਪਾਤ ਨੂੰ ਕਾਬੂ ਕਰ ਸਕਦੇ ਹੋ, ਵਿਚਕਾਰ ਤੋਂ ਅਕਾਰ ਬਦਲਣ ਲਈ ALT ਦਬਾਓ",
|
||||
@@ -214,21 +217,21 @@
|
||||
"desc_inProgressIntro": "ਲਾਇਵ ਸਹਿਯੋਗ ਹੁਣ ਚੱਲ ਰਿਹਾ ਹੈ।",
|
||||
"desc_shareLink": "ਇਸ ਲਿੰਕ ਨੂੰ ਉਹਨਾਂ ਨਾਲ ਸਾਂਝਾ ਕਰੋ ਜਿਹਨਾਂ ਨਾਲ ਤੁਸੀਂ ਸਹਿਯੋਗ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ:",
|
||||
"desc_exitSession": "ਇਜਲਾਸ ਨੂੰ ਰੋਕਣਾ ਤੁਹਾਡਾ ਕਮਰੇ ਨਾਲੋਂ ਨਾਤਾ ਤੋੜ ਦੇਵੇਗਾ, ਪਰ ਤੁਸੀਂ ਸਥਾਨਕ ਪੱਧਰ 'ਤੇ ਦ੍ਰਿਸ਼ ਨਾਲ ਕੰਮ ਕਰਨਾ ਜਾਰੀ ਰੱਖ ਸਕੋਗੇ। ਇਹ ਧਿਆਨ 'ਚ ਰੱਖੋ ਕਿ ਇਹ ਬਾਕੀ ਲੋਕਾਂ ਨੂੰ ਪ੍ਰਭਾਵਿਤ ਨਹੀਂ ਕਰੇਗਾ , ਅਤੇ ਉਹ ਹਾਲੇ ਵੀ ਆਪਣੇ ਸੰਸਕਰਨ 'ਤੇ ਸਹਿਯੋਗ ਕਰਨ ਦੇ ਕਾਬਲ ਹੋਣਗੇ।",
|
||||
"shareTitle": ""
|
||||
"shareTitle": "Excalidraw 'ਤੇ ਲਾਈਵ ਇਜਲਾਸ ਦਾ ਹਿੱਸਾ ਬਣੋ"
|
||||
},
|
||||
"errorDialog": {
|
||||
"title": "ਗਲਤੀ"
|
||||
},
|
||||
"exportDialog": {
|
||||
"disk_title": "",
|
||||
"disk_details": "",
|
||||
"disk_button": "",
|
||||
"link_title": "",
|
||||
"link_details": "",
|
||||
"link_button": "",
|
||||
"excalidrawplus_description": "",
|
||||
"excalidrawplus_button": "",
|
||||
"excalidrawplus_exportError": ""
|
||||
"disk_title": "ਡਿਸਕ ਵਿੱਚ ਸਾਂਭੋ",
|
||||
"disk_details": "ਦ੍ਰਿਸ਼ ਦਾ ਡਾਟਾ ਫਾਈਲ ਵਿੱਚ ਨਿਰਯਾਤ ਕਰੋ ਜਿੱਥੋਂ ਤੁਸੀਂ ਇਸਨੂੰ ਬਾਅਦ ਵਿੱਚ ਆਯਾਤ ਕਰ ਸਕਦੇ ਹੋ।",
|
||||
"disk_button": "ਫਾਈਲ ਵਿੱਚ ਸਾਂਭੋ",
|
||||
"link_title": "ਸਾਂਝੀ ਕਰਨ ਵਾਲੀ ਲਿੰਕ",
|
||||
"link_details": "ਸਿਰਫ ਪੜ੍ਹੇ-ਜਾਣ ਵਾਲੀ ਲਿੰਕ ਨਿਰਯਾਤ ਕਰੋ।",
|
||||
"link_button": "ਲਿੰਕ ਵਿੱਚ ਨਿਰਯਾਤ ਕਰੋ",
|
||||
"excalidrawplus_description": "ਆਪਣੇ ਦ੍ਰਿਸ਼ ਦੇ ਡਾਟੇ ਨੂੰ Excalidraw+ ਵਰਕਸਪੇਸ ਵਿੱਚ ਸਾਂਭੋ।",
|
||||
"excalidrawplus_button": "ਨਿਰਯਾਤ ਕਰੋ",
|
||||
"excalidrawplus_exportError": "ਇਸ ਸਮੇਂ Excalidraw+ ਵਿੱਚ ਨਿਰਯਾਤ ਨਹੀਂ ਕਰ ਸਕੇ..."
|
||||
},
|
||||
"helpDialog": {
|
||||
"blog": "ਸਾਡਾ ਬਲੌਗ ਪੜ੍ਹੋ",
|
||||
@@ -236,16 +239,18 @@
|
||||
"curvedArrow": "ਵਿੰਗਾ ਤੀਰ",
|
||||
"curvedLine": "ਵਿੰਗੀ ਲਕੀਰ",
|
||||
"documentation": "ਕਾਗਜ਼ਾਤ",
|
||||
"doubleClick": "ਡਬਲ-ਕਲਿੱਕ",
|
||||
"drag": "ਘਸੀਟੋ",
|
||||
"editor": "ਸੋਧਕ",
|
||||
"editSelectedShape": "ਚੁਣਿਆ ਰੂਪ ਸੋਧੋ (ਪਾਠ/ਤੀਰ/ਲਾਈਨ)",
|
||||
"github": "ਕੋਈ ਸਮੱਸਿਆ ਲੱਭੀ? ਜਮ੍ਹਾਂ ਕਰਵਾਓ",
|
||||
"howto": "ਸਾਡੀਆਂ ਗਾਈਡਾਂ ਦੀ ਪਾਲਣਾ ਕਰੋ",
|
||||
"or": "ਜਾਂ",
|
||||
"preventBinding": "ਤੀਰ ਬੱਝਣਾ ਰੋਕੋ",
|
||||
"shapes": "ਆਕ੍ਰਿਤੀਆਂ",
|
||||
"shortcuts": "ਕੀਬੋਰਡ ਸ਼ਾਰਟਕੱਟ",
|
||||
"textFinish": "ਸੋਧ ਮੁਕੰਮਲ ਕਰੋ (ਪਾਠ)",
|
||||
"textNewLine": "ਨਵੀਂ ਪੰਕਤੀ ਜੋੜੋ (ਪਾਠ)",
|
||||
"textFinish": "ਸੋਧਣਾ ਮੁਕੰਮਲ ਕਰੋ (ਪਾਠ ਸੋਧਕ)",
|
||||
"textNewLine": "ਨਵੀਂ ਪੰਕਤੀ ਜੋੜੋ (ਪਾਠ ਸੋਧਕ)",
|
||||
"title": "ਮਦਦ",
|
||||
"view": "ਦਿੱਖ",
|
||||
"zoomToFit": "ਸਾਰੇ ਐਲੀਮੈਂਟਾਂ ਨੂੰ ਫਿੱਟ ਕਰਨ ਲਈ ਜ਼ੂਮ ਕਰੋ",
|
||||
@@ -253,7 +258,7 @@
|
||||
},
|
||||
"encrypted": {
|
||||
"tooltip": "ਤੁਹਾਡੀ ਡਰਾਇੰਗਾਂ ਸਿਰੇ-ਤੋਂ-ਸਿਰੇ ਤੱਕ ਇਨਕਰਿਪਟ ਕੀਤੀਆਂ ਹੋਈਆਂ ਹਨ, ਇਸ ਲਈ Excalidraw ਦੇ ਸਰਵਰ ਉਹਨਾਂ ਨੂੰ ਕਦੇ ਵੀ ਨਹੀਂ ਦੇਖਣਗੇ।",
|
||||
"link": ""
|
||||
"link": "Excalidraw ਵਿੱਚ ਸਿਰੇ-ਤੋਂ-ਸਿਰੇ ਤੱਕ ਇਨਕ੍ਰਿਪਸ਼ਨ 'ਤੇ ਬਲੌਗ ਸੰਪਾਦਨਾ"
|
||||
},
|
||||
"stats": {
|
||||
"angle": "ਕੋਣ",
|
||||
@@ -273,10 +278,57 @@
|
||||
"toast": {
|
||||
"copyStyles": "ਕਾਪੀ ਕੀਤੇ ਸਟਾਇਲ।",
|
||||
"copyToClipboard": "ਕਲਿੱਪਬੋਰਡ 'ਤੇ ਕਾਪੀ ਕੀਤਾ।",
|
||||
"copyToClipboardAsPng": "",
|
||||
"copyToClipboardAsPng": "{{exportSelection}} ਨੂੰ ਕਲਿੱਪਬੋਰਡ 'ਤੇ PNG ਵਜੋਂ ਕਾਪੀ ਕੀਤਾ ({{exportColorScheme}})",
|
||||
"fileSaved": "ਫਾਈਲ ਸਾਂਭੀ ਗਈ।",
|
||||
"fileSavedToFilename": "{filename} ਵਿੱਚ ਸਾਂਭੀ",
|
||||
"canvas": "ਕੈਨਵਸ",
|
||||
"selection": "ਚੋਣ"
|
||||
},
|
||||
"colors": {
|
||||
"ffffff": "ਚਿੱਟਾ",
|
||||
"f8f9fa": "ਸੁਰਮਈ 0",
|
||||
"f1f3f5": "ਸੁਰਮਈ 1",
|
||||
"fff5f5": "ਲਾਲ 0",
|
||||
"fff0f6": "ਗੁਲਾਬੀ 0",
|
||||
"f8f0fc": "ਅੰਗੂਰੀ 0",
|
||||
"f3f0ff": "ਜਾਮਣੀ 0",
|
||||
"edf2ff": "ਗੂੜ੍ਹਾ ਨੀਲਾ 0",
|
||||
"e7f5ff": "ਨੀਲਾ 0",
|
||||
"e3fafc": "ਫਿਰੋਜੀ 0",
|
||||
"e6fcf5": "ਟੀਲ 0",
|
||||
"ebfbee": "ਹਰਾ 0",
|
||||
"f4fce3": "ਲਾਇਮ 0",
|
||||
"fff9db": "ਪੀਲਾ 0",
|
||||
"fff4e6": "ਸੰਤਰੀ 0",
|
||||
"transparent": "ਪਾਰਦਰਸ਼ੀ",
|
||||
"ced4da": "ਸੁਰਮਈ 4",
|
||||
"868e96": "ਸੁਰਮਈ 6",
|
||||
"fa5252": "ਲਾਲ 6",
|
||||
"e64980": "ਗੁਲਾਬੀ 6",
|
||||
"be4bdb": "ਅੰਗੂਰੀ 6",
|
||||
"7950f2": "ਜਾਮਣੀ 6",
|
||||
"4c6ef5": "ਗੂੜ੍ਹਾ ਨੀਲਾ 6",
|
||||
"228be6": "ਨੀਲਾ 6",
|
||||
"15aabf": "ਫਿਰੋਜੀ 6",
|
||||
"12b886": "ਟੀਲ 6",
|
||||
"40c057": "ਹਰਾ 6",
|
||||
"82c91e": "ਲਾਇਮ 6",
|
||||
"fab005": "ਪੀਲਾ 6",
|
||||
"fd7e14": "ਸੰਤਰੀ 6",
|
||||
"000000": "ਕਾਲਾ",
|
||||
"343a40": "ਸੁਰਮਈ 8",
|
||||
"495057": "ਸੁਰਮਈ 7",
|
||||
"c92a2a": "ਲਾਲ 9",
|
||||
"a61e4d": "ਗੁਲਾਬੀ 9",
|
||||
"862e9c": "ਅੰਗੂਰੀ 9",
|
||||
"5f3dc4": "ਜਾਮਣੀ 9",
|
||||
"364fc7": "ਗੂੜ੍ਹਾ ਨੀਲਾ 9",
|
||||
"1864ab": "ਨੀਲਾ 9",
|
||||
"0b7285": "ਫਿਰੋਜੀ 9",
|
||||
"087f5b": "ਟੀਲ 9",
|
||||
"2b8a3e": "ਹਰਾ 9",
|
||||
"5c940d": "ਲਾਇਮ 9",
|
||||
"e67700": "ਪੀਲਾ 9",
|
||||
"d9480f": "ਸੰਤਰੀ 9"
|
||||
}
|
||||
}
|
||||
|
@@ -1,39 +1,41 @@
|
||||
{
|
||||
"ar-SA": 92,
|
||||
"bg-BG": 83,
|
||||
"ca-ES": 94,
|
||||
"cs-CZ": 36,
|
||||
"ar-SA": 100,
|
||||
"bg-BG": 68,
|
||||
"ca-ES": 84,
|
||||
"cs-CZ": 29,
|
||||
"da-DK": 20,
|
||||
"de-DE": 100,
|
||||
"el-GR": 88,
|
||||
"el-GR": 74,
|
||||
"en": 100,
|
||||
"es-ES": 98,
|
||||
"fa-IR": 79,
|
||||
"fi-FI": 99,
|
||||
"es-ES": 100,
|
||||
"fa-IR": 77,
|
||||
"fi-FI": 100,
|
||||
"fr-FR": 100,
|
||||
"he-IL": 80,
|
||||
"hi-IN": 82,
|
||||
"hu-HU": 73,
|
||||
"he-IL": 99,
|
||||
"hi-IN": 67,
|
||||
"hu-HU": 60,
|
||||
"id-ID": 100,
|
||||
"it-IT": 99,
|
||||
"ja-JP": 98,
|
||||
"kab-KAB": 98,
|
||||
"ko-KR": 83,
|
||||
"lv-LV": 17,
|
||||
"my-MM": 68,
|
||||
"it-IT": 100,
|
||||
"ja-JP": 100,
|
||||
"kab-KAB": 93,
|
||||
"kk-KZ": 26,
|
||||
"ko-KR": 68,
|
||||
"lv-LV": 14,
|
||||
"my-MM": 56,
|
||||
"nb-NO": 100,
|
||||
"nl-NL": 100,
|
||||
"nn-NO": 90,
|
||||
"nn-NO": 74,
|
||||
"oc-FR": 100,
|
||||
"pa-IN": 89,
|
||||
"pl-PL": 85,
|
||||
"pt-BR": 90,
|
||||
"pt-PT": 92,
|
||||
"pa-IN": 99,
|
||||
"pl-PL": 70,
|
||||
"pt-BR": 100,
|
||||
"pt-PT": 99,
|
||||
"ro-RO": 100,
|
||||
"ru-RU": 97,
|
||||
"ru-RU": 99,
|
||||
"sk-SK": 100,
|
||||
"sv-SE": 100,
|
||||
"tr-TR": 91,
|
||||
"uk-UA": 97,
|
||||
"zh-CN": 98,
|
||||
"zh-TW": 99
|
||||
"tr-TR": 78,
|
||||
"uk-UA": 80,
|
||||
"zh-CN": 100,
|
||||
"zh-TW": 100
|
||||
}
|
||||
|
@@ -157,7 +157,8 @@
|
||||
"imageDoesNotContainScene": "Importowanie zdjęć nie jest obecnie obsługiwane.\n\nCzy chciałeś zaimportować scenę? Ten obraz nie zawiera żadnych danych sceny. Czy włączyłeś to podczas eksportowania?",
|
||||
"cannotRestoreFromImage": "Scena nie mogła zostać przywrócona z pliku obrazu",
|
||||
"invalidSceneUrl": "",
|
||||
"resetLibrary": "To wyczyści twoją bibliotekę. Jesteś pewien?"
|
||||
"resetLibrary": "To wyczyści twoją bibliotekę. Jesteś pewien?",
|
||||
"invalidEncryptionKey": ""
|
||||
},
|
||||
"toolBar": {
|
||||
"selection": "Zaznaczenie",
|
||||
@@ -180,6 +181,8 @@
|
||||
"linearElement": "Naciśnij, aby zrobić punkt, przeciągnij, aby narysować linię",
|
||||
"freeDraw": "Naciśnij i przeciągnij by rysować, puść kiedy skończysz",
|
||||
"text": "Wskazówka: możesz również dodać tekst klikając dwukrotnie gdziekolwiek za pomocą narzędzia zaznaczania",
|
||||
"text_selected": "",
|
||||
"text_editing": "",
|
||||
"linearElementMulti": "Aby zakończyć krzywą, ponownie kliknij w ostatni punkt, bądź naciśnij Esc albo Enter",
|
||||
"lockAngle": "Możesz ograniczyć kąt trzymając SHIFT",
|
||||
"resize": "Możesz zachować proporcję trzymająć wcisnięty SHIFT, przytrzymaj ALT by zmienić rozmiar względem środka",
|
||||
@@ -236,16 +239,18 @@
|
||||
"curvedArrow": "Zakrzywiona strzałka",
|
||||
"curvedLine": "Zakrzywiona linia",
|
||||
"documentation": "Dokumentacja",
|
||||
"doubleClick": "",
|
||||
"drag": "przeciągnij",
|
||||
"editor": "Edytor",
|
||||
"editSelectedShape": "",
|
||||
"github": "Znalazłeś problem? Prześlij",
|
||||
"howto": "Skorzystaj z instrukcji",
|
||||
"or": "lub",
|
||||
"preventBinding": "Zapobiegaj wiązaniu strzałek",
|
||||
"shapes": "Kształty",
|
||||
"shortcuts": "Skróty klawiszowe",
|
||||
"textFinish": "Zakończ edycję (tekst)",
|
||||
"textNewLine": "Dodaj nową linię (tekst)",
|
||||
"textFinish": "",
|
||||
"textNewLine": "",
|
||||
"title": "Pomoc",
|
||||
"view": "Widok",
|
||||
"zoomToFit": "Powiększ, aby wyświetlić wszystkie elementy",
|
||||
@@ -278,5 +283,52 @@
|
||||
"fileSavedToFilename": "Zapisano jako {filename}",
|
||||
"canvas": "",
|
||||
"selection": ""
|
||||
},
|
||||
"colors": {
|
||||
"ffffff": "",
|
||||
"f8f9fa": "",
|
||||
"f1f3f5": "",
|
||||
"fff5f5": "",
|
||||
"fff0f6": "",
|
||||
"f8f0fc": "",
|
||||
"f3f0ff": "",
|
||||
"edf2ff": "",
|
||||
"e7f5ff": "",
|
||||
"e3fafc": "",
|
||||
"e6fcf5": "",
|
||||
"ebfbee": "",
|
||||
"f4fce3": "",
|
||||
"fff9db": "",
|
||||
"fff4e6": "",
|
||||
"transparent": "",
|
||||
"ced4da": "",
|
||||
"868e96": "",
|
||||
"fa5252": "",
|
||||
"e64980": "",
|
||||
"be4bdb": "",
|
||||
"7950f2": "",
|
||||
"4c6ef5": "",
|
||||
"228be6": "",
|
||||
"15aabf": "",
|
||||
"12b886": "",
|
||||
"40c057": "",
|
||||
"82c91e": "",
|
||||
"fab005": "",
|
||||
"fd7e14": "",
|
||||
"000000": "",
|
||||
"343a40": "",
|
||||
"495057": "",
|
||||
"c92a2a": "",
|
||||
"a61e4d": "",
|
||||
"862e9c": "",
|
||||
"5f3dc4": "",
|
||||
"364fc7": "",
|
||||
"1864ab": "",
|
||||
"0b7285": "",
|
||||
"087f5b": "",
|
||||
"2b8a3e": "",
|
||||
"5c940d": "",
|
||||
"e67700": "",
|
||||
"d9480f": ""
|
||||
}
|
||||
}
|
||||
|
@@ -20,10 +20,10 @@
|
||||
"background": "Fundo",
|
||||
"fill": "Preenchimento",
|
||||
"strokeWidth": "Espessura do traço",
|
||||
"strokeShape": "",
|
||||
"strokeShape_gel": "",
|
||||
"strokeShape_fountain": "",
|
||||
"strokeShape_brush": "",
|
||||
"strokeShape": "Estilo do traço",
|
||||
"strokeShape_gel": "Caneta de gel",
|
||||
"strokeShape_fountain": "Caneta de fonte",
|
||||
"strokeShape_brush": "Pincel",
|
||||
"strokeStyle": "Estilo de traço",
|
||||
"strokeStyle_solid": "Sólido",
|
||||
"strokeStyle_dashed": "Tracejado",
|
||||
@@ -42,8 +42,8 @@
|
||||
"fontSize": "Tamanho da fonte",
|
||||
"fontFamily": "Família da fonte",
|
||||
"onlySelected": "Somente a seleção",
|
||||
"withBackground": "",
|
||||
"exportEmbedScene": "",
|
||||
"withBackground": "Fundo",
|
||||
"exportEmbedScene": "Incorporar cena",
|
||||
"exportEmbedScene_details": "Os dados da cena serão salvos no arquivo PNG/SVG exportado para que a cena possa ser restaurada.\nIrá aumentar o tamanho do arquivo exportado.",
|
||||
"addWatermark": "Adicionar \"Feito com Excalidraw\"",
|
||||
"handDrawn": "Manuscrito",
|
||||
@@ -101,21 +101,21 @@
|
||||
"viewMode": "Modo de visualização",
|
||||
"toggleExportColorScheme": "Alternar esquema de cores de exportação",
|
||||
"share": "Compartilhar",
|
||||
"showStroke": "",
|
||||
"showBackground": "",
|
||||
"toggleTheme": ""
|
||||
"showStroke": "Exibir seletor de cores do traço",
|
||||
"showBackground": "Exibir seletor de cores do fundo",
|
||||
"toggleTheme": "Alternar tema"
|
||||
},
|
||||
"buttons": {
|
||||
"clearReset": "Limpar o canvas e redefinir a cor de fundo",
|
||||
"exportJSON": "",
|
||||
"exportImage": "",
|
||||
"exportJSON": "Exportar arquivo",
|
||||
"exportImage": "Salvar como imagem",
|
||||
"export": "Exportar",
|
||||
"exportToPng": "Exportar em PNG",
|
||||
"exportToSvg": "Exportar em SVG",
|
||||
"copyToClipboard": "Copiar para o clipboard",
|
||||
"copyPngToClipboard": "Copiar PNG para área de transferência",
|
||||
"scale": "Escala",
|
||||
"save": "",
|
||||
"save": "Salvar para o arquivo atual",
|
||||
"saveAs": "Salvar como",
|
||||
"load": "Carregar",
|
||||
"getShareableLink": "Obter um link de compartilhamento",
|
||||
@@ -157,7 +157,8 @@
|
||||
"imageDoesNotContainScene": "A importação de imagens não é suportada no momento.\n\nVocê deseja importar uma cena? Esta imagem parece não conter dados de cena. Você ativou isto durante a exportação?",
|
||||
"cannotRestoreFromImage": "Não foi possível restaurar a cena deste arquivo de imagem",
|
||||
"invalidSceneUrl": "Não foi possível importar a cena da URL fornecida. Ela está incompleta ou não contém dados JSON válidos do Excalidraw.",
|
||||
"resetLibrary": "Isto limpará a sua biblioteca. Você tem certeza?"
|
||||
"resetLibrary": "Isto limpará a sua biblioteca. Você tem certeza?",
|
||||
"invalidEncryptionKey": "A chave de encriptação deve ter 22 caracteres. A colaboração ao vivo está desabilitada."
|
||||
},
|
||||
"toolBar": {
|
||||
"selection": "Seleção",
|
||||
@@ -166,7 +167,7 @@
|
||||
"ellipse": "Elipse",
|
||||
"arrow": "Flecha",
|
||||
"line": "Linha",
|
||||
"freedraw": "",
|
||||
"freedraw": "Desenhar",
|
||||
"text": "Texto",
|
||||
"library": "Biblioteca",
|
||||
"lock": "Manter ativa a ferramenta selecionada após desenhar"
|
||||
@@ -180,6 +181,8 @@
|
||||
"linearElement": "Clique para iniciar vários pontos, arraste para uma única linha",
|
||||
"freeDraw": "Toque e arraste, solte quando terminar",
|
||||
"text": "Dica: você também pode adicionar texto clicando duas vezes em qualquer lugar com a ferramenta de seleção",
|
||||
"text_selected": "Clique duplo ou tecle ENTER para editar o texto",
|
||||
"text_editing": "Pressione Esc ou Ctrl/Cmd+ENTER para encerrar a edição",
|
||||
"linearElementMulti": "Clique no último ponto ou pressione Escape ou Enter para terminar",
|
||||
"lockAngle": "Você pode restringir o ângulo segurando o SHIFT",
|
||||
"resize": "Você pode restringir proporções segurando SHIFT enquanto redimensiona,\nsegure ALT para redimensionar do centro",
|
||||
@@ -220,15 +223,15 @@
|
||||
"title": "Erro"
|
||||
},
|
||||
"exportDialog": {
|
||||
"disk_title": "",
|
||||
"disk_details": "",
|
||||
"disk_button": "",
|
||||
"link_title": "",
|
||||
"link_details": "",
|
||||
"link_button": "",
|
||||
"excalidrawplus_description": "",
|
||||
"excalidrawplus_button": "",
|
||||
"excalidrawplus_exportError": ""
|
||||
"disk_title": "Salvar no computador",
|
||||
"disk_details": "Exportar os dados da cena para um arquivo que você poderá importar mais tarde.",
|
||||
"disk_button": "Salvar em um arquivo",
|
||||
"link_title": "Link compartilhável",
|
||||
"link_details": "Exportar como link de apenas leitura.",
|
||||
"link_button": "Exportar link",
|
||||
"excalidrawplus_description": "Salvar a cena na sua área de trabalho Excalidraw+.",
|
||||
"excalidrawplus_button": "Exportar",
|
||||
"excalidrawplus_exportError": "Não é possível exportar para o Excalidraw+ neste momento..."
|
||||
},
|
||||
"helpDialog": {
|
||||
"blog": "Leia o nosso blog",
|
||||
@@ -236,16 +239,18 @@
|
||||
"curvedArrow": "Seta curva",
|
||||
"curvedLine": "Linha curva",
|
||||
"documentation": "Documentação",
|
||||
"doubleClick": "clique duplo",
|
||||
"drag": "arrastar",
|
||||
"editor": "Editor",
|
||||
"editSelectedShape": "Editar forma selecionada (texto/seta/linha)",
|
||||
"github": "Encontrou algum problema? Nos informe",
|
||||
"howto": "Siga nossos guias",
|
||||
"or": "ou",
|
||||
"preventBinding": "Evitar fixação de seta",
|
||||
"shapes": "Formas",
|
||||
"shortcuts": "Atalhos de teclado",
|
||||
"textFinish": "Finalizar edição (texto)",
|
||||
"textNewLine": "Adicionar nova linha (texto)",
|
||||
"textFinish": "Encerrar edição (editor de texto)",
|
||||
"textNewLine": "Adicionar nova linha (editor de texto)",
|
||||
"title": "Ajudar",
|
||||
"view": "Visualizar",
|
||||
"zoomToFit": "Ampliar para encaixar todos os elementos",
|
||||
@@ -278,5 +283,52 @@
|
||||
"fileSavedToFilename": "Salvo em {filename}",
|
||||
"canvas": "tela",
|
||||
"selection": "seleção"
|
||||
},
|
||||
"colors": {
|
||||
"ffffff": "Braco",
|
||||
"f8f9fa": "Cinza 0",
|
||||
"f1f3f5": "Cinza 1",
|
||||
"fff5f5": "Vermelho 0",
|
||||
"fff0f6": "Rosa 0",
|
||||
"f8f0fc": "Uva 0",
|
||||
"f3f0ff": "Violeta 0",
|
||||
"edf2ff": "Índigo 0",
|
||||
"e7f5ff": "Azul 0",
|
||||
"e3fafc": "Ciano 0",
|
||||
"e6fcf5": "Verde-azulado 0",
|
||||
"ebfbee": "Verde 0",
|
||||
"f4fce3": "Lima 0",
|
||||
"fff9db": "Amarelo 0",
|
||||
"fff4e6": "Laranja 0",
|
||||
"transparent": "Transparente",
|
||||
"ced4da": "Cinza 4",
|
||||
"868e96": "Cinza 6",
|
||||
"fa5252": "Vermelho 6",
|
||||
"e64980": "Rosa 6",
|
||||
"be4bdb": "Uva 6",
|
||||
"7950f2": "Violeta 6",
|
||||
"4c6ef5": "Índigo 6",
|
||||
"228be6": "Azul 6",
|
||||
"15aabf": "Ciano 6",
|
||||
"12b886": "Verde-azulado 6",
|
||||
"40c057": "Verde 6",
|
||||
"82c91e": "Lima 6",
|
||||
"fab005": "Amarelo 6",
|
||||
"fd7e14": "Laranja 6",
|
||||
"000000": "Preto",
|
||||
"343a40": "Cinza 8",
|
||||
"495057": "Cinza 7",
|
||||
"c92a2a": "Vermelho 9",
|
||||
"a61e4d": "Rosa 9",
|
||||
"862e9c": "Uva 9",
|
||||
"5f3dc4": "Violeta 9",
|
||||
"364fc7": "Índigo 9",
|
||||
"1864ab": "Azul 9",
|
||||
"0b7285": "Ciano 9",
|
||||
"087f5b": "Verde-azulado 9",
|
||||
"2b8a3e": "Verde 9",
|
||||
"5c940d": "Lima 9",
|
||||
"e67700": "Amarelo 9",
|
||||
"d9480f": "Laranja 9"
|
||||
}
|
||||
}
|
||||
|
@@ -42,9 +42,9 @@
|
||||
"fontSize": "Tamanho da fonte",
|
||||
"fontFamily": "Família da fontes",
|
||||
"onlySelected": "Somente a seleção",
|
||||
"withBackground": "",
|
||||
"exportEmbedScene": "",
|
||||
"exportEmbedScene_details": "Os dados da cena serão salvos no arquivo PNG/SVG exportado para que a cena possa ser restaurada.\nIrá aumentar o tamanho do arquivo exportado.",
|
||||
"withBackground": "Fundo",
|
||||
"exportEmbedScene": "Cena embutida",
|
||||
"exportEmbedScene_details": "Os dados da cena serão guardados no ficheiro PNG/SVG exportado para que a cena possa ser restaurada.\nIrá aumentar o tamanho do ficheiro exportado.",
|
||||
"addWatermark": "Adicionar \"Feito com Excalidraw\"",
|
||||
"handDrawn": "Manuscrito",
|
||||
"normal": "Normal",
|
||||
@@ -55,7 +55,7 @@
|
||||
"veryLarge": "Muito grande",
|
||||
"solid": "Sólido",
|
||||
"hachure": "Eclosão",
|
||||
"crossHatch": "Hachurado",
|
||||
"crossHatch": "Sombreado",
|
||||
"thin": "Fino",
|
||||
"bold": "Espesso",
|
||||
"left": "Esquerda",
|
||||
@@ -67,8 +67,8 @@
|
||||
"cartoonist": "Caricaturista",
|
||||
"fileTitle": "Nome do ficheiro",
|
||||
"colorPicker": "Seletor de cores",
|
||||
"canvasBackground": "Fundo da tela",
|
||||
"drawingCanvas": "Tela de desenho",
|
||||
"canvasBackground": "Fundo da área de desenho",
|
||||
"drawingCanvas": "Área de desenho",
|
||||
"layers": "Camadas",
|
||||
"actions": "Ações",
|
||||
"language": "Idioma",
|
||||
@@ -76,7 +76,7 @@
|
||||
"duplicateSelection": "Duplicar",
|
||||
"untitled": "Sem título",
|
||||
"name": "Nome",
|
||||
"yourName": "Seu nome",
|
||||
"yourName": "O seu nome",
|
||||
"madeWithExcalidraw": "Feito com Excalidraw",
|
||||
"group": "Agrupar seleção",
|
||||
"ungroup": "Desagrupar seleção",
|
||||
@@ -84,16 +84,16 @@
|
||||
"showGrid": "Mostrar grelha",
|
||||
"addToLibrary": "Adicionar à biblioteca",
|
||||
"removeFromLibrary": "Remover da biblioteca",
|
||||
"libraryLoadingMessage": "Carregando biblioteca…",
|
||||
"libraryLoadingMessage": "A carregar a biblioteca…",
|
||||
"libraries": "Procurar bibliotecas",
|
||||
"loadingScene": "Carregando cena…",
|
||||
"loadingScene": "A carregar a cena…",
|
||||
"align": "Alinhamento",
|
||||
"alignTop": "Alinhar ao topo",
|
||||
"alignBottom": "Alinhar ao fundo",
|
||||
"alignLeft": "Alinhar à esquerda",
|
||||
"alignRight": "Alinhar à direita",
|
||||
"centerVertically": "Centralizar verticalmente",
|
||||
"centerHorizontally": "Centralizar horizontalmente",
|
||||
"centerVertically": "Centrar verticalmente",
|
||||
"centerHorizontally": "Centrar horizontalmente",
|
||||
"distributeHorizontally": "Distribuir horizontalmente",
|
||||
"distributeVertically": "Distribuir verticalmente",
|
||||
"flipHorizontal": "Inverter horizontalmente",
|
||||
@@ -101,22 +101,22 @@
|
||||
"viewMode": "Modo de visualização",
|
||||
"toggleExportColorScheme": "Alternar esquema de cores de exportação",
|
||||
"share": "Partilhar",
|
||||
"showStroke": "",
|
||||
"showBackground": "",
|
||||
"showStroke": "Mostrar seletor de cores do traço",
|
||||
"showBackground": "Mostrar seletor de cores do fundo",
|
||||
"toggleTheme": "Alternar tema"
|
||||
},
|
||||
"buttons": {
|
||||
"clearReset": "Limpar o canvas e redefinir a cor de fundo",
|
||||
"exportJSON": "",
|
||||
"exportImage": "",
|
||||
"clearReset": "Limpar a área de desenho e redefinir a cor de fundo",
|
||||
"exportJSON": "Exportar para ficheiro",
|
||||
"exportImage": "Guardar como imagem",
|
||||
"export": "Exportar",
|
||||
"exportToPng": "Exportar em PNG",
|
||||
"exportToSvg": "Exportar em SVG",
|
||||
"copyToClipboard": "Copiar para o clipboard",
|
||||
"copyPngToClipboard": "Copiar PNG para área de transferência",
|
||||
"scale": "Escala",
|
||||
"save": "",
|
||||
"saveAs": "Salvar como",
|
||||
"save": "Guardar no ficheiro atual",
|
||||
"saveAs": "Guardar como",
|
||||
"load": "Carregar",
|
||||
"getShareableLink": "Obter um link de partilha",
|
||||
"close": "Fechar",
|
||||
@@ -132,32 +132,33 @@
|
||||
"redo": "Refazer",
|
||||
"resetLibrary": "Repor a biblioteca",
|
||||
"createNewRoom": "Criar nova sala",
|
||||
"fullScreen": "Tela cheia",
|
||||
"fullScreen": "Ecrã inteiro",
|
||||
"darkMode": "Modo escuro",
|
||||
"lightMode": "Modo claro",
|
||||
"zenMode": "Modo Zen",
|
||||
"zenMode": "Modo zen",
|
||||
"exitZenMode": "Sair do modo zen"
|
||||
},
|
||||
"alerts": {
|
||||
"clearReset": "Isto irá limpar toda a tela. Você tem certeza?",
|
||||
"couldNotCreateShareableLink": "Não foi possível criar um link de compartilhamento.",
|
||||
"couldNotCreateShareableLinkTooBig": "Não foi possível criar um link compartilhável: a cena é muito grande",
|
||||
"couldNotLoadInvalidFile": "Não foi possível carregar o arquivo inválido",
|
||||
"clearReset": "Isto irá limpar toda a área de desenho. Tem a certeza?",
|
||||
"couldNotCreateShareableLink": "Não foi possível criar um link partilhável.",
|
||||
"couldNotCreateShareableLinkTooBig": "Não foi possível criar um link partilhável: a cena é muito grande",
|
||||
"couldNotLoadInvalidFile": "Não foi possível carregar o ficheiro inválido",
|
||||
"importBackendFailed": "A importação do servidor falhou.",
|
||||
"cannotExportEmptyCanvas": "Não é possível exportar um canvas vazío.",
|
||||
"couldNotCopyToClipboard": "Não foi possível copiar no clipboard. Experimente no navegador Chrome.",
|
||||
"decryptFailed": "Não foi possível descriptografar os dados.",
|
||||
"cannotExportEmptyCanvas": "Não é possível exportar uma área de desenho vazia.",
|
||||
"couldNotCopyToClipboard": "Não foi possível copiar para a área de transferência. Experimente no navegador Chrome.",
|
||||
"decryptFailed": "Não foi possível desencriptar os dados.",
|
||||
"uploadedSecurly": "O upload foi protegido com criptografia de ponta a ponta, o que significa que o servidor do Excalidraw e terceiros não podem ler o conteúdo.",
|
||||
"loadSceneOverridePrompt": "Carregar um desenho externo substituirá o seu conteúdo existente. Deseja continuar?",
|
||||
"loadSceneOverridePrompt": "Se carregar um desenho externo substituirá o conteúdo existente. Quer continuar?",
|
||||
"collabStopOverridePrompt": "Ao interromper a sessão irá substituir o último desenho guardado. Tem a certeza?\n\n(Caso queira manter o último desenho, simplesmente feche a janela do navegador.)",
|
||||
"errorLoadingLibrary": "Houve um erro ao carregar a biblioteca de terceiros.",
|
||||
"errorAddingToLibrary": "",
|
||||
"errorRemovingFromLibrary": "",
|
||||
"confirmAddLibrary": "Isso adicionará {{numShapes}} forma(s) à sua biblioteca. Tem certeza?",
|
||||
"imageDoesNotContainScene": "A importação de imagens não é suportada no momento.\n\nVocê deseja importar uma cena? Esta imagem parece não conter dados de cena. Você ativou isto durante a exportação?",
|
||||
"cannotRestoreFromImage": "Não foi possível restaurar a cena deste arquivo de imagem",
|
||||
"invalidSceneUrl": "Não foi possível importar a cena a partir da URL fornecida. Ela está malformada ou não contém dados JSON de Excalidraw válidos.",
|
||||
"resetLibrary": "Isto irá limpar a sua biblioteca. Tem a certeza?"
|
||||
"errorAddingToLibrary": "Não foi possível adicionar o item à biblioteca",
|
||||
"errorRemovingFromLibrary": "Não foi possível remover o item da biblioteca",
|
||||
"confirmAddLibrary": "Isso adicionará {{numShapes}} forma(s) à sua biblioteca. Tem a certeza?",
|
||||
"imageDoesNotContainScene": "A importação de imagens não é suportada neste momento.\n\nQuer importar uma cena? Esta imagem parece não conter dados de cena. Ativou isto durante a exportação?",
|
||||
"cannotRestoreFromImage": "Não foi possível restaurar a cena deste ficheiro de imagem",
|
||||
"invalidSceneUrl": "Não foi possível importar a cena a partir do URL fornecido. Ou está mal formado ou não contém dados JSON do Excalidraw válidos.",
|
||||
"resetLibrary": "Isto irá limpar a sua biblioteca. Tem a certeza?",
|
||||
"invalidEncryptionKey": ""
|
||||
},
|
||||
"toolBar": {
|
||||
"selection": "Seleção",
|
||||
@@ -172,88 +173,92 @@
|
||||
"lock": "Manter a ferramenta selecionada ativa após desenhar"
|
||||
},
|
||||
"headings": {
|
||||
"canvasActions": "Ações da tela",
|
||||
"canvasActions": "Ações da área de desenho",
|
||||
"selectedShapeActions": "Ações das formas selecionadas",
|
||||
"shapes": "Formas"
|
||||
},
|
||||
"hints": {
|
||||
"linearElement": "Clique para iniciar vários pontos, arraste para uma única linha",
|
||||
"freeDraw": "Toque e arraste, solte quando terminar",
|
||||
"text": "Dica: você também pode adicionar texto clicando duas vezes em qualquer lugar com a ferramenta de seleção",
|
||||
"freeDraw": "Clique e arraste, large quando terminar",
|
||||
"text": "Dica: também pode adicionar texto clicando duas vezes em qualquer lugar com a ferramenta de seleção",
|
||||
"text_selected": "Clique duas vezes ou pressione a tecla Enter para editar o texto",
|
||||
"text_editing": "Pressione a tecla Escape ou CtrlOrCmd+ENTER para terminar a edição",
|
||||
"linearElementMulti": "Clique no último ponto ou pressione Escape ou Enter para terminar",
|
||||
"lockAngle": "Você pode restringir o ângulo segurando SHIFT",
|
||||
"resize": "Você pode restringir proporções segurando SHIFT enquanto redimensiona,\nsegure ALT para redimensionar do centro",
|
||||
"rotate": "Você pode restringir os ângulos segurando SHIFT enquanto gira",
|
||||
"lineEditor_info": "Clique duas vezes ou pressione Enter para editar os pontos",
|
||||
"lineEditor_pointSelected": "Pressione Deletar para remover ponto, CtrlOuCmd+D para duplicar ou arraste para mover",
|
||||
"lineEditor_nothingSelected": "Selecione um ponto para mover ou remover, ou segure Alt e clique para adicionar novos pontos"
|
||||
"lockAngle": "Pode restringir o ângulo mantendo premida a tecla SHIFT",
|
||||
"resize": "Pode restringir as proporções mantendo a tecla SHIFT premida enquanto redimensiona,\nmantenha a tecla ALT premida para redimensionar a partir do centro",
|
||||
"rotate": "Pode restringir os ângulos mantendo a tecla SHIFT premida enquanto roda",
|
||||
"lineEditor_info": "Clique duas vezes ou pressione a tecla Enter para editar os pontos",
|
||||
"lineEditor_pointSelected": "Pressione a tecla Delete para remover o ponto, CtrlOuCmd+D para duplicar ou arraste para mover",
|
||||
"lineEditor_nothingSelected": "Selecione um ponto para mover ou remover, ou mantenha premida a tecla Alt e clique para adicionar novos pontos"
|
||||
},
|
||||
"canvasError": {
|
||||
"cannotShowPreview": "Não é possível mostrar pré-visualização",
|
||||
"canvasTooBig": "A tela pode ser muito grande.",
|
||||
"cannotShowPreview": "Não é possível mostrar uma pré-visualização",
|
||||
"canvasTooBig": "A área de desenho pode ser muito grande.",
|
||||
"canvasTooBigTip": "Dica: tente aproximar um pouco os elementos mais distantes."
|
||||
},
|
||||
"errorSplash": {
|
||||
"headingMain_pre": "Foi encontrado um erro. Tente ",
|
||||
"headingMain_button": "recarregar a página.",
|
||||
"clearCanvasMessage": "Se a recarga não funcionar, tente ",
|
||||
"clearCanvasMessage_button": "limpando a tela.",
|
||||
"clearCanvasMessage_button": "a limpar a área de desenho.",
|
||||
"clearCanvasCaveat": " Isso resultará em perda de trabalho ",
|
||||
"trackedToSentry_pre": "O erro com o identificador ",
|
||||
"trackedToSentry_post": " foi rastreado no nosso sistema.",
|
||||
"openIssueMessage_pre": "Fomos muito cautelosos para não incluir suas informações de cena no erro. Se sua cena não for privada, por favor, considere seguir nosso ",
|
||||
"openIssueMessage_button": "rastreador de bugs.",
|
||||
"openIssueMessage_post": " Por favor, inclua informações abaixo, copiando e colando para a issue do GitHub.",
|
||||
"openIssueMessage_post": " Por favor, inclua informações abaixo, copiando e colando no relatório de erros no GitHub.",
|
||||
"sceneContent": "Conteúdo da cena:"
|
||||
},
|
||||
"roomDialog": {
|
||||
"desc_intro": "Você pode convidar pessoas para sua cena atual para colaborar com você.",
|
||||
"desc_privacy": "Não se preocupe, a sessão usa criptografia de ponta a ponta; portanto, o que você desenhar permanecerá privado. Nem mesmo nosso servidor poderá ver o que você cria.",
|
||||
"desc_intro": "Pode convidar pessoas para colaborarem na sua cena atual.",
|
||||
"desc_privacy": "Não se preocupe, a sessão usa criptografia de ponta-a-ponta, por isso o que desenhar permanecerá privado. Nem mesmo o nosso servidor poderá ver o que cria.",
|
||||
"button_startSession": "Iniciar sessão",
|
||||
"button_stopSession": "Parar sessão",
|
||||
"desc_inProgressIntro": "A sessão de colaboração ao vivo está agora em andamento.",
|
||||
"desc_shareLink": "Compartilhe este link com qualquer pessoa com quem você queira colaborar:",
|
||||
"desc_exitSession": "Interrompendo a sessão você irá se desconectar da sala, mas você poderá continuar trabalhando com a cena localmente. Observe que isso não afetará outras pessoas, e elas ainda poderão colaborar em sua versão.",
|
||||
"shareTitle": "Participe de uma sessão de colaboração ao vivo na Excalidraw"
|
||||
"desc_shareLink": "Partilhe este link com qualquer pessoa com quem queira colaborar:",
|
||||
"desc_exitSession": "Interrompendo a sessão irá desconectar-se da sala, mas poderá continuar a trabalhar com a cena localmente. Note que isso não afetará outras pessoas e elas ainda poderão colaborar nas versões deles.",
|
||||
"shareTitle": "Participe numa sessão de colaboração ao vivo no Excalidraw"
|
||||
},
|
||||
"errorDialog": {
|
||||
"title": "Erro"
|
||||
},
|
||||
"exportDialog": {
|
||||
"disk_title": "",
|
||||
"disk_details": "",
|
||||
"disk_button": "",
|
||||
"link_title": "",
|
||||
"link_details": "",
|
||||
"link_button": "",
|
||||
"excalidrawplus_description": "",
|
||||
"excalidrawplus_button": "",
|
||||
"excalidrawplus_exportError": ""
|
||||
"disk_title": "Guardar no disco",
|
||||
"disk_details": "Exportar os dados da cena para um ficheiro do qual poderá importar mais tarde.",
|
||||
"disk_button": "Guardar num ficheiro",
|
||||
"link_title": "Link partilhável",
|
||||
"link_details": "Exportar como um link de apenas leitura.",
|
||||
"link_button": "Exportar para link",
|
||||
"excalidrawplus_description": "Guardar a cena no seu espaço de trabalho Excalidraw+",
|
||||
"excalidrawplus_button": "Exportar",
|
||||
"excalidrawplus_exportError": "Não foi possível exportar para o Excalidraw+ neste momento..."
|
||||
},
|
||||
"helpDialog": {
|
||||
"blog": "Leia o nosso blog",
|
||||
"blog": "Leia o nosso blogue",
|
||||
"click": "clicar",
|
||||
"curvedArrow": "Seta curva",
|
||||
"curvedLine": "Linha curva",
|
||||
"documentation": "Documentação",
|
||||
"doubleClick": "clique duplo",
|
||||
"drag": "arrastar",
|
||||
"editor": "Editor",
|
||||
"github": "Encontrou algum problema? Nos informe",
|
||||
"editSelectedShape": "Editar forma selecionada (texto/seta/linha)",
|
||||
"github": "Encontrou algum problema? Informe-nos",
|
||||
"howto": "Siga os nossos guias",
|
||||
"or": "ou",
|
||||
"preventBinding": "Prevenir fixação de seta",
|
||||
"shapes": "Formas",
|
||||
"shortcuts": "Atalhos de teclado",
|
||||
"textFinish": "Finalizar edição (texto)",
|
||||
"textNewLine": "Adicionar nova linha (texto)",
|
||||
"textFinish": "Finalizar edição (editor texto)",
|
||||
"textNewLine": "Adicionar nova linha (editor de texto)",
|
||||
"title": "Ajuda",
|
||||
"view": "Visualizar",
|
||||
"zoomToFit": "Ajustar para caber todos os elementos",
|
||||
"zoomToFit": "Ajustar para todos os elementos caberem",
|
||||
"zoomToSelection": "Ampliar a seleção"
|
||||
},
|
||||
"encrypted": {
|
||||
"tooltip": "Seus desenhos são criptografados de ponta a ponta, então os servidores do Excalidraw nunca os verão.",
|
||||
"link": "Publicação de blog na encriptação de ponta a ponta na Excalidraw"
|
||||
"tooltip": "Os seus desenhos são encriptados de ponta-a-ponta, por isso os servidores do Excalidraw nunca os verão.",
|
||||
"link": "Publicação de blogue na encriptação ponta-a-ponta no Excalidraw"
|
||||
},
|
||||
"stats": {
|
||||
"angle": "Ângulo",
|
||||
@@ -273,10 +278,57 @@
|
||||
"toast": {
|
||||
"copyStyles": "Estilos copiados.",
|
||||
"copyToClipboard": "Copiado para a área de transferência.",
|
||||
"copyToClipboardAsPng": "Copiado {{exportSelection}} para a área de transferência como PNG\n({{exportColorScheme}})",
|
||||
"copyToClipboardAsPng": "{{exportSelection}} copiado para a área de transferência como PNG\n({{exportColorScheme}})",
|
||||
"fileSaved": "Ficheiro guardado.",
|
||||
"fileSavedToFilename": "Guardado como {filename}",
|
||||
"canvas": "área de desenho",
|
||||
"selection": "seleção"
|
||||
},
|
||||
"colors": {
|
||||
"ffffff": "Branco",
|
||||
"f8f9fa": "Cinza 0",
|
||||
"f1f3f5": "Cinza 1",
|
||||
"fff5f5": "Vermelho 0",
|
||||
"fff0f6": "Rosa 0",
|
||||
"f8f0fc": "Uva 0",
|
||||
"f3f0ff": "Violeta 0",
|
||||
"edf2ff": "Indigo 0",
|
||||
"e7f5ff": "Azul 0",
|
||||
"e3fafc": "Ciano 0",
|
||||
"e6fcf5": "Verde-azulado 0",
|
||||
"ebfbee": "Verde 0",
|
||||
"f4fce3": "Lima 0",
|
||||
"fff9db": "Amarelo 0",
|
||||
"fff4e6": "Laranja 0",
|
||||
"transparent": "Transparente",
|
||||
"ced4da": "Cinza 4",
|
||||
"868e96": "Cinza 6",
|
||||
"fa5252": "Vermelho 6",
|
||||
"e64980": "Rosa 6",
|
||||
"be4bdb": "Uva 6",
|
||||
"7950f2": "Violeta 6",
|
||||
"4c6ef5": "Indigo 6",
|
||||
"228be6": "Azul 6",
|
||||
"15aabf": "Ciano 6",
|
||||
"12b886": "Verde-azulado 6",
|
||||
"40c057": "Verde 6",
|
||||
"82c91e": "Lima 6",
|
||||
"fab005": "Amarelo 6",
|
||||
"fd7e14": "Laranja 6",
|
||||
"000000": "Preto",
|
||||
"343a40": "Cinza 8",
|
||||
"495057": "Cinza 7",
|
||||
"c92a2a": "Vermelho 9",
|
||||
"a61e4d": "Rosa 9",
|
||||
"862e9c": "Uva 9",
|
||||
"5f3dc4": "Violeta 9",
|
||||
"364fc7": "Indigo 9",
|
||||
"1864ab": "Azul 9",
|
||||
"0b7285": "Ciano 9",
|
||||
"087f5b": "Verde-azulado 9",
|
||||
"2b8a3e": "Verde 9",
|
||||
"5c940d": "Lima 9",
|
||||
"e67700": "Amarelo 9",
|
||||
"d9480f": "Laranja 9"
|
||||
}
|
||||
}
|
||||
|
@@ -157,7 +157,8 @@
|
||||
"imageDoesNotContainScene": "Importarea imaginilor nu este acceptată în acest moment.\n\nVoiai să imporți o scenă? Această imagine nu pare să conțină date de scenă. Ai activat această opțiune pe durata exportării?",
|
||||
"cannotRestoreFromImage": "Scena nu a putut fi restaurată din acest fișier de imagine",
|
||||
"invalidSceneUrl": "Scena nu a putut fi importată din URL-ul furnizat. Este fie incorect formată, fie nu conține date JSON Excalidraw valide.",
|
||||
"resetLibrary": "Această opțiune va elimina conținutul din bibliotecă. Confirmi?"
|
||||
"resetLibrary": "Această opțiune va elimina conținutul din bibliotecă. Confirmi?",
|
||||
"invalidEncryptionKey": "Cheia de criptare trebuie să aibă 22 de caractere. Colaborarea în direct este dezactivată."
|
||||
},
|
||||
"toolBar": {
|
||||
"selection": "Selecție",
|
||||
@@ -180,6 +181,8 @@
|
||||
"linearElement": "Dă clic pentru a crea mai multe puncte, glisează pentru a forma o singură linie",
|
||||
"freeDraw": "Dă clic pe pânză și glisează cursorul, apoi eliberează-l când ai terminat",
|
||||
"text": "Sfat: poți adăuga text și dând dublu clic oriunde cu instrumentul de selecție",
|
||||
"text_selected": "Dă dublu clic sau apasă tasta Enter pentru a edita textul",
|
||||
"text_editing": "Apasă tasta Escape sau Ctrl sau Cmd + Enter pentru a finaliza editarea",
|
||||
"linearElementMulti": "Dă clic pe ultimul punct sau apasă tasta Escape sau tasta Enter pentru a termina",
|
||||
"lockAngle": "Poți constrânge unghiul prin ținerea apăsată a tastei SHIFT",
|
||||
"resize": "Poți constrânge proporțiile, ținând apăsată tasta SHIFT în timp ce redimensionezi,\nține apăsată tasta ALT pentru a redimensiona de la centru",
|
||||
@@ -236,16 +239,18 @@
|
||||
"curvedArrow": "Săgeată curbată",
|
||||
"curvedLine": "Linie curbată",
|
||||
"documentation": "Documentație",
|
||||
"doubleClick": "dublu clic",
|
||||
"drag": "glisare",
|
||||
"editor": "Editor",
|
||||
"editSelectedShape": "Editează forma selectată (text/săgeată/linie)",
|
||||
"github": "Ai întâmpinat o problemă? Trimite un raport",
|
||||
"howto": "Urmărește ghidurile noastre",
|
||||
"or": "sau",
|
||||
"preventBinding": "Împiedică legarea săgeții",
|
||||
"shapes": "Forme",
|
||||
"shortcuts": "Comenzi rapide de la tastatură",
|
||||
"textFinish": "Finalizează editarea (text)",
|
||||
"textNewLine": "Adaugă o linie nouă (text)",
|
||||
"textFinish": "Finalizează editarea (editor de text)",
|
||||
"textNewLine": "Adaugă o linie nouă (editor de text)",
|
||||
"title": "Ajutor",
|
||||
"view": "Vizualizare",
|
||||
"zoomToFit": "Transfocare pentru a cuprinde totul",
|
||||
@@ -278,5 +283,52 @@
|
||||
"fileSavedToFilename": "Salvat în {filename}",
|
||||
"canvas": "pânza",
|
||||
"selection": "selecția"
|
||||
},
|
||||
"colors": {
|
||||
"ffffff": "Alb",
|
||||
"f8f9fa": "Gri 0",
|
||||
"f1f3f5": "Gri 1",
|
||||
"fff5f5": "Roșu 0",
|
||||
"fff0f6": "Roz 0",
|
||||
"f8f0fc": "Struguriu 0",
|
||||
"f3f0ff": "Violet 0",
|
||||
"edf2ff": "Indigo 0",
|
||||
"e7f5ff": "Albastru 0",
|
||||
"e3fafc": "Cyan 0",
|
||||
"e6fcf5": "Cyan-verde",
|
||||
"ebfbee": "Verde 0",
|
||||
"f4fce3": "Verde-limetă",
|
||||
"fff9db": "Galben 0",
|
||||
"fff4e6": "Portocaliu 0",
|
||||
"transparent": "Transparent",
|
||||
"ced4da": "Gri 4",
|
||||
"868e96": "Gri 6",
|
||||
"fa5252": "Roșu 6",
|
||||
"e64980": "Roz 6",
|
||||
"be4bdb": "Struguriu 6",
|
||||
"7950f2": "Violet 6",
|
||||
"4c6ef5": "Indigo 6",
|
||||
"228be6": "Albastru 6",
|
||||
"15aabf": "Cyan 6",
|
||||
"12b886": "Cyan-verde 6",
|
||||
"40c057": "Verde 6",
|
||||
"82c91e": "Verde-limetă 6",
|
||||
"fab005": "Galben 6",
|
||||
"fd7e14": "Portocaliu 6",
|
||||
"000000": "Negru",
|
||||
"343a40": "Gri 8",
|
||||
"495057": "Gri 7",
|
||||
"c92a2a": "Roșu 9",
|
||||
"a61e4d": "Roz 9",
|
||||
"862e9c": "Struguriu 9",
|
||||
"5f3dc4": "Violet 9",
|
||||
"364fc7": "Indigo 9",
|
||||
"1864ab": "Albastru 9",
|
||||
"0b7285": "Cyan 9",
|
||||
"087f5b": "Cyan-verde 9",
|
||||
"2b8a3e": "Verde 9",
|
||||
"5c940d": "Verde-limetă 9",
|
||||
"e67700": "Galben 9",
|
||||
"d9480f": "Portocaliu 9"
|
||||
}
|
||||
}
|
||||
|
@@ -101,9 +101,9 @@
|
||||
"viewMode": "Вид",
|
||||
"toggleExportColorScheme": "Экспортировать цветовую схему",
|
||||
"share": "Поделиться",
|
||||
"showStroke": "",
|
||||
"showBackground": "",
|
||||
"toggleTheme": ""
|
||||
"showStroke": "Показать выбор цвета обводки",
|
||||
"showBackground": "Показать выбор цвета фона",
|
||||
"toggleTheme": "Переключить тему"
|
||||
},
|
||||
"buttons": {
|
||||
"clearReset": "Очистить холст и сбросить цвет фона",
|
||||
@@ -151,13 +151,14 @@
|
||||
"loadSceneOverridePrompt": "Загрузка рисунка приведёт к замене имеющегося содержимого. Вы хотите продолжить?",
|
||||
"collabStopOverridePrompt": "Остановка сессии перезапишет ваш предыдущий, локально сохранённый рисунок. Вы уверены? \n\n(Если вы хотите оставить ваш локальный рисунок, просто закройте вкладку браузера)",
|
||||
"errorLoadingLibrary": "Произошла ошибка при загрузке сторонней библиотеки.",
|
||||
"errorAddingToLibrary": "",
|
||||
"errorRemovingFromLibrary": "",
|
||||
"errorAddingToLibrary": "Не удалось добавить элемент в библиотеку",
|
||||
"errorRemovingFromLibrary": "Не удалось удалить элемент из библиотеки",
|
||||
"confirmAddLibrary": "Будет добавлено {{numShapes}} фигур в вашу библиотеку. Продолжить?",
|
||||
"imageDoesNotContainScene": "Импорт изображений не поддерживается в данный момент.\n\nХотите импортировать сцену? Данное изображение не содержит данных о сцене. Было ли включено это во время экспорта?",
|
||||
"cannotRestoreFromImage": "Сцена не может быть восстановлена из этого изображения",
|
||||
"invalidSceneUrl": "Невозможно импортировать сцену с предоставленного URL. Неверный формат, или не содержит верных Excalidraw JSON данных.",
|
||||
"resetLibrary": "Это очистит вашу библиотеку. Вы уверены?"
|
||||
"resetLibrary": "Это очистит вашу библиотеку. Вы уверены?",
|
||||
"invalidEncryptionKey": ""
|
||||
},
|
||||
"toolBar": {
|
||||
"selection": "Выделение области",
|
||||
@@ -166,7 +167,7 @@
|
||||
"ellipse": "Эллипс",
|
||||
"arrow": "Cтрелка",
|
||||
"line": "Линия",
|
||||
"freedraw": "",
|
||||
"freedraw": "Чертить",
|
||||
"text": "Текст",
|
||||
"library": "Библиотека",
|
||||
"lock": "Сохранять выбранный инструмент активным после рисования"
|
||||
@@ -180,6 +181,8 @@
|
||||
"linearElement": "Нажмите, чтобы начать несколько точек, перетащите для одной линии",
|
||||
"freeDraw": "Нажмите и перетаскивайте, отпустите по завершении",
|
||||
"text": "Совет: при выбранном инструменте выделения дважды щёлкните в любом месте, чтобы добавить текст",
|
||||
"text_selected": "Дважды щелкните мышью или нажмите ENTER, чтобы редактировать текст",
|
||||
"text_editing": "Нажмите Escape либо Ctrl или Cmd + ENTER для завершения редактирования",
|
||||
"linearElementMulti": "Кликните на последней точке или нажмите Escape или Enter чтобы закончить",
|
||||
"lockAngle": "Вы можете ограничить угол удерживая SHIFT",
|
||||
"resize": "Вы можете ограничить пропорции, удерживая SHIFT во время изменения размеров,\nудерживайте ALT чтобы изменить размер из центра",
|
||||
@@ -226,7 +229,7 @@
|
||||
"link_title": "Поделитесь ссылкой",
|
||||
"link_details": "Экспорт ссылки только для чтения.",
|
||||
"link_button": "Экспорт в ссылку",
|
||||
"excalidrawplus_description": "",
|
||||
"excalidrawplus_description": "Сохраните сцену в ваше рабочее пространство Excalidraw+.",
|
||||
"excalidrawplus_button": "Экспорт",
|
||||
"excalidrawplus_exportError": "Не удалось экспортировать в Excalidraw+ на данный момент..."
|
||||
},
|
||||
@@ -236,16 +239,18 @@
|
||||
"curvedArrow": "Изогнутая стрелка",
|
||||
"curvedLine": "Изогнутая линия",
|
||||
"documentation": "Документация",
|
||||
"doubleClick": "двойной клик",
|
||||
"drag": "перетащить",
|
||||
"editor": "Редактор",
|
||||
"editSelectedShape": "Редактировать выбранную фигуру (текст/стрелка/линия)",
|
||||
"github": "Нашли проблему? Отправьте",
|
||||
"howto": "Следуйте нашим инструкциям",
|
||||
"or": "или",
|
||||
"preventBinding": "Предотвращать привязку стрелок",
|
||||
"shapes": "Фигуры",
|
||||
"shortcuts": "Горячие клавиши",
|
||||
"textFinish": "Закончить редактирование (текст)",
|
||||
"textNewLine": "Добавить новую строку (текст)",
|
||||
"textFinish": "Закончить редактирование (текстовый редактор)",
|
||||
"textNewLine": "Добавить новую строку (текстовый редактор)",
|
||||
"title": "Помощь",
|
||||
"view": "Просмотр",
|
||||
"zoomToFit": "Отмастштабировать, чтобы поместились все элементы",
|
||||
@@ -278,5 +283,52 @@
|
||||
"fileSavedToFilename": "Сохранено в {filename}",
|
||||
"canvas": "холст",
|
||||
"selection": "выделение"
|
||||
},
|
||||
"colors": {
|
||||
"ffffff": "Белый",
|
||||
"f8f9fa": "Серый 0",
|
||||
"f1f3f5": "Серый 1",
|
||||
"fff5f5": "Красный 0",
|
||||
"fff0f6": "Розовый 0",
|
||||
"f8f0fc": "Виноградный 0",
|
||||
"f3f0ff": "Фиолетовый 0",
|
||||
"edf2ff": "Индиго 0",
|
||||
"e7f5ff": "Синий 0",
|
||||
"e3fafc": "Голубой 0",
|
||||
"e6fcf5": "Бирюзовый 0",
|
||||
"ebfbee": "Зелёный 0",
|
||||
"f4fce3": "Лайм 0",
|
||||
"fff9db": "Жёлтый 0",
|
||||
"fff4e6": "Оранжевый 0",
|
||||
"transparent": "Прозрачный",
|
||||
"ced4da": "Серый 4",
|
||||
"868e96": "Серый 6",
|
||||
"fa5252": "Красный 6",
|
||||
"e64980": "Розовый 6",
|
||||
"be4bdb": "Виноградный 6",
|
||||
"7950f2": "Фиолетовый 6",
|
||||
"4c6ef5": "Индиго 6",
|
||||
"228be6": "Синий 6",
|
||||
"15aabf": "Голубой 6",
|
||||
"12b886": "Бирюзовый 6",
|
||||
"40c057": "Зелёный 6",
|
||||
"82c91e": "Лайм 6",
|
||||
"fab005": "Жёлтый 6",
|
||||
"fd7e14": "Оранжевый 6",
|
||||
"000000": "Чёрный",
|
||||
"343a40": "Серый 8",
|
||||
"495057": "Серый 7",
|
||||
"c92a2a": "Красный 9",
|
||||
"a61e4d": "Розовый 9",
|
||||
"862e9c": "Виноградный 9",
|
||||
"5f3dc4": "Фиолетовый 9",
|
||||
"364fc7": "Индиго 9",
|
||||
"1864ab": "Синий 9",
|
||||
"0b7285": "Голубой 9",
|
||||
"087f5b": "Бирюзовый 9",
|
||||
"2b8a3e": "Зелёный 9",
|
||||
"5c940d": "Лайм 9",
|
||||
"e67700": "Жёлтый 9",
|
||||
"d9480f": "Оранжевый 9"
|
||||
}
|
||||
}
|
||||
|
@@ -157,7 +157,8 @@
|
||||
"imageDoesNotContainScene": "Importovanie obrázku v tomto momente nie je možné.\n\nChceli ste importovať scénu? Tento obrázok neobsahuje žiadne údaje scény. Povolili ste túto možnosť počas exportovania?",
|
||||
"cannotRestoreFromImage": "Nepodarilo sa obnoviť scénu z tohto obrázkového súboru",
|
||||
"invalidSceneUrl": "Nepodarilo sa načítať scénu z poskytnutej URL. Je nevalidná alebo neobsahuje žiadne validné Excalidraw JSON dáta.",
|
||||
"resetLibrary": "Týmto vyprázdnite vašu knižnicu. Ste si istý?"
|
||||
"resetLibrary": "Týmto vyprázdnite vašu knižnicu. Ste si istý?",
|
||||
"invalidEncryptionKey": "Šifrovací kľúč musí mať 22 znakov. Živá spolupráca je vypnutá."
|
||||
},
|
||||
"toolBar": {
|
||||
"selection": "Výber",
|
||||
@@ -180,6 +181,8 @@
|
||||
"linearElement": "Kliknite na vloženie viacerých bodov, potiahnite na vytvorenie jednej priamky",
|
||||
"freeDraw": "Kliknite a ťahajte, pustite na ukončenie",
|
||||
"text": "Tip: text môžete pridať aj dvojklikom kdekoľvek, ak je zvolený nástroj výber",
|
||||
"text_selected": "Použite dvojklik alebo stlačte Enter na editáciu textu",
|
||||
"text_editing": "Stlačte Escape alebo CtrlOrCmd+ENTER na ukončenie editovania",
|
||||
"linearElementMulti": "Kliknite na počiatočný bod alebo stlačte Escape alebo Enter na ukončenie",
|
||||
"lockAngle": "Počas rotácie obmedzíte uhol podržaním SHIFT",
|
||||
"resize": "Počas zmeny veľkosti zachováte proporcie podržaním SHIFT,\\npodržaním ALT meníte veľkosť so zachovaním stredu",
|
||||
@@ -236,16 +239,18 @@
|
||||
"curvedArrow": "Zakrivená šípka",
|
||||
"curvedLine": "Zakrivená čiara",
|
||||
"documentation": "Dokumentácia",
|
||||
"doubleClick": "dvojklik",
|
||||
"drag": "potiahnutie",
|
||||
"editor": "Editovanie",
|
||||
"editSelectedShape": "Editovať zvolený tvar (text/šípka/čiara)",
|
||||
"github": "Objavili ste problém? Nahláste ho",
|
||||
"howto": "Postupujte podľa naších návodov",
|
||||
"or": "alebo",
|
||||
"preventBinding": "Zakázať pripájanie šípky",
|
||||
"shapes": "Tvary",
|
||||
"shortcuts": "Klávesové skratky",
|
||||
"textFinish": "Ukončenie editovania (text)",
|
||||
"textNewLine": "Vložiť nový riadok (text)",
|
||||
"textFinish": "Ukončenie editovania (text editor)",
|
||||
"textNewLine": "Vložiť nový riadok (text editor)",
|
||||
"title": "Pomocník",
|
||||
"view": "Zobrazenie",
|
||||
"zoomToFit": "Priblížiť aby boli zahrnuté všetky prvky",
|
||||
@@ -278,5 +283,52 @@
|
||||
"fileSavedToFilename": "Uložený ako {filename}",
|
||||
"canvas": "plátna",
|
||||
"selection": "výberu"
|
||||
},
|
||||
"colors": {
|
||||
"ffffff": "Biela",
|
||||
"f8f9fa": "Sivá 0",
|
||||
"f1f3f5": "Sivá 1",
|
||||
"fff5f5": "Červená 0",
|
||||
"fff0f6": "Ružová 0",
|
||||
"f8f0fc": "Hroznová fialová 0",
|
||||
"f3f0ff": "Fialová 0",
|
||||
"edf2ff": "Tmavomodrá 0",
|
||||
"e7f5ff": "Modrá 0",
|
||||
"e3fafc": "Azúrová 0",
|
||||
"e6fcf5": "Modrozelená 0",
|
||||
"ebfbee": "Zelená 0",
|
||||
"f4fce3": "Limetková 0",
|
||||
"fff9db": "Žltá 0",
|
||||
"fff4e6": "Oranžová 0",
|
||||
"transparent": "Priehľadná",
|
||||
"ced4da": "Sivá 4",
|
||||
"868e96": "Sivá 6",
|
||||
"fa5252": "Červená 6",
|
||||
"e64980": "Ružová 6",
|
||||
"be4bdb": "Hroznová fialová 6",
|
||||
"7950f2": "Fialová 6",
|
||||
"4c6ef5": "Tmavomodrá 6",
|
||||
"228be6": "Modrá 6",
|
||||
"15aabf": "Azúrová 6",
|
||||
"12b886": "Modrozelená 6",
|
||||
"40c057": "Zelená 6",
|
||||
"82c91e": "Limetková 6",
|
||||
"fab005": "Žltá 6",
|
||||
"fd7e14": "Oranžová 6",
|
||||
"000000": "Čierna",
|
||||
"343a40": "Sivá 8",
|
||||
"495057": "Sivá 7",
|
||||
"c92a2a": "Červená 9",
|
||||
"a61e4d": "Ružová 9",
|
||||
"862e9c": "Hroznová fialová 9",
|
||||
"5f3dc4": "Fialová 9",
|
||||
"364fc7": "Tmavomodrá 9",
|
||||
"1864ab": "Modrá 9",
|
||||
"0b7285": "Azúrová 9",
|
||||
"087f5b": "Modrozelená 9",
|
||||
"2b8a3e": "Zelená 9",
|
||||
"5c940d": "Limetková 9",
|
||||
"e67700": "Žltá 9",
|
||||
"d9480f": "Oranžová 9"
|
||||
}
|
||||
}
|
||||
|
@@ -157,7 +157,8 @@
|
||||
"imageDoesNotContainScene": "Importering av bilder stöds inte just nu.\n\nVill du importera en skiss? Den här bilden verkar inte innehålla någon skissdata. Har du aktiverat detta under export?",
|
||||
"cannotRestoreFromImage": "Skiss kunde inte återställas från denna bildfil",
|
||||
"invalidSceneUrl": "Det gick inte att importera skiss från den angivna webbadressen. Antingen har den fel format, eller så innehåller den ingen giltig Excalidraw JSON data.",
|
||||
"resetLibrary": "Detta kommer att rensa ditt bibliotek. Är du säker?"
|
||||
"resetLibrary": "Detta kommer att rensa ditt bibliotek. Är du säker?",
|
||||
"invalidEncryptionKey": "Krypteringsnyckeln måste vara 22 tecken. Livesamarbetet är inaktiverat."
|
||||
},
|
||||
"toolBar": {
|
||||
"selection": "Markering",
|
||||
@@ -180,6 +181,8 @@
|
||||
"linearElement": "Klicka för att starta flera punkter, dra för en linje",
|
||||
"freeDraw": "Klicka och dra, släpp när du är klar",
|
||||
"text": "Tips: du kan också lägga till text genom att dubbelklicka var som helst med markeringsverktyget",
|
||||
"text_selected": "Dubbelklicka eller tryck ENTER för att redigera text",
|
||||
"text_editing": "Tryck Escape eller CtrlOrCmd + ENTER för att slutföra redigeringen",
|
||||
"linearElementMulti": "Klicka på sista punkten eller tryck Escape eller Enter för att avsluta",
|
||||
"lockAngle": "Du kan begränsa vinkeln genom att hålla SKIFT",
|
||||
"resize": "Du kan behålla proportioner genom att hålla SHIFT medan du ändrar storlek,\nhåller du ALT ändras storlek relativt mitten",
|
||||
@@ -236,8 +239,10 @@
|
||||
"curvedArrow": "Böjd pil",
|
||||
"curvedLine": "Böjd linje",
|
||||
"documentation": "Dokumentation",
|
||||
"doubleClick": "dubbelklicka",
|
||||
"drag": "dra",
|
||||
"editor": "Redigerare",
|
||||
"editSelectedShape": "Redigera markerad form (text/pil/linje)",
|
||||
"github": "Hittat ett problem? Rapportera",
|
||||
"howto": "Följ våra guider",
|
||||
"or": "eller",
|
||||
@@ -278,5 +283,52 @@
|
||||
"fileSavedToFilename": "Sparad till {filename}",
|
||||
"canvas": "canvas",
|
||||
"selection": "markering"
|
||||
},
|
||||
"colors": {
|
||||
"ffffff": "Vit",
|
||||
"f8f9fa": "Grå 0",
|
||||
"f1f3f5": "Grå 1",
|
||||
"fff5f5": "Röd 0",
|
||||
"fff0f6": "Rosa 0",
|
||||
"f8f0fc": "Lila 0",
|
||||
"f3f0ff": "Violett 0",
|
||||
"edf2ff": "Indigo 0",
|
||||
"e7f5ff": "Blå 0",
|
||||
"e3fafc": "Turkos 0",
|
||||
"e6fcf5": "Blågrön 0",
|
||||
"ebfbee": "Grön 0",
|
||||
"f4fce3": "Limegrön 0",
|
||||
"fff9db": "Gul 0",
|
||||
"fff4e6": "Orange 0",
|
||||
"transparent": "Genomskinlig",
|
||||
"ced4da": "Grå 4",
|
||||
"868e96": "Grå 6",
|
||||
"fa5252": "Röd 6",
|
||||
"e64980": "Rosa 6",
|
||||
"be4bdb": "Lila 6",
|
||||
"7950f2": "Violett 6",
|
||||
"4c6ef5": "Indigo 6",
|
||||
"228be6": "Blå 6",
|
||||
"15aabf": "Turkos 6",
|
||||
"12b886": "Blågrön 6",
|
||||
"40c057": "Grön 6",
|
||||
"82c91e": "Limegrön 6",
|
||||
"fab005": "Gul 6",
|
||||
"fd7e14": "Orange 6",
|
||||
"000000": "Svart",
|
||||
"343a40": "Grå 8",
|
||||
"495057": "Grå 7",
|
||||
"c92a2a": "Röd 9",
|
||||
"a61e4d": "Rosa 9",
|
||||
"862e9c": "Lila 9",
|
||||
"5f3dc4": "Violett 9",
|
||||
"364fc7": "Indigo 9",
|
||||
"1864ab": "Blå 9",
|
||||
"0b7285": "Turkos 9",
|
||||
"087f5b": "Blågrön 9",
|
||||
"2b8a3e": "Grön 9",
|
||||
"5c940d": "Limegrön 9",
|
||||
"e67700": "Gul 9",
|
||||
"d9480f": "Orange 9"
|
||||
}
|
||||
}
|
||||
|
@@ -42,8 +42,8 @@
|
||||
"fontSize": "Yazı tipi boyutu",
|
||||
"fontFamily": "Yazı tipi ailesi",
|
||||
"onlySelected": "Sadece seçilen",
|
||||
"withBackground": "",
|
||||
"exportEmbedScene": "",
|
||||
"withBackground": "Arka plan",
|
||||
"exportEmbedScene": "Gömülü sahne",
|
||||
"exportEmbedScene_details": "Sahne datası, daha sonra geri kullanılabilmesi için çıktı alınan PNG/SVG dosyasına dahil edicelek. Bu işlem dosya boyutunu arttıracaktır.",
|
||||
"addWatermark": "\"Excalidraw ile yapıldı\" yazısını ekle",
|
||||
"handDrawn": "El-yazısı",
|
||||
@@ -107,15 +107,15 @@
|
||||
},
|
||||
"buttons": {
|
||||
"clearReset": "Tuvali sıfırla",
|
||||
"exportJSON": "",
|
||||
"exportImage": "",
|
||||
"exportJSON": "Dosyaya aktar",
|
||||
"exportImage": "Görüntü olarak kaydet",
|
||||
"export": "Dışa aktar",
|
||||
"exportToPng": "PNG olarak dışa aktar",
|
||||
"exportToSvg": "SVG olarak dışa aktar",
|
||||
"copyToClipboard": "Panoya kopyala",
|
||||
"copyPngToClipboard": "PNG'yi panoya kopyala",
|
||||
"scale": "Ölçek",
|
||||
"save": "",
|
||||
"save": "Geçerli dosyaya kaydet",
|
||||
"saveAs": "Farklı kaydet",
|
||||
"load": "Yükle",
|
||||
"getShareableLink": "Paylaşılabilir bağlantı al",
|
||||
@@ -157,7 +157,8 @@
|
||||
"imageDoesNotContainScene": "Resim ekleme şuan için desteklenmiyor.\nBir sahneyi içeri aktarmak mı istediniz? Bu dosya herhangi bir sahne içeriyor gibi durmuyor. Çıktı alırken sahneyi dahil ettiniz mi?",
|
||||
"cannotRestoreFromImage": "Sahne bu dosyadan oluşturulamıyor",
|
||||
"invalidSceneUrl": "Verilen URL'den çalışma alanı yüklenemedi. Dosya bozuk olabilir veya geçerli bir Excalidraw JSON verisi bulundurmuyor olabilir.",
|
||||
"resetLibrary": "Bu işlem kütüphanenizi sıfırlayacak. Emin misiniz?"
|
||||
"resetLibrary": "Bu işlem kütüphanenizi sıfırlayacak. Emin misiniz?",
|
||||
"invalidEncryptionKey": ""
|
||||
},
|
||||
"toolBar": {
|
||||
"selection": "Seçme",
|
||||
@@ -180,6 +181,8 @@
|
||||
"linearElement": "Birden fazla nokta için tıklayın, tek çizgi için sürükleyin",
|
||||
"freeDraw": "Tıkla ve sürükle, bitirdiğinde serbest bırak",
|
||||
"text": "İpucu: seçme aracıyla herhangi bir yere çift tıklayarak da yazı ekleyebilirsin",
|
||||
"text_selected": "",
|
||||
"text_editing": "",
|
||||
"linearElementMulti": "Tamamlamak için son noktayı seçin veya Escape ve Enter'dan birine basın",
|
||||
"lockAngle": "SHIFT tuşuna basılı tutarak açıyı koruyabilirsiniz",
|
||||
"resize": "Yeniden boyutlandırırken SHIFT'e basılı tutarak oranları kısıtlayabilirsiniz, merkezden yeniden boyutlandırmak için ALT'a basılı tutun",
|
||||
@@ -220,14 +223,14 @@
|
||||
"title": "Hata"
|
||||
},
|
||||
"exportDialog": {
|
||||
"disk_title": "",
|
||||
"disk_title": "Belleğe kaydet",
|
||||
"disk_details": "",
|
||||
"disk_button": "",
|
||||
"link_title": "",
|
||||
"disk_button": "Dosyaya kaydet",
|
||||
"link_title": "Paylaşılabilir bağlantı",
|
||||
"link_details": "",
|
||||
"link_button": "",
|
||||
"link_button": "Bağlantı olarak dışa aktar",
|
||||
"excalidrawplus_description": "",
|
||||
"excalidrawplus_button": "",
|
||||
"excalidrawplus_button": "Dışa aktar",
|
||||
"excalidrawplus_exportError": ""
|
||||
},
|
||||
"helpDialog": {
|
||||
@@ -236,16 +239,18 @@
|
||||
"curvedArrow": "Eğri ok",
|
||||
"curvedLine": "Eğri çizgi",
|
||||
"documentation": "Dokümantasyon",
|
||||
"doubleClick": "",
|
||||
"drag": "sürükle",
|
||||
"editor": "Düzenleyici",
|
||||
"editSelectedShape": "",
|
||||
"github": "Bir hata mı buldun? Bildir",
|
||||
"howto": "Rehberlerimizi takip edin",
|
||||
"or": "veya",
|
||||
"preventBinding": "Ok bağlamayı önleyin",
|
||||
"shapes": "Şekiller",
|
||||
"shortcuts": "Klavye kısayolları",
|
||||
"textFinish": "(Metin) düzenlemeyi bitir",
|
||||
"textNewLine": "Yeni satır ekle (metin)",
|
||||
"textFinish": "",
|
||||
"textNewLine": "",
|
||||
"title": "Yardım",
|
||||
"view": "Görünüm",
|
||||
"zoomToFit": "Tüm öğeleri sığdırmak için yakınlaştır",
|
||||
@@ -278,5 +283,52 @@
|
||||
"fileSavedToFilename": "{filename} kaydedildi",
|
||||
"canvas": "tuval",
|
||||
"selection": "seçim"
|
||||
},
|
||||
"colors": {
|
||||
"ffffff": "",
|
||||
"f8f9fa": "",
|
||||
"f1f3f5": "",
|
||||
"fff5f5": "",
|
||||
"fff0f6": "",
|
||||
"f8f0fc": "",
|
||||
"f3f0ff": "",
|
||||
"edf2ff": "",
|
||||
"e7f5ff": "",
|
||||
"e3fafc": "",
|
||||
"e6fcf5": "",
|
||||
"ebfbee": "",
|
||||
"f4fce3": "",
|
||||
"fff9db": "",
|
||||
"fff4e6": "",
|
||||
"transparent": "",
|
||||
"ced4da": "",
|
||||
"868e96": "",
|
||||
"fa5252": "",
|
||||
"e64980": "",
|
||||
"be4bdb": "",
|
||||
"7950f2": "",
|
||||
"4c6ef5": "",
|
||||
"228be6": "",
|
||||
"15aabf": "",
|
||||
"12b886": "",
|
||||
"40c057": "",
|
||||
"82c91e": "",
|
||||
"fab005": "",
|
||||
"fd7e14": "",
|
||||
"000000": "",
|
||||
"343a40": "",
|
||||
"495057": "",
|
||||
"c92a2a": "",
|
||||
"a61e4d": "",
|
||||
"862e9c": "",
|
||||
"5f3dc4": "",
|
||||
"364fc7": "",
|
||||
"1864ab": "",
|
||||
"0b7285": "",
|
||||
"087f5b": "",
|
||||
"2b8a3e": "",
|
||||
"5c940d": "",
|
||||
"e67700": "",
|
||||
"d9480f": ""
|
||||
}
|
||||
}
|
||||
|
@@ -157,7 +157,8 @@
|
||||
"imageDoesNotContainScene": "Імпортування зображень на даний момент не підтримується.\n\nЧи хочете ви імпортувати сцену? Це зображення не містить ніяких даних сцен. Ви увімкнули це під час експорту?",
|
||||
"cannotRestoreFromImage": "Сцена не може бути відновлена з цього файлу зображення",
|
||||
"invalidSceneUrl": "Не вдалося імпортувати сцену з наданого URL. Він або недоформований, або не містить дійсних даних Excalidraw JSON.",
|
||||
"resetLibrary": "Це призведе до очищення бібліотеки. Ви впевнені?"
|
||||
"resetLibrary": "Це призведе до очищення бібліотеки. Ви впевнені?",
|
||||
"invalidEncryptionKey": ""
|
||||
},
|
||||
"toolBar": {
|
||||
"selection": "Виділення",
|
||||
@@ -180,6 +181,8 @@
|
||||
"linearElement": "Натисніть щоб додати кілька точок, перетягніть щоб намалювати одну лінію",
|
||||
"freeDraw": "Натисніть і потягніть, відпустіть коли завершите",
|
||||
"text": "Порада: можна також додати текст, двічі клацнувши по будь-якому місці інструментом вибору",
|
||||
"text_selected": "",
|
||||
"text_editing": "",
|
||||
"linearElementMulti": "Натисніть на останню точку, клацніть Esc або Enter щоб завершити",
|
||||
"lockAngle": "Ви можете обмежити кут, утримуюючи SHIFT",
|
||||
"resize": "Ви можете зберегти пропорції, утримуючи SHIFT під час зміни розміру,\nутримуйте ALT для змінення розміру від центру",
|
||||
@@ -236,16 +239,18 @@
|
||||
"curvedArrow": "Крива стрілка",
|
||||
"curvedLine": "Крива лінія",
|
||||
"documentation": "Документація",
|
||||
"doubleClick": "",
|
||||
"drag": "перетягнути",
|
||||
"editor": "Редактор",
|
||||
"editSelectedShape": "",
|
||||
"github": "Знайшли помилку? Повідомте",
|
||||
"howto": "Дотримуйтесь наших інструкцій",
|
||||
"or": "або",
|
||||
"preventBinding": "Запобігти зв'язування зі стрілками",
|
||||
"shapes": "Фігури",
|
||||
"shortcuts": "Гарячі клавіші",
|
||||
"textFinish": "Завершити редагування (текст)",
|
||||
"textNewLine": "Додати новий рядок (текст)",
|
||||
"textFinish": "",
|
||||
"textNewLine": "",
|
||||
"title": "Допомога",
|
||||
"view": "Вигляд",
|
||||
"zoomToFit": "Збільшити щоб умістити всі елементи",
|
||||
@@ -278,5 +283,52 @@
|
||||
"fileSavedToFilename": "Збережено в {filename}",
|
||||
"canvas": "полотно",
|
||||
"selection": "виділення"
|
||||
},
|
||||
"colors": {
|
||||
"ffffff": "",
|
||||
"f8f9fa": "",
|
||||
"f1f3f5": "",
|
||||
"fff5f5": "",
|
||||
"fff0f6": "",
|
||||
"f8f0fc": "",
|
||||
"f3f0ff": "",
|
||||
"edf2ff": "",
|
||||
"e7f5ff": "",
|
||||
"e3fafc": "",
|
||||
"e6fcf5": "",
|
||||
"ebfbee": "",
|
||||
"f4fce3": "",
|
||||
"fff9db": "",
|
||||
"fff4e6": "",
|
||||
"transparent": "",
|
||||
"ced4da": "",
|
||||
"868e96": "",
|
||||
"fa5252": "",
|
||||
"e64980": "",
|
||||
"be4bdb": "",
|
||||
"7950f2": "",
|
||||
"4c6ef5": "",
|
||||
"228be6": "",
|
||||
"15aabf": "",
|
||||
"12b886": "",
|
||||
"40c057": "",
|
||||
"82c91e": "",
|
||||
"fab005": "",
|
||||
"fd7e14": "",
|
||||
"000000": "",
|
||||
"343a40": "",
|
||||
"495057": "",
|
||||
"c92a2a": "",
|
||||
"a61e4d": "",
|
||||
"862e9c": "",
|
||||
"5f3dc4": "",
|
||||
"364fc7": "",
|
||||
"1864ab": "",
|
||||
"0b7285": "",
|
||||
"087f5b": "",
|
||||
"2b8a3e": "",
|
||||
"5c940d": "",
|
||||
"e67700": "",
|
||||
"d9480f": ""
|
||||
}
|
||||
}
|
||||
|
@@ -57,11 +57,11 @@
|
||||
"hachure": "线条",
|
||||
"crossHatch": "交叉线条",
|
||||
"thin": "细",
|
||||
"bold": "加粗",
|
||||
"bold": "粗",
|
||||
"left": "左对齐",
|
||||
"center": "居中",
|
||||
"right": "右对齐",
|
||||
"extraBold": "超粗",
|
||||
"extraBold": "特粗",
|
||||
"architect": "朴素",
|
||||
"artist": "艺术",
|
||||
"cartoonist": "漫画家",
|
||||
@@ -157,7 +157,8 @@
|
||||
"imageDoesNotContainScene": "当前不支持导入图片。\n\n您想要导入画布数据吗?此图像似乎不包含任何画布数据。您是否在导出过程中启用了嵌入画布的选项?",
|
||||
"cannotRestoreFromImage": "无法从此图像文件恢复画布",
|
||||
"invalidSceneUrl": "无法从提供的 URL 导入场景。它或者格式不正确,或者不包含有效的 Excalidraw JSON 数据。",
|
||||
"resetLibrary": "这将会清除你的资源库。你确定这么做吗?"
|
||||
"resetLibrary": "这将会清除你的资源库。你确定这么做吗?",
|
||||
"invalidEncryptionKey": "密钥必须包含22个字符。实时协作已被禁用。"
|
||||
},
|
||||
"toolBar": {
|
||||
"selection": "选择",
|
||||
@@ -180,6 +181,8 @@
|
||||
"linearElement": "点击创建多个点 拖动创建直线",
|
||||
"freeDraw": "点击并拖动,完成时松开",
|
||||
"text": "提示:您也可以使用选择工具双击任意位置来添加文字",
|
||||
"text_selected": "双击或按回车键以编辑文本",
|
||||
"text_editing": "按下 Escape 或 CtrlOrCmd+ENTER 完成编辑",
|
||||
"linearElementMulti": "点击最后一个点或按下 Esc/Enter 来完成",
|
||||
"lockAngle": "可以按住 Shift 来约束角度",
|
||||
"resize": "您可以按住SHIFT来限制比例大小,\n按住ALT来调整中心大小",
|
||||
@@ -226,9 +229,9 @@
|
||||
"link_title": "分享链接",
|
||||
"link_details": "导出为只读链接。",
|
||||
"link_button": "导出链接",
|
||||
"excalidrawplus_description": "",
|
||||
"excalidrawplus_button": "",
|
||||
"excalidrawplus_exportError": ""
|
||||
"excalidrawplus_description": "将画布保存到您的 Excalidraw+ 工作区。",
|
||||
"excalidrawplus_button": "导出",
|
||||
"excalidrawplus_exportError": "暂时无法导出到 Excalidraw+ ..."
|
||||
},
|
||||
"helpDialog": {
|
||||
"blog": "浏览我们的博客",
|
||||
@@ -236,16 +239,18 @@
|
||||
"curvedArrow": "曲线箭头",
|
||||
"curvedLine": "曲线",
|
||||
"documentation": "文档",
|
||||
"doubleClick": "双击",
|
||||
"drag": "拖动",
|
||||
"editor": "编辑器",
|
||||
"editSelectedShape": "编辑选中的形状 (文本、箭头或线条)",
|
||||
"github": "提交问题",
|
||||
"howto": "帮助文档",
|
||||
"or": "或",
|
||||
"preventBinding": "禁用箭头吸附",
|
||||
"shapes": "形状",
|
||||
"shortcuts": "快捷键列表",
|
||||
"textFinish": "完成文本编辑",
|
||||
"textNewLine": "文本换行",
|
||||
"textFinish": "完成编辑 (文本编辑器)",
|
||||
"textNewLine": "添加新行(文本编辑器)",
|
||||
"title": "帮助",
|
||||
"view": "视图",
|
||||
"zoomToFit": "缩放以适应所有元素",
|
||||
@@ -278,5 +283,52 @@
|
||||
"fileSavedToFilename": "保存到 {filename}",
|
||||
"canvas": "画布",
|
||||
"selection": "选择项"
|
||||
},
|
||||
"colors": {
|
||||
"ffffff": "白",
|
||||
"f8f9fa": "灰 0",
|
||||
"f1f3f5": "灰 1",
|
||||
"fff5f5": "红 0",
|
||||
"fff0f6": "粉红 0",
|
||||
"f8f0fc": "紫红 0",
|
||||
"f3f0ff": "蓝紫 0",
|
||||
"edf2ff": "靛蓝 0",
|
||||
"e7f5ff": "蓝 0",
|
||||
"e3fafc": "青 0",
|
||||
"e6fcf5": "蓝绿 0",
|
||||
"ebfbee": "绿 0",
|
||||
"f4fce3": "柠檬绿 0",
|
||||
"fff9db": "黄 0",
|
||||
"fff4e6": "橙 0",
|
||||
"transparent": "透明",
|
||||
"ced4da": "灰 4",
|
||||
"868e96": "灰 6",
|
||||
"fa5252": "红 6",
|
||||
"e64980": "粉红 6",
|
||||
"be4bdb": "紫红 6",
|
||||
"7950f2": "蓝紫 6",
|
||||
"4c6ef5": "靛蓝 6",
|
||||
"228be6": "蓝 6",
|
||||
"15aabf": "青 6",
|
||||
"12b886": "蓝绿 6",
|
||||
"40c057": "绿 6",
|
||||
"82c91e": "柠檬绿 6",
|
||||
"fab005": "黄 6",
|
||||
"fd7e14": "橙 6",
|
||||
"000000": "黑",
|
||||
"343a40": "灰 8",
|
||||
"495057": "灰 7",
|
||||
"c92a2a": "红 9",
|
||||
"a61e4d": "粉红 9",
|
||||
"862e9c": "紫红 9",
|
||||
"5f3dc4": "蓝紫 9",
|
||||
"364fc7": "靛蓝 9",
|
||||
"1864ab": "蓝 9",
|
||||
"0b7285": "青 9",
|
||||
"087f5b": "蓝绿 9",
|
||||
"2b8a3e": "绿 9",
|
||||
"5c940d": "柠檬绿 9",
|
||||
"e67700": "黄 9",
|
||||
"d9480f": "橙 9"
|
||||
}
|
||||
}
|
||||
|
@@ -157,7 +157,8 @@
|
||||
"imageDoesNotContainScene": "目前尚不支援載入圖片。\n您是否要載入場景?此圖片中並無任何場景資料,輸出時是否有選擇包含?",
|
||||
"cannotRestoreFromImage": "無法由此檔案回復場景。",
|
||||
"invalidSceneUrl": "無法由提供的 URL 匯入場景。可能是發生異常,或未包含有效的 Excalidraw JSON 資料。",
|
||||
"resetLibrary": "這會清除您的資料庫,是否確定?"
|
||||
"resetLibrary": "這會清除您的資料庫,是否確定?",
|
||||
"invalidEncryptionKey": "加密鍵必須為22字元。即時協作已停用。"
|
||||
},
|
||||
"toolBar": {
|
||||
"selection": "選取",
|
||||
@@ -180,6 +181,8 @@
|
||||
"linearElement": "點擊以繪製多點曲線;或拖曳以繪製直線",
|
||||
"freeDraw": "點擊並拖曳來繪圖,放開即結束",
|
||||
"text": "提示:亦可使用選取工具在任何地方雙擊來加入文字",
|
||||
"text_selected": "雙擊滑鼠或按 Enter 以編輯文字",
|
||||
"text_editing": "按跳脫鍵或 Ctrl 或 Cmd + Enter 以結束編輯",
|
||||
"linearElementMulti": "按下 Escape 或 Enter 以結束繪製",
|
||||
"lockAngle": "按住 SHIFT 可限制旋轉角度",
|
||||
"resize": "縮放時按住 Shift 可保持原比例縮放;\\n按住 Alt 可由中心點進行縮放",
|
||||
@@ -236,16 +239,18 @@
|
||||
"curvedArrow": "曲箭頭",
|
||||
"curvedLine": "曲線",
|
||||
"documentation": "文件",
|
||||
"doubleClick": "雙擊",
|
||||
"drag": "拖曳",
|
||||
"editor": "編輯器",
|
||||
"editSelectedShape": "編輯選定的形狀(文字/箭號/線條)",
|
||||
"github": "發現異常?回報問題",
|
||||
"howto": "參照我們的說明",
|
||||
"or": "或",
|
||||
"preventBinding": "避免箭號連結",
|
||||
"shapes": "形狀",
|
||||
"shortcuts": "鍵盤快速鍵",
|
||||
"textFinish": "完成編輯 (文字)",
|
||||
"textNewLine": "換行 (文字)",
|
||||
"textFinish": "完成編輯(文字編輯器)",
|
||||
"textNewLine": "換行(文字編輯器)",
|
||||
"title": "說明",
|
||||
"view": "檢視",
|
||||
"zoomToFit": "放大至填滿畫面",
|
||||
@@ -253,7 +258,7 @@
|
||||
},
|
||||
"encrypted": {
|
||||
"tooltip": "你的作品已使用 end-to-end 方式加密,Excalidraw 的伺服器也無法取得其內容。",
|
||||
"link": ""
|
||||
"link": "Excalidraw 端到端加密的相關部落格文章"
|
||||
},
|
||||
"stats": {
|
||||
"angle": "角度",
|
||||
@@ -278,5 +283,52 @@
|
||||
"fileSavedToFilename": "儲存為 {filename}",
|
||||
"canvas": "畫布",
|
||||
"selection": "已選項目"
|
||||
},
|
||||
"colors": {
|
||||
"ffffff": "白",
|
||||
"f8f9fa": "灰 0",
|
||||
"f1f3f5": "灰 1",
|
||||
"fff5f5": "紅 0",
|
||||
"fff0f6": "粉紅 0",
|
||||
"f8f0fc": "深紫 0",
|
||||
"f3f0ff": "藍紫 0",
|
||||
"edf2ff": "靛藍 0",
|
||||
"e7f5ff": "藍 0",
|
||||
"e3fafc": "青 0",
|
||||
"e6fcf5": "藍綠 0",
|
||||
"ebfbee": "綠 0",
|
||||
"f4fce3": "黃綠 0",
|
||||
"fff9db": "黃 0",
|
||||
"fff4e6": "橘 0",
|
||||
"transparent": "透明",
|
||||
"ced4da": "灰 4",
|
||||
"868e96": "灰 6",
|
||||
"fa5252": "紅 6",
|
||||
"e64980": "粉紅 6",
|
||||
"be4bdb": "深紫 6",
|
||||
"7950f2": "藍紫 6",
|
||||
"4c6ef5": "靛藍 6",
|
||||
"228be6": "藍 6",
|
||||
"15aabf": "青 6",
|
||||
"12b886": "藍綠 6",
|
||||
"40c057": "綠 6",
|
||||
"82c91e": "黃綠 6",
|
||||
"fab005": "黃 6",
|
||||
"fd7e14": "橘 6",
|
||||
"000000": "黑",
|
||||
"343a40": "灰 8",
|
||||
"495057": "灰 7",
|
||||
"c92a2a": "紅 9",
|
||||
"a61e4d": "粉紅 9",
|
||||
"862e9c": "深紫 9",
|
||||
"5f3dc4": "藍紫 9",
|
||||
"364fc7": "靛藍 9",
|
||||
"1864ab": "藍 9",
|
||||
"0b7285": "青 9",
|
||||
"087f5b": "藍綠 9",
|
||||
"2b8a3e": "綠 9",
|
||||
"5c940d": "黃綠 9",
|
||||
"e67700": "黃 9",
|
||||
"d9480f": "橘 9"
|
||||
}
|
||||
}
|
||||
|
@@ -11,15 +11,88 @@ 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.
|
||||
-->
|
||||
|
||||
## Unreleased
|
||||
## 0.10.0 (2021-10-13)
|
||||
|
||||
**This changes are not yet released but you can still try it out in [@excalidraw/excalidraw-next](https://www.npmjs.com/package/@excalidraw/excalidraw-next).**
|
||||
## Excalidraw API
|
||||
|
||||
### Fixes
|
||||
|
||||
- [`onPaste`](https://github.com/excalidraw/excalidraw/blob/master/src/packages/excalidraw/README.md#onPaste) prop should return false to prevent the native excalidraw paste action [#3974](https://github.com/excalidraw/excalidraw/pull/3974).
|
||||
|
||||
#### BREAKING CHANGE
|
||||
|
||||
- Earlier the paste action was prevented when the prop [`onPaste`](https://github.com/excalidraw/excalidraw/blob/master/src/packages/excalidraw/README.md#onPaste) returned true, but now it should return false to prevent the paste action. This was done to make it semantically more correct and intuitive.
|
||||
|
||||
### Build
|
||||
|
||||
- Enable jsx transform in webpack [#4049](https://github.com/excalidraw/excalidraw/pull/4049)
|
||||
|
||||
### Docs
|
||||
|
||||
- Correct exportToBackend in README to onExportToBackend [#3952](https://github.com/excalidraw/excalidraw/pull/3952)
|
||||
|
||||
## Excalidraw Library
|
||||
|
||||
**_This section lists the updates made to the excalidraw library and will not affect the integration._**
|
||||
|
||||
### Features
|
||||
|
||||
- Improve freedraw shape [#3984](https://github.com/excalidraw/excalidraw/pull/3984)
|
||||
|
||||
- Make color ARIA labels better [#3871](https://github.com/excalidraw/excalidraw/pull/3871)
|
||||
|
||||
- Add origin trial tokens [#3853](https://github.com/excalidraw/excalidraw/pull/3853)
|
||||
|
||||
- Re-order zoom buttons [#3837](https://github.com/excalidraw/excalidraw/pull/3837)
|
||||
|
||||
- Add undo/redo buttons & tweak footer [#3832](https://github.com/excalidraw/excalidraw/pull/3832)
|
||||
|
||||
- Resave to png/svg with metadata if you loaded your scene from a png/svg file [#3645](https://github.com/excalidraw/excalidraw/pull/3645)
|
||||
|
||||
### Fixes
|
||||
|
||||
- Abstract and fix legacy fs [#4032](https://github.com/excalidraw/excalidraw/pull/4032)
|
||||
|
||||
- Context menu positioning [#4025](https://github.com/excalidraw/excalidraw/pull/4025)
|
||||
|
||||
- Added alert for bad encryption key [#3998](https://github.com/excalidraw/excalidraw/pull/3998)
|
||||
|
||||
- OnPaste should return false to prevent paste action [#3974](https://github.com/excalidraw/excalidraw/pull/3974)
|
||||
|
||||
- Help-icon now visible on Safari [#3939](https://github.com/excalidraw/excalidraw/pull/3939)
|
||||
|
||||
- Permanent zoom mode [#3931](https://github.com/excalidraw/excalidraw/pull/3931)
|
||||
|
||||
- Undo/redo buttons gap in Safari [#3836](https://github.com/excalidraw/excalidraw/pull/3836)
|
||||
|
||||
- Prevent gradual canvas misalignment [#3833](https://github.com/excalidraw/excalidraw/pull/3833)
|
||||
|
||||
- Color picker shortcuts not working when elements selected [#3817](https://github.com/excalidraw/excalidraw/pull/3817)
|
||||
|
||||
---
|
||||
|
||||
## 0.9.0 (2021-07-10)
|
||||
|
||||
## Excalidraw API
|
||||
|
||||
### Features
|
||||
|
||||
- Expose [`FONT_FAMILY`](https://github.com/excalidraw/excalidraw/blob/master/src/packages/excalidraw/README.md#FONT_FAMILY) so that consumer can use when passing `initialData.appState.currentItemFontFamily`.
|
||||
- [`restore(data, localAppState, localElements)`](https://github.com/excalidraw/excalidraw/blob/master/src/packages/excalidraw/README.md#restore) and [`restoreElements(elements, localElements)`](https://github.com/excalidraw/excalidraw/blob/master/src/packages/excalidraw/README.md#restoreElements) now take `localElements` argument which will be used to ensure existing elements' versions are used and incremented. This fixes an issue where importing the same file would resolve to elements with older versions, potentially causing issues when reconciling [#3797](https://github.com/excalidraw/excalidraw/pull/3797).
|
||||
|
||||
#### BREAKING CHANGE
|
||||
|
||||
- `localElements` argument is mandatory (can be `null`/`undefined`) if using TypeScript.
|
||||
|
||||
- Support `appState.exportEmbedScene` attribute in [`exportToSvg`](https://github.com/excalidraw/excalidraw/blob/master/src/packages/excalidraw/README.md#exportToSvg) which allows to embed the scene data [#3777](https://github.com/excalidraw/excalidraw/pull/3777).
|
||||
|
||||
#### BREAKING CHANGE
|
||||
|
||||
- The attribute `metadata` is now removed as `metadata` was only used to embed scene data which is now supported with the `appState.exportEmbedScene` attribute.
|
||||
- [`exportToSvg`](https://github.com/excalidraw/excalidraw/blob/master/src/packages/excalidraw/README.md#exportToSvg) now resolves to a promise which resolves to `svg` of the exported drawing.
|
||||
|
||||
- Expose [`loadLibraryFromBlob`](https://github.com/excalidraw/excalidraw/blob/master/src/packages/excalidraw/README.md#loadLibraryFromBlobY), [`loadFromBlob`](https://github.com/excalidraw/excalidraw/blob/master/src/packages/excalidraw/README.md#loadFromBlob), and [`getFreeDrawSvgPath`](https://github.com/excalidraw/excalidraw/blob/master/src/packages/excalidraw/README.md#getFreeDrawSvgPath) [#3764](https://github.com/excalidraw/excalidraw/pull/3764).
|
||||
|
||||
- Expose [`FONT_FAMILY`](https://github.com/excalidraw/excalidraw/blob/master/src/packages/excalidraw/README.md#FONT_FAMILY) so that consumer can use when passing `initialData.appState.currentItemFontFamily` [#3710](https://github.com/excalidraw/excalidraw/pull/3710).
|
||||
|
||||
- Added prop [`autoFocus`](https://github.com/excalidraw/excalidraw/blob/master/src/packages/excalidraw/README.md#autoFocus) to focus the excalidraw component on page load when enabled, defaults to false [#3691](https://github.com/excalidraw/excalidraw/pull/3691).
|
||||
|
||||
@@ -32,10 +105,10 @@ Please add the latest change on the top under the correct section.
|
||||
|
||||
Also, [`UIOptions`](https://github.com/excalidraw/excalidraw/blob/master/src/packages/excalidraw/README.md#UIOptions) is now memoized to avoid unnecessary rerenders.
|
||||
|
||||
#### BREAKING CHANGE
|
||||
#### BREAKING CHANGE
|
||||
|
||||
- `UIOptions.canvasActions.saveAsScene` is now renamed to `UiOptions.canvasActions.export.saveFileToDisk`. Defaults to `true` hence the **save file to disk** button is rendered inside the export dialog.
|
||||
- `exportToBackend` is now renamed to `UIOptions.canvasActions.export.exportToBackend`. If this prop is not passed, the **shareable-link** button will not be rendered, same as before.
|
||||
- `UIOptions.canvasActions.saveAsScene` is now renamed to `UiOptions.canvasActions.export.saveFileToDisk`. Defaults to `true` hence the **save file to disk** button is rendered inside the export dialog.
|
||||
- `exportToBackend` is now renamed to `UIOptions.canvasActions.export.exportToBackend`. If this prop is not passed, the **shareable-link** button will not be rendered, same as before.
|
||||
|
||||
### Fixes
|
||||
|
||||
@@ -48,6 +121,90 @@ Please add the latest change on the top under the correct section.
|
||||
- Removed `shouldAddWatermark: boolean` attribute from options for [export](https://github.com/excalidraw/excalidraw/blob/master/src/packages/excalidraw/README.md#export-utilities) APIs [#3639](https://github.com/excalidraw/excalidraw/pull/3639).
|
||||
- Removed `appState.shouldAddWatermark` so in case you were passing `shouldAddWatermark` in [initialData.AppState](https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L42) it will not work anymore.
|
||||
|
||||
## Excalidraw Library
|
||||
|
||||
**_This section lists the updates made to the excalidraw library and will not affect the integration._**
|
||||
|
||||
### Features
|
||||
|
||||
- Switch to selection tool on library item insert [#3773](https://github.com/excalidraw/excalidraw/pull/3773)
|
||||
|
||||
- Show active file name when saving to current file [#3733](https://github.com/excalidraw/excalidraw/pull/3733)
|
||||
|
||||
- Add hint around text editing [#3708](https://github.com/excalidraw/excalidraw/pull/3708)
|
||||
|
||||
- Change library icon to be more clear [#3583](https://github.com/excalidraw/excalidraw/pull/3583)
|
||||
|
||||
- Pass current `theme` when installing libraries [#3701](https://github.com/excalidraw/excalidraw/pull/3701)
|
||||
|
||||
- Update virgil font [#3692](https://github.com/excalidraw/excalidraw/pull/3692)
|
||||
|
||||
- Support exporting json to excalidraw plus [#3678](https://github.com/excalidraw/excalidraw/pull/3678)
|
||||
|
||||
- Save exportScale in AppState [#3580](https://github.com/excalidraw/excalidraw/pull/3580)
|
||||
|
||||
- Add shortcuts for stroke and background color picker [#3318](https://github.com/excalidraw/excalidraw/pull/3318)
|
||||
|
||||
- Exporting redesign [#3613](https://github.com/excalidraw/excalidraw/pull/3613)
|
||||
|
||||
- Auto-position tooltip and suport overflowing container [#3631](https://github.com/excalidraw/excalidraw/pull/3631)
|
||||
|
||||
- Auto release @excalidraw/excalidraw-next on every change [#3614](https://github.com/excalidraw/excalidraw/pull/3614)
|
||||
|
||||
- Allow inner-drag-selecting with cmd/ctrl [#3603](https://github.com/excalidraw/excalidraw/pull/3603)
|
||||
|
||||
### Fixes
|
||||
|
||||
- view mode cursor adjustments [#3809](https://github.com/excalidraw/excalidraw/pull/3809).
|
||||
|
||||
- Pass next release to updatePackageVersion & replace ## unreleased with new version [#3806](https://github.com/excalidraw/excalidraw/pull/3806)
|
||||
|
||||
- Include deleted elements when passing to restore [#3802](https://github.com/excalidraw/excalidraw/pull/3802)
|
||||
|
||||
- Import React before using jsx [#3804](https://github.com/excalidraw/excalidraw/pull/3804)
|
||||
|
||||
- Ensure `s` and `g` shortcuts work on no selection [#3800](https://github.com/excalidraw/excalidraw/pull/3800)
|
||||
|
||||
- Keep binding for attached arrows after changing text [#3754](https://github.com/excalidraw/excalidraw/pull/3754)
|
||||
|
||||
- Deselect elements on viewMode toggle [#3741](https://github.com/excalidraw/excalidraw/pull/3741)
|
||||
|
||||
- Allow pointer events for disable zen mode button [#3743](https://github.com/excalidraw/excalidraw/pull/3743)
|
||||
|
||||
- Use rgba instead of shorthand alpha [#3688](https://github.com/excalidraw/excalidraw/pull/3688)
|
||||
|
||||
- Color pickers not opening on mobile [#3676](https://github.com/excalidraw/excalidraw/pull/3676)
|
||||
|
||||
- On contextMenu, use selected element regardless of z-index [#3668](https://github.com/excalidraw/excalidraw/pull/3668)
|
||||
|
||||
- SelectedGroupIds not being stored in history [#3630](https://github.com/excalidraw/excalidraw/pull/3630)
|
||||
|
||||
- Overscroll on touch devices [#3663](https://github.com/excalidraw/excalidraw/pull/3663)
|
||||
|
||||
- Small UI issues around image export dialog [#3642](https://github.com/excalidraw/excalidraw/pull/3642)
|
||||
|
||||
- Normalize linear element points on restore [#3633](https://github.com/excalidraw/excalidraw/pull/3633)
|
||||
|
||||
- Disable pointer-events on footer-center container [#3629](https://github.com/excalidraw/excalidraw/pull/3629)
|
||||
|
||||
### Refactor
|
||||
|
||||
- Delete React SyntheticEvent persist [#3700](https://github.com/excalidraw/excalidraw/pull/3700)
|
||||
|
||||
- Code clean up [#3681](https://github.com/excalidraw/excalidraw/pull/3681)
|
||||
|
||||
### Performance
|
||||
|
||||
- Improve arrow head sizing [#3480](https://github.com/excalidraw/excalidraw/pull/3480)
|
||||
|
||||
### Build
|
||||
|
||||
- Add release script to update relevant files and commit for next release [#3805](https://github.com/excalidraw/excalidraw/pull/3805)
|
||||
|
||||
- Add script to update changelog before a stable release [#3784](https://github.com/excalidraw/excalidraw/pull/3784)
|
||||
|
||||
- Add script to update readme before stable release [#3781](https://github.com/excalidraw/excalidraw/pull/3781)
|
||||
|
||||
---
|
||||
|
||||
## 0.8.0 (2021-05-15)
|
||||
|
@@ -20,7 +20,7 @@ After installation you will see a folder `excalidraw-assets` and `excalidraw-ass
|
||||
|
||||
Move the folder `excalidraw-assets` and `excalidraw-assets-dev` 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 `https://unpkg.com/@excalidraw/excalidraw/dist/`
|
||||
|
||||
If you want to load assets from a different path you can set a variable `window.EXCALIDRAW_ASSET_PATH` depending on environment (for example if you have different URL's for dev and prod) to the url from where you want to load the assets.
|
||||
|
||||
@@ -177,7 +177,7 @@ For development use :point_down:
|
||||
```js
|
||||
<script
|
||||
type="text/javascript"
|
||||
src="https://unpkg.com/@excalidraw/excalidraw@0.8.0/dist/excalidraw.development.js"
|
||||
src="https://unpkg.com/@excalidraw/excalidraw/dist/excalidraw.development.js"
|
||||
></script>
|
||||
```
|
||||
|
||||
@@ -186,7 +186,7 @@ For production use :point_down:
|
||||
```js
|
||||
<script
|
||||
type="text/javascript"
|
||||
src="https://unpkg.com/@excalidraw/excalidraw@0.8.0/dist/excalidraw.production.min.js"
|
||||
src="https://unpkg.com/@excalidraw/excalidraw/dist/excalidraw.production.min.js"
|
||||
></script>
|
||||
```
|
||||
|
||||
@@ -205,7 +205,7 @@ You will need to make sure `react`, `react-dom` is available as shown in the bel
|
||||
|
||||
<script
|
||||
type="text/javascript"
|
||||
src="https://unpkg.com/@excalidraw/excalidraw@0.8.0/dist/excalidraw.development.js"
|
||||
src="https://unpkg.com/@excalidraw/excalidraw/dist/excalidraw.development.js"
|
||||
></script>
|
||||
</head>
|
||||
|
||||
@@ -353,11 +353,10 @@ To view the full example visit :point_down:
|
||||
| --- | --- | --- | --- |
|
||||
| [`onChange`](#onChange) | Function | | This callback is triggered whenever the component updates due to any change. This callback will receive the excalidraw elements and the current app state. |
|
||||
| [`initialData`](#initialData) | <pre>{elements?: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/element/types.ts#L78">ExcalidrawElement[]</a>, appState?: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L42">AppState<a> } </pre> | null | The initial data with which app loads. |
|
||||
| [`ref`](#ref) | [`createRef`](https://reactjs.org/docs/refs-and-the-dom.html#creating-refs) or [`callbackRef`](https://reactjs.org/docs/refs-and-the-dom.html#callback-refs) or <pre>{ current: { readyPromise: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/utils.ts#L317">resolvablePromise</a> } }</pre> | | Ref to be passed to Excalidraw |
|
||||
| [`ref`](#ref) | [`createRef`](https://reactjs.org/docs/refs-and-the-dom.html#creating-refs) | [`useRef`](https://reactjs.org/docs/hooks-reference.html#useref) | [`callbackRef`](https://reactjs.org/docs/refs-and-the-dom.html#callback-refs) | <pre>{ current: { readyPromise: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/utils.ts#L317">resolvablePromise</a> } }</pre> | | Ref to be passed to Excalidraw |
|
||||
| [`onCollabButtonClick`](#onCollabButtonClick) | Function | | Callback to be triggered when the collab button is clicked |
|
||||
| [`isCollaborating`](#isCollaborating) | `boolean` | | This implies if the app is in collaboration mode |
|
||||
| [`onPointerUpdate`](#onPointerUpdate) | Function | | Callback triggered when mouse pointer is updated. |
|
||||
| [`onExportToBackend`](#onExportToBackend) | Function | | Callback triggered when link button is clicked on export dialog |
|
||||
| [`langCode`](#langCode) | string | `en` | Language code string |
|
||||
| [`renderTopRightUI`](#renderTopRightUI) | Function | | Function that renders custom UI in top right corner |
|
||||
| [`renderFooter `](#renderFooter) | Function | | Function that renders custom UI footer |
|
||||
@@ -373,6 +372,7 @@ To view the full example visit :point_down:
|
||||
| [`detectScroll`](#detectScroll) | boolean | true | Indicates whether to update the offsets when nearest ancestor is scrolled. |
|
||||
| [`handleKeyboardGlobally`](#handleKeyboardGlobally) | boolean | false | Indicates whether to bind the keyboard events to document. |
|
||||
| [`onLibraryChange`](#onLibraryChange) | <pre>(items: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L200">LibraryItems</a>) => void | Promise<any> </pre> | | The callback if supplied is triggered when the library is updated and receives the library items. |
|
||||
| [`autoFocus`](#autoFocus) | boolean | false | Implies whether to focus the Excalidraw component on page load |
|
||||
|
||||
### Dimensions of Excalidraw
|
||||
|
||||
@@ -442,7 +442,7 @@ You can pass a `ref` when you want to access some excalidraw APIs. We expose the
|
||||
| --- | --- | --- |
|
||||
| ready | `boolean` | This is set to true once Excalidraw is rendered |
|
||||
| readyPromise | [resolvablePromise](https://github.com/excalidraw/excalidraw/blob/master/src/utils.ts#L317) | This promise will be resolved with the api once excalidraw has rendered. This will be helpful when you want do some action on the host app once this promise resolves. For this to work you will have to pass ref as shown [here](#readyPromise) |
|
||||
| updateScene | <pre>(<a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L204">sceneData</a>)) => void </pre> | updates the scene with the sceneData |
|
||||
| [updateScene](#updateScene) | <pre>(<a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L207">sceneData</a>)) => void </pre> | updates the scene with the sceneData |
|
||||
| resetScene | `({ resetLoadingState: boolean }) => void` | Resets the scene. If `resetLoadingState` is passed as true then it will also force set the loading state to false. |
|
||||
| getSceneElementsIncludingDeleted | <pre> () => <a href="https://github.com/excalidraw/excalidraw/blob/master/src/element/types.ts#L78">ExcalidrawElement[]</a></pre> | Returns all the elements including the deleted in the scene |
|
||||
| getSceneElements | <pre> () => <a href="https://github.com/excalidraw/excalidraw/blob/master/src/element/types.ts#L78">ExcalidrawElement[]</a></pre> | Returns all the elements excluding the deleted in the scene |
|
||||
@@ -460,6 +460,23 @@ You can pass a `ref` when you want to access some excalidraw APIs. We expose the
|
||||
const excalidrawRef = { current: { readyPromise: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/utils.ts#L317">resolvablePromise</a>}}
|
||||
</pre>
|
||||
|
||||
Since plain object is passed as a `ref`, the `readyPromise` is resolved as soon as the component is mounted. Most of the time you will not need this unless you have a specific use case where you can't pass the `ref` in the react way and want to do some action on the host when this promise resolves. You can check the [example](https://codesandbox.io/s/eexcalidraw-resolvable-promise-d0qg3?file=/src/App.js) for the usage.
|
||||
|
||||
### `updateScene`
|
||||
|
||||
<pre>
|
||||
(<a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L207">sceneData</a>)) => void
|
||||
</pre>
|
||||
|
||||
You can use this function to update the scene with the sceneData. It accepts the below attributes.
|
||||
|
||||
| Name | Type | Description |
|
||||
| --- | --- | --- |
|
||||
| `elements` | [`ImportedDataState["elements"]`](https://github.com/excalidraw/excalidraw/blob/master/src/data/types.ts#L17) | The `elements` to be updated in the scene |
|
||||
| `appState` | [`ImportedDataState["appState"]`](https://github.com/excalidraw/excalidraw/blob/master/src/data/types.ts#L18) | The `appState` to be updated in the scene. |
|
||||
| `collaborators` | <pre>Map<string, <a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L29">Collaborator></a></pre> | The list of collaborators to be updated in the scene. |
|
||||
| `commitToHistory` | `boolean` | Implies if the `history (undo/redo)` should be recorded. Defaults to `false`. |
|
||||
|
||||
#### `onCollabButtonClick`
|
||||
|
||||
This callback is triggered when clicked on the collab button in excalidraw. If not supplied, the collab dialog button is not rendered.
|
||||
@@ -482,10 +499,6 @@ This callback is triggered when mouse pointer is updated.
|
||||
|
||||
3.`pointersMap`: [`pointers map`](https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L131) of the scene
|
||||
|
||||
#### `onExportToBackend`
|
||||
|
||||
This callback is triggered when the shareable-link button is clicked in the export dialog. The link button will only be shown if this callback is passed.
|
||||
|
||||
```js
|
||||
(exportedElements, appState, canvas) => void
|
||||
```
|
||||
@@ -565,11 +578,21 @@ This prop can be used to customise UI of Excalidraw. Currently we support custom
|
||||
| --- | --- | --- | --- |
|
||||
| `changeViewBackgroundColor` | boolean | true | Implies whether to show `Background color picker` |
|
||||
| `clearCanvas` | boolean | true | Implies whether to show `Clear canvas button` |
|
||||
| `export` | boolean | true | Implies whether to show `Export button` |
|
||||
| `export` | false | [exportOpts](#exportOpts) | <pre>{ saveFileToDisk: true }</pre> | This prop allows to customize the UI inside the export dialog. By default it shows the "saveFileToDisk". If this prop is `false` the export button will not be rendered. For more details visit [`exportOpts`](#exportOpts). |
|
||||
| `loadScene` | boolean | true | Implies whether to show `Load button` |
|
||||
| `saveAsScene` | boolean | true | Implies whether to show `Save as button` |
|
||||
| `saveScene` | boolean | true | Implies whether to show `Save button` |
|
||||
| `saveToActiveFile` | boolean | true | Implies whether to show `Save button` to save to current file |
|
||||
| `theme` | boolean | true | Implies whether to show `Theme toggle` |
|
||||
| `saveAsImage` | boolean | true | Implies whether to show `Save as image button` |
|
||||
|
||||
#### `exportOpts`
|
||||
|
||||
The below attributes can be set in `UIOptions.canvasActions.export` to customize the export dialog. If `UIOptions.canvasActions.export` is `false` the export button will not be rendered.
|
||||
|
||||
| Attribute | Type | Default | Description |
|
||||
| --- | --- | --- | --- |
|
||||
| `saveFileToDisk` | boolean | true | Implies if save file to disk button should be shown |
|
||||
| `onExportToBackend` | <pre> (exportedElements: readonly NonDeletedExcalidrawElement[],appState: AppState,canvas: HTMLCanvasElement | null) => void </pre> | | This callback is triggered when the shareable-link button is clicked in the export dialog. The link button will only be shown if this callback is passed. |
|
||||
| `renderCustomUI` | <pre> (exportedElements: readonly NonDeletedExcalidrawElement[],appState: AppState,canvas: HTMLCanvasElement | null) => void </pre> | | This callback should be supplied if you want to render custom UI in the export dialog. |
|
||||
|
||||
#### `onPaste`
|
||||
|
||||
@@ -581,11 +604,11 @@ This callback is triggered if passed when something is pasted into the scene. Yo
|
||||
|
||||
This callback must return a `boolean` value or a [promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/Promise) which resolves to a boolean value.
|
||||
|
||||
In case you want to prevent the excalidraw paste action you must return `true`, it will stop the native excalidraw clipboard management flow (nothing will be pasted into the scene).
|
||||
In case you want to prevent the excalidraw paste action you must return `false`, it will stop the native excalidraw clipboard management flow (nothing will be pasted into the scene).
|
||||
|
||||
### Does it support collaboration ?
|
||||
|
||||
No Excalidraw package doesn't come with collaboration, since this would have different implementations on the consumer so we expose the API's which you can use to communicate with Excalidraw as mentioned above. If you are interested in understanding how Excalidraw does it you can check it [here](https://github.com/excalidraw/excalidraw/blob/master/src/excalidraw-app/index.tsx).
|
||||
No, Excalidraw package doesn't come with collaboration built in, since the implementation is specific to each host app. We expose APIs which you can use to communicate with Excalidraw which you can use to implement it. You can check our own implementation [here](https://github.com/excalidraw/excalidraw/blob/master/src/excalidraw-app/index.tsx).
|
||||
|
||||
### importLibrary
|
||||
|
||||
@@ -633,6 +656,10 @@ It is invoked with empty items when user clears the library. You can use this ca
|
||||
|
||||
The unique id of the excalidraw component. This can be used to identify the excalidraw component, for example importing the library items to the excalidraw component from where it was initiated when you have multiple excalidraw components rendered on the same page as shown in [multiple excalidraw demo](https://codesandbox.io/s/multiple-excalidraw-k1xx5).
|
||||
|
||||
### autoFocus
|
||||
|
||||
This prop implies whether to focus the Excalidraw component on page load. Defaults to false.
|
||||
|
||||
### Extra API's
|
||||
|
||||
#### `getSceneVersion`
|
||||
@@ -685,7 +712,7 @@ This function returns an object where each element is mapped to its id.
|
||||
**_Signature_**
|
||||
|
||||
<pre>
|
||||
restoreAppState(appState: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/data/types.ts#L17">ImportedDataState["appState"]</a>, localAppState: Partial<<a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L42">AppState</a>> | null): <a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L42">AppState</a>
|
||||
restoreAppState(appState: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/data/types.ts#L17">ImportedDataState["appState"]</a>, localAppState: Partial<<a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L42">AppState</a>> | null): <a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L42">AppState</a>
|
||||
</pre>
|
||||
|
||||
**_How to use_**
|
||||
@@ -694,14 +721,16 @@ restoreAppState(appState: <a href="https://github.com/excalidraw/excalidraw/blo
|
||||
import { restoreAppState } from "@excalidraw/excalidraw";
|
||||
```
|
||||
|
||||
This function will make sure all the keys have appropriate values in [appState](https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L42) and if any key is missing, it will be set to default value. If you pass `localAppState`, `localAppState` value will be preferred over the `appState` passed in params.
|
||||
This function will make sure all the keys have appropriate values in [appState](https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L42) and if any key is missing, it will be set to default value.
|
||||
|
||||
When `localAppState` is supplied, it's used in place of values that are missing (`undefined`) in `appState` instead of defaults. Use this as a way to not override user's defaults if you persist them. Required: supply `null`/`undefined` if not applicable.
|
||||
|
||||
#### `restoreElements`
|
||||
|
||||
**_Signature_**
|
||||
|
||||
<pre>
|
||||
restoreElements(elements: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/data/types.ts#L16">ImportedDataState["elements"]</a>): <a href="https://github.com/excalidraw/excalidraw/blob/master/src/element/types.ts#L78">ExcalidrawElement[]</a>
|
||||
restoreElements(elements: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/data/types.ts#L16">ImportedDataState["elements"]</a>, localElements: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/data/types.ts#L16">ExcalidrawElement[]</a> | null | undefined): <a href="https://github.com/excalidraw/excalidraw/blob/master/src/element/types.ts#L78">ExcalidrawElement[]</a>
|
||||
</pre>
|
||||
|
||||
**_How to use_**
|
||||
@@ -712,21 +741,25 @@ import { restoreElements } from "@excalidraw/excalidraw";
|
||||
|
||||
This function will make sure all properties of element is correctly set and if any attribute is missing, it will be set to default value.
|
||||
|
||||
When `localElements` are supplied, they are used to ensure that existing restored elements reuse `version` (and increment it), and regenerate `versionNonce`. Use this when you import elements which may already be present in the scene to ensure that you do not disregard the newly imported elements if you're using element version to detect the updates.
|
||||
|
||||
#### `restore`
|
||||
|
||||
**_Signature_**
|
||||
|
||||
<pre>
|
||||
restoreElements(data: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/data/types.ts#L12">ImportedDataState</a>): <a href="https://github.com/excalidraw/excalidraw/blob/master/src/data/types.ts#L4">DataState</a>
|
||||
restoreElements(data: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/data/types.ts#L12">ImportedDataState</a>, localAppState: Partial<<a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L42">AppState</a>> | null | undefined, localElements: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/data/types.ts#L16">ExcalidrawElement[]</a> | null | undefined): <a href="https://github.com/excalidraw/excalidraw/blob/master/src/data/types.ts#L4">DataState</a>
|
||||
</pre>
|
||||
|
||||
See [`restoreAppState()`](https://github.com/excalidraw/excalidraw/blob/master/src/packages/excalidraw/README.md#restoreAppState) about `localAppState`, and [`restoreElements()`](https://github.com/excalidraw/excalidraw/blob/master/src/packages/excalidraw/README.md#restoreElements) about `localElements`.
|
||||
|
||||
**_How to use_**
|
||||
|
||||
```js
|
||||
import { restore } from "@excalidraw/excalidraw";
|
||||
```
|
||||
|
||||
This function makes sure elements and state is set to appropriate values and set to default value if not present. It is combination of [restoreElements](#restoreElements) and [restoreAppState](#restoreAppState)
|
||||
This function makes sure elements and state is set to appropriate values and set to default value if not present. It is a combination of [restoreElements](#restoreElements) and [restoreAppState](#restoreAppState).
|
||||
|
||||
#### `serializeAsJSON`
|
||||
|
||||
@@ -813,9 +846,8 @@ exportToSvg({
|
||||
| elements | [Excalidraw Element []](https://github.com/excalidraw/excalidraw/blob/master/src/element/types.ts#L78) | | The elements to exported as svg |
|
||||
| appState | [AppState](https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L42) | [defaultAppState](https://github.com/excalidraw/excalidraw/blob/master/src/appState.ts#L11) | The app state of the scene |
|
||||
| exportPadding | number | 10 | The padding to be added on canvas |
|
||||
| metadata | string | '' | The metadata to be embedded in svg |
|
||||
|
||||
This function returns a svg with the exported elements.
|
||||
This function returns a promise which resolves to svg of the exported drawing.
|
||||
|
||||
##### Additional attributes of appState for `export\*` APIs
|
||||
|
||||
@@ -824,3 +856,72 @@ This function returns a svg with the exported elements.
|
||||
| exportBackground | boolean | true | Indicates whether background should be exported |
|
||||
| viewBackgroundColor | string | #fff | The default background color |
|
||||
| exportWithDarkMode | boolean | false | Indicates whether to export with dark mode |
|
||||
| exportEmbedScene | boolean | false | Indicates whether scene data should be embedded in svg. This will increase the svg size. |
|
||||
|
||||
### FONT_FAMILY
|
||||
|
||||
**How to use**
|
||||
|
||||
```js
|
||||
import { FONT_FAMILY } from "@excalidraw/excalidraw";
|
||||
```
|
||||
|
||||
`FONT_FAMILY` contains all the font families used in `Excalidraw` as explained below
|
||||
|
||||
| Font Family | Description |
|
||||
| ----------- | -------------------- |
|
||||
| Virgil | The handwritten font |
|
||||
| Helvetica | The Normal Font |
|
||||
| Cascadia | The Code Font |
|
||||
|
||||
Defaults to `FONT_FAMILY.Virgil` unless passed in `initialData.appState.currentItemFontFamily`.
|
||||
|
||||
### loadLibraryFromBlob
|
||||
|
||||
```js
|
||||
import { loadLibraryFromBlob } from "@excalidraw/excalidraw";
|
||||
```
|
||||
|
||||
**_Signature_**
|
||||
|
||||
<pre>
|
||||
loadLibraryFromBlob(blob: <a href="https://developer.mozilla.org/en-US/docs/Web/API/Blob">Blob</a>)
|
||||
</pre>
|
||||
|
||||
This function loads the library from the blob.
|
||||
|
||||
### loadFromBlob
|
||||
|
||||
**How to use**
|
||||
|
||||
```js
|
||||
import { loadFromBlob } from "@excalidraw/excalidraw";
|
||||
```
|
||||
|
||||
**Signature**
|
||||
|
||||
<pre>
|
||||
loadFromBlob(blob: <a href="https://developer.mozilla.org/en-US/docs/Web/API/Blob">Blob</a>, localAppState: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L42">AppState</a> | null)
|
||||
</pre>
|
||||
|
||||
This function loads the scene data from the blob. If you pass `localAppState`, `localAppState` value will be preferred over the `appState` derived from `blob`
|
||||
|
||||
### getFreeDrawSvgPath
|
||||
|
||||
**How to use**
|
||||
|
||||
```js
|
||||
import { getFreeDrawSvgPath } from "@excalidraw/excalidraw";
|
||||
```
|
||||
|
||||
**Signature**
|
||||
|
||||
<pre>
|
||||
getFreeDrawSvgPath(element: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/element/types.ts#L127">ExcalidrawFreeDrawElement</a>
|
||||
</pre>
|
||||
|
||||
This function returns the free draw svg path for the element.
|
||||
|
||||
## Need help?
|
||||
|
||||
Check out the existing [Q&A](https://github.com/excalidraw/excalidraw/discussions?discussions_q=label%3Apackage%3Aexcalidraw). If you have any queries or need help, ask us [here](https://github.com/excalidraw/excalidraw/discussions?discussions_q=label%3Apackage%3Aexcalidraw).
|
||||
|
@@ -1,4 +1,4 @@
|
||||
<!-- stable-readme-start-->
|
||||
<!-- unstable-readme-start-->
|
||||
|
||||
## Note
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
For stable release please use [@excalidraw/excalidraw](https://www.npmjs.com/package/@excalidraw/excalidraw).
|
||||
|
||||
<!-- stable-readme-end-->
|
||||
<!-- unstable-readme-end-->
|
||||
|
||||
### Excalidraw
|
||||
|
||||
@@ -359,7 +359,7 @@ To view the full example visit :point_down:
|
||||
| --- | --- | --- | --- |
|
||||
| [`onChange`](#onChange) | Function | | This callback is triggered whenever the component updates due to any change. This callback will receive the excalidraw elements and the current app state. |
|
||||
| [`initialData`](#initialData) | <pre>{elements?: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/element/types.ts#L78">ExcalidrawElement[]</a>, appState?: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L42">AppState<a> } </pre> | null | The initial data with which app loads. |
|
||||
| [`ref`](#ref) | [`createRef`](https://reactjs.org/docs/refs-and-the-dom.html#creating-refs) or [`callbackRef`](https://reactjs.org/docs/refs-and-the-dom.html#callback-refs) or <pre>{ current: { readyPromise: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/utils.ts#L317">resolvablePromise</a> } }</pre> | | Ref to be passed to Excalidraw |
|
||||
| [`ref`](#ref) | [`createRef`](https://reactjs.org/docs/refs-and-the-dom.html#creating-refs) | [`useRef`](https://reactjs.org/docs/hooks-reference.html#useref) | [`callbackRef`](https://reactjs.org/docs/refs-and-the-dom.html#callback-refs) | <pre>{ current: { readyPromise: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/utils.ts#L317">resolvablePromise</a> } }</pre> | | Ref to be passed to Excalidraw |
|
||||
| [`onCollabButtonClick`](#onCollabButtonClick) | Function | | Callback to be triggered when the collab button is clicked |
|
||||
| [`isCollaborating`](#isCollaborating) | `boolean` | | This implies if the app is in collaboration mode |
|
||||
| [`onPointerUpdate`](#onPointerUpdate) | Function | | Callback triggered when mouse pointer is updated. |
|
||||
@@ -448,7 +448,7 @@ You can pass a `ref` when you want to access some excalidraw APIs. We expose the
|
||||
| --- | --- | --- |
|
||||
| ready | `boolean` | This is set to true once Excalidraw is rendered |
|
||||
| readyPromise | [resolvablePromise](https://github.com/excalidraw/excalidraw/blob/master/src/utils.ts#L317) | This promise will be resolved with the api once excalidraw has rendered. This will be helpful when you want do some action on the host app once this promise resolves. For this to work you will have to pass ref as shown [here](#readyPromise) |
|
||||
| updateScene | <pre>(<a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L204">sceneData</a>)) => void </pre> | updates the scene with the sceneData |
|
||||
| [updateScene](#updateScene) | <pre>(<a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L207">sceneData</a>)) => void </pre> | updates the scene with the sceneData |
|
||||
| resetScene | `({ resetLoadingState: boolean }) => void` | Resets the scene. If `resetLoadingState` is passed as true then it will also force set the loading state to false. |
|
||||
| getSceneElementsIncludingDeleted | <pre> () => <a href="https://github.com/excalidraw/excalidraw/blob/master/src/element/types.ts#L78">ExcalidrawElement[]</a></pre> | Returns all the elements including the deleted in the scene |
|
||||
| getSceneElements | <pre> () => <a href="https://github.com/excalidraw/excalidraw/blob/master/src/element/types.ts#L78">ExcalidrawElement[]</a></pre> | Returns all the elements excluding the deleted in the scene |
|
||||
@@ -466,6 +466,23 @@ You can pass a `ref` when you want to access some excalidraw APIs. We expose the
|
||||
const excalidrawRef = { current: { readyPromise: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/utils.ts#L317">resolvablePromise</a>}}
|
||||
</pre>
|
||||
|
||||
Since plain object is passed as a `ref`, the `readyPromise` is resolved as soon as the component is mounted. Most of the time you will not need this unless you have a specific use case where you can't pass the `ref` in the react way and want to do some action on the host when this promise resolves. You can check the [example](https://codesandbox.io/s/eexcalidraw-resolvable-promise-d0qg3?file=/src/App.js) for the usage.
|
||||
|
||||
### `updateScene`
|
||||
|
||||
<pre>
|
||||
(<a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L207">sceneData</a>)) => void
|
||||
</pre>
|
||||
|
||||
You can use this function to update the scene with the sceneData. It accepts the below attributes.
|
||||
|
||||
| Name | Type | Description |
|
||||
| --- | --- | --- |
|
||||
| `elements` | [`ImportedDataState["elements"]`](https://github.com/excalidraw/excalidraw/blob/master/src/data/types.ts#L17) | The `elements` to be updated in the scene |
|
||||
| `appState` | [`ImportedDataState["appState"]`](https://github.com/excalidraw/excalidraw/blob/master/src/data/types.ts#L18) | The `appState` to be updated in the scene. |
|
||||
| `collaborators` | <pre>Map<string, <a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L29">Collaborator></a></pre> | The list of collaborators to be updated in the scene. |
|
||||
| `commitToHistory` | `boolean` | Implies if the `history (undo/redo)` should be recorded. Defaults to `false`. |
|
||||
|
||||
#### `onCollabButtonClick`
|
||||
|
||||
This callback is triggered when clicked on the collab button in excalidraw. If not supplied, the collab dialog button is not rendered.
|
||||
@@ -580,7 +597,7 @@ The below attributes can be set in `UIOptions.canvasActions.export` to customize
|
||||
| Attribute | Type | Default | Description |
|
||||
| --- | --- | --- | --- |
|
||||
| `saveFileToDisk` | boolean | true | Implies if save file to disk button should be shown |
|
||||
| `exportToBackend` | <pre> (exportedElements: readonly NonDeletedExcalidrawElement[],appState: AppState,canvas: HTMLCanvasElement | null) => void </pre> | | This callback is triggered when the shareable-link button is clicked in the export dialog. The link button will only be shown if this callback is passed. |
|
||||
| `onExportToBackend` | <pre> (exportedElements: readonly NonDeletedExcalidrawElement[],appState: AppState,canvas: HTMLCanvasElement | null) => void </pre> | | This callback is triggered when the shareable-link button is clicked in the export dialog. The link button will only be shown if this callback is passed. |
|
||||
| `renderCustomUI` | <pre> (exportedElements: readonly NonDeletedExcalidrawElement[],appState: AppState,canvas: HTMLCanvasElement | null) => void </pre> | | This callback should be supplied if you want to render custom UI in the export dialog. |
|
||||
|
||||
#### `onPaste`
|
||||
@@ -593,11 +610,11 @@ This callback is triggered if passed when something is pasted into the scene. Yo
|
||||
|
||||
This callback must return a `boolean` value or a [promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/Promise) which resolves to a boolean value.
|
||||
|
||||
In case you want to prevent the excalidraw paste action you must return `true`, it will stop the native excalidraw clipboard management flow (nothing will be pasted into the scene).
|
||||
In case you want to prevent the excalidraw paste action you must return `false`, it will stop the native excalidraw clipboard management flow (nothing will be pasted into the scene).
|
||||
|
||||
### Does it support collaboration ?
|
||||
|
||||
No Excalidraw package doesn't come with collaboration, since this would have different implementations on the consumer so we expose the API's which you can use to communicate with Excalidraw as mentioned above. If you are interested in understanding how Excalidraw does it you can check it [here](https://github.com/excalidraw/excalidraw/blob/master/src/excalidraw-app/index.tsx).
|
||||
No, Excalidraw package doesn't come with collaboration built in, since the implementation is specific to each host app. We expose APIs which you can use to communicate with Excalidraw which you can use to implement it. You can check our own implementation [here](https://github.com/excalidraw/excalidraw/blob/master/src/excalidraw-app/index.tsx).
|
||||
|
||||
### importLibrary
|
||||
|
||||
@@ -701,7 +718,7 @@ This function returns an object where each element is mapped to its id.
|
||||
**_Signature_**
|
||||
|
||||
<pre>
|
||||
restoreAppState(appState: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/data/types.ts#L17">ImportedDataState["appState"]</a>, localAppState: Partial<<a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L42">AppState</a>> | null): <a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L42">AppState</a>
|
||||
restoreAppState(appState: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/data/types.ts#L17">ImportedDataState["appState"]</a>, localAppState: Partial<<a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L42">AppState</a>> | null): <a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L42">AppState</a>
|
||||
</pre>
|
||||
|
||||
**_How to use_**
|
||||
@@ -710,14 +727,16 @@ restoreAppState(appState: <a href="https://github.com/excalidraw/excalidraw/blo
|
||||
import { restoreAppState } from "@excalidraw/excalidraw-next";
|
||||
```
|
||||
|
||||
This function will make sure all the keys have appropriate values in [appState](https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L42) and if any key is missing, it will be set to default value. If you pass `localAppState`, `localAppState` value will be preferred over the `appState` passed in params.
|
||||
This function will make sure all the keys have appropriate values in [appState](https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L42) and if any key is missing, it will be set to default value.
|
||||
|
||||
When `localAppState` is supplied, it's used in place of values that are missing (`undefined`) in `appState` instead of defaults. Use this as a way to not override user's defaults if you persist them. Required: supply `null`/`undefined` if not applicable.
|
||||
|
||||
#### `restoreElements`
|
||||
|
||||
**_Signature_**
|
||||
|
||||
<pre>
|
||||
restoreElements(elements: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/data/types.ts#L16">ImportedDataState["elements"]</a>): <a href="https://github.com/excalidraw/excalidraw/blob/master/src/element/types.ts#L78">ExcalidrawElement[]</a>
|
||||
restoreElements(elements: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/data/types.ts#L16">ImportedDataState["elements"]</a>, localElements: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/data/types.ts#L16">ExcalidrawElement[]</a> | null | undefined): <a href="https://github.com/excalidraw/excalidraw/blob/master/src/element/types.ts#L78">ExcalidrawElement[]</a>
|
||||
</pre>
|
||||
|
||||
**_How to use_**
|
||||
@@ -728,21 +747,25 @@ import { restoreElements } from "@excalidraw/excalidraw-next";
|
||||
|
||||
This function will make sure all properties of element is correctly set and if any attribute is missing, it will be set to default value.
|
||||
|
||||
When `localElements` are supplied, they are used to ensure that existing restored elements reuse `version` (and increment it), and regenerate `versionNonce`. Use this when you import elements which may already be present in the scene to ensure that you do not disregard the newly imported elements if you're using element version to detect the updates.
|
||||
|
||||
#### `restore`
|
||||
|
||||
**_Signature_**
|
||||
|
||||
<pre>
|
||||
restoreElements(data: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/data/types.ts#L12">ImportedDataState</a>): <a href="https://github.com/excalidraw/excalidraw/blob/master/src/data/types.ts#L4">DataState</a>
|
||||
restoreElements(data: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/data/types.ts#L12">ImportedDataState</a>, localAppState: Partial<<a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L42">AppState</a>> | null | undefined, localElements: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/data/types.ts#L16">ExcalidrawElement[]</a> | null | undefined): <a href="https://github.com/excalidraw/excalidraw/blob/master/src/data/types.ts#L4">DataState</a>
|
||||
</pre>
|
||||
|
||||
See [`restoreAppState()`](https://github.com/excalidraw/excalidraw/blob/master/src/packages/excalidraw/README.md#restoreAppState) about `localAppState`, and [`restoreElements()`](https://github.com/excalidraw/excalidraw/blob/master/src/packages/excalidraw/README.md#restoreElements) about `localElements`.
|
||||
|
||||
**_How to use_**
|
||||
|
||||
```js
|
||||
import { restore } from "@excalidraw/excalidraw-next";
|
||||
```
|
||||
|
||||
This function makes sure elements and state is set to appropriate values and set to default value if not present. It is combination of [restoreElements](#restoreElements) and [restoreAppState](#restoreAppState)
|
||||
This function makes sure elements and state is set to appropriate values and set to default value if not present. It is a combination of [restoreElements](#restoreElements) and [restoreAppState](#restoreAppState).
|
||||
|
||||
#### `serializeAsJSON`
|
||||
|
||||
@@ -829,9 +852,8 @@ exportToSvg({
|
||||
| elements | [Excalidraw Element []](https://github.com/excalidraw/excalidraw/blob/master/src/element/types.ts#L78) | | The elements to exported as svg |
|
||||
| appState | [AppState](https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L42) | [defaultAppState](https://github.com/excalidraw/excalidraw/blob/master/src/appState.ts#L11) | The app state of the scene |
|
||||
| exportPadding | number | 10 | The padding to be added on canvas |
|
||||
| metadata | string | '' | The metadata to be embedded in svg |
|
||||
|
||||
This function returns a svg with the exported elements.
|
||||
This function returns a promise which resolves to svg of the exported drawing.
|
||||
|
||||
##### Additional attributes of appState for `export\*` APIs
|
||||
|
||||
@@ -840,13 +862,14 @@ This function returns a svg with the exported elements.
|
||||
| exportBackground | boolean | true | Indicates whether background should be exported |
|
||||
| viewBackgroundColor | string | #fff | The default background color |
|
||||
| exportWithDarkMode | boolean | false | Indicates whether to export with dark mode |
|
||||
| exportEmbedScene | boolean | false | Indicates whether scene data should be embedded in svg. This will increase the svg size. |
|
||||
|
||||
### FONT_FAMILY
|
||||
|
||||
**_Signature_**
|
||||
**How to use**
|
||||
|
||||
```js
|
||||
import { FONT_FAMILY } from "./constants";
|
||||
import { FONT_FAMILY } from "@excalidraw/excalidraw-next";
|
||||
```
|
||||
|
||||
`FONT_FAMILY` contains all the font families used in `Excalidraw` as explained below
|
||||
@@ -855,6 +878,56 @@ import { FONT_FAMILY } from "./constants";
|
||||
| ----------- | -------------------- |
|
||||
| Virgil | The handwritten font |
|
||||
| Helvetica | The Normal Font |
|
||||
| Cacadia | The Code Font |
|
||||
| Cascadia | The Code Font |
|
||||
|
||||
Defaults to `FONT_FAMILY.Virgil` unless passed in `initialData.appState.currentItemFontFamily`.
|
||||
|
||||
### loadLibraryFromBlob
|
||||
|
||||
```js
|
||||
import { loadLibraryFromBlob } from "@excalidraw/excalidraw-next";
|
||||
```
|
||||
|
||||
**_Signature_**
|
||||
|
||||
<pre>
|
||||
loadLibraryFromBlob(blob: <a href="https://developer.mozilla.org/en-US/docs/Web/API/Blob">Blob</a>)
|
||||
</pre>
|
||||
|
||||
This function loads the library from the blob.
|
||||
|
||||
### loadFromBlob
|
||||
|
||||
**How to use**
|
||||
|
||||
```js
|
||||
import { loadFromBlob } from "@excalidraw/excalidraw-next";
|
||||
```
|
||||
|
||||
**Signature**
|
||||
|
||||
<pre>
|
||||
loadFromBlob(blob: <a href="https://developer.mozilla.org/en-US/docs/Web/API/Blob">Blob</a>, localAppState: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L42">AppState</a> | null)
|
||||
</pre>
|
||||
|
||||
This function loads the scene data from the blob. If you pass `localAppState`, `localAppState` value will be preferred over the `appState` derived from `blob`
|
||||
|
||||
### getFreeDrawSvgPath
|
||||
|
||||
**How to use**
|
||||
|
||||
```js
|
||||
import { getFreeDrawSvgPath } from "@excalidraw/excalidraw-next";
|
||||
```
|
||||
|
||||
**Signature**
|
||||
|
||||
<pre>
|
||||
getFreeDrawSvgPath(element: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/element/types.ts#L127">ExcalidrawFreeDrawElement</a>
|
||||
</pre>
|
||||
|
||||
This function returns the free draw svg path for the element.
|
||||
|
||||
## Need help?
|
||||
|
||||
Check out the existing [Q&A](https://github.com/excalidraw/excalidraw/discussions?discussions_q=label%3Apackage%3Aexcalidraw). If you have any queries or need help, ask us [here](https://github.com/excalidraw/excalidraw/discussions?discussions_q=label%3Apackage%3Aexcalidraw).
|
||||
|
@@ -178,6 +178,9 @@ export {
|
||||
exportToCanvas,
|
||||
exportToBlob,
|
||||
exportToSvg,
|
||||
serializeAsJSON,
|
||||
loadLibraryFromBlob,
|
||||
loadFromBlob,
|
||||
getFreeDrawSvgPath,
|
||||
} from "../../packages/utils";
|
||||
export { serializeAsJSON } from "../../data/json";
|
||||
export { FONT_FAMILY } from "../../constants";
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@excalidraw/excalidraw",
|
||||
"version": "0.8.0",
|
||||
"version": "0.10.0",
|
||||
"main": "main.js",
|
||||
"types": "types/packages/excalidraw/index.d.ts",
|
||||
"files": [
|
||||
@@ -11,11 +11,7 @@
|
||||
"access": "public"
|
||||
},
|
||||
"description": "Excalidraw as a React component",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/excalidraw/excalidraw.git",
|
||||
"directory": "src/packages/excalidraw"
|
||||
},
|
||||
"repository": "https://github.com/excalidraw/excalidraw",
|
||||
"license": "MIT",
|
||||
"keywords": [
|
||||
"excalidraw",
|
||||
@@ -44,36 +40,35 @@
|
||||
]
|
||||
},
|
||||
"peerDependencies": {
|
||||
"react": "^17.0.1",
|
||||
"react-dom": "^17.0.1"
|
||||
"react": "^17.0.2",
|
||||
"react-dom": "^17.0.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "7.14.3",
|
||||
"@babel/plugin-transform-arrow-functions": "7.13.0",
|
||||
"@babel/plugin-transform-async-to-generator": "7.13.0",
|
||||
"@babel/plugin-transform-runtime": "7.13.15",
|
||||
"@babel/plugin-transform-typescript": "7.14.3",
|
||||
"@babel/preset-env": "7.14.2",
|
||||
"@babel/preset-react": "7.13.13",
|
||||
"@babel/preset-typescript": "7.13.0",
|
||||
"autoprefixer": "10.2.6",
|
||||
"@babel/core": "7.14.8",
|
||||
"@babel/plugin-transform-arrow-functions": "7.14.5",
|
||||
"@babel/plugin-transform-async-to-generator": "7.14.5",
|
||||
"@babel/plugin-transform-runtime": "7.14.5",
|
||||
"@babel/plugin-transform-typescript": "7.14.6",
|
||||
"@babel/preset-env": "7.14.9",
|
||||
"@babel/preset-react": "7.14.5",
|
||||
"@babel/preset-typescript": "7.14.5",
|
||||
"autoprefixer": "10.3.1",
|
||||
"babel-loader": "8.2.2",
|
||||
"babel-plugin-transform-class-properties": "6.24.1",
|
||||
"cross-env": "7.0.3",
|
||||
"css-loader": "5.2.6",
|
||||
"file-loader": "6.2.0",
|
||||
"mini-css-extract-plugin": "1.6.0",
|
||||
"postcss-loader": "5.3.0",
|
||||
"sass-loader": "11.1.1",
|
||||
"terser-webpack-plugin": "5.1.2",
|
||||
"ts-loader": "9.2.3",
|
||||
"typescript": "4.3.2",
|
||||
"webpack": "5.38.1",
|
||||
"webpack-bundle-analyzer": "4.4.1",
|
||||
"webpack-cli": "4.7.0"
|
||||
"mini-css-extract-plugin": "1.6.1",
|
||||
"postcss-loader": "6.1.1",
|
||||
"sass-loader": "12.1.0",
|
||||
"terser-webpack-plugin": "5.1.4",
|
||||
"ts-loader": "9.2.4",
|
||||
"typescript": "4.3.5",
|
||||
"webpack": "5.50.0",
|
||||
"webpack-bundle-analyzer": "4.4.2",
|
||||
"webpack-cli": "4.7.2"
|
||||
},
|
||||
"bugs": "https://github.com/excalidraw/excalidraw/issues",
|
||||
"repository": "https://github.com/excalidraw/excalidraw",
|
||||
"homepage": "https://github.com/excalidraw/excalidraw/tree/master/src/packages/excalidraw",
|
||||
"scripts": {
|
||||
"gen:types": "tsc --project ../../../tsconfig-types.json",
|
||||
|
@@ -57,7 +57,7 @@ module.exports = {
|
||||
options: {
|
||||
presets: [
|
||||
"@babel/preset-env",
|
||||
"@babel/preset-react",
|
||||
["@babel/preset-react", { runtime: "automatic" }],
|
||||
"@babel/preset-typescript",
|
||||
],
|
||||
plugins: [
|
||||
|
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user