fix: convert cf-kv and excalidraw-libraries from submodules to regular files

- Remove stale cloudflare-worker submodule entry from .gitmodules
- Remove .git dirs from cf-kv and excalidraw-libraries so Git tracks them as regular files
- Fixes 'No url found for submodule path cf-kv' CI error
This commit is contained in:
Tomas Dvorak
2026-04-27 09:37:49 +02:00
parent 88c2969a96
commit 338dbcc20e
1488 changed files with 3359158 additions and 5 deletions
-3
View File
@@ -1,6 +1,3 @@
[submodule "cloudflare-worker"]
path = cloudflare-worker
url = https://github.com/betterandbetterii/cf-kv.git
[submodule "excalidraw"] [submodule "excalidraw"]
path = excalidraw path = excalidraw
url = git@github.com:BetterAndBetterII/excalidraw.git url = git@github.com:BetterAndBetterII/excalidraw.git
Submodule cf-kv deleted from ed0d7f3e1e
+137
View File
@@ -0,0 +1,137 @@
# Excalidraw Cloudflare Worker 部署指南 (Dashboard 版)
本文档将指导您如何通过 Cloudflare 的网页管理后台 (Dashboard) 部署 Excalidraw 后端服务。
该 Worker 使用 Cloudflare 的 Durable Objects 来持久化存储画布数据,为您提供一个高性能、可扩展的 Excalidraw 后端服务。
## 部署方法概述
我们提供两种通过 Cloudflare Dashboard 部署的方法:
1. **通过 Git 仓库部署 (推荐)**: 设置一次后,每当您更新代码到 Git 仓库时,Cloudflare 都会自动为您部署最新版本。这是实现 CI/CD 的最佳实践。
2. **手动复制粘贴代码**: 简单快速,适合一次性测试或不希望关联 Git 仓库的场景。每次更新都需要手动操作。
---
### 方法一:通过 Git 仓库部署 (推荐)
此方法将您的 GitHub 仓库与 Cloudflare 直接关联。
#### 第一步:Fork 仓库
1. 登录您的 GitHub 账户。
2. 访问 `excalidraw-complete` 项目仓库,并点击右上角的 **Fork** 按钮,将项目复刻到您自己的账户下。
#### 第二步:在 Cloudflare 中创建并连接应用
1. 登录到您的 [Cloudflare Dashboard](https://dash.cloudflare.com/)。
2. 在左侧导航栏中,选择 **Workers & Pages**
3. 点击 **Create application**,然后切换到 **Pages** 标签页,并点击 **Connect to Git**
4. 选择您刚刚 Fork 的项目仓库,并点击 **Begin setup**
#### 第三步:配置构建与部署
1. **Project name**: 为您的项目取一个名字。
2. **Production branch**: 选择 `main` 或者您 Fork 后的主分支。
3. **Build settings**:
- **Framework preset**: 设置为 `None`
- **Build command**: *留空*
- **Build output directory**: *留空*
- **Root Directory**: 点击 `(Advanced)` 展开,设置为 `cloudflare-worker`**这一步至关重要**,它告诉 Cloudflare 只部署该子目录下的 Worker。
4. 点击 **Save and Deploy**。Cloudflare 会开始第一次部署。
#### 第四步:配置 Worker 的环境变量与存储
首次部署完成后,我们需要为 Worker 添加必要的配置。
1. 在项目页面,点击 **Settings** 标签页。
2. **设置 API 密钥**:
- 选择子菜单中的 **Variables**
-**Secret Variables** 部分,点击 **Add secret variable**
- **Variable name**: `API_TOKEN`
- **Value**: 输入一个您自己创建的、足够复杂的安全密钥。**请务必保存好这个值**,前端配置时需要用到。
- 点击 **Save**
#### 第五步:重新部署以应用配置
为了让刚才的配置生效,需要触发一次新的部署。
1. 返回到项目的 **Deployments** 标签页。
2. 找到最新的那条部署记录,点击右侧的 **...** 菜单,选择 **Retry deployment**
部署成功后,在项目主页即可找到您的 Worker 访问 URL。
---
### 方法二:手动复制粘贴代码
此方法无需关联 Git 仓库,但每次更新代码都需要手动操作。
#### 第一步:获取 Worker 代码
1. 首先,将本项目克隆到您的本地电脑,以便获取 Worker 的源代码。
```bash
git clone https://github.com/your-username/excalidraw-complete.git
# 注意:请将 a-username/excalidraw-complete.git 替换为实际的项目仓库地址
```
2. 在您的电脑上找到并打开 `cloudflare-worker/index.js` 文件,将其中的所有代码复制到剪贴板。我们稍后会用到它。
#### 第二步:在 Cloudflare Dashboard 中创建 Worker
1. 登录到您的 [Cloudflare Dashboard](https://dash.cloudflare.com/)。
2. 在左侧导航栏中,选择 **Workers & Pages**。
3. 点击 **Create application**,然后选择 **Create Worker**。
4. 为您的 Worker 指定一个唯一的名称(例如 `my-excalidraw-backend`),然后点击 **Deploy**。
#### 第三步:粘贴并部署代码
1. 创建成功后,您会进入 Worker 的管理页面。点击 **Edit code**。
2. 在打开的代码编辑器中,删除所有的默认 "Hello World" 代码。
3. 将您在 **第一步** 中从 `index.js` 文件复制的代码,完整地粘贴到编辑器中。
4. 点击编辑器右上角的 **Save and Deploy** 按钮。
#### 第四步:设置 API 密钥 (Secret Variable)
1. 返回到您的 Worker 管理页面 (如果当前在代码编辑器,可以点击左上角 Worker 名称返回)。
2. 选择 **Settings** 标签页,然后点击子菜单中的 **Variables**。
3. 在 **Secret Variables** 部分,点击 **Add secret variable**。
4. 按如下方式填写:
- **Variable name**: `API_TOKEN`
- **Value**: 输入一个您自己创建的、足够复杂的安全密钥(例如,可以使用密码生成器创建一个长随机字符串)。**请务必保存好这个值,前端配置时需要用到。**
5. 点击 **Save**。
#### 第五步:配置持久化存储 (Durable Objects)
这是最关键的一步,它让您的 Worker 能够保存数据。
1. 在 Worker 的 **Settings** 标签页,点击子菜单中的 **Durable Objects**。
2. 点击 **Add binding**。
3. 按如下方式创建第一个绑定:
- **Binding name**: `CANVAS_OBJECT`
- **Durable Object class name**: `CanvasObject`
4. 再次点击 **Add binding**。
5. 按如下方式创建第二个绑定:
- **Binding name**: `INDEX_OBJECT`
- **Durable Object class name**: `IndexObject`
6. 完成后,页面上应该有两个 Durable Object 绑定。设置会自动保存。
#### 第六步:最终确认
设置完变量和存储后,建议返回代码编辑器,再次点击 **Save and Deploy**,以确保所有配置都已生效。
部署成功后,在 Worker 的主页面可以找到您的 Worker 的访问URL,格式为 `https://<your-worker-name>.<your-subdomain>.workers.dev`。
---
## 配置 Excalidraw 前端
现在,将您部署好的后端服务配置到 Excalidraw 前端:
1. 打开 Excalidraw 应用。
2. 进入设置或数据源配置界面。
3. 选择 "Cloudflare KV" 作为存储类型。
4. **API 地址**: 填入您在第六步获取的 Worker URL。
5. **API 令牌**: 填入您在第四步中设置的 `API_TOKEN` 值。
6. 保存配置。
恭喜!您的 Excalidraw 应用现在拥有了一个完全由您掌控、基于 Cloudflare 的强大后端。
+13
View File
@@ -0,0 +1,13 @@
name = "excalidraw-worker"
main = "index.js"
compatibility_date = "2023-08-01"
[durable_objects]
bindings = [
{ name = "CANVAS_OBJECT", class_name = "CanvasObject" },
{ name = "INDEX_OBJECT", class_name = "IndexObject" }
]
[[migrations]]
tag = "v1"
new_sqlite_classes = ["CanvasObject", "IndexObject"]
Submodule excalidraw-libraries deleted from e917feba06
+8
View File
@@ -0,0 +1,8 @@
version: 2
updates:
- package-ecosystem: npm
directory: /
schedule:
interval: weekly
day: sunday
time: "01:00"
@@ -0,0 +1,25 @@
name: Process libraries.json
on: pull_request
jobs:
item_names:
if: github.repository == 'excalidraw/excalidraw-libraries'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
token: ${{ secrets.EXCALIBOT_PAT_WORKFLOWS }}
ref: ${{ github.event.pull_request.head.ref }}
- name: regenrate-item-names
run: node scripts/gen-item-names.mjs
- name: Commit changes
run: |
FILE_CHANGED=$(git diff libraries.json)
if [ ! -z "${FILE_CHANGED}" ]; then
git config --global user.name 'Excalidraw Bot'
git config --global user.email 'bot@excalidraw.com'
git add .
git commit -am "regenerate itemNames"
git push
fi
@@ -0,0 +1,17 @@
name: Validate libraries.json
on: pull_request
jobs:
validation:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup Node.js 14.x
uses: actions/setup-node@v2
with:
node-version: 14.x
- name: Validate libraries.json
run: |
yarn validate:libraries
+8
View File
@@ -0,0 +1,8 @@
__pycache__
.DS_Store
*.pyc
*key.json
node_modules
yarn-error.log
venv
.vscode
+2
View File
@@ -0,0 +1,2 @@
libraries.json
stats
+21
View File
@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2020 Excalidraw
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
+35
View File
@@ -0,0 +1,35 @@
# Excalidraw Libraries
> Explore [libraries.excalidraw.com](https://libraries.excalidraw.com)
## Create your own library
1. Open [Excalidraw](https://excalidraw.com/) and draw some objects.
2. Optional: Make sure every object is it's own group (by selecting it and clicking "Group selection" or `Ctrl`+`G`).
3. Add each object you want in your library like so:
- Select the object
- Open the library menu (by clicking on the "library" button or typing `9`)
- The selected object should appear in a square. Click on it (you will see a `+` sign when hovering over it)
4. Still in the library menu, select the libraries you want to publish (hover over a library item and you should see a checkbox, clicking on which will select the library item).
5. Hit the publish button (in blue), and fill out the details.
![Gif showing how to add a single object and export the library](public/submit-lib-for-review.gif)
If you want to test your library file, use the "Load" button in the library menu to reimport it.
## Guidelines
1. Don't submit a library that's only for your personal use case, and will not be useful to others.
2. Don't submit items which are easy to create directly. For example, a single arrow or a square.
3. Don't republish (copy/paste) items from other libraries without making any significant changes.
4. We only accept libraries in English. This includes any texts/labels, and library description and titles. (In the future, we may accept other languages.)
5. In general, each item should be usable and stand on its own. (In the future we'll support filtering and installing items individually.)
6. In general, a library should be composed of at least 3 items, and the items should be related to each other (be in a single category).
7. If a library item consists of multiple elements, you should group them together so that the item acts as a single unit when inserting on canvas. Exception being templates or if you really think it works better if ungrouped.
Check out our existing [libraries](https://libraries.excalidraw.com/?theme=light&sort=default) to get started.
Once the library is submitted for review, changes may be requested if the guidelines above are not followed or the quality doesn't meet the standards of the published libraries.
File diff suppressed because it is too large Load Diff
+10
View File
@@ -0,0 +1,10 @@
{
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"client_email": "excalidraw-analytics@excalidraw-json.iam.gserviceaccount.com",
"client_id": "104002372002237021547",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/excalidraw-analytics%40excalidraw-json.iam.gserviceaccount.com",
"project_id": "excalidraw-json",
"token_uri": "https://oauth2.googleapis.com/token",
"type": "service_account"
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

+193
View File
@@ -0,0 +1,193 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta
name="viewport"
content="width=device-width, initial-scale=1.0, user-scalable=no"
/>
<!-- General tags -->
<meta
name="description"
content="A directory of public libraries that you can easily add to Excalidraw."
/>
<meta name="image" content="og-image.png" />
<!-- OpenGraph tags -->
<meta property="og:url" content="https://libraries.excalidraw.com" />
<meta property="og:site_name" content="Excalidraw" />
<meta property="og:type" content="website" />
<meta
property="og:title"
name="twitter:title"
content="Excalidraw Libraries"
/>
<meta
property="og:description"
name="twitter:description"
content="A directory of public libraries that you can easily add to Excalidraw."
/>
<!-- OG tags require an absolute url for images -->
<meta
property="og:image"
name="twitter:image"
content="https://excalidraw.com/og-image.png"
/>
<meta
property="og:image:secure_url"
name="twitter:image"
content="https://excalidraw.com/og-image.png"
/>
<meta property="og:image:width" content="1280" />
<meta property="og:image:height" content="669" />
<meta property="og:image:alt" content="Excalidraw logo with byline." />
<!-- Twitter Card tags -->
<meta name="twitter:card" content="summary_large_image" />
<title>Excalidraw Libraries</title>
<link
rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/open-color/1.7.0/open-color.min.css"
/>
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/normalize.css/normalize.min.css"
/>
<link rel="stylesheet" href="style.css" />
<link rel="icon" href="favicon.ico" />
<script
async
src="https://www.googletagmanager.com/gtag/js?id=UA-387204-13"
></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag("js", new Date());
gtag("config", "UA-387204-13");
window.trackEvent = function (category, name, label, value) {
window.gtag("event", name, {
event_category: category,
event_label: label,
value,
});
};
</script>
</head>
<body>
<nav>
<div id="theme">
<button id="dark" class="icon option">
<svg
width="512"
height="512"
className="rtl-mirror"
viewBox="0 0 512 512"
>
<path
fill="currentColor"
d="M283.211 512c78.962 0 151.079-35.925 198.857-94.792 7.068-8.708-.639-21.43-11.562-19.35-124.203 23.654-238.262-71.576-238.262-196.954 0-72.222 38.662-138.635 101.498-174.394 9.686-5.512 7.25-20.197-3.756-22.23A258.156 258.156 0 0 0 283.211 0c-141.309 0-256 114.511-256 256 0 141.309 114.511 256 256 256z"
></path>
</svg>
</button>
<button id="light" class="icon option is-hidden">
<svg
width="512"
height="512"
className="rtl-mirror"
viewBox="0 0 512 512"
>
<path
fill="currentColor"
d="M256 160c-52.9 0-96 43.1-96 96s43.1 96 96 96 96-43.1 96-96-43.1-96-96-96zm246.4 80.5l-94.7-47.3 33.5-100.4c4.5-13.6-8.4-26.5-21.9-21.9l-100.4 33.5-47.4-94.8c-6.4-12.8-24.6-12.8-31 0l-47.3 94.7L92.7 70.8c-13.6-4.5-26.5 8.4-21.9 21.9l33.5 100.4-94.7 47.4c-12.8 6.4-12.8 24.6 0 31l94.7 47.3-33.5 100.5c-4.5 13.6 8.4 26.5 21.9 21.9l100.4-33.5 47.3 94.7c6.4 12.8 24.6 12.8 31 0l47.3-94.7 100.4 33.5c13.6 4.5 26.5-8.4 21.9-21.9l-33.5-100.4 94.7-47.3c13-6.5 13-24.7.2-31.1zm-155.9 106c-49.9 49.9-131.1 49.9-181 0-49.9-49.9-49.9-131.1 0-181 49.9-49.9 131.1-49.9 181 0 49.9 49.9 49.9 131.1 0 181z"
></path>
</svg>
</button>
</div>
</nav>
<div class="content">
<header>
<h1>Excalidraw Libraries</h1>
<p class="lead">
A directory of public libraries that you can easily add to
<a href="https://excalidraw.com">Excalidraw</a>.
</p>
<p>
Follow the
<a
href="https://github.com/excalidraw/excalidraw-libs#create-your-own-library"
>instructions</a
>
if you want to <strong>add your own library</strong> into this list.
</p>
<p class="small">
All the following libraries are under
<a
href="https://github.com/excalidraw/excalidraw-libs/blob/main/LICENSE"
target="_license"
>MIT License</a
>.
</p>
<div id="sort">
<span id="sort-contents">Sort By </span>
<span id="sort-template" class="option">{label}</span>
</div>
<p class="search-container">
<input
type="search"
id="search-input"
placeholder="Search..."
autocorrect="off"
/>
<span class="search-tip"
>(tip: you can type anywhere to start searching)</span
>
</p>
</header>
<main>
<div class="library" id="template">
<img data-src="{preview}" alt="{name}" class="lazy" />
<h2>{name} <a aria-label="Anchor" href="#{libraryId}">#</a></h2>
<p class="authors">{authors}</p>
<p class="downloads">
<span title="Downloads ({week} this week)">⬇️ {total}</span>
</p>
<div class="dates">
<p class="created">Created: {created}</p>
<p class="updated">Updated: {updated}</p>
</div>
<p>{description}</p>
<div class="actions">
<a
class="btn primary install-library"
href="{addToLib}"
target="{target}"
onclick="trackEvent('library', 'import', '{libraryId}')"
>➡️ Add to {appName}</a
>
<a
class="btn"
href="{source}"
onclick="trackEvent('library', 'download', '{libraryId}')"
>⬇️ Download</a
>
</div>
</div>
</main>
<footer>
<div id="footer">
© {currentYear} <a href="https://excalidraw.com">Excalidraw</a>
<a href="https://github.com/excalidraw/excalidraw-libraries"
>Source Code</a
>
</div>
</footer>
</div>
<script src="script.js"></script>
</body>
</html>
+16
View File
@@ -0,0 +1,16 @@
var static = require("node-static");
var file = new static.Server(".");
PORT = 8080;
console.info(`Running at http://localhost:${PORT}`);
require("http")
.createServer(function (request, response) {
request
.addListener("end", function () {
file.serve(request, response);
})
.resume();
})
.listen(PORT);
+28
View File
@@ -0,0 +1,28 @@
import json
import os
ROOT_DIR = os.path.dirname(os.path.realpath(__file__))
TEMPLATE_FILE = os.path.join(ROOT_DIR, "excalidraw.json")
KEY_FILE = os.path.join(ROOT_DIR, "excalidraw-key.json")
def main():
if os.environ.get("ANALYTICS_PRIVATE_KEY") and os.environ.get(
"ANALYTICS_PRIVATE_KEY_ID"
):
with open(TEMPLATE_FILE, "r") as template:
data = json.load(template)
data["private_key"] = os.environ.get("ANALYTICS_PRIVATE_KEY").replace(
"\\n", "\n"
)
data["private_key_id"] = os.environ.get("ANALYTICS_PRIVATE_KEY_ID").replace(
"\\n", "\n"
)
with open(KEY_FILE, "w") as key:
json.dump(data, key, indent=2)
if __name__ == "__main__":
main()
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

@@ -0,0 +1,491 @@
{
"type": "excalidrawlib",
"version": 1,
"source": "https://excalidraw.com",
"library": [
[
{
"type": "line",
"version": 352,
"versionNonce": 1325309012,
"isDeleted": false,
"id": "iqrqW2NgRf6mb0yF7aVOj",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 2,
"opacity": 100,
"angle": 0,
"x": -2722.319359384574,
"y": -5353.016230369906,
"strokeColor": "#000000",
"backgroundColor": "#fff",
"width": 360.71428571428567,
"height": 378.57142857142867,
"seed": 1444239700,
"groupIds": [
"dg9O5K6lR8vUjvW0PVZkt"
],
"strokeSharpness": "sharp",
"boundElementIds": [],
"startBinding": null,
"endBinding": null,
"lastCommittedPoint": null,
"startArrowhead": null,
"endArrowhead": null,
"points": [
[
0,
0
],
[
196.42857142857133,
57.142857142857224
],
[
359.28571428571433,
-22.857142857142776
],
[
360.71428571428567,
-282.8571428571428
],
[
166.42857142857133,
-321.42857142857144
],
[
3.571428571428555,
-261.42857142857144
],
[
0,
0
]
]
},
{
"type": "line",
"version": 2793,
"versionNonce": 453444332,
"isDeleted": false,
"id": "jX3to5irzTwpxkjslfx0E",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 2,
"opacity": 100,
"angle": 0,
"x": -2526.335097441627,
"y": -5557.924475349634,
"strokeColor": "#000000",
"backgroundColor": "#fab005",
"width": 162.0688925161958,
"height": 338.7435370705099,
"seed": 1132893676,
"groupIds": [
"QSlst3QBKFU5g-wVMP9FH",
"Ic6wZspA6B-zpSvFKZukF",
"dg9O5K6lR8vUjvW0PVZkt"
],
"strokeSharpness": "sharp",
"boundElementIds": [],
"startBinding": null,
"endBinding": null,
"lastCommittedPoint": null,
"startArrowhead": null,
"endArrowhead": null,
"points": [
[
0,
0
],
[
162.0688925161958,
-78.74353707050989
],
[
162.0688925161958,
181.25646292949017
],
[
0,
260
],
[
0,
0
]
]
},
{
"type": "line",
"version": 2868,
"versionNonce": 1058009556,
"isDeleted": false,
"id": "lfSNEEwZnssEW8jrrdJJy",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 2,
"opacity": 100,
"angle": 0,
"x": -2723.1131836689087,
"y": -5614.821910354105,
"strokeColor": "#000000",
"backgroundColor": "#fab005",
"width": 200,
"height": 320,
"seed": 239537876,
"groupIds": [
"dg9O5K6lR8vUjvW0PVZkt"
],
"strokeSharpness": "sharp",
"boundElementIds": [],
"startBinding": null,
"endBinding": null,
"lastCommittedPoint": null,
"startArrowhead": null,
"endArrowhead": null,
"points": [
[
0,
0
],
[
196.77808622728162,
56.91481450817912
],
[
200,
320
],
[
0,
260
],
[
0,
0
]
]
},
{
"type": "line",
"version": 3102,
"versionNonce": 1870644588,
"isDeleted": false,
"id": "U4zxUUitR78bk0KZMOxnM",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 2,
"opacity": 100,
"angle": 0,
"x": -2718.364324513226,
"y": -5615.484210249061,
"strokeColor": "#000000",
"backgroundColor": "#fff",
"width": 253.75000000000003,
"height": 136.875,
"seed": 680851564,
"groupIds": [
"hZeiQTYrZDprn83_F4dF-",
"_lYCByIOBkXhqN_72JS3O",
"dg9O5K6lR8vUjvW0PVZkt"
],
"strokeSharpness": "sharp",
"boundElementIds": [],
"startBinding": null,
"endBinding": null,
"lastCommittedPoint": null,
"startArrowhead": null,
"endArrowhead": null,
"points": [
[
0,
0
],
[
188.125,
56.24999999999999
],
[
134.375,
136.875
],
[
-65.62500000000003,
76.875
],
[
0,
0
]
]
},
{
"type": "line",
"version": 3085,
"versionNonce": 492476244,
"isDeleted": false,
"id": "JlCqy9CJcySOWq9zsbLnG",
"fillStyle": "cross-hatch",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 2,
"opacity": 100,
"angle": 0,
"x": -2717.6500387989404,
"y": -5612.627067391919,
"strokeColor": "#000000",
"backgroundColor": "#fab005",
"width": 253.75000000000003,
"height": 136.875,
"seed": 296096852,
"groupIds": [
"mnhLgw1qrymjxAOZ5ahLV",
"PDMEVZsHZFfrNtQtV2lWO",
"dg9O5K6lR8vUjvW0PVZkt"
],
"strokeSharpness": "sharp",
"boundElementIds": [],
"startBinding": null,
"endBinding": null,
"lastCommittedPoint": null,
"startArrowhead": null,
"endArrowhead": null,
"points": [
[
0,
0
],
[
188.125,
56.24999999999999
],
[
134.375,
136.875
],
[
-65.62500000000003,
76.875
],
[
0,
0
]
]
},
{
"type": "line",
"version": 3823,
"versionNonce": 1824274412,
"isDeleted": false,
"id": "YjTCehxrSxego09GHjp9o",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 2,
"opacity": 100,
"angle": 0,
"x": -2529.7279545844845,
"y": -5552.835189635349,
"strokeColor": "#000000",
"backgroundColor": "#fff",
"width": 221.25,
"height": 157.50000000000006,
"seed": 1387465452,
"groupIds": [
"rGU2GLNSCMO3tKuNvjU3n",
"TVjxv0xXfcIpvfO-f0NHp",
"dg9O5K6lR8vUjvW0PVZkt"
],
"strokeSharpness": "sharp",
"boundElementIds": [],
"startBinding": null,
"endBinding": null,
"lastCommittedPoint": null,
"startArrowhead": null,
"endArrowhead": null,
"points": [
[
0,
0
],
[
163.12500000000006,
-76.87500000000006
],
[
221.25,
0.6250000000000142
],
[
61.25000000000004,
80.62499999999999
],
[
0,
0
]
]
},
{
"type": "line",
"version": 3389,
"versionNonce": 1983155412,
"isDeleted": false,
"id": "wMputt8Us1BWWNABq3abQ",
"fillStyle": "cross-hatch",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 2,
"opacity": 100,
"angle": 0,
"x": -2527.585097441627,
"y": -5558.549475349634,
"strokeColor": "#000000",
"backgroundColor": "#fab005",
"width": 221.25,
"height": 157.50000000000006,
"seed": 772303316,
"groupIds": [
"Qy7CiJhOgllQb6XKa9vg_",
"LUuHP3N9Blothhe2R-uGm",
"dg9O5K6lR8vUjvW0PVZkt"
],
"strokeSharpness": "sharp",
"boundElementIds": [],
"startBinding": null,
"endBinding": null,
"lastCommittedPoint": null,
"startArrowhead": null,
"endArrowhead": null,
"points": [
[
0,
0
],
[
163.12500000000006,
-76.87500000000006
],
[
221.25,
0.6250000000000142
],
[
61.25000000000004,
80.62499999999999
],
[
0,
0
]
]
},
{
"type": "line",
"version": 229,
"versionNonce": 516315756,
"isDeleted": false,
"id": "xyWc6kNhI6PnMEtz3AIWl",
"fillStyle": "cross-hatch",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 2,
"opacity": 100,
"angle": 0,
"x": -2557.930068120284,
"y": -5675.748192851869,
"strokeColor": "#000000",
"backgroundColor": "#865d00",
"width": 162.5,
"height": 111.24999999999994,
"seed": 1684721004,
"groupIds": [
"dg9O5K6lR8vUjvW0PVZkt"
],
"strokeSharpness": "sharp",
"boundElementIds": [],
"startBinding": null,
"endBinding": null,
"lastCommittedPoint": null,
"startArrowhead": null,
"endArrowhead": null,
"points": [
[
0,
0
],
[
0,
109.37499999999994
],
[
-162.5,
63.12499999999996
],
[
-1.25,
-1.875000000000001
]
]
},
{
"type": "line",
"version": 448,
"versionNonce": 1530122836,
"isDeleted": false,
"id": "XDR5ONufswBOS5KMzh5vm",
"fillStyle": "cross-hatch",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 2,
"opacity": 100,
"angle": 5.802881141749248,
"x": -2535.5203900460456,
"y": -5704.944263401726,
"strokeColor": "#000000",
"backgroundColor": "#865d00",
"width": 201.0407289346865,
"height": 121.45558860303547,
"seed": 109317972,
"groupIds": [
"dg9O5K6lR8vUjvW0PVZkt"
],
"strokeSharpness": "sharp",
"boundElementIds": [],
"startBinding": null,
"endBinding": null,
"lastCommittedPoint": null,
"startArrowhead": null,
"endArrowhead": null,
"points": [
[
0,
0
],
[
151.9301696138384,
121.45558860303547
],
[
-26.006183055816685,
116.34996415840338
],
[
-49.110559320848125,
97.61781970755419
],
[
0,
0
]
]
}
]
]
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

@@ -0,0 +1,939 @@
{
"type": "excalidrawlib",
"version": 2,
"source": "https://excalidraw.com",
"libraryItems": [
{
"status": "published",
"elements": [
{
"type": "line",
"version": 606,
"versionNonce": 1806826507,
"isDeleted": false,
"id": "QkkQNQc8tikXnfF9qtiW2",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 1283.286587701607,
"y": 210.66142194722244,
"strokeColor": "#862e9c",
"backgroundColor": "#be4bdb",
"width": 33.76112398118283,
"height": 43.3736285736783,
"seed": 1653664741,
"groupIds": [],
"roundness": null,
"boundElements": null,
"updated": 1681974096479,
"link": null,
"locked": false,
"lastCommittedPoint": null,
"startArrowhead": null,
"endArrowhead": null,
"points": [
[
0,
0
],
[
16.88056199059141,
43.3736285736783
],
[
-16.880561990591417,
43.3736285736783
],
[
0,
0
]
]
}
],
"id": "y6NAXmhJ_hPoozJzXbh_J",
"created": 1681974172437,
"name": "Pronoun"
},
{
"status": "published",
"elements": [
{
"type": "line",
"version": 464,
"versionNonce": 180747973,
"isDeleted": false,
"id": "fyKrjFvnhAa0_E7__nP5n",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 1343.9561192779204,
"y": 210.66142194722244,
"strokeColor": "#000000",
"backgroundColor": "#ffffff",
"width": 50.08352891402634,
"height": 43.37362857367831,
"seed": 1195100421,
"groupIds": [],
"roundness": null,
"boundElements": null,
"updated": 1681974096479,
"link": null,
"locked": false,
"lastCommittedPoint": null,
"startArrowhead": null,
"endArrowhead": null,
"points": [
[
0,
0
],
[
25.041764457013166,
43.3736285736783
],
[
-25.041764457013173,
43.37362857367831
],
[
0,
0
]
]
}
],
"id": "xcRe1rbJpoDbQ36hDkijw",
"created": 1681974167475,
"name": "Noun"
},
{
"status": "published",
"elements": [
{
"type": "line",
"version": 870,
"versionNonce": 1568923173,
"isDeleted": false,
"id": "z61umjW3H1Q3l1vPEi93J",
"fillStyle": "cross-hatch",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 1402.2553580042859,
"y": 220.6218909870184,
"strokeColor": "#3333ff",
"backgroundColor": "#3333ff",
"width": 38.58217531377394,
"height": 33.41315953388234,
"seed": 91057222,
"groupIds": [],
"roundness": null,
"boundElements": [],
"updated": 1681974096479,
"link": null,
"locked": false,
"lastCommittedPoint": null,
"startArrowhead": null,
"endArrowhead": null,
"points": [
[
0,
0
],
[
19.291087656886972,
33.413159533882336
],
[
-19.291087656886965,
33.41315953388234
],
[
0,
0
]
]
}
],
"id": "GBqxrXCDZkll5tipx2Viv",
"created": 1681974164162,
"name": "Adjective"
},
{
"status": "published",
"elements": [
{
"type": "line",
"version": 994,
"versionNonce": 332153515,
"isDeleted": false,
"id": "w2wydgyPjGyfbv3CBZUzR",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 1450.2971094642073,
"y": 234.90429981125817,
"strokeColor": "#aaaaff",
"backgroundColor": "#aaaaff",
"width": 22.09027784442426,
"height": 19.13075070964256,
"seed": 91057222,
"groupIds": [],
"roundness": null,
"boundElements": [],
"updated": 1681974096480,
"link": null,
"locked": false,
"lastCommittedPoint": null,
"startArrowhead": null,
"endArrowhead": null,
"points": [
[
0,
0
],
[
11.04513892221213,
19.130750709642555
],
[
-11.04513892221213,
19.13075070964256
],
[
0,
0
]
]
}
],
"id": "sk1TPkUXItXTXoesgkx76",
"created": 1681974161850,
"name": "Article"
},
{
"status": "published",
"elements": [
{
"type": "ellipse",
"version": 1133,
"versionNonce": 269406597,
"isDeleted": false,
"id": "aUNdJXemBjg2Ga0_Nze34",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 1475.237941822308,
"y": 210.36713231851695,
"strokeColor": "#ff0000",
"backgroundColor": "#ff0000",
"width": 44.3179103101242,
"height": 44.3179103101242,
"seed": 1342514795,
"groupIds": [],
"roundness": {
"type": 2
},
"boundElements": null,
"updated": 1681974096480,
"link": null,
"locked": false
}
],
"id": "IRQwY2D95sr2kDxVEf7hd",
"created": 1681974159794,
"name": "Noun"
},
{
"status": "published",
"elements": [
{
"type": "ellipse",
"version": 623,
"versionNonce": 1512355147,
"isDeleted": false,
"id": "Ph8bNNLueR7GvKANHIb8q",
"fillStyle": "cross-hatch",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 1532.0394820216336,
"y": 234.3124333154434,
"strokeColor": "#fd7e14",
"backgroundColor": "#fd7e14",
"width": 20.372609313197753,
"height": 20.372609313197753,
"seed": 1548352101,
"groupIds": [],
"roundness": {
"type": 2
},
"boundElements": [],
"updated": 1681974096480,
"link": null,
"locked": false
}
],
"id": "TtCBKny8C4-lXvs5t3qXZ",
"created": 1681974157655,
"name": "Adverb"
},
{
"status": "published",
"elements": [
{
"type": "line",
"version": 4180,
"versionNonce": 799678091,
"isDeleted": false,
"id": "P_Jf0Pd08Yj4M6vEuJX5b",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 0,
"opacity": 100,
"angle": 0,
"x": 1567.223749821362,
"y": 253.6943722232566,
"strokeColor": "#40c057",
"backgroundColor": "#40c057",
"width": 24.2179549408595,
"height": 13.501788907147457,
"seed": 643760549,
"groupIds": [],
"roundness": {
"type": 2
},
"boundElements": [],
"updated": 1681974096480,
"link": "",
"locked": false,
"startBinding": null,
"endBinding": null,
"lastCommittedPoint": null,
"startArrowhead": null,
"endArrowhead": null,
"points": [
[
0,
0
],
[
3.767424182397008,
-9.390934391958524
],
[
12.66942403246277,
-13.501788907147457
],
[
20.425558532167543,
-10.101655309518037
],
[
24.2179549408595,
-0.8398579704555686
],
[
23.79505159595078,
-0.5665946466531864
],
[
19.179909694590606,
-5.967347624157185
],
[
12.862456755575522,
-8.169792390033308
],
[
5.684512943606023,
-5.853810691966515
],
[
0,
0
]
]
}
],
"id": "Q_Zvx6H6sU6GK-yTdPjYZ",
"created": 1681974155454,
"name": "Preposition"
},
{
"status": "published",
"elements": [
{
"type": "rectangle",
"version": 878,
"versionNonce": 1336170725,
"isDeleted": false,
"id": "DfZz72McPJ2KBE2Y8YmDt",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 1607.2370141137337,
"y": 246.3861641157501,
"strokeColor": "#868e96",
"backgroundColor": "#868e96",
"width": 26.754770231708267,
"height": 8.298878512891067,
"seed": 1873778347,
"groupIds": [],
"roundness": {
"type": 3
},
"boundElements": [],
"updated": 1681974096480,
"link": null,
"locked": false
}
],
"id": "joDYmFfDAdrG6qfG1Bthn",
"created": 1681974153112,
"name": "Conjunction"
},
{
"status": "published",
"elements": [
{
"type": "line",
"version": 1317,
"versionNonce": 773182443,
"isDeleted": false,
"id": "9ED_giyKjjEwl0UGgrOdI",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 3.141592653589793,
"x": 1658.715745210574,
"y": 211.22227014565408,
"strokeColor": "#00dd00",
"backgroundColor": "#00dd00",
"width": 27.313664216021046,
"height": 35.09044092703098,
"seed": 91057222,
"groupIds": [
"Ikt06_8CduQeGIKFWWrq3"
],
"roundness": null,
"boundElements": [],
"updated": 1681974096480,
"link": null,
"locked": false,
"lastCommittedPoint": null,
"startArrowhead": null,
"endArrowhead": null,
"points": [
[
0,
0
],
[
13.656832108010521,
35.09044092703098
],
[
-13.656832108010526,
35.09044092703098
],
[
0,
0
]
]
},
{
"type": "ellipse",
"version": 1393,
"versionNonce": 1171387461,
"isDeleted": false,
"id": "OwrlyDiOlbN_nbqr7_MMk",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 3.141592653589793,
"x": 1650.7953180762008,
"y": 237.49035992234417,
"strokeColor": "#00dd00",
"backgroundColor": "#00dd00",
"width": 17.194682706296962,
"height": 17.194682706296962,
"seed": 1548352101,
"groupIds": [
"Ikt06_8CduQeGIKFWWrq3"
],
"roundness": {
"type": 2
},
"boundElements": [],
"updated": 1681974096480,
"link": null,
"locked": false
}
],
"id": "5UMzsOIQ0GUFghCjSeEwn",
"created": 1681974151099,
"name": "Interjection"
},
{
"status": "published",
"elements": [
{
"type": "line",
"version": 464,
"versionNonce": 180747973,
"isDeleted": false,
"id": "fyKrjFvnhAa0_E7__nP5n",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 1343.9561192779204,
"y": 210.66142194722244,
"strokeColor": "#000000",
"backgroundColor": "#ffffff",
"width": 50.08352891402634,
"height": 43.37362857367831,
"seed": 1195100421,
"groupIds": [],
"roundness": null,
"boundElements": null,
"updated": 1681974096479,
"link": null,
"locked": false,
"lastCommittedPoint": null,
"startArrowhead": null,
"endArrowhead": null,
"points": [
[
0,
0
],
[
25.041764457013166,
43.3736285736783
],
[
-25.041764457013173,
43.37362857367831
],
[
0,
0
]
]
},
{
"type": "line",
"version": 606,
"versionNonce": 1806826507,
"isDeleted": false,
"id": "QkkQNQc8tikXnfF9qtiW2",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 1283.286587701607,
"y": 210.66142194722244,
"strokeColor": "#862e9c",
"backgroundColor": "#be4bdb",
"width": 33.76112398118283,
"height": 43.3736285736783,
"seed": 1653664741,
"groupIds": [],
"roundness": null,
"boundElements": null,
"updated": 1681974096479,
"link": null,
"locked": false,
"lastCommittedPoint": null,
"startArrowhead": null,
"endArrowhead": null,
"points": [
[
0,
0
],
[
16.88056199059141,
43.3736285736783
],
[
-16.880561990591417,
43.3736285736783
],
[
0,
0
]
]
},
{
"type": "line",
"version": 870,
"versionNonce": 1568923173,
"isDeleted": false,
"id": "z61umjW3H1Q3l1vPEi93J",
"fillStyle": "cross-hatch",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 1402.2553580042859,
"y": 220.6218909870184,
"strokeColor": "#3333ff",
"backgroundColor": "#3333ff",
"width": 38.58217531377394,
"height": 33.41315953388234,
"seed": 91057222,
"groupIds": [],
"roundness": null,
"boundElements": [],
"updated": 1681974096479,
"link": null,
"locked": false,
"lastCommittedPoint": null,
"startArrowhead": null,
"endArrowhead": null,
"points": [
[
0,
0
],
[
19.291087656886972,
33.413159533882336
],
[
-19.291087656886965,
33.41315953388234
],
[
0,
0
]
]
},
{
"type": "line",
"version": 994,
"versionNonce": 332153515,
"isDeleted": false,
"id": "w2wydgyPjGyfbv3CBZUzR",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 1450.2971094642073,
"y": 234.90429981125817,
"strokeColor": "#aaaaff",
"backgroundColor": "#aaaaff",
"width": 22.09027784442426,
"height": 19.13075070964256,
"seed": 91057222,
"groupIds": [],
"roundness": null,
"boundElements": [],
"updated": 1681974096480,
"link": null,
"locked": false,
"lastCommittedPoint": null,
"startArrowhead": null,
"endArrowhead": null,
"points": [
[
0,
0
],
[
11.04513892221213,
19.130750709642555
],
[
-11.04513892221213,
19.13075070964256
],
[
0,
0
]
]
},
{
"type": "ellipse",
"version": 1133,
"versionNonce": 269406597,
"isDeleted": false,
"id": "aUNdJXemBjg2Ga0_Nze34",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 1475.237941822308,
"y": 210.36713231851695,
"strokeColor": "#ff0000",
"backgroundColor": "#ff0000",
"width": 44.3179103101242,
"height": 44.3179103101242,
"seed": 1342514795,
"groupIds": [],
"roundness": {
"type": 2
},
"boundElements": null,
"updated": 1681974096480,
"link": null,
"locked": false
},
{
"type": "ellipse",
"version": 623,
"versionNonce": 1512355147,
"isDeleted": false,
"id": "Ph8bNNLueR7GvKANHIb8q",
"fillStyle": "cross-hatch",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 1532.0394820216336,
"y": 234.3124333154434,
"strokeColor": "#fd7e14",
"backgroundColor": "#fd7e14",
"width": 20.372609313197753,
"height": 20.372609313197753,
"seed": 1548352101,
"groupIds": [],
"roundness": {
"type": 2
},
"boundElements": [],
"updated": 1681974096480,
"link": null,
"locked": false
},
{
"type": "rectangle",
"version": 878,
"versionNonce": 1336170725,
"isDeleted": false,
"id": "DfZz72McPJ2KBE2Y8YmDt",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 1607.2370141137337,
"y": 246.3861641157501,
"strokeColor": "#868e96",
"backgroundColor": "#868e96",
"width": 26.754770231708267,
"height": 8.298878512891067,
"seed": 1873778347,
"groupIds": [],
"roundness": {
"type": 3
},
"boundElements": [],
"updated": 1681974096480,
"link": null,
"locked": false
},
{
"type": "line",
"version": 1317,
"versionNonce": 773182443,
"isDeleted": false,
"id": "9ED_giyKjjEwl0UGgrOdI",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 3.141592653589793,
"x": 1658.715745210574,
"y": 211.22227014565408,
"strokeColor": "#00dd00",
"backgroundColor": "#00dd00",
"width": 27.313664216021046,
"height": 35.09044092703098,
"seed": 91057222,
"groupIds": [
"Ikt06_8CduQeGIKFWWrq3"
],
"roundness": null,
"boundElements": [],
"updated": 1681974096480,
"link": null,
"locked": false,
"lastCommittedPoint": null,
"startArrowhead": null,
"endArrowhead": null,
"points": [
[
0,
0
],
[
13.656832108010521,
35.09044092703098
],
[
-13.656832108010526,
35.09044092703098
],
[
0,
0
]
]
},
{
"type": "ellipse",
"version": 1393,
"versionNonce": 1171387461,
"isDeleted": false,
"id": "OwrlyDiOlbN_nbqr7_MMk",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 3.141592653589793,
"x": 1650.7953180762008,
"y": 237.49035992234417,
"strokeColor": "#00dd00",
"backgroundColor": "#00dd00",
"width": 17.194682706296962,
"height": 17.194682706296962,
"seed": 1548352101,
"groupIds": [
"Ikt06_8CduQeGIKFWWrq3"
],
"roundness": {
"type": 2
},
"boundElements": [],
"updated": 1681974096480,
"link": null,
"locked": false
},
{
"type": "line",
"version": 4180,
"versionNonce": 799678091,
"isDeleted": false,
"id": "P_Jf0Pd08Yj4M6vEuJX5b",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 0,
"opacity": 100,
"angle": 0,
"x": 1567.223749821362,
"y": 253.6943722232566,
"strokeColor": "#40c057",
"backgroundColor": "#40c057",
"width": 24.2179549408595,
"height": 13.501788907147457,
"seed": 643760549,
"groupIds": [],
"roundness": {
"type": 2
},
"boundElements": [],
"updated": 1681974096480,
"link": "",
"locked": false,
"startBinding": null,
"endBinding": null,
"lastCommittedPoint": null,
"startArrowhead": null,
"endArrowhead": null,
"points": [
[
0,
0
],
[
3.767424182397008,
-9.390934391958524
],
[
12.66942403246277,
-13.501788907147457
],
[
20.425558532167543,
-10.101655309518037
],
[
24.2179549408595,
-0.8398579704555686
],
[
23.79505159595078,
-0.5665946466531864
],
[
19.179909694590606,
-5.967347624157185
],
[
12.862456755575522,
-8.169792390033308
],
[
5.684512943606023,
-5.853810691966515
],
[
0,
0
]
]
}
],
"id": "G24pKLdps-d-ugwaIE7hj",
"created": 1681974148871,
"name": "All Symbols"
}
]
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

@@ -0,0 +1,357 @@
{
"type": "excalidrawlib",
"version": 2,
"source": "https://excalidraw.com",
"libraryItems": [
{
"status": "published",
"elements": [
{
"id": "Uluiqw08oo8Mls40ra_4E",
"type": "ellipse",
"x": 1226.6857638888896,
"y": 465.3394097222224,
"width": 155.54253472222206,
"height": 37.11371527777783,
"angle": 0,
"strokeColor": "#000000",
"backgroundColor": "#ced4da",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [
"oY_3Nr1ZhYMXooDGqC6dr"
],
"strokeSharpness": "sharp",
"seed": 896850279,
"version": 247,
"versionNonce": 1652111815,
"isDeleted": false,
"boundElements": null,
"updated": 1639665156472
},
{
"id": "_1xf_DCmDpOu3YhNN9zcR",
"type": "line",
"x": 1227.6319444444437,
"y": 321.3984375000001,
"width": 157.8862847222224,
"height": 163.75,
"angle": 0,
"strokeColor": "#ced4da",
"backgroundColor": "#ced4da",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [
"oY_3Nr1ZhYMXooDGqC6dr"
],
"strokeSharpness": "sharp",
"seed": 211752585,
"version": 329,
"versionNonce": 136669737,
"isDeleted": false,
"boundElements": null,
"updated": 1639665156472,
"points": [
[
0,
0
],
[
-0.24305555555567082,
162.33506944444446
],
[
157.64322916666674,
162.33940972222229
],
[
157.0355902777776,
-1.4105902777777146
],
[
0,
0
]
],
"lastCommittedPoint": [
5.203993055555429,
1.3541666666666283
],
"startBinding": null,
"endBinding": null,
"startArrowhead": null,
"endArrowhead": null
},
{
"id": "UVpRSlx3eEY424r_6CflU",
"type": "ellipse",
"x": 1227.3281250000007,
"y": 301.92361111111137,
"width": 155.54253472222206,
"height": 37.11371527777783,
"angle": 0,
"strokeColor": "#000000",
"backgroundColor": "#f6f7f7",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [
"oY_3Nr1ZhYMXooDGqC6dr"
],
"strokeSharpness": "sharp",
"seed": 1752534633,
"version": 252,
"versionNonce": 115108071,
"isDeleted": false,
"boundElements": null,
"updated": 1639665156472
},
{
"id": "Xy4Pgz0zq8qczjoHkzlEU",
"type": "line",
"x": 1227.8446180555547,
"y": 321.6979166666669,
"width": 0.6553819444445708,
"height": 165.72916666666669,
"angle": 0,
"strokeColor": "#000000",
"backgroundColor": "#ced4da",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [
"oY_3Nr1ZhYMXooDGqC6dr"
],
"strokeSharpness": "sharp",
"seed": 2127186377,
"version": 96,
"versionNonce": 841497865,
"isDeleted": false,
"boundElements": null,
"updated": 1639665156472,
"points": [
[
0,
0
],
[
-0.6553819444445708,
165.72916666666669
]
],
"lastCommittedPoint": [
-0.6553819444445708,
165.72916666666669
],
"startBinding": null,
"endBinding": null,
"startArrowhead": null,
"endArrowhead": null
},
{
"id": "paIu1VP_TKYiBjjGYNGQO",
"type": "line",
"x": 1385.5095486111102,
"y": 320.73003472222246,
"width": 1.3454861111110858,
"height": 164.96093749999994,
"angle": 0,
"strokeColor": "#000000",
"backgroundColor": "#ced4da",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [
"oY_3Nr1ZhYMXooDGqC6dr"
],
"strokeSharpness": "sharp",
"seed": 634996903,
"version": 82,
"versionNonce": 290239495,
"isDeleted": false,
"boundElements": null,
"updated": 1639665156472,
"points": [
[
0,
0
],
[
-1.3454861111110858,
164.96093749999994
]
],
"lastCommittedPoint": [
-1.3454861111110858,
164.96093749999994
],
"startBinding": null,
"endBinding": null,
"startArrowhead": null,
"endArrowhead": null
}
],
"id": "cYFPr9pqC5ah8DUpuHzFB",
"created": 1639665256530,
"name": "cylinder"
},
{
"status": "published",
"elements": [
{
"type": "rectangle",
"version": 992,
"versionNonce": 165444167,
"isDeleted": false,
"id": "UdVfgzBU4vx55zfzlXiRC",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 960.1518571948504,
"y": 309.1371541519091,
"strokeColor": "#000000",
"backgroundColor": "#ced4da",
"width": 149.4516123225035,
"height": 144.44558481290744,
"seed": 1173400907,
"groupIds": [
"9zXV3JHLXsAy2U9k7iZM9"
],
"strokeSharpness": "sharp",
"boundElements": [],
"updated": 1639665149614
},
{
"id": "LkTGsq57AVAXxwtcujX2H",
"type": "line",
"x": 959.6414930555554,
"y": 299.19694138966975,
"width": 201.18186309985137,
"height": 55.99878822840045,
"angle": 0,
"strokeColor": "#000000",
"backgroundColor": "#f6f7f7",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [
"9zXV3JHLXsAy2U9k7iZM9"
],
"strokeSharpness": "sharp",
"seed": 866247527,
"version": 720,
"versionNonce": 1811181993,
"isDeleted": false,
"boundElements": null,
"updated": 1639665149614,
"points": [
[
1.3766765505351941e-14,
7.7424244012370345
],
[
49.606954201710124,
-46.66232638888887
],
[
201.1818630998514,
-44.37500917587292
],
[
147.8118580340633,
9.336461839511543
],
[
1.3766765505351941e-14,
7.7424244012370345
]
],
"lastCommittedPoint": [
2.096354166666515,
1.545138888888914
],
"startBinding": null,
"endBinding": null,
"startArrowhead": null,
"endArrowhead": null
},
{
"id": "e90rxIdAjTL9LIXO1d94o",
"type": "line",
"x": 1112.5259772164939,
"y": 299.4633199766158,
"width": 55.20823274450421,
"height": 202.03044994830466,
"angle": 0,
"strokeColor": "#000000",
"backgroundColor": "#868e96",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [
"9zXV3JHLXsAy2U9k7iZM9"
],
"strokeSharpness": "sharp",
"seed": 428539975,
"version": 573,
"versionNonce": 1359190375,
"isDeleted": false,
"boundElements": null,
"updated": 1639665149614,
"points": [
[
0.08774850397276168,
4.290365270691709
],
[
-0.7118055555556424,
155.45058883719338
],
[
54.496427188948545,
99.25728528181914
],
[
50.20613711343065,
-46.57986111111131
],
[
0.08774850397276168,
4.290365270691709
]
],
"lastCommittedPoint": [
-2.8819444444445708,
-0.030381944444457076
],
"startBinding": null,
"endBinding": null,
"startArrowhead": null,
"endArrowhead": null
}
],
"id": "3M29R_uo9XKNvV7D5Ach3",
"created": 1639665250820,
"name": "cube"
}
]
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 630 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 269 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

@@ -0,0 +1,135 @@
{
"type": "excalidrawlib",
"version": 2,
"source": "https://excalidraw.com",
"libraryItems": [
{
"id": "Bi5IYJCZVsUtXXSWpl6GS",
"status": "published",
"elements": [
{
"type": "rectangle",
"version": 241,
"versionNonce": 1688763260,
"isDeleted": false,
"id": "3eJW8gsXvtDIqlbvPfDNR",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 30,
"angle": 0,
"x": -23.552619971269564,
"y": 1626.733943922924,
"strokeColor": "#000000",
"backgroundColor": "#868e96",
"width": 1195.6900014622402,
"height": 722.1850620092732,
"seed": 1343948356,
"groupIds": [
"BstW35pIvTnBPoC1iYtET"
],
"strokeSharpness": "sharp",
"boundElements": [],
"updated": 1658698590195,
"link": null,
"locked": false
},
{
"type": "rectangle",
"version": 222,
"versionNonce": 1959529028,
"isDeleted": false,
"id": "F0q1p2t19SjH3DFT2nFXw",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 50,
"angle": 0,
"x": -21.41970464069374,
"y": 1628.334709053316,
"strokeColor": "#000000",
"backgroundColor": "#000000",
"width": 26.964624211667562,
"height": 721.8615319135084,
"seed": 397570044,
"groupIds": [
"BstW35pIvTnBPoC1iYtET"
],
"strokeSharpness": "round",
"boundElements": [],
"updated": 1658698590195,
"link": null,
"locked": false
}
],
"created": 1658698592467,
"name": "long code block"
},
{
"status": "published",
"elements": [
{
"id": "vPrOmJmv7ET2QBS7CT5b5",
"type": "rectangle",
"x": 161.37357152723462,
"y": 631.8509371120954,
"width": 1258.5465159804908,
"height": 136.84508526077863,
"angle": 0,
"strokeColor": "#000000",
"backgroundColor": "#868e96",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 30,
"groupIds": [
"AUnkH112P4dwY_gayvOTP"
],
"strokeSharpness": "round",
"seed": 1084702588,
"version": 105,
"versionNonce": 1755179332,
"isDeleted": false,
"boundElements": null,
"updated": 1658698465059,
"link": null,
"locked": false
},
{
"id": "udGP4tas1S6a0Sx4c34yR",
"type": "rectangle",
"x": 163.61861259548334,
"y": 633.5358532486305,
"width": 24.89998486778279,
"height": 136.4519170754495,
"angle": 0,
"strokeColor": "#000000",
"backgroundColor": "#000000",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 50,
"groupIds": [
"AUnkH112P4dwY_gayvOTP"
],
"strokeSharpness": "round",
"seed": 903151940,
"version": 82,
"versionNonce": 1736654076,
"isDeleted": false,
"boundElements": null,
"updated": 1658698465059,
"link": null,
"locked": false
}
],
"id": "oYDD9VcDze1Gxpxg4QX13",
"created": 1658698503687,
"name": "short code block"
}
]
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 123 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 265 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

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