Compare commits

..

455 Commits

Author SHA1 Message Date
Arnošt Pleskot
7e7d3e0514 Revert "feat: rewrite preview to use React.Suspense"
This reverts commit cd021716f1.
2023-09-25 12:50:03 +02:00
Arnošt Pleskot
cd021716f1 feat: rewrite preview to use React.Suspense 2023-09-22 18:45:03 +02:00
Arnošt Pleskot
22fde9d808 feat: prevent flickering before when switching type of background 2023-09-21 21:19:40 +02:00
Arnošt Pleskot
13ea98e2e5 fix: returned initial appState, added missing constant 2023-09-21 10:18:05 +02:00
Arnošt Pleskot
8b9dd3c422 docs: couple of comments 2023-09-21 10:18:04 +02:00
Arnošt Pleskot
9f17998427 feat: content background type by constant 2023-09-21 10:18:02 +02:00
Arnošt Pleskot
f6cb510f6a fix: take padding for logo from constant 2023-09-21 10:18:01 +02:00
Arnošt Pleskot
04295d7096 feat: move aspect ratio into constant 2023-09-21 10:17:51 +02:00
Arnošt Pleskot
5afa3fe31d Merge branch 'master' of github.com:excalidraw/excalidraw into arnost/export-image-background 2023-09-20 10:11:45 +02:00
Arnošt Pleskot
6957398364 feat: replace multiple useState with useReduce in export dialog 2023-09-19 17:52:13 +02:00
Arnošt Pleskot
fff2b6ea19 fix: making linter happy 2023-09-19 17:51:32 +02:00
Aakansha Doshi
0a588a880b docs: release @excalidraw/excalidraw@0.16.0 🎉 (#6993) 2023-09-19 19:59:53 +05:30
David Luzar
3d617958cc fix: improperly disabling UI pointer-events on canvas interaction (#7005)
Co-authored-by: Aakansha Doshi <aakansha1216@gmail.com>
2023-09-19 16:01:40 +02:00
Aakansha Doshi
99dbc0acb9 docs: Add docs for Excalidraw Element Skeleton (#6879)
* docs: Add docs for Excalidraw Element Skeleton

* fix

* upgrade package

* tweaks

* fix

* tweak

* Update dev-docs/docs/@excalidraw/excalidraw/api/excalidraw-element-skeleton.mdx

Co-authored-by: David Luzar <luzar.david@gmail.com>

* fix

---------

Co-authored-by: David Luzar <luzar.david@gmail.com>
2023-09-19 18:28:53 +05:30
David Luzar
4b11f43117 feat: zen-mode/go-to-plus button style tweaks (#7006) 2023-09-19 14:20:59 +02:00
Arnošt Pleskot
bb847e391c feat: reuse dropdown instead of radix select 2023-09-18 23:14:33 +02:00
Arnošt Pleskot
c578e4b640 fix: scale selector 2023-09-18 17:24:57 +02:00
zsviczian
e3f4f567b8 feat: holding down CMD/CTRL will disable snap to grid when grid is active (#6983)
Co-authored-by: dwelle <luzar.david@gmail.com>
2023-09-18 17:10:28 +02:00
Arnošt Pleskot
22b58e68ec fix: disable frame clip on export with fancy bcg 2023-09-18 14:32:05 +02:00
Arnošt Pleskot
c8180308c2 fix: respect clip frame during exports 2023-09-18 14:10:09 +02:00
Arnošt Pleskot
0c4d6fbe95 fix: proper canvas size on frame export 2023-09-18 12:01:44 +02:00
Alex Kim
eb020d0410 fix: generic element's labels not flipping with them (#6967) 2023-09-17 13:26:02 +02:00
David Luzar
c1952fd6cc fix: several eyeDropper fixes (#7002) 2023-09-17 13:24:50 +02:00
Igor Berlenko
1f94f204dd fix: isBindableElement to affirm frames (#6900)
fix isBindableElement to affirm frames
2023-09-15 16:15:06 -05:00
David Luzar
a34216f9fc docs: new Sidebar API (#6976)
Co-authored-by: Aakansha Doshi <aakansha1216@gmail.com>
2023-09-15 13:03:23 +00:00
David Luzar
c9efb12e5b fix: use device.isMobile for sidebar trigger label breakpoint (#6994) 2023-09-15 12:08:51 +00:00
Arnošt Pleskot
2e1da5537d feat: use new logo 2023-09-14 23:36:54 +02:00
Aakansha Doshi
d73cd14dfb docs: add mermaid docs (#6971)
* docs: add mermaid docs

* fix link

* add development.mdx

* add codebase

* add parseEdge

* add subgraph

* convertors

* tweaks

* structure the codebase

* add docs for new diagram type

* decouple docs for flowchart parser

* fix broken links

* use diagram instead of chart

* revert package.json

* tweaks

* point root folder of mermaid-to-excalidraw to installation

* remove installation from sidebar children

* fix link

* update flowchart parser diagram

* update parser overview diagram

* update more diagrams

* remove note about change in element stroke

* update diagram

* increase size limit for excalidraw production bundle

* tweaks

* add link

* move codebase after introduction

* dummy

---------

Co-authored-by: dwelle <luzar.david@gmail.com>
2023-09-13 21:01:34 +05:30
David Luzar
6abf194281 fix: export to plus url (#6980) 2023-09-11 21:13:16 +00:00
David Luzar
5302490372 feat: update logo (#6979) 2023-09-11 17:47:41 +02:00
Arnošt Pleskot
4331be0f5b feat: add missing param to actionExport 2023-09-11 09:23:09 +02:00
DanielJGeiger
4a9adc703a feat: export changeProperty() and getFormValue(). (#6957) 2023-09-09 08:13:15 -05:00
Arnošt Pleskot
d80d81cc61 Merge branch 'arnost/export-image-background' of github.com:excalidraw/excalidraw into arnost/export-image-background 2023-09-08 00:20:47 +02:00
Arnošt Pleskot
47de794c44 fix: frame export with fancy background 2023-09-08 00:13:57 +02:00
Arnošt Pleskot
75cd5c20b6 fix: ImageExportDialog on mobile 2023-09-07 18:32:24 +02:00
Rajnikant dash
56c21529db docs: Adding the json Schema to the documentation (#6817)
Co-authored-by: Rajni2002 <rajnikant.dash@everlytics.com>
Co-authored-by: dwelle <luzar.david@gmail.com>
2023-09-07 12:43:37 +02:00
Marcel Mraz
a13aed92f2 fix: z-index inconsistencies during addition / deletion in frames (#6914)
Co-authored-by: Marcel Mraz <marcel.mraz@adacta-fintech.com>
Co-authored-by: dwelle <luzar.david@gmail.com>
2023-09-06 22:41:44 +00:00
Aakansha Doshi
134df7bfbb fix: update size-limit so react is not installed as dependency (#6964) 2023-09-06 10:39:04 +05:30
dwelle
17de9725d0 add radius to fancy background 2023-09-05 22:58:49 +02:00
Alex Kim
5191cdbe26 fix: stale labeled arrow bounds cache after editing the label (#6893)
* fix stale labeled arrow bounds cache after editing the label

* add arrow bounds test

* fix test to check the arrow version

* fix

* fix test - remove unused import

* Update src/element/textWysiwyg.test.tsx

---------

Co-authored-by: Aakansha Doshi <aakansha1216@gmail.com>
2023-09-05 21:20:27 +05:30
Arnošt Pleskot
33e031c9fa feat: set logo via constant 2023-09-05 15:29:02 +02:00
David Luzar
27fd150a20 fix: canvas flickering due to resetting canvas on skipped frames (#6960) 2023-09-05 12:06:48 +02:00
Arnošt Pleskot
0189120f79 feat: logo in svg 2023-08-31 23:10:51 +02:00
Arnošt Pleskot
bcd239b91a fix: export into svg without logo 2023-08-31 16:53:14 +02:00
Arnošt Pleskot
db622871f0 feat: use tmp logo 2023-08-30 15:33:28 +02:00
Arnošt Pleskot
4b5ce5283b fix: position of background and content on y axis 2023-08-30 14:49:25 +02:00
Arnošt Pleskot
97ff1222d9 chore: unite usage of normalizedCanvasDimensions and canvasDimensions 2023-08-30 10:05:34 +02:00
Arnošt Pleskot
95baf540f2 fix: proper scaling (none) for fancyBackground in svg export 2023-08-30 09:57:23 +02:00
Arnošt Pleskot
8ac95a713b fix: logo in dark svg 2023-08-29 23:12:32 +02:00
Arnošt Pleskot
ab9c85cd2b feat: clean console.logs 2023-08-29 15:25:58 +02:00
Arnošt Pleskot
425f1a5461 fix: padding 2023-08-29 15:04:02 +02:00
Arnošt Pleskot
780af522a2 feat: add logo into export 2023-08-28 10:21:37 +02:00
zsviczian
188921c247 fix: grid jittery after partition PR (#6935) 2023-08-27 19:30:47 +02:00
Arnošt Pleskot
9caa05825d feat: centered content bcg on svg export 2023-08-24 15:48:22 +02:00
Arnošt Pleskot
a76aa5f7a1 fix: preview size when maxWidthOrHeight is hit 2023-08-23 16:03:09 +02:00
Arnošt Pleskot
ae8d62f5c9 fix: proper background centering on scaled image 2023-08-23 14:05:03 +02:00
Arnošt Pleskot
7795d1aaef feat: solid background position in roundRect fallback 2023-08-23 00:50:40 +02:00
Arnošt Pleskot
38fd4fb165 feat: center and scale solid background on top of fancyBackground 2023-08-23 00:42:31 +02:00
Arnošt Pleskot
e00764a937 feat: center content in canvas expanded to aspect ratio 2023-08-22 21:33:04 +02:00
Arnošt Pleskot
c49bf04801 feat: resize canvas to aspect ratio when exporting with fancy bcg 2023-08-22 17:59:25 +02:00
Arnošt Pleskot
4eabb8d021 test: fix selector in tests 2023-08-21 10:40:50 +02:00
Arnošt Pleskot
4c2831bb8f test: update snapshots 2023-08-21 09:59:27 +02:00
Arnošt Pleskot
26cd98efb1 feat: correct path in SVG exports for production 2023-08-21 09:52:48 +02:00
Arnošt Pleskot
06ae04c0be fix: correct border radius in SVG 2023-08-18 19:10:39 +02:00
Arnošt Pleskot
5ff4e0d640 fix: cleanup after rebase 2023-08-18 19:00:38 +02:00
Arnošt Pleskot
c2870a6df5 fix: upscaling behavior after change of background 2023-08-18 17:44:48 +02:00
Arnošt Pleskot
8b86ef4c60 fix: padding in preview 2023-08-18 17:44:47 +02:00
Arnošt Pleskot
f096841add feat: show original labels in the scale radio group 2023-08-18 17:44:46 +02:00
Arnošt Pleskot
dc0744a140 feat: scale fancyBackground radius and shadow 2023-08-18 17:44:45 +02:00
Arnošt Pleskot
1f62bd8c67 fix: add missing hook dependency 2023-08-18 17:44:44 +02:00
Arnošt Pleskot
4c8cf9c91c feat: scale up small exports with fancy background 2023-08-18 17:44:41 +02:00
Arnošt Pleskot
d27856a967 chore: use width/height instead of w/h in Dimensions type 2023-08-18 17:43:38 +02:00
Arnošt Pleskot
a216e7cce4 fix: remove unused import 2023-08-18 17:43:37 +02:00
Arnošt Pleskot
9aa83da376 feat: recover background image from appState in ImageExportDialog 2023-08-18 17:43:36 +02:00
Arnošt Pleskot
787f5d68cf feat: dark theme export background 2023-08-18 17:43:33 +02:00
Arnošt Pleskot
baa133cbb7 feat: add dark export image backgrounds 2023-08-18 17:41:06 +02:00
Arnošt Pleskot
e8cc787edc feat: fancyBackgrounds in svg 2023-08-18 17:41:03 +02:00
Arnošt Pleskot
94f20566d1 feat: scale padding 2023-08-18 17:38:56 +02:00
Arnošt Pleskot
d4d9ecf6c6 feat: simplify the rendering 2023-08-18 17:38:52 +02:00
Arnošt Pleskot
77e88c09b8 fix: don't open export image dialog on load 2023-08-18 17:36:22 +02:00
Arnošt Pleskot
6edcb99c89 feat: center content 2023-08-18 17:36:21 +02:00
Arnošt Pleskot
b77b7ccce1 feat: use elements dimensions for scaling 2023-08-18 17:36:20 +02:00
Arnošt Pleskot
c731bd13b6 feat: update renderConfig to move and scale content 2023-08-18 17:36:15 +02:00
Arnošt Pleskot
70c7185f32 feat: export background => fancy background 2023-08-18 17:32:31 +02:00
Arnošt Pleskot
d6515e26b9 feat: separate fancyBackground from renderScene 2023-08-18 17:32:11 +02:00
Arnošt Pleskot
3c56efb9fe feat: hide background image select when background is not checked 2023-08-18 17:24:48 +02:00
Arnošt Pleskot
a289e36397 feat: async renderScene 2023-08-18 17:24:39 +02:00
David Luzar
de1ebad755 fix: regression in indexing when adding elements to frame (#6904) 2023-08-18 16:34:01 +02:00
David Luzar
9cd5e15917 fix: stabilize selectedElementIds when box selecting (#6912) 2023-08-18 16:14:57 +02:00
Arnošt Pleskot
5d9d2afcb7 fix: initial state 2023-08-18 13:51:21 +02:00
Arnošt Pleskot
6e7c302974 feat: export with solid color only 2023-08-18 13:50:57 +02:00
Arnošt Pleskot
67573ba079 feat: render backgrounds with rounded corners 2023-08-18 13:48:05 +02:00
Arnošt Pleskot
f57cd7e2d5 feat: select the export bcg image and bcg color from appState 2023-08-18 13:47:11 +02:00
Arnošt Pleskot
f15417f864 feat: render svg background on export 2023-08-18 13:43:36 +02:00
Arnošt Pleskot
53b4885b0a feat: update export dialog 2023-08-18 12:20:13 +02:00
David Luzar
8101a351db fix: resetting deleted elements on duplication (#6906) 2023-08-18 00:28:26 +02:00
dependabot[bot]
49e9a2ab33 build(deps): bump @excalidraw/excalidraw from 0.15.2 to 0.15.3 in /dev-docs (#6896)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-17 13:47:32 +02:00
David Luzar
d140d1b8b3 fix: make canvas compos memoize appState on props they declare (#6897) 2023-08-17 13:39:15 +02:00
zsviczian
1bd416002c fix: scope --color-selection retrieval to given instance (#6886)
Co-authored-by: dwelle <luzar.david@gmail.com>
2023-08-16 21:59:37 +00:00
dependabot[bot]
991f5570ce build(deps): bump word-wrap from 1.2.3 to 1.2.5 (#6892)
Bumps [word-wrap](https://github.com/jonschlinkert/word-wrap) from 1.2.3 to 1.2.5.
- [Release notes](https://github.com/jonschlinkert/word-wrap/releases)
- [Commits](https://github.com/jonschlinkert/word-wrap/compare/1.2.3...1.2.5)

---
updated-dependencies:
- dependency-name: word-wrap
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-16 16:11:43 +05:30
dependabot[bot]
3cf8259e71 build(deps): bump semver from 6.3.0 to 6.3.1 in /src/packages/utils (#6755)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-16 11:38:36 +02:00
dependabot[bot]
9b727025fd build(deps): bump semver from 6.3.0 to 6.3.1 in /src/packages/excalidraw (#6754)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-16 11:38:16 +02:00
dependabot[bot]
59b53eb9cb build(deps): bump protobufjs from 6.11.3 to 6.11.4 (#6890)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-16 11:25:31 +02:00
David Luzar
9e0bfd178e refactor: factor out shape generation from renderElement.ts pt 2 (#6878) 2023-08-14 13:52:25 +02:00
Rahul
c29f19a88b perf: Limiting the suggested binding to fix performance issue (#6877) 2023-08-14 13:11:08 +02:00
Aakansha Doshi
2b14a5c233 build: increase limit for bundle by 1kb (#6880) 2023-08-14 15:47:18 +05:30
Marcel Mraz
a376bd9495 feat: partition main canvas vertically (#6759)
Co-authored-by: Marcel Mraz <marcel.mraz@adacta-fintech.com>
Co-authored-by: dwelle <luzar.david@gmail.com>
2023-08-12 22:56:59 +02:00
Aakansha Doshi
3ea07076ad feat: support creating containers, linear elements, text containers, labelled arrows and arrow bindings programatically (#6546)
* feat: support creating text containers programatically

* fix

* fix

* fix

* fix

* update api to use label

* fix api and support individual shapes and text element

* update test case in package example

* support creating arrows and line

* support labelled arrows

* add in package example

* fix alignment

* better types

* fix

* keep element as is unless we support prog api

* fix tests

* fix lint

* ignore

* support arrow bindings via start and end in api

* fix lint

* fix coords

* support id as well for elements

* preserve bindings if present and fix testcases

* preserve bindings for labelled arrows

* support ids, clean up code and move the api related stuff to transform.ts

* allow multiple arrows to bind to single element

* fix singular elements

* fix single text element, unique id and tests

* fix lint

* fix

* support binding arrow to text element

* fix creation of regular text

* use same stroke color as parent for text containers and height 0 for linear element by default

* fix types

* fix

* remove more ts ignore

* remove ts ignore

* remove

* Add coverage script

* Add tests

* fix tests

* make type optional when id present

* remove type when id provided in tests

* Add more tests

* tweak

* let host call convertToExcalidrawElements when using programmatic API

* remove convertToExcalidrawElements call from restore

* lint

* update snaps

* Add new type excalidraw-api/clipboard for programmatic api

* cleanup

* rename tweak

* tweak

* make image attributes optional and better ts check

* support image via programmatic API

* fix lint

* more types

* make fileId mandatory for image and export convertToExcalidrawElements

* fix

* small tweaks

* update snaps

* fix

* use Object.assign instead of mutateElement

* lint

* preserve z-index by pushing all elements first and then add bindings

* instantiate instead of closure for storing elements

* use element API to create regular text, diamond, ellipse and rectangle

* fix snaps

* udpdate api

* ts fixes

* make `convertToExcalidrawElements` more typesafe

* update snaps

* refactor the approach so that order of elements doesn't matter

* Revert "update snaps"

This reverts commit 621dfadccf.

* review fixes

* rename ExcalidrawProgrammaticElement -> ExcalidrawELementSkeleton

* Add tests

* give preference to first element when duplicate ids found

* use console.error

---------

Co-authored-by: dwelle <luzar.david@gmail.com>
2023-08-09 16:41:15 +05:30
Jezreel Maldonado
ded0222e8d docs: add note for tests that have requisites (#6856)
Co-authored-by: David Luzar <luzar.david@gmail.com>
2023-08-05 09:51:50 +00:00
zsviczian
e7983bc493 fix: webpack config exclude statement to system agnostic (#6857) 2023-08-05 11:49:57 +02:00
David Luzar
083bcf802c fix: remove embeddable from generic elements (#6853) 2023-08-04 15:16:55 +02:00
Alex Kim
bb985eba3a fix: resizing arrow labels (#6789)
* fix arrow labels resizing

- min arrow labels width based on font size
- labels width and padding in % of container's width
- resize labels simply multiplying by scale

* remove no longer needed getContainerDims

* fix arrow labels font size not updated on change font size action

* fix bound arrows not updated right after resize

* fix test

* fix 3+ point arrow label resizing with shift

* fix bound text not scaling when resizing with shift & n or s handle

* fix arrow labels width not updating when moving a 2-point arrow point with shift

---------

Co-authored-by: Aakansha Doshi <aakansha1216@gmail.com>
2023-08-02 15:34:21 +05:30
dependabot[bot]
23c88a38d0 build(deps): bump semver from 5.7.1 to 5.7.2 in /dev-docs (#6757)
Bumps [semver](https://github.com/npm/node-semver) from 5.7.1 to 5.7.2.
- [Release notes](https://github.com/npm/node-semver/releases)
- [Changelog](https://github.com/npm/node-semver/blob/v5.7.2/CHANGELOG.md)
- [Commits](https://github.com/npm/node-semver/compare/v5.7.1...v5.7.2)

---
updated-dependencies:
- dependency-name: semver
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-01 16:14:08 +05:30
Aakansha Doshi
b85d5fa12b test: add coverage report for PR (#6840)
* test: add coverage report for PR

* gh token

* fix

* fix

* add reporter

* fix

* enable v8 for coverage

* no watch

* test

* add threshold

* fix

* change name so the action isn't required

* change job name

* rename job so it doesn't collid with test required check

* remove log
2023-08-01 16:13:04 +05:30
dependabot[bot]
9391a09e54 build(deps): bump word-wrap from 1.2.3 to 1.2.5 (#6811)
Bumps [word-wrap](https://github.com/jonschlinkert/word-wrap) from 1.2.3 to 1.2.5.
- [Release notes](https://github.com/jonschlinkert/word-wrap/releases)
- [Commits](https://github.com/jonschlinkert/word-wrap/compare/1.2.3...1.2.5)

---
updated-dependencies:
- dependency-name: word-wrap
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-01 11:07:16 +05:30
Ives van Hoorne
50450a7dab chore: update required node version to 18 (#6837) 2023-07-31 23:47:41 +02:00
David Luzar
fc9a9a2571 fix: eye-dropper not working with app offset correctly on non-1 dPR (#6835) 2023-07-31 16:36:30 +02:00
Aakansha Doshi
6126c34dc0 fix: add self destroying service-worker.js to migrate everyone from CRA to Vite (#6833)
* fix: add self destroying service-worker.js to migrate everyone from CRA to VITE

* add comment

* don't add service-worker.js to app pre-cache
2023-07-31 19:56:50 +05:30
David Luzar
12e37e3dd2 fix: forgotten REACT_APP env variables (#6834) 2023-07-31 15:29:24 +02:00
Benjamin André-Micolon
9ca27c62c7 feat: add support for simplePDF in Web-Embeds (#6810) 2023-07-29 10:02:15 +02:00
Achille Lacoin
1acc646534 feat: add support for val.town embeds (#6821) 2023-07-28 16:55:40 +02:00
Aakansha Doshi
66bac50de3 fix: refresh sw when browser refreshed (#6824)
* fix: refresh sw when browser refreshed

* dummy test

* enable immediate reload

* test

* fix

* autoupdate

* don't immediate

* test

* testing testing

* test

* test

* its same

* revert logs

* fix types

---------
2023-07-28 20:17:24 +05:30
Aakansha Doshi
5dd1efde8a build: update to node 18 in docker (#6822) 2023-07-28 12:06:33 +05:30
Arnost Pleskot
a7c590d459 feat: render bold lines in grid (#6779)
Co-authored-by: dwelle <luzar.david@gmail.com>
2023-07-27 22:41:44 +00:00
Aakansha Doshi
48924688c7 build: migrate to Vite 🚀 (#6818)
* init

* add: vite dev build working

* fix: href serving from public

* feat: add ejs plugin

* feat: migrated env files and ejs templating

* chore: add types related to envs

* chore: add vite-env types

* feat: support vite pwa

* chore: upgrade vite pwa

* chore: pin node version to 16.18.1

* chore: preserve use of nodejs 14

* refactor: preserve REACT_APP as env prefix

* chore: support esm environment variables

* fix ts config

* use VITE prefix and remove vite-plugin-env-compatible

* introduce import-meta-loader for building pacakge as webpack isn't compatible with import.meta syntax

* lint

* remove import.meta.env in main.js

* set debug flag to false

* migrate to vitest and use jest-canvas-mock 2.4.0 so its comp
atible with vite

* integrate vitest-ui

* fix most of teh test

* snaps

* Add script for testing with vite ui

* fix all tests related to mocking

* fix more test

* fix more

* fix flip.test.tsx

* fix contentxmenu snaps

* fix regression snaps

* fix excalidraw.test.tsx and this makes all tests finally pass :)

* use node 16

* specify node version

* use node 16 in lint as well

* fix mobile.test.tsx

* use node 16

* add style-loader

* upgrade to node 18

* fix lint package.json

* support eslint with vite

* fix lint

* fix lint

* fix ts

* remove pwa/sw stuff

* use env vars in EJS the vite way

* fix lint

* move remainig jest mock/spy to vite

* don't cache locales

* fix regex

* add fonts cache

* tweak

* add custom service worker

* upgrade vite and create font cache again

* cache fonts.css and locales

* tweak

* use manifestTransforms for filtering locales

* use assets js pattern for locales

* add font.css to globIgnore so its pushed to fonts cache

* create a separate chunk for locales with rollup

* remove manifestTransforms and fix glob pattern for locales to filter from workbox pre-cache

* push sourcemaps in production

* add comments in config

* lint

* use node 18

* disable pwa in dev

* fix

* fix

* increase limit of bundle

* upgrade vite-pwa to latest

* remove public/workbox so workbox assets are not precached

* fon't club en.json and percentages.json with manual locales chunk to fix first load+offline mode

* tweak regex

* remove happy-dom as its not used

* add comment

* use any instead of ts-ignore

* cleanup

* remove jest-canvas-mock resolution as vite-canvas-mock was patched locking deps at 2.4.0

* use same theme color present in entry point

* remove vite-plugin-eslint as it improves DX significantly

* integrate vite-plugin-checker for ts errors

* add nabla/vite-plugin-eslint

* use eslint from checker only

* add env variable VITE_APP_COLLAPSE_OVERLAY for collapsing the checker overlay

* tweak vite checker overlay badge position

* Enable eslint behind flag as its not working well with windows with non WSL

* make port configurable

* open the browser when server ready

* enable eslint by default

---------

Co-authored-by: Weslley Braga <weslley@bambee.com>
Co-authored-by: dwelle <luzar.david@gmail.com>
2023-07-27 23:50:11 +05:30
David Luzar
8af9ea3cf3 fix: adding to selection via shift box-select (#6815) 2023-07-27 12:50:08 +02:00
Max Kovalenko
cbd908097f chore: typo - Collab.ts (#6812) 2023-07-26 23:30:25 +02:00
David Luzar
c1247742ea fix: prevent binding focus NaN value (#6803)
Co-authored-by: Aakansha Doshi <aakansha1216@gmail.com>
2023-07-26 23:28:11 +02:00
Aakansha Doshi
8104068bd5 revert: "build: Migrate to Vite 🚀" (#6814)
Revert "build: Migrate to Vite 🚀 (#6713)"

This reverts commit e93bbc5776.
2023-07-26 22:34:06 +05:30
Tomek Sułkowski
dcc75ed007 feat: adds support for stackblitz.com embeds (#6813)
feat: adds stackblitz.com embeds
2023-07-26 21:01:18 +05:30
Aakansha Doshi
e93bbc5776 build: Migrate to Vite 🚀 (#6713)
* init

* add: vite dev build working

* fix: href serving from public

* feat: add ejs plugin

* feat: migrated env files and ejs templating

* chore: add types related to envs

* chore: add vite-env types

* feat: support vite pwa

* chore: upgrade vite pwa

* chore: pin node version to 16.18.1

* chore: preserve use of nodejs 14

* refactor: preserve REACT_APP as env prefix

* chore: support esm environment variables

* fix ts config

* use VITE prefix and remove vite-plugin-env-compatible

* introduce import-meta-loader for building pacakge as webpack isn't compatible with import.meta syntax

* lint

* remove import.meta.env in main.js

* set debug flag to false

* migrate to vitest and use jest-canvas-mock 2.4.0 so its comp
atible with vite

* integrate vitest-ui

* fix most of teh test

* snaps

* Add script for testing with vite ui

* fix all tests related to mocking

* fix more test

* fix more

* fix flip.test.tsx

* fix contentxmenu snaps

* fix regression snaps

* fix excalidraw.test.tsx and this makes all tests finally pass :)

* use node 16

* specify node version

* use node 16 in lint as well

* fix mobile.test.tsx

* use node 16

* add style-loader

* upgrade to node 18

* fix lint package.json

* support eslint with vite

* fix lint

* fix lint

* fix ts

* remove pwa/sw stuff

* use env vars in EJS the vite way

* fix lint

* move remainig jest mock/spy to vite

* don't cache locales

* fix regex

* add fonts cache

* tweak

* add custom service worker

* upgrade vite and create font cache again

* cache fonts.css and locales

* tweak

* use manifestTransforms for filtering locales

* use assets js pattern for locales

* add font.css to globIgnore so its pushed to fonts cache

* create a separate chunk for locales with rollup

* remove manifestTransforms and fix glob pattern for locales to filter from workbox pre-cache

* push sourcemaps in production

* add comments in config

* lint

* use node 18

* disable pwa in dev

* fix

* fix

* increase limit of bundle

* upgrade vite-pwa to latest

* remove public/workbox so workbox assets are not precached

* fon't club en.json and percentages.json with manual locales chunk to fix first load+offline mode

* tweak regex

* remove happy-dom as its not used

* add comment

* use any instead of ts-ignore

* cleanup

* remove jest-canvas-mock resolution as vite-canvas-mock was patched locking deps at 2.4.0

* use same theme color present in entry point

---------

Co-authored-by: Weslley Braga <weslley@bambee.com>
Co-authored-by: dwelle <luzar.david@gmail.com>
2023-07-26 15:55:20 +05:30
Aakansha Doshi
2a2495175b build: increase limit to 290 kB for prod bundle (#6809) 2023-07-26 08:49:39 +05:30
zsviczian
b57b3b573d feat: introducing Web-Embeds (alias iframe element) (#6691)
Co-authored-by: dwelle <luzar.david@gmail.com>
2023-07-24 16:51:53 +02:00
Aakansha Doshi
744e5b2ab3 fix: use pull request in semantic workflow for better security (#6799)
* fix: use pull request in semantic workflow for security

* add types
2023-07-24 13:01:42 +05:30
Guilherme Minozzi
d36c72c435 fix: don't show canvasBackground label when UIOptions.canvasActions.changeViewBackgroundColor is false (#6781)
* fix(components/main-menu): not show canvasBackground

* chore(components/main-menu): add data-testid attr to canvasBackground label

* test(tests/packages/excalidraw): check whether canvasbackground label is rendered when changeviewbackground is false

* test: update snapshots

* fix(tests/packages/excalidraw): change to lowercase canvas background test id

* change to pull request target for size-limit

* Revert "change to pull request target for size-limit"

This reverts commit baf1ca2677.

* Add test

---------

Co-authored-by: Aakansha Doshi <aakansha1216@gmail.com>
2023-07-24 12:33:54 +05:30
Aakansha Doshi
e57dc405fa chore: add style-loader as deps instead of using from react-scripts (#6791) 2023-07-21 13:48:48 +05:30
Aakansha Doshi
41ed019bc2 chore: remove size-limit deps from root package.json (#6790)
* chore: remove size-limit deps from root package.json

* add size limit preset
2023-07-21 13:35:20 +05:30
Ajay Kumbhare
f7c3644342 refactor: add typeScript support to enforce valid translation keys (#6776) 2023-07-20 18:15:32 +02:00
Aakansha Doshi
5e3550fc14 ci: structured build output from size-limit (#6788)
* ci: better build output from size-limit

* add size-limit.json

* try with pull request target

* fix

* revert pull request target
2023-07-20 13:54:13 +05:30
Aakansha Doshi
70888327a3 fix: use subdirectory for @excalidraw/excalidraw size limit (#6787)
* fix: use subdirectory for @excalidraw/excalidraw size limit

* fix

* update yml

* update path

* fix

* fix

* better
2023-07-19 22:07:18 +05:30
Aakansha Doshi
9fc15d81a0 ci: introduce bundle size for package @excalidraw/excalidraw (#6785)
* ci: update bundle size limit

* change the size script to track bundle size on the package excalidraw

* fix build command

* fix

* remove

* fix

* update script

* fix
2023-07-19 21:19:10 +05:30
Aakansha Doshi
a80ac4c748 ci: add bundle size limit action (#6783)
* ci: add bundle size limit action

* chore: fix lint

* ci: fix

* ci: fix workflow

* ci: fix workflow

* add size limit deps

* use node 18

---------

Co-authored-by: Nitin Kumar <nitin.kumar@razorpay.com>
2023-07-19 13:55:50 +05:30
David Luzar
9f76f8677b feat: cache most of element selection (#6747) 2023-07-17 01:09:44 +02:00
David Luzar
2e46e27490 fix: use actual dock state to not close docked library on insert (#6766) 2023-07-14 20:21:02 +02:00
David Luzar
cf0413338e feat: support customizing what parts of frames are rendered (#6752) 2023-07-10 17:13:44 +02:00
David Luzar
49e4289878 feat: make appState.selectedElementIds more stable (#6745) 2023-07-08 23:33:34 +02:00
zsviczian
3ddcc48e4c fix: UI disappears when pressing the eyedropper shortcut on mobile (#6725) 2023-06-29 12:39:44 +02:00
Barnabás Molnár
29a5e982c3 feat: support scrollToContent opts.fitToViewport (#6581)
Co-authored-by: dwelle <luzar.david@gmail.com>
Co-authored-by: Arnošt Pleskot <arnostpleskot@gmail.com>
2023-06-29 12:36:38 +02:00
Christopher Chedeau
b33fa6d6f6 fix: stronger enforcement of normalizeLink (#6728)
Co-authored-by: dwelle <luzar.david@gmail.com>
2023-06-29 12:14:42 +02:00
Ryan Di
b7350f9707 fix: elements in non-existing frame getting removed (#6708)
Co-authored-by: dwelle <luzar.david@gmail.com>
2023-06-22 22:10:08 +00:00
David Luzar
8dfa2a98bb fix: scrollbars renders but disable (#6706) 2023-06-22 14:35:01 +02:00
Wu Kai
fb01ce2a00 fix: typo in chart.ts (#6696)
fix: typo
2023-06-21 11:43:37 +05:30
Excalidraw Bot
3d57112480 chore: Update translations from Crowdin (#6677) 2023-06-19 17:10:09 +02:00
Are
7558a4e2be feat: overwrite confirmation dialogs (#6658)
Co-authored-by: dwelle <luzar.david@gmail.com>
2023-06-19 17:08:12 +02:00
Aakansha Doshi
6d56634289 fix: do not bind text to container using text tool when it has text already (#6694)
* fix: do not bind text to container using text tool when it has text already

* Update src/element/textWysiwyg.test.tsx
2023-06-19 17:28:45 +05:30
Milos Vetesnik
0aa1e66486 feat: simple analitycs (#6683)
* Simple analytics for iframe and webpage

* added logic for tracking specific categories of events to reduce it

* enviroment vars clean up

* fix: lint for index.html
2023-06-19 11:18:28 +02:00
Aakansha Doshi
7f7128ec09 fix: don't allow binding text to images (#6693) 2023-06-19 13:47:28 +05:30
Aakansha Doshi
6de6a96abf docs: add info about roadmap (#6687) 2023-06-16 20:55:33 +05:30
Sudharsan Aravind
28ab6531c9 fix: updated link for documentation page under help section (#6654)
* fix: updated link for documentation page under help section

* Update docs link

---------

Co-authored-by: Aakansha Doshi <aakansha1216@gmail.com>
2023-06-15 14:58:11 +05:30
Ryan Di
81ebf82979 feat: introduce frames (#6123)
Co-authored-by: dwelle <luzar.david@gmail.com>
2023-06-14 18:42:01 +02:00
Aakansha Doshi
4d7d96eb7b feat: add canvas-roundrect-polyfill package (#6675)
* feat: add canvas-roundrect-polyfill instead of maintaining a copy of it and transplile it since its not transpiled in the package

* transform canvas-roundrect-polyfill in jest
2023-06-14 17:26:29 +05:30
David Luzar
1747e93957 feat: polyfill CanvasRenderingContext2D.roundRect (#6673) 2023-06-13 16:34:24 +02:00
Arnost Pleskot
3bd5d87cac feat: disable collab feature when running in iframe (#6646)
Co-authored-by: dwelle <luzar.david@gmail.com>
2023-06-12 17:44:31 +02:00
David Luzar
74d2fc6406 fix: collab username style fixes (#6668) 2023-06-12 17:43:31 +02:00
Excalidraw Bot
ce9acfbc55 chore: Update translations from Crowdin (#6641) 2023-06-12 16:08:28 +02:00
Arnost Pleskot
16c7945ca0 feat: assign random user name when not set (#6663) 2023-06-12 16:05:07 +02:00
Arnost Pleskot
5ca3613cc3 feat: redesigned collab cursors (#6659)
Co-authored-by: dwelle <luzar.david@gmail.com>
2023-06-12 15:43:14 +02:00
Alex Kim
b4abfad638 fix: bound arrows not updated when rotating multiple elements (#6662) 2023-06-09 13:22:40 +02:00
WBbug
a39640ead1 fix: delete setCursor when resize (#6660) 2023-06-08 11:41:22 +02:00
David Luzar
84bd9bd4ff fix: creating text while color picker open (#6651)
Co-authored-by: Aakansha Doshi <aakansha1216@gmail.com>
2023-06-06 22:04:06 +02:00
Aakansha Doshi
ae7ff76126 fix: cleanup textWysiwyg and getAdjustedDimensions (#6520)
* fix: cleanup textWysiwyg and getAdjustedDimensions

* fix lint

* fix test
2023-06-06 14:36:18 +05:30
Excalidraw Bot
952aa63f86 chore: Update translations from Crowdin (#6625) 2023-06-02 17:41:05 +02:00
David Luzar
a065ec67a9 fix: eye dropper not accounting for offsets (#6640) 2023-06-02 17:35:25 +02:00
David Luzar
079aa72475 feat: eye dropper (#6615) 2023-06-02 17:06:11 +02:00
Sudharsan Aravind
644685a5a8 fix: color picker input closing problem (#6599) 2023-06-01 23:17:22 +02:00
Are
7bf4de5892 feat: redesign of Live Collaboration dialog (#6635)
* feat: redesiged Live Collaboration dialog

* fix: address lints

* fix: inactive dialog dark mode improvements

* fix: follow styleguide with event parameter, add FilledButton size prop

* fix: change timer to be imperative

* fix: add spacing after emoji

* fix: remove unused useEffect

* fix: change margin into whitespace

* fix: add share button check back
2023-05-31 18:27:29 +02:00
Arnost Pleskot
253c5c7866 perf: memoize rendering of library (#6622)
Co-authored-by: dwelle <luzar.david@gmail.com>
2023-05-31 15:37:13 +02:00
Aakansha Doshi
82d8d02697 test: Add coverage script (#6634)
Add coverage script
2023-05-31 17:30:14 +05:30
Arnost Pleskot
1e3c94a37a feat: recover scrolled position after Library re-opening (#6624)
Co-authored-by: dwelle <luzar.david@gmail.com>
2023-05-31 10:22:02 +02:00
Arnost Pleskot
a91e401554 feat: clearing library cache (#6621)
Co-authored-by: dwelle <luzar.david@gmail.com>
2023-05-29 16:01:44 +02:00
Are
08563e7d7b feat: update design of ImageExportDialog (#6614)
Co-authored-by: dwelle <luzar.david@gmail.com>
2023-05-26 16:16:55 +02:00
Alex Kim
6459ccda6a feat: add flipping for multiple elements (#5578)
* feat: add flipping when resizing multiple elements

* fix: image elements not flipping its content

* test: fix accidental resizing in grouping test

* fix: angles not flipping vertically when resizing

* feat: add flipping multiple elements with a command

* revert: image elements not flipping its content

This reverts commit cb989a6c66e62a02a8c04ce41f12507806c8d0a0.

* fix: add special cases for flipping text & images

* fix: a few corner cases for flipping

* fix: remove angle flip

* fix: bound text scaling when resizing

* fix: linear elements drifting away after multiple flips

* revert: fix linear elements drifting away after multiple flips

This reverts commit bffc33dd3f.

* fix: linear elements unstable bounds

* revert: linear elements unstable bounds

This reverts commit 22ae9b02c4.

* fix: hand-drawn lines shift after flipping

* test: fix flipping tests

* test: fix the number of context menu items

* fix: incorrect scaling due to ignoring bound text when finding selection bounds

* fix: bound text coordinates not being updated

* fix: lines bound text rotation

* fix: incorrect placement of bound lines on flip

* remove redundant predicates in actionFlip

* update test

* refactor resizeElement with some renaming and comments

* fix grouped bounded text elements not being flipped correctly

* combine mutation for bounded text element

* remove incorrect return

* fix: linear elements bindings after flipping

* revert: remove incorrect return

This reverts commit e6b205ca90.

* fix: minimum size for all elements in selection

---------

Co-authored-by: Ryan Di <ryan.weihao.di@gmail.com>
2023-05-25 16:27:41 +02:00
David Luzar
75bea48b54 fix: export dialog shortcut toggles console on firefox (#6620) 2023-05-24 22:52:21 +02:00
David Luzar
13780f390a fix: add react v17 useTransition polyfill (#6618) 2023-05-24 15:24:54 +00:00
Excalidraw Bot
fecbde3f5c chore: Update translations from Crowdin (#6598)
* New translations en.json (Greek)

* New translations en.json (Slovenian)

* New translations en.json (Portuguese, Brazilian)

* Auto commit: Calculate translation coverage

* New translations en.json (German)

* Auto commit: Calculate translation coverage

* New translations en.json (Korean)

* New translations en.json (Chinese Traditional)

* Auto commit: Calculate translation coverage

* New translations en.json (Norwegian Bokmal)

* Auto commit: Calculate translation coverage

* New translations en.json (Indonesian)

* New translations en.json (Indonesian)

* Auto commit: Calculate translation coverage

* New translations en.json (Indonesian)

* Auto commit: Calculate translation coverage

* New translations en.json (Indonesian)

* Auto commit: Calculate translation coverage

* New translations en.json (Chinese Simplified)

* Auto commit: Calculate translation coverage

* New translations en.json (Romanian)

* Auto commit: Calculate translation coverage

* New translations en.json (Romanian)

* Auto commit: Calculate translation coverage

* New translations en.json (Russian)

* Auto commit: Calculate translation coverage

* New translations en.json (Slovak)

* Auto commit: Calculate translation coverage

* New translations en.json (Italian)

* Auto commit: Calculate translation coverage

* New translations en.json (Italian)

* Auto commit: Calculate translation coverage

* New translations en.json (Kurdish)

* New translations en.json (Swedish)

* Auto commit: Calculate translation coverage

* New translations en.json (Portuguese)

* Auto commit: Calculate translation coverage

* New translations en.json (Portuguese)

* Auto commit: Calculate translation coverage

* New translations en.json (Khmer)

* New translations en.json (Khmer)

* Auto commit: Calculate translation coverage

* New translations en.json (Khmer)

* Auto commit: Calculate translation coverage

* New translations en.json (Khmer)

* Auto commit: Calculate translation coverage

* New translations en.json (Khmer)

* Auto commit: Calculate translation coverage

* New translations en.json (Khmer)

* Auto commit: Calculate translation coverage

* New translations en.json (Khmer)

* New translations en.json (Khmer)

* Auto commit: Calculate translation coverage

* New translations en.json (Khmer)

* Auto commit: Calculate translation coverage

* New translations en.json (Khmer)

* Auto commit: Calculate translation coverage
2023-05-24 16:50:11 +02:00
Arnost Pleskot
7340c70a06 perf: improve rendering performance for Library (#6587)
* perf: improve rendering performance for Library

* fix: return onDrag and onToggle functionality to Library Items

* perf: cache exportToSvg output

* fix: lint warning

* fix: add onClick handler into LibraryUnit

* feat: better spinner

* fix: useCallback for getInsertedElements to fix linter error

* feat: different batch size when svgs are cached

* fix: library items alignment in row

* feat: skeleton instead of spinner

* fix: remove unused variables

* feat: use css vars instead of hadcoded colors

* feat: reverting skeleton, removing spinner

* cleanup and unrelated refactor

* change ROWS_RENDERED_PER_BATCH to 6

---------

Co-authored-by: dwelle <luzar.david@gmail.com>
2023-05-24 14:40:20 +00:00
Rounik Prashar
a4f05339aa fix: Library dropdown visibility issue for mobile (#6613)
Fix: Library dropdown visibility issue for mobile

Co-authored-by: Rounik Prashar <rounik.prashar@increff.com>
2023-05-23 22:37:19 +02:00
David Luzar
a8f0a14610 fix: withInternalFallback leaking state in multi-instance scenarios (#6602) 2023-05-19 15:47:01 +02:00
Excalidraw Bot
a89952e32f chore: Update translations from Crowdin (#6589) 2023-05-18 16:23:09 +02:00
Barnabás Molnár
5b7596582f feat: color picker redesign (#6216)
Co-authored-by: Maielo <maielo.mv@gmail.com>
Co-authored-by: dwelle <luzar.david@gmail.com>
Co-authored-by: Aakansha Doshi <aakansha1216@gmail.com>
2023-05-18 16:06:27 +02:00
Mohammad Amin
6977c32631 style: Removes extra spaces (#6558)
Co-authored-by: dwelle <luzar.david@gmail.com>
2023-05-13 21:09:16 +00:00
David Luzar
f6f9ed0396 refactor: simplify ImageExportDialog (#6578) 2023-05-13 22:58:35 +02:00
David Luzar
b1b325b9a7 feat: add "unlock all elements" to canvas contextMenu (#5894) 2023-05-13 22:52:03 +02:00
David Luzar
5bf27a463c fix: language list containing duplicate en lang (#6583) 2023-05-13 22:50:14 +02:00
maruric
306e133651 fix: garbled text displayed on avatars (#6575)
Co-authored-by: dwelle <luzar.david@gmail.com>
2023-05-13 19:49:09 +02:00
Aakansha Doshi
e0f2869374 fix: assign the original text to text editor only during init (#6580) 2023-05-13 19:17:29 +02:00
Excalidraw Bot
2c511e30cd chore: Update translations from Crowdin (#6571)
* New translations en.json (Karakalpak)

* New translations en.json (Karakalpak)

* Auto commit: Calculate translation coverage

* New translations en.json (Kabyle)

* Auto commit: Calculate translation coverage

* New translations en.json (Chinese Simplified)

* New translations en.json (Spanish)

* New translations en.json (Italian)

* New translations en.json (Slovak)

* New translations en.json (Bengali)

* New translations en.json (Khmer)

* New translations en.json (Karakalpak)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Arabic)

* New translations en.json (Bulgarian)

* New translations en.json (Catalan)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Basque)

* New translations en.json (Finnish)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Japanese)

* New translations en.json (Korean)

* New translations en.json (Kurdish)

* New translations en.json (Lithuanian)

* New translations en.json (Dutch)

* New translations en.json (Punjabi)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Slovenian)

* New translations en.json (Swedish)

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Traditional)

* New translations en.json (Vietnamese)

* New translations en.json (Galician)

* New translations en.json (Portuguese, Brazilian)

* New translations en.json (Indonesian)

* New translations en.json (Persian)

* New translations en.json (Tamil)

* New translations en.json (Marathi)

* New translations en.json (Thai)

* New translations en.json (Norwegian Nynorsk)

* New translations en.json (Kazakh)

* New translations en.json (Latvian)

* New translations en.json (Hindi)

* New translations en.json (Burmese)

* New translations en.json (Chinese Traditional, Hong Kong)

* New translations en.json (Sinhala)

* New translations en.json (Norwegian Bokmal)

* New translations en.json (Occitan)

* New translations en.json (Kabyle)

* Auto commit: Calculate translation coverage

* New translations en.json (Chinese Simplified)

* New translations en.json (Spanish)

* New translations en.json (Italian)

* New translations en.json (Slovak)

* New translations en.json (Bengali)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Arabic)

* New translations en.json (Bulgarian)

* New translations en.json (Catalan)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Basque)

* New translations en.json (Finnish)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Japanese)

* New translations en.json (Korean)

* New translations en.json (Kurdish)

* New translations en.json (Lithuanian)

* New translations en.json (Dutch)

* New translations en.json (Punjabi)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Slovenian)

* New translations en.json (Swedish)

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Traditional)

* New translations en.json (Vietnamese)

* New translations en.json (Galician)

* New translations en.json (Portuguese, Brazilian)

* New translations en.json (Indonesian)

* New translations en.json (Persian)

* New translations en.json (Tamil)

* New translations en.json (Marathi)

* New translations en.json (Thai)

* New translations en.json (Norwegian Nynorsk)

* New translations en.json (Latvian)

* New translations en.json (Hindi)

* New translations en.json (Burmese)

* New translations en.json (Chinese Traditional, Hong Kong)

* New translations en.json (Norwegian Bokmal)

* New translations en.json (Occitan)

* New translations en.json (Kabyle)

* Auto commit: Calculate translation coverage

* New translations en.json (Chinese Simplified)

* New translations en.json (Ukrainian)

* Auto commit: Calculate translation coverage

* New translations en.json (Ukrainian)

* Auto commit: Calculate translation coverage

* New translations en.json (Romanian)

* New translations en.json (Hindi)

* New translations en.json (Hindi)

* Auto commit: Calculate translation coverage

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Simplified)

* New translations en.json (Ukrainian)

* New translations en.json (Khmer)

* New translations en.json (Khmer)

* Auto commit: Calculate translation coverage

* New translations en.json (German)

* New translations en.json (Punjabi)

* Auto commit: Calculate translation coverage

---------

Co-authored-by: dwelle <luzar.david@gmail.com>
2023-05-13 17:16:58 +00:00
David Luzar
fff9d1522a feat: library sidebar design tweaks (#6582) 2023-05-13 13:18:14 +02:00
Contextualist
e619e06055 fix: i18n: Apply Trans component to publish library dialogue (#6564) 2023-05-10 10:39:21 +02:00
Excalidraw Bot
d8965ee823 chore: Update translations from Crowdin (#6530)
* New translations en.json (Bengali)

* New translations en.json (Bengali)

* Auto commit: Calculate translation coverage

* New translations en.json (Khmer)

* Auto commit: Calculate translation coverage

* New translations en.json (Slovak)

* Auto commit: Calculate translation coverage

* New translations en.json (Karakalpak)

* Auto commit: Calculate translation coverage

* New translations en.json (Karakalpak)

* Auto commit: Calculate translation coverage

* New translations en.json (Chinese Simplified)

* New translations en.json (Spanish)

* New translations en.json (Italian)

* New translations en.json (Slovak)

* New translations en.json (Bengali)

* New translations en.json (Khmer)

* New translations en.json (Karakalpak)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Arabic)

* New translations en.json (Bulgarian)

* New translations en.json (Catalan)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Basque)

* New translations en.json (Finnish)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Japanese)

* New translations en.json (Korean)

* New translations en.json (Kurdish)

* New translations en.json (Lithuanian)

* New translations en.json (Dutch)

* New translations en.json (Punjabi)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Slovenian)

* New translations en.json (Swedish)

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Traditional)

* New translations en.json (Vietnamese)

* New translations en.json (Galician)

* New translations en.json (Portuguese, Brazilian)

* New translations en.json (Indonesian)

* New translations en.json (Persian)

* New translations en.json (Tamil)

* New translations en.json (Marathi)

* New translations en.json (Thai)

* New translations en.json (Norwegian Nynorsk)

* New translations en.json (Kazakh)

* New translations en.json (Latvian)

* New translations en.json (Hindi)

* New translations en.json (Burmese)

* New translations en.json (Chinese Traditional, Hong Kong)

* New translations en.json (Sinhala)

* New translations en.json (Norwegian Bokmal)

* New translations en.json (Occitan)

* New translations en.json (Kabyle)

* Auto commit: Calculate translation coverage

* New translations en.json (Romanian)

* New translations en.json (Korean)

* New translations en.json (Russian)

* New translations en.json (Slovenian)

* New translations en.json (Norwegian Bokmal)

* Auto commit: Calculate translation coverage

* New translations en.json (Chinese Simplified)

* New translations en.json (German)

* New translations en.json (Chinese Traditional)

* Auto commit: Calculate translation coverage

* New translations en.json (Karakalpak)

* Auto commit: Calculate translation coverage

* New translations en.json (Karakalpak)

* Auto commit: Calculate translation coverage

* New translations en.json (Vietnamese)

* Auto commit: Calculate translation coverage

* New translations en.json (Chinese Simplified)

* New translations en.json (Spanish)

* New translations en.json (Italian)

* New translations en.json (Slovak)

* New translations en.json (Bengali)

* New translations en.json (Khmer)

* New translations en.json (Karakalpak)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Arabic)

* New translations en.json (Bulgarian)

* New translations en.json (Catalan)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Basque)

* New translations en.json (Finnish)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Japanese)

* New translations en.json (Korean)

* New translations en.json (Kurdish)

* New translations en.json (Lithuanian)

* New translations en.json (Dutch)

* New translations en.json (Punjabi)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Slovenian)

* New translations en.json (Swedish)

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Traditional)

* New translations en.json (Vietnamese)

* New translations en.json (Galician)

* New translations en.json (Portuguese, Brazilian)

* New translations en.json (Indonesian)

* New translations en.json (Persian)

* New translations en.json (Tamil)

* New translations en.json (Marathi)

* New translations en.json (Thai)

* New translations en.json (Norwegian Nynorsk)

* New translations en.json (Kazakh)

* New translations en.json (Latvian)

* New translations en.json (Hindi)

* New translations en.json (Burmese)

* New translations en.json (Chinese Traditional, Hong Kong)

* New translations en.json (Sinhala)

* New translations en.json (Norwegian Bokmal)

* New translations en.json (Occitan)

* New translations en.json (Kabyle)

* Auto commit: Calculate translation coverage

* New translations en.json (Kurdish)

* New translations en.json (Slovenian)

* New translations en.json (Norwegian Bokmal)

* Auto commit: Calculate translation coverage

* New translations en.json (German)

* Auto commit: Calculate translation coverage

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* Auto commit: Calculate translation coverage

* New translations en.json (Russian)

* Auto commit: Calculate translation coverage

* New translations en.json (Korean)

* Auto commit: Calculate translation coverage

* New translations en.json (Romanian)

* Auto commit: Calculate translation coverage

* New translations en.json (Swedish)

* Auto commit: Calculate translation coverage

* New translations en.json (Slovak)

* New translations en.json (Persian)

* Auto commit: Calculate translation coverage
2023-05-09 18:15:27 +05:30
David Luzar
560231d365 perf: use UIAppState where possible to reduce UI rerenders (#6560) 2023-05-08 10:14:02 +02:00
David Luzar
026949204d fix: fix brave error i18n string and remove unused (#6561) 2023-05-06 10:36:42 +02:00
Luka Zakrajšek
1184a8c0e9 feat: Add Trans component for interpolating JSX in translations (#6534)
* feat: add Trans component

* Add comments

* tweak

* Move brave to trans component

* fix test and tweaks

* remove any

* fix

* fix

* comment

* replace render function type

* Use tags for Trans

* Fix a typo

Co-authored-by: Aakansha Doshi <aakansha1216@gmail.com>

* Cleanup, add comments, add support for kebab case

* tweaks

---------

Co-authored-by: Aakansha Doshi <aakansha1216@gmail.com>
Co-authored-by: dwelle <luzar.david@gmail.com>
2023-05-05 21:35:18 +05:30
David Luzar
e9cae918a7 feat: sidebar tabs support (#6213)
* feat: Sidebar tabs support [wip]

* tab trigger styling tweaks

* add `:hover` & `:active` states

* replace `@dwelle/tunnel-rat` with `tunnel-rat`

* make stuff more explicit

- remove `Sidebar.Header` fallback (host apps need to render manually), and stop tunneling it (render in place)
- make `docked` state explicit
- stop tunneling `Sidebar.TabTriggers` (render in place)

* redesign sidebar / library as per latest spec

* support no label on `Sidebar.Trigger`

* add Sidebar `props.onStateChange`

* style fixes

* make `appState.isSidebarDocked` into a soft user preference

* px -> rem & refactor

* remove `props.renderSidebar`

* update tests

* remove

* refactor

* rename constants

* tab triggers styling fixes

* factor out library-related logic from generic sidebar trigger

* change `props.onClose` to `onToggle`

* rename `props.value` -> `props.tab`

* add displayNames

* allow HTMLAttributes on applicable compos

* fix example App

* more styling tweaks and fixes

* fix not setting `dockable`

* more style fixes

* fix and align sidebar header button styling

* make DefaultSidebar dockable on if host apps supplies `onDock`

* stop `Sidebar.Trigger` hiding label on mobile

this should be only the default sidebar trigger behavior, and for that we don't need to use `device` hook as we handle in CSS

* fix `dockable` prop of defaultSidebar

* remove extra `typescript` dep

* remove `defaultTab` prop

in favor of explicit `tab` value in `<Sidebar.Trigger/>` and `toggleSidebar()`, to reduce API surface area and solve inconsistency of `appState.openSidebar.tab` not reflecting actual UI value if `defaultTab` was supported (without additional syncing logic which feels like the wrong solution).

* remove `onToggle` in favor of `onStateChange`

reducing API surface area

* fix restore

* comment no longer applies

* reuse `Button` component in sidebar buttons

* fix tests

* split Sidebar sub-components into files

* remove `props.dockable` in favor of `props.onDock` only

* split tests

* fix sidebar showing dock button if no `props.docked` supplied & add more tests

* reorder and group sidebar tests

* clarify

* rename classes & dedupe css

* refactor tests

* update changelog

* update changelog

---------

Co-authored-by: barnabasmolnar <barnabas@excalidraw.com>
2023-05-04 17:33:31 +00:00
Aakansha Doshi
b1311a407a fix: Revert add version tags to Docker build (#6540)
Revert "build: Add version tags to Docker build (#6508)"

This reverts commit 1815cf3213.
2023-05-02 12:49:11 +05:30
Excalidraw Bot
2a39d0b9a7 chore: Update translations from Crowdin (#6471) 2023-04-27 19:27:36 +02:00
Milos Vetesnik
6b0218b012 feat: testing simple analytics and fathom analytics for better privacy of the users (#6529)
Co-authored-by: dwelle <luzar.david@gmail.com>
2023-04-27 19:11:42 +02:00
Aakansha Doshi
45a57d70de fix: don't refresh dimensions for text containers on font load (#6523) 2023-04-26 21:35:06 +05:30
Aakansha Doshi
da8dd389a9 fix: cleanup getMaxContainerHeight and getMaxContainerWidth (#6519)
* fix: cleanup getMaxContainerHeight and getMaxContainerWidth

* rename getMaxContainerWidth -> getBoundTextMaxMaxWidth and getMaxContainerHeight -> getBoundTextMaxHeight

* add specs
2023-04-25 18:06:23 +05:30
Aakansha Doshi
dae81c0a2c fix: cleanup redrawTextBoundingBox (#6518)
* chore: cleanup redrawTextBoundingBox

* fix
2023-04-25 17:57:53 +05:30
suwalkanishka
1e9943323a style: fix font family inconsistencies (#6501)
style: font fix for four components

The browser default font was showing up in various locations. Fixed them to show the desired ui font.
2023-04-25 17:20:19 +05:30
Nainterceptor
1815cf3213 build: Add version tags to Docker build (#6508)
ci: Add version tags
2023-04-25 16:51:25 +05:30
David Luzar
d35386755f feat: retain seed on shift-paste (#6509)
thanks for the review 👍
2023-04-24 10:26:21 +02:00
zsviczian
9d5cfbbfb7 fix: text jumps when editing on Android Chrome (#6503)
* debug logging

* debug

* debugging

* Update textWysiwyg.tsx

* Update textWysiwyg.tsx

* extended debug information

* debug

* debug

* trace

* further debug

* don't drag while editing

* removing all console.logs

* revert all changes to textWysiwyt.tsx

* updated comment
2023-04-22 14:17:13 +02:00
David Luzar
fee760d38c feat: allow avif, jfif, webp, bmp, ico image types (#6500
* feat: allow `avif`, `jfif`, `webp`, `bmp`, `ico` image types

* dedupe for SSOT

* more SSOT
2023-04-21 22:53:49 +02:00
Aakansha Doshi
2a4799d8c8 chore: upgrade excalidraw version to 0.15.2 (#6496)
chore: updragde excalidraw version to 0.15.2
2023-04-20 17:40:08 +05:30
Aakansha Doshi
c4445c181b docs: release @excalidraw/excalidraw@0.15.2 🎉 (#6495) 2023-04-20 17:34:06 +05:30
dependabot[bot]
d12a9fdd40 build(deps): bump ua-parser-js from 0.7.31 to 0.7.33 in /dev-docs (#6164)
Bumps [ua-parser-js](https://github.com/faisalman/ua-parser-js) from 0.7.31 to 0.7.33.
- [Release notes](https://github.com/faisalman/ua-parser-js/releases)
- [Changelog](https://github.com/faisalman/ua-parser-js/blob/master/changelog.md)
- [Commits](https://github.com/faisalman/ua-parser-js/compare/0.7.31...0.7.33)

---
updated-dependencies:
- dependency-name: ua-parser-js
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-04-20 17:07:56 +05:30
dependabot[bot]
9368a9ce3e build(deps): bump webpack from 5.75.0 to 5.76.1 (#6357)
Bumps [webpack](https://github.com/webpack/webpack) from 5.75.0 to 5.76.1.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.75.0...v5.76.1)

---
updated-dependencies:
- dependency-name: webpack
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-04-20 17:05:03 +05:30
siddhant
851b9b7aec fix: rotate the text element when binding to a rotated container (#6477)
* Updated logic to update the bound child angle from the parent

* update angle when generating text element

* add test

* remove

* fix

---------

Co-authored-by: Aakansha Doshi <aakansha1216@gmail.com>
2023-04-20 16:34:39 +05:30
Aakansha Doshi
5ddb28d378 fix: support breaking words containing hyphen - (#6014)
* fix: support breaking words containing hyphen -

* fix

* add spec

* fix

* fix

* fix

* fix and add spec

* improve code and add more tests
2023-04-20 11:10:46 +05:30
Max Kovalenko
404a79e241 chore: typo (collab) - reconciliation.ts (#6447) 2023-04-19 19:18:03 +02:00
David Luzar
eea30da05a fix: incorrect background fill button active state (#6491) 2023-04-19 16:23:24 +02:00
Aakansha Doshi
98a77d7426 chore: show bounding box only when flag is true (#6490) 2023-04-19 17:02:20 +05:30
Aakansha Doshi
ff3c2e5a16 docs: fix docs link in readme (#6486)
* docs: fix docs link in readme

* update changelog
2023-04-18 21:52:08 +05:30
Aakansha Doshi
b64beaf5ba docs: release @excalidraw/excalidraw@0.15.1 🎉 (#6485) 2023-04-18 21:32:33 +05:30
Aakansha Doshi
89304c9f66 fix: add readme back to npm package which was mistakenly removed (#6484)
* fix: remove update readme script from release

* update docs

* remove

* fix
2023-04-18 21:23:47 +05:30
Aakansha Doshi
1d0653ce50 docs: update docs for next version (#6251)
* update docs for opts param inr estore utils

* docs: add docs for `useI18n` hook (#6269)

Co-authored-by: Aakansha Doshi <aakansha1216@gmail.com>

* upgrade excal

---------

Co-authored-by: David Luzar <luzar.david@gmail.com>
2023-04-18 21:03:17 +05:30
Aakansha Doshi
c9c79646c5 docs: release @excalidraw/excalidraw@0.15.0 🎉 (#6481) 2023-04-18 20:48:30 +05:30
Aakansha Doshi
979312f779 fix: center align text when wrapped in container via context menu (#6480)
* rename action to wrapTextInContainer

* fix: center align text when wrapped in container via context menu

* revert translation key

* fix tests
2023-04-18 19:44:14 +05:30
David Luzar
4d0d844e39 feat: constrain export dialog preview size (#6475) 2023-04-18 15:27:51 +02:00
Aakansha Doshi
801412bf6b fix: restore original container height when unbinding text which was binded via context menu (#6444)
* fix: restore original container height when unbinding text which was binded via context menu

* remove flag

* comment
2023-04-18 18:50:25 +05:30
Aakansha Doshi
21726e22cc fix: mark more props as optional for element (#6448)
* fix: mark more props as optional for element

* fix
2023-04-18 18:42:48 +05:30
David Luzar
c3e8ddaf58 fix: improperly cache-busting on canvas scale instead of zoom (#6473) 2023-04-17 11:41:27 +02:00
David Luzar
f640ddc2aa fix: incorrectly duplicating items on paste/library insert (#6467
* fix: incorrectly duplicating items on paste/library insert

* fix: deduplicate element ids on restore

* tests
2023-04-16 17:22:16 +02:00
Excalidraw Bot
e7e54814e7 chore: Update translations from Crowdin (#6290)
* New translations en.json (Occitan)

* New translations en.json (Kabyle)

* Auto commit: Calculate translation coverage

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Slovenian)

* New translations en.json (Norwegian Bokmal)

* Auto commit: Calculate translation coverage

* New translations en.json (Dutch)

* Auto commit: Calculate translation coverage

* New translations en.json (Thai)

* Auto commit: Calculate translation coverage

* New translations en.json (Thai)

* Auto commit: Calculate translation coverage

* New translations en.json (Chinese Traditional)

* New translations en.json (Thai)

* Auto commit: Calculate translation coverage

* New translations en.json (Galician)

* Auto commit: Calculate translation coverage

* New translations en.json (German)

* Auto commit: Calculate translation coverage

* New translations en.json (Marathi)

* New translations en.json (Hindi)

* Auto commit: Calculate translation coverage

* New translations en.json (Thai)

* Auto commit: Calculate translation coverage

* New translations en.json (Thai)

* Auto commit: Calculate translation coverage

* New translations en.json (Thai)

* Auto commit: Calculate translation coverage

* New translations en.json (Thai)

* Auto commit: Calculate translation coverage

* New translations en.json (Basque)

* Auto commit: Calculate translation coverage

* New translations en.json (Swedish)

* Auto commit: Calculate translation coverage

* New translations en.json (Spanish)

* Auto commit: Calculate translation coverage

* New translations en.json (Hebrew)

* Auto commit: Calculate translation coverage

* New translations en.json (Hebrew)

* Auto commit: Calculate translation coverage

* New translations en.json (Hebrew)

* New translations en.json (Chinese Simplified)

* Auto commit: Calculate translation coverage

* New translations en.json (Slovak)

* Auto commit: Calculate translation coverage

* New translations en.json (Thai)

* Auto commit: Calculate translation coverage

* New translations en.json (Thai)

* Auto commit: Calculate translation coverage

* New translations en.json (Turkish)

* Auto commit: Calculate translation coverage

* New translations en.json (Romanian)

* New translations en.json (Spanish)

* New translations en.json (Catalan)

* New translations en.json (Basque)

* New translations en.json (Finnish)

* New translations en.json (Portuguese)

* New translations en.json (Slovak)

* New translations en.json (Chinese Simplified)

* New translations en.json (Portuguese, Brazilian)

* New translations en.json (Tamil)

* New translations en.json (Marathi)

* New translations en.json (Hindi)

* New translations en.json (French)

* New translations en.json (Arabic)

* New translations en.json (Bulgarian)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Korean)

* New translations en.json (Kurdish)

* New translations en.json (Lithuanian)

* New translations en.json (Dutch)

* New translations en.json (Punjabi)

* New translations en.json (Polish)

* New translations en.json (Russian)

* New translations en.json (Slovenian)

* New translations en.json (Swedish)

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Traditional)

* New translations en.json (Vietnamese)

* New translations en.json (Galician)

* New translations en.json (Indonesian)

* New translations en.json (Persian)

* New translations en.json (Bengali)

* New translations en.json (Norwegian Nynorsk)

* New translations en.json (Kazakh)

* New translations en.json (Latvian)

* New translations en.json (Burmese)

* New translations en.json (Chinese Traditional, Hong Kong)

* New translations en.json (Sinhala)

* New translations en.json (Norwegian Bokmal)

* New translations en.json (Occitan)

* New translations en.json (Kabyle)

* New translations en.json (Thai)

* Auto commit: Calculate translation coverage

* New translations en.json (Chinese Simplified)

* New translations en.json (Greek)

* New translations en.json (Slovenian)

* New translations en.json (Swedish)

* New translations en.json (Norwegian Bokmal)

* Auto commit: Calculate translation coverage

* New translations en.json (Romanian)

* Auto commit: Calculate translation coverage

* New translations en.json (Chinese Traditional)

* Auto commit: Calculate translation coverage

* New translations en.json (Portuguese)

* Auto commit: Calculate translation coverage

* New translations en.json (Portuguese)

* New translations en.json (German)

* Auto commit: Calculate translation coverage

* New translations en.json (Galician)

* Auto commit: Calculate translation coverage

* New translations en.json (Galician)

* Auto commit: Calculate translation coverage

* New translations en.json (Hebrew)

* Auto commit: Calculate translation coverage

* New translations en.json (Hebrew)

* New translations en.json (French)

* Auto commit: Calculate translation coverage

* New translations en.json (Indonesian)

* Auto commit: Calculate translation coverage

* New translations en.json (Indonesian)

* Auto commit: Calculate translation coverage

* New translations en.json (Italian)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Simplified)

* New translations en.json (Kabyle)

* Auto commit: Calculate translation coverage

* New translations en.json (Kabyle)

* Auto commit: Calculate translation coverage

* New translations en.json (Marathi)

* New translations en.json (Hindi)

* Auto commit: Calculate translation coverage

* New translations en.json (Hindi)

* Auto commit: Calculate translation coverage

* New translations en.json (Slovak)

* Auto commit: Calculate translation coverage

* New translations en.json (Spanish)

* Auto commit: Calculate translation coverage

* New translations en.json (Thai)

* Auto commit: Calculate translation coverage

* New translations en.json (Thai)

* Auto commit: Calculate translation coverage

* New translations en.json (Japanese)

* Auto commit: Calculate translation coverage

* New translations en.json (Dutch)

* Auto commit: Calculate translation coverage

* New translations en.json (Dutch)

* Auto commit: Calculate translation coverage

* New translations en.json (Basque)

* Auto commit: Calculate translation coverage

* New translations en.json (Basque)

* Auto commit: Calculate translation coverage

* New translations en.json (Marathi)

* Auto commit: Calculate translation coverage

* New translations en.json (Marathi)

* Auto commit: Calculate translation coverage

* New translations en.json (Marathi)

* New translations en.json (Hindi)

* Auto commit: Calculate translation coverage

* New translations en.json (Polish)

* Auto commit: Calculate translation coverage

* New translations en.json (Polish)

* New translations en.json (Chinese Simplified)

* New translations en.json (Vietnamese)

* Auto commit: Calculate translation coverage

* New translations en.json (Vietnamese)

* Auto commit: Calculate translation coverage

* New translations en.json (Polish)

* Auto commit: Calculate translation coverage

* New translations en.json (Korean)

* Auto commit: Calculate translation coverage

* New translations en.json (Dutch)

* New translations en.json (Basque)

* New translations en.json (Marathi)

* New translations en.json (Hindi)

* New translations en.json (Polish)

* New translations en.json (Chinese Simplified)

* New translations en.json (Vietnamese)

* New translations en.json (Korean)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Arabic)

* New translations en.json (Bulgarian)

* New translations en.json (Catalan)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Kurdish)

* New translations en.json (Lithuanian)

* New translations en.json (Punjabi)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Slovak)

* New translations en.json (Slovenian)

* New translations en.json (Swedish)

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Traditional)

* New translations en.json (Galician)

* New translations en.json (Portuguese, Brazilian)

* New translations en.json (Indonesian)

* New translations en.json (Persian)

* New translations en.json (Tamil)

* New translations en.json (Bengali)

* New translations en.json (Thai)

* New translations en.json (Norwegian Nynorsk)

* New translations en.json (Kazakh)

* New translations en.json (Latvian)

* New translations en.json (Burmese)

* New translations en.json (Chinese Traditional, Hong Kong)

* New translations en.json (Sinhala)

* New translations en.json (Norwegian Bokmal)

* New translations en.json (Occitan)

* New translations en.json (Kabyle)

* Auto commit: Calculate translation coverage

* New translations en.json (Slovenian)

* New translations en.json (Norwegian Bokmal)

* Auto commit: Calculate translation coverage

* New translations en.json (Japanese)

* Auto commit: Calculate translation coverage

* New translations en.json (German)

* Auto commit: Calculate translation coverage

* New translations en.json (Chinese Traditional)

* Auto commit: Calculate translation coverage

* New translations en.json (Marathi)

* New translations en.json (Hindi)

* Auto commit: Calculate translation coverage

* New translations en.json (Romanian)

* Auto commit: Calculate translation coverage

* New translations en.json (Italian)

* Auto commit: Calculate translation coverage

* New translations en.json (Turkish)

* Auto commit: Calculate translation coverage
2023-04-16 17:12:37 +02:00
David Luzar
e9064a4a87 fix: library ids cross-contamination on multiple insert (#6466) 2023-04-16 17:09:51 +02:00
David Luzar
034113772d fix: color picker keyboard handling not working (#6464) 2023-04-16 15:33:30 +02:00
zsviczian
d34cd3072f fix: abort freedraw line if second touch is detected (#6440) 2023-04-16 15:33:16 +02:00
David Luzar
e31230f78c refactor: inline SingleLibraryItem into PublishLibrary (#6462
refactor: inline `SingleLibraryItem` into `PublishLibrary` to reduce api surface area
2023-04-16 11:57:13 +02:00
David Luzar
399c92d882 fix: utils leaking Scene state (#6461
* fix: utils leaking Scene state

* remove debug

* doc

* add tests for group duplicating

* tweaks
2023-04-16 11:56:25 +02:00
Aurélie
b0b23353cf fix: split "Edit selected shape" shortcut (#6457)
Co-authored-by: David Luzar <luzar.david@gmail.com>
2023-04-14 21:34:26 +00:00
Bear
6164b5273c fix: center align text when bind to container via context menu (#6451) 2023-04-14 15:22:39 +02:00
Aakansha Doshi
ca3be2c678 fix: exporting labelled arrows via export utils (#6443)
* fix: exporting labelled arrows via export utils

* add comments

* lint

* update changelog

* fix lint

* initialize scene in the utils so it can be availabe in the helper functions

* fix library rendering

* add comments
2023-04-13 17:19:46 +05:30
Aakansha Doshi
13b27afe0f fix: update coords when text unbinded from its container (#6445)
* fix: update coords when text unbinded from its container

* Add specs
2023-04-13 11:45:58 +05:30
David Luzar
372743f59f fix: autoredirect to plus in prod only (#6446) 2023-04-12 10:57:00 +02:00
Nishant
fc601347cf fix: fixing popover overflow on small screen (#6433)
Co-authored-by: dwelle <luzar.david@gmail.com>
2023-04-11 23:23:36 +02:00
David Luzar
e4d8ba226f feat: zigzag fill easter egg (#6439) 2023-04-10 15:38:50 +02:00
Aakansha Doshi
ec215362a1 fix: introduce baseline to fix the layout shift when switching to text editor (#6397)
* fix: introduce baseline to fix the layout shift when switching to text editor

* uncomment

* change offset to 8pixels

* [debug]

* introduce DOM baseline in canvas rendering instead

* introduce baseline in element making it backward compat

* fix

* lint

* fix

* update baseline when resizing text element

* fix safari backward compat

* fix for safari

* lint

* reduce safari LS

* floor line height and height when dom height increases than canvas height

* Revert "floor line height and height when dom height increases than canvas height"

This reverts commit 8de6516823.

* cleanup

* use DOM height only for safari to fix LS

* Revert "use DOM height only for safari to fix LS"

This reverts commit d75889238d.

* fix lint and test

* fix

* calculate line height by rounding off instead of DOM

* cleanup

---------

Co-authored-by: dwelle <luzar.david@gmail.com>
2023-04-10 18:52:46 +05:30
Aakansha Doshi
0b8fc4f4b6 fix: don't refresh dimensions for deleted text elements (#6438) 2023-04-10 16:31:58 +05:30
Manuel Brandstetter
c170403b13 docs: fix closing tag in readme (#6424
Update README.md
2023-04-07 17:43:50 +02:00
zsviczian
705ac9c1ab fix: element vanishes when zoomed in (#6417)
Co-authored-by: David Luzar <luzar.david@gmail.com>
2023-04-07 15:30:44 +00:00
Chinmay Mhatre
68692b9d4c feat: add container to multiple text elements (#6428)
Co-authored-by: dwelle <luzar.david@gmail.com>
2023-04-07 13:50:36 +00:00
Aakansha Doshi
d61b3cf83d fix: don't jump text to end when out of viewport in safari (#6416) 2023-04-05 12:17:18 +05:30
Coyote
d2b8f4d2f8 fix: getDefaultLineHeight should return default font family line height for unknown font (#6399)
* fix(getDefaultLineHeight): make getDefaultLineHeight always has a default value

* test: add getDefaultLineHeight test case when using unknown font

* test: add getDefaultLineHeight test case when using unknown font

* Revert "test: add getDefaultLineHeight test case when using unknown font"

This reverts commit d41da5493b6edab9e599a13a23c387d38345bf03.

* test: add getDefaultLineHeight test case when using unknown font

* newline

* newline

* tweaks

* trigger action

* trigger action

* fix

---------

Co-authored-by: Aakansha Doshi <aakansha1216@gmail.com>
2023-03-30 00:46:23 +05:30
Aakansha Doshi
f8e65bb77e fix: Revert use ideographic textBaseline to improve layout shift when editing text" (#6400)
Revert "fix: use `ideographic` textBaseline to improve layout shift when editing text (#6384)"

This reverts commit 9e52c30ce8.
2023-03-29 18:53:03 +05:30
Milos Vetesnik
3030e96d62 feat: starting migration from GA to Matomo for better privacy (#6398)
Co-authored-by: dwelle <luzar.david@gmail.com>
2023-03-29 11:13:06 +02:00
dongfang
44453b725d fix: call stack size exceeded when paste large text (#6373) (#6396)
* fix: call stack size exceeded when paste large text (#6373)

* fix: add test case for paste multi-line text

* fix

* tweak

* add missing assertion

* add comments

* lint

---------

Co-authored-by: Aakansha Doshi <aakansha1216@gmail.com>
2023-03-29 13:45:30 +05:30
Type Horror
25bb6738ea feat: Add fitToContent and animate to scrollToContent (#6319)
Co-authored-by: Brice Leroy <brice@brigalabs.com>
Co-authored-by: dwelle <luzar.david@gmail.com>
2023-03-25 23:26:58 +01:00
David Luzar
9e52c30ce8 fix: use ideographic textBaseline to improve layout shift when editing text (#6384) 2023-03-22 18:33:37 +01:00
Aakansha Doshi
83383977f5 feat: add line height attribute to text element (#6360)
* feat: add line height attribute to text element

* lint

* update line height when redrawing text bounding box

* fix tests

* retain line height when pasting styles

* fix test

* create a util for calculating ling height using old algo

* update line height when resizing multiple text elements

* make line height backward compatible

* udpate line height for older element when font size updated

* remove logs

* Add specs

* lint

* review fixes

* simplify by changing `lineHeight` from px to unitless

* make param non-optional

* update comment

* fix: jumping text due to font size being calculated incorrectly

* update line height when font family is updated

* lint

* Add spec

* more specs

* rename to getDefaultLineHeight

* fix getting lineHeight for potentially undefined fontFamily

* reduce duplication

* fix fallback

* refactor and comment tweaks

* fix

---------

Co-authored-by: dwelle <luzar.david@gmail.com>
2023-03-22 11:32:38 +05:30
David Luzar
ac4c8b3ca7 fix: chrome crashing when embedding scene on chrome arm (#6383) 2023-03-21 18:48:49 +01:00
zsviczian
5c8941467d fix: division by zero in findFocusPointForEllipse leads to infinite loop in wrapText freezing Excalidraw (#6377)
* Update collision.ts

* Update textElement.ts

* Update textElement.ts

* tweak

* fix

* remove unnecessary `Math.sign`

* change check and add doc

* Add a case for negative max width and specs

* fix

---------

Co-authored-by: dwelle <luzar.david@gmail.com>
Co-authored-by: Aakansha Doshi <aakansha1216@gmail.com>
2023-03-20 17:50:09 +05:30
Samyat Gautam
0726911fa6 fix: containerizing text incorrectly updates arrow bindings (#6369)
Co-authored-by: dwelle <luzar.david@gmail.com>
2023-03-18 15:00:28 +00:00
dependabot[bot]
7e330c8ee1 build(deps-dev): bump webpack from 5.73.0 to 5.76.0 in /src/packages/utils (#6354)
build(deps-dev): bump webpack in /src/packages/utils

Bumps [webpack](https://github.com/webpack/webpack) from 5.73.0 to 5.76.0.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.73.0...v5.76.0)

---
updated-dependencies:
- dependency-name: webpack
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-03-15 11:04:13 +05:30
dependabot[bot]
7d21747644 build(deps-dev): bump webpack from 5.73.0 to 5.76.0 in /src/packages/excalidraw (#6355)
build(deps-dev): bump webpack in /src/packages/excalidraw

Bumps [webpack](https://github.com/webpack/webpack) from 5.73.0 to 5.76.0.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.73.0...v5.76.0)

---
updated-dependencies:
- dependency-name: webpack
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-03-15 11:04:01 +05:30
dependabot[bot]
e718136aea build(deps): bump webpack from 5.74.0 to 5.76.1 in /dev-docs (#6356)
Bumps [webpack](https://github.com/webpack/webpack) from 5.74.0 to 5.76.1.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.74.0...v5.76.1)

---
updated-dependencies:
- dependency-name: webpack
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-03-15 11:03:40 +05:30
Salah Eddine Daci
fe83e2922d build: move TS and types to devDependencies (#6346) 2023-03-14 12:06:57 +00:00
David Luzar
20edddcd4e fix: ensure export preview is centered (#6337) 2023-03-14 13:03:55 +01:00
Aakansha Doshi
f6e8be399e fix: hide text align for labelled arrows (#6339)
* fix: hide text align for labelled arrows

* lintttt

* since we fetch seledcted Elements including the bound text hence this block can be removed

* fix
2023-03-14 17:21:46 +05:30
Aakansha Doshi
ab49cad6b1 perf: break early if the line width <= max width of the container (#6347)
* fix: break early if the line width <= max width of the container

* Remove dead code

* remove dead code

* lint

* remove
2023-03-14 17:18:16 +05:30
Aakansha Doshi
6aeb18b784 fix: refresh dimensions when elements loaded from shareable link and blob (#6333)
* fix: refresh dimensions when elements loaded from shareable link

* refresh text dimensions when loading from file

* remove log
2023-03-14 17:08:23 +05:30
Aakansha Doshi
023313e92f fix: show error message when measureText API breaks in brave (#6336)
* fix: show error message when measureText API breaks in brave

* Add docs

* Add assets

* tweak message

* fix

* tweak message

* add translations

* lint

* fix

* fix

* lint

* lint

* lint please work now

* tweak doc

* fix

* split error component to new file

* add specs

* tweaks

Co-authored-by: David Luzar <luzar.david@gmail.com>

* wrap in div with a width of 30rem

* fix spec

* fix

* Fix typo

---------

Co-authored-by: David Luzar <luzar.david@gmail.com>
Co-authored-by: Daniel J. Geiger <1852529+DanielJGeiger@users.noreply.github.com>
2023-03-13 19:46:09 +05:30
David Luzar
1eee488dab feat: add thai lang support (#6314) 2023-03-11 22:15:52 +01:00
Aakansha Doshi
dd4c333925 fix: add an offset of 0.5px for text editor in containers (#6328)
* fix: add an offset of 0.5px for text editor in containers

* fix specs and lint
2023-03-09 13:07:36 +05:30
David Luzar
8542c95a7a fix: move utility types out of .d.ts file to fix exported declaration files (#6315) 2023-03-04 19:21:57 +01:00
David Luzar
cef6094d4c fix: more jotai scopes missing (#6313) 2023-03-03 16:19:02 +01:00
dependabot[bot]
3322f0fa6f build(deps): bump @sideway/formula from 3.0.0 to 3.0.1 in /dev-docs (#6309)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-03-03 14:45:29 +01:00
Omar Brikaa
34a7d48b95 fix: provide HelpButton title prop (#6209)
Co-authored-by: dwelle <luzar.david@gmail.com>
2023-03-03 12:50:18 +00:00
Aakansha Doshi
5c0b15ce2b fix: respect text align when wrapping in a container (#6310)
* fix: respect text align when wrapping in a container

* fix
2023-03-03 18:07:26 +05:30
Aakansha Doshi
9f9666110e chore: Add debug flag to enable text container bounding box (#6296)
* debug: Add debug flag to enable text container bounding box

* newline

* fix
2023-03-03 18:01:55 +05:30
dependabot[bot]
05ffce62ef build(deps): bump dns-packet from 5.3.1 to 5.4.0 in /src/packages/excalidraw (#6305)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-03-03 13:20:53 +01:00
Aakansha Doshi
0f06fa3851 feat: create bound container from text (#6301)
* feat: create container from text

* fix lint and spec

* fix

* round off dims

* ceil

* review fixes

* fix

* Add specs

* fix

* fix z-index and type

* consider group

* consider linear bindings

* lint
2023-03-03 17:40:42 +05:30
Aakansha Doshi
1ce933d2f5 fix: compute bounding box correctly for text element when multiple element resizing (#6307) 2023-03-03 17:34:11 +05:30
David Luzar
15655acb5a fix: use jotai scope for editor-specific atoms (#6308) 2023-03-03 11:58:36 +00:00
dependabot[bot]
d5b264c2d2 build(deps): bump http-cache-semantics from 4.1.0 to 4.1.1 in /dev-docs (#6192)
Bumps [http-cache-semantics](https://github.com/kornelski/http-cache-semantics) from 4.1.0 to 4.1.1.
- [Release notes](https://github.com/kornelski/http-cache-semantics/releases)
- [Commits](https://github.com/kornelski/http-cache-semantics/compare/v4.1.0...v4.1.1)

---
updated-dependencies:
- dependency-name: http-cache-semantics
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-03-01 14:51:36 +05:30
Aakansha Doshi
bd4424bbe3 fix: consider arrow for bound text element (#6297)
* fix: consider arrow for bound text element

* add spec
2023-02-28 19:53:30 +05:30
Aakansha Doshi
38fc51b4e3 fix: text never goes beyond max width for unbound text elements (#6288) 2023-02-27 16:54:29 +05:30
David Luzar
e1dc748aef fix: svg text baseline (#6285
* fix: svg text baseline

* fix for multiline
2023-02-26 12:51:44 +01:00
Aakansha Doshi
0e95e2b386 fix: compute container height from bound text correctly (#6273)
* fix: compute container height from bound text correctly

* fix specs

* Add tests
2023-02-23 17:39:02 +05:30
Aakansha Doshi
9659254fd6 feat: improve text measurements in bound containers (#6187)
* feat: move to canvas measureText

* calcualte height with better heuristic

* improve heuristic more

* remove vertical offset as its not needed

* lint

* calculate width of individual char and ceil to calculate width and remove adjustment factor

* push the word if equal to max width

* update height when text overflows for vertical alignment top/bottom

* remove the hack of updating height when line mismatch as its not needed

* remove scroll height and calculate the height instead

* remove unused code

* fix

* remove

* use math.ceil for whole width instead of individual chars

* fix tests

* fix

* fix

* redraw text bounding box instead when font loaded to fix alignment as well

* fix

* fix

* fix

* Add a 0.05px extra only for firefox

* Add spec

* stop taking ceil and increase firefox editor width by 0.05px

* Ad 0.05px in safari too

* lint

* lint

* remove baseline from measureFontSizeFromWH

* don't redraw on font load

* lint

* refactor name and signature
2023-02-23 16:33:10 +05:30
Tengku Farhan
39b96cb011 fix: fit mobile toolbar and make scrollable (#6270)
Co-authored-by: dwelle <luzar.david@gmail.com>
2023-02-23 11:24:04 +01:00
David Luzar
04a8c22f39 fix: rerender i18n in host components on lang change (#6224) 2023-02-22 14:01:23 +00:00
Excalidraw Bot
e4506be3e8 chore: Update translations from Crowdin (#6191) 2023-02-22 11:23:10 +00:00
Hikaru Yoshino
1e816e87bf fix: indenting via tab clashing with IME compositor (#6258) 2023-02-22 12:10:29 +01:00
Aakansha Doshi
5368ddef74 fix: improve text wrapping inside rhombus and more fixes (#6265)
* fix: improve text wrapping inside rhombus

* Add comments

* specs

* fix: shift resize and multiple element regression for ellipse and rhombus

* use container width for scaling font size

* fix

* fix multiple resize

* lint

* redraw on submit

* redraw only newly pasted elements

* no padding when center

* fix tests

* fix

* dont add padding in rhombus when aligning

* refactor

* fix

* move getMaxContainerHeight and getMaxContainerWidth to textElement.ts

* Add specs
2023-02-22 16:28:12 +05:30
Aakansha Doshi
88ff32e9b3 fix: improve text wrapping in ellipse and alignment (#6172)
* fix: improve text wrapping in ellipse

* compute height when font properties updated

* fix alignment

* fix alignment when resizing

* fix

* ad padding

* always compute height when redrawing bounding box and refactor

* lint

* fix specs

* fix

* redraw text bounding box when pasted or refreshed

* fix

* Add specs

* fix

* restore on font load

* add comments
2023-02-21 12:36:43 +05:30
Jan Klass
0fcbddda8e docs: Fix outdated link in README.md (#6263) 2023-02-20 09:44:25 +00:00
Aakansha Doshi
b9ba407f96 feat: Bind text to container if double clicked on filled shape or stroke (#6250)
* feat: bind text to container when clicked on filled shape or element stroke

* Bind if double clicked on stroke as well

* remove

* specs

* remove

* shuffle

* fix

* back to normal
2023-02-16 20:46:51 +05:30
Aakansha Doshi
5acb99777a docs: fix typo (#6252) 2023-02-16 19:45:41 +05:30
David Luzar
b107c9af2a docs: fix next.js example (#6241) 2023-02-15 15:14:15 +01:00
Milos Vetesnik
c587b85b4e docs: new readme (#6240)
Co-authored-by: David Luzar <luzar.david@gmail.com>
2023-02-15 14:45:06 +01:00
Luka Hietala
9686141113 docs: Fixed broken codesandbox link in the dev-docs (#6229)
fixed broken link
2023-02-15 05:31:07 +00:00
Aakansha Doshi
0d7ee891e0 feat: Make repair and refreshDimensions configurable in restoreElements (#6238)
* fix: don't repair during reconcilation

* Add opts to restoreElement and enable refreshDimensions and repair via config

* remove

* update changelog

* fix tests

* rename to repairBindings
2023-02-15 10:41:11 +05:30
Aakansha Doshi
71fb60394a docs: enable Algolia for search (#6230) 2023-02-13 17:39:11 +05:30
Aakansha Doshi
c9d18ecab6 fix: don't allow blank space in collab name (#6211)
* don't allow blank space in collab name

* add spec

* prevent blank
2023-02-09 15:51:49 +05:30
DanielJGeiger
8c1168ef33 refactor: Make the example React app reusable without duplication (#6188) 2023-02-07 12:41:20 +05:30
Dejavu Moe
c3c45a8c37 fix: docker build architecture:linux/amd64 error occur on linux/arm64 instance (#6197)
fix docker build
when in linux/arm64 use docker buildx plugin to build linux/amd64 image, a build error will occur causing the build to break
2023-02-07 11:44:31 +05:30
Matthieu Rossignon
a8e6028c33 feat: show error message when not connected to internet while collabo… (#6165)
Co-authored-by: dwelle <luzar.david@gmail.com>
Resolves https://github.com/excalidraw/excalidraw/issues/5994
2023-02-04 15:03:39 +01:00
Jang Min
11e2f90ca1 feat: shortcut for clearCanvas confirmDialog (#6114)
Co-authored-by: dwelle <luzar.david@gmail.com>
resolve https://github.com/excalidraw/excalidraw/issues/5818
2023-02-04 13:33:40 +01:00
Excalidraw Bot
4db87a0b6a chore: Update translations from Crowdin (#6150) 2023-02-04 10:04:15 +01:00
David Luzar
4414069617 feat: disable canvas smoothing (antialiasing) for right-angled elements (#6186)Co-authored-by: Ignacio Cuadra <67276174+ignacio-cuadra@users.noreply.github.com>
* feat: disable canvas smoothing for text and other types

* disable smoothing for all right-angled elements

* Update src/renderer/renderElement.ts

Co-authored-by: Ignacio Cuadra <67276174+ignacio-cuadra@users.noreply.github.com>

* Update src/renderer/renderElement.ts

Co-authored-by: Ignacio Cuadra <67276174+ignacio-cuadra@users.noreply.github.com>

* fix lint

* always enable smoothing while zooming

---------

Co-authored-by: Ignacio Cuadra <67276174+ignacio-cuadra@users.noreply.github.com>
2023-02-03 17:07:14 +01:00
Ryan Di
a9c5bdb878 fix: sort bound text elements to fix text duplication z-index error (#5130)
* fix: sort bound text elements to fix text duplication z-index error

* improve & sort groups & add tests

* fix backtracking and discontiguous groups

---------

Co-authored-by: dwelle <luzar.david@gmail.com>
2023-02-02 16:23:39 +08:00
Aakansha Doshi
5a0334f37f fix: hide welcome screen on mobile once user interacts (#6185)
* fix: hide welcome screen on mobile once started drawing

* Add specs
2023-02-02 12:58:45 +05:30
Aakansha Doshi
d8a4ca6911 docs: show last updated time and author (#6183)
docs:show last updated time and author
2023-02-01 21:09:23 +05:30
Aakansha Doshi
eb9eeefc63 fix: edit link in docs (#6182) 2023-02-01 20:27:31 +05:30
Aakansha Doshi
f23cdc47ee docs: migrating dev docs to docusaurus :) (#6073)
* docs: migrating existing docs to docosaraus :)

* log broken links

* lint :p

* fix

* divide the doc into diff categories

* fix

* order sidebars and more

* fix lint

* point to installation

* making docs better :)

* fix

* renaming git

* renaming git

* fix links

* fix

* update readme

* fix

* resolve duplicate url and make /docs as base url

* fix

* move main docs as well

* making docs better

* support mdx

* update og

* fix title

* upgrade docusarus to stable version

* use draculla theme

* fix

* make entire sidebar collapsable

* live editor for footer wohoo

* render excalidraw only on client to fix the prod build

* migrate MainMenu to live editor too :)

* lint :p

* cleanup integration and use live editor and tabs

* fix

* Add welcome screen doc

* Live Collaboration comp docs

* Add collaborator example

* Add example

* add more

* remove isCollaborating

* Rewrite ref and move to sidebar

* change color of links inside pre

* add initial data

* fix lint

* Add styling

* fix lint

* Add example for customizing styles

* fix lint

* fix

* fix lint

* Add link to livecollabtrigger

* fix

* rewrite UIOptions to sidebar

* move initialdata to sidebar

* move render props to sidebar and rewrite renderTopRightUI and renderCustomStats

* rewrite renderSidebar

* update og

* update url for testing

* fix url

* update readme

* fix style

* tweaks

* Add highlight comp to highlight text

* Add bash syntax highlight

* fix

* tweaks

* fix

* rewrite export utilities

* fix restore

* rewrite utils

* move constants to sidebar

* update readme

* add copyright

* fix links style

* Add linkedin

* tweaks

* rename package to @excalidraw/excalidraw

* enable algolia with dummy creds

* tweaks to integration doc

* tweak WelcomeScreen docs to reflect upcoming API changes

* tweak components intro

* tweak nomenclature

* fix admonition

* rename `components` sidebar item and change order of components list

* uncollapse package section in sidebar

* show level 4 haeadings in TOC

* remove algolia

* remove unused assets

* capitalize C

* tweak

* rename components to App

* rename components -> children-components in the routes

* move notable used tools to intro

* update MainMenu docs with `onSelect` preventDefault behavior

* change sidebar label for children components

* use code

* tweak README & docs intro

* tweak package development doc

* make scrollbar gutter stable

* tweak api intro

* add admonition for export utils

* use next

* wip

* wip

* make excalidraw examples use current color theme & prefer system

* fix welcomescreen docs

* use latest temp release

* fix component order

* revert wip changes

* use next

* tweak

* increase height to fix welcome screen hint

* tweak editor height

* update excal version

* wrap Excal with forwardRef to fix refs

* migrate contributing.md

* fix broken links

---------

Co-authored-by: dwelle <luzar.david@gmail.com>
2023-02-01 19:57:54 +05:30
Aakansha Doshi
f68f4cb9e0 docs: release @excalidraw/excalidraw@0.14.2 🎉 (#6181) 2023-02-01 19:08:56 +05:30
Aakansha Doshi
71fb573750 fix: horizontal padding when aligning bound text containers (#6180)
* fix: horizontal padding when aligning bound text containers

* Add specs

* fix
2023-02-01 18:54:08 +05:30
David Luzar
7562d9b533 fix: make tunnels work in multi-instance scenarios (#6178)
* fix: make tunnels work in multi-instance scenarios

* factor tunnels out

* use tunnel-rat fork until upsteam updated
2023-02-01 10:46:17 +05:30
David Luzar
e6de1fe4a4 feat: rewrite public UI component rendering using tunnels (#6117)
* feat: rewrite public UI component rendering using tunnels

* factor out into components

* comments

* fix variable naming

* fix not hiding welcomeScreen

* factor out AppFooter and memoize components

* remove `UIOptions.welcomeScreen` and render only from host app

* factor out tunnels into own file

* update changelog. Keep `UIOptions.welcomeScreen` as deprecated

* update changelog

* lint

---------

Co-authored-by: Aakansha Doshi <aakansha1216@gmail.com>
2023-01-31 13:53:20 +01:00
Aakansha Doshi
3a141ca77a fix: add 1px width to the container to calculate more accurately (#6174)
* fix: add 1px width to the container to calculate accurately

* fix tests
2023-01-30 18:52:56 +05:30
JUNYI OU
5ae39c9292 fix: quick typo fix (#6167) 2023-01-29 14:22:25 +01:00
Aakansha Doshi
e41ea9562b fix: set the width correctly using measureText in editor (#6162) 2023-01-28 12:09:53 +01:00
Ignacio Cuadra
b52c8943e4 fix: 🐛 broken emojis when wrap text (#6153)
* fix: 🐛 broken emojis when wrap text

* refactor: Delete unnecessary "else" (reduce indentation)

* fix: remove code block that causes the emojis to disappear

* Apply suggestions from code review

Co-authored-by: David Luzar <luzar.david@gmail.com>

* fix: 🚑 possibly undefined value

* Add spec

Co-authored-by: David Luzar <luzar.david@gmail.com>
Co-authored-by: Aakansha Doshi <aakansha1216@gmail.com>
2023-01-26 11:49:21 +05:30
Aakansha Doshi
cf38c0f933 fix: declare css variable for font in excalidraw so its available in host (#6160)
declar css variable for font in excalidraw so its available in host
2023-01-25 15:44:20 +05:30
David Luzar
1db078a3dc feat: close MainMenu and Library dropdown on item select (#6152) 2023-01-23 16:54:35 +01:00
David Luzar
d4afd66268 feat: add hand/panning tool (#6141)
* feat: add hand/panning tool

* move hand tool right of tool lock separator

* tweak i18n

* rename `panning` -> `hand`

* toggle between last tool and hand on `H` shortcut

* hide properties sidebar when `hand` active

* revert to rendering HandButton manually due to mobile toolbar
2023-01-23 16:12:28 +01:00
David Luzar
849e6a0c86 fix: button background and svg sizes (#6155)
* fix: button background color fallback

* fix svg width/height
2023-01-23 16:10:04 +01:00
Nishant-l
f03f5c948d style: change in ExportButton style (#6147) (#6148)
Co-authored-by: David Luzar <luzar.david@gmail.com>
2023-01-22 12:37:18 +00:00
David Luzar
d2b698093c feat: show copy-as-png export button on firefox and show steps how to enable it (#6125)
* feat: hide copy-as-png shortcut from help dialog if not supported

* fix: support firefox if clipboard.write supported

* show shrotcut in firefox and instead show error message how to enable the flag support

* widen to TypeError because minification

* show copy-as-png on firefox even if it will throw
2023-01-22 12:33:15 +01:00
Excalidraw Bot
0f1720be61 chore: Update translations from Crowdin (#6077) 2023-01-22 12:19:21 +01:00
David Luzar
d0b33d35db build: temporarily disable pre-commit (#6132) 2023-01-19 13:50:42 +01:00
Aakansha Doshi
d6a5ef1936 docs: release @excalidraw/excalidraw@0.14.1 🎉 (#6112) 2023-01-16 16:08:03 +05:30
Aakansha Doshi
c7a11f5cd2 docs: release @excalidraw/excalidraw@0.14.0 🎉 (#6109) 2023-01-13 16:08:29 +05:30
Aakansha Doshi
893c487add fix: remove overflow hidden from button (#6110)
remove overflow hidden from button
2023-01-13 15:44:33 +05:30
Aakansha Doshi
99fdffdab7 fix: mobile tools positioning (#6107)
* fix: mobile tools positioning

* add var for padding

* use css var

* new line

* stupid mistake

* lint
2023-01-13 00:57:25 +05:30
Aakansha Doshi
faad8a65f1 feat: new Live Collaboration Component API (#6104)
* feat: new Live Collaboration Component API

* namespace export icons into `icons` dictionary and lowercase

* update readme and changelog

* review fixes

* fix

* fix

* update docs

* remove

* allow button rest props

* update docs

* docs

* add `WelcomeScreen.Center.MenuItemLiveCollaborationTrigger`

* fix lint

* update changelog

Co-authored-by: dwelle <luzar.david@gmail.com>
2023-01-12 23:28:57 +05:30
Aakansha Doshi
9d04479f98 fix: renamed folder MainMenu->main-menu and support rest props (#6103)
* renamed folder MainMenu -> main-menu

* rename ariaLabel -> aria-label and dataTestId -> data-testid

* allow rest props

* fix

* lint

* add ts check

* ts for div

* fix

* fix

* fix
2023-01-12 20:40:09 +05:30
David Luzar
599a8f3c6f feat: support WelcomeScreen customization API (#6048) 2023-01-12 15:49:28 +01:00
David Luzar
0982da38fe feat: render unknown supplied children to UI (#6096) 2023-01-12 15:20:16 +01:00
Barnabás Molnár
699897f71b feat: generic button export (#6092)
Co-authored-by: dwelle <luzar.david@gmail.com>
2023-01-12 13:06:00 +01:00
Aakansha Doshi
328ff6c32d fix: use position absolute for mobile misc tools (#6099) 2023-01-11 19:47:40 +05:30
David Luzar
618442299f fix: React.memo resolvers not accounting for all props (#6042) 2023-01-09 10:24:17 +01:00
Antonio Della Fortuna
06b45e0cfc fix: image horizontal flip fix + improved tests (#5799)
Co-authored-by: Antonio Della Fortuna <a.dellafortuna00@gmail.com>
Co-authored-by: dwelle <luzar.david@gmail.com>
fixes https://github.com/excalidraw/excalidraw/issues/5784
2023-01-08 16:19:13 +00:00
David Luzar
809d5ba17f fix: png-exporting does not preserve angles correctly for flipped images (#6085)
* fix: png-exporting does not preserve angles correctly for flipped images

* refactor related code

* simplify further and comment
2023-01-08 16:22:04 +01:00
David Luzar
40d53d9231 fix: stale appState of MainMenu defaultItems rendered from Actions (#6074) 2023-01-06 14:32:55 +01:00
dependabot[bot]
9803a85381 build(deps): bump loader-utils from 2.0.3 to 2.0.4 in /src/packages/excalidraw (#5892)
build(deps): bump loader-utils in /src/packages/excalidraw

Bumps [loader-utils](https://github.com/webpack/loader-utils) from 2.0.3 to 2.0.4.
- [Release notes](https://github.com/webpack/loader-utils/releases)
- [Changelog](https://github.com/webpack/loader-utils/blob/v2.0.4/CHANGELOG.md)
- [Commits](https://github.com/webpack/loader-utils/compare/v2.0.3...v2.0.4)

---
updated-dependencies:
- dependency-name: loader-utils
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-01-06 12:31:06 +05:30
dependabot[bot]
72784f9d29 build(deps): bump loader-utils from 2.0.3 to 2.0.4 (#5905)
Bumps [loader-utils](https://github.com/webpack/loader-utils) from 2.0.3 to 2.0.4.
- [Release notes](https://github.com/webpack/loader-utils/releases)
- [Changelog](https://github.com/webpack/loader-utils/blob/v2.0.4/CHANGELOG.md)
- [Commits](https://github.com/webpack/loader-utils/compare/v2.0.3...v2.0.4)

---
updated-dependencies:
- dependency-name: loader-utils
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-01-06 12:30:43 +05:30
dependabot[bot]
e3249f930c build(deps): bump json5 from 1.0.1 to 1.0.2 (#6076)
Bumps [json5](https://github.com/json5/json5) from 1.0.1 to 1.0.2.
- [Release notes](https://github.com/json5/json5/releases)
- [Changelog](https://github.com/json5/json5/blob/main/CHANGELOG.md)
- [Commits](https://github.com/json5/json5/compare/v1.0.1...v1.0.2)

---
updated-dependencies:
- dependency-name: json5
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-01-06 06:59:44 +00:00
dependabot[bot]
cbe0d34f1a build(deps): bump decode-uri-component from 0.2.0 to 0.2.2 (#5963)
Bumps [decode-uri-component](https://github.com/SamVerschueren/decode-uri-component) from 0.2.0 to 0.2.2.
- [Release notes](https://github.com/SamVerschueren/decode-uri-component/releases)
- [Commits](https://github.com/SamVerschueren/decode-uri-component/compare/v0.2.0...v0.2.2)

---
updated-dependencies:
- dependency-name: decode-uri-component
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-01-06 12:26:23 +05:30
dependabot[bot]
bed8093e47 build(deps): bump json5 from 2.2.1 to 2.2.3 in /dev-docs (#6060)
Bumps [json5](https://github.com/json5/json5) from 2.2.1 to 2.2.3.
- [Release notes](https://github.com/json5/json5/releases)
- [Changelog](https://github.com/json5/json5/blob/main/CHANGELOG.md)
- [Commits](https://github.com/json5/json5/compare/v2.2.1...v2.2.3)

---
updated-dependencies:
- dependency-name: json5
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-01-06 12:25:48 +05:30
dependabot[bot]
1255ca2e84 build(deps): bump json5 from 2.2.1 to 2.2.3 in /src/packages/utils (#6061)
Bumps [json5](https://github.com/json5/json5) from 2.2.1 to 2.2.3.
- [Release notes](https://github.com/json5/json5/releases)
- [Changelog](https://github.com/json5/json5/blob/main/CHANGELOG.md)
- [Commits](https://github.com/json5/json5/compare/v2.2.1...v2.2.3)

---
updated-dependencies:
- dependency-name: json5
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-01-06 12:25:35 +05:30
dependabot[bot]
14d02dcaea build(deps): bump json5 from 2.2.1 to 2.2.3 in /src/packages/excalidraw (#6062)
Bumps [json5](https://github.com/json5/json5) from 2.2.1 to 2.2.3.
- [Release notes](https://github.com/json5/json5/releases)
- [Changelog](https://github.com/json5/json5/blob/main/CHANGELOG.md)
- [Commits](https://github.com/json5/json5/compare/v2.2.1...v2.2.3)

---
updated-dependencies:
- dependency-name: json5
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-01-06 12:25:20 +05:30
Excalidraw Bot
9747223705 chore: Update translations from Crowdin (#6052)
* New translations en.json (German)

* Auto commit: Calculate translation coverage

* New translations en.json (Hindi)

* New translations en.json (Marathi)

* New translations en.json (Hindi)

* Auto commit: Calculate translation coverage

* New translations en.json (Galician)

* Auto commit: Calculate translation coverage

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Arabic)

* New translations en.json (Bulgarian)

* New translations en.json (Catalan)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Basque)

* New translations en.json (Finnish)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Korean)

* New translations en.json (Kurdish)

* New translations en.json (Lithuanian)

* New translations en.json (Dutch)

* New translations en.json (Punjabi)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Slovak)

* New translations en.json (Slovenian)

* New translations en.json (Swedish)

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Vietnamese)

* New translations en.json (Galician)

* New translations en.json (Portuguese, Brazilian)

* New translations en.json (Indonesian)

* New translations en.json (Persian)

* New translations en.json (Tamil)

* New translations en.json (Bengali)

* New translations en.json (Marathi)

* New translations en.json (Norwegian Nynorsk)

* New translations en.json (Kazakh)

* New translations en.json (Latvian)

* New translations en.json (Hindi)

* New translations en.json (Burmese)

* New translations en.json (Chinese Traditional, Hong Kong)

* New translations en.json (Sinhala)

* New translations en.json (Norwegian Bokmal)

* New translations en.json (Occitan)

* New translations en.json (Kabyle)

* Auto commit: Calculate translation coverage

* New translations en.json (Chinese Simplified)

* Auto commit: Calculate translation coverage

* New translations en.json (Chinese Traditional)

* New translations en.json (Chinese Traditional)

* New translations en.json (Norwegian Bokmal)

* Auto commit: Calculate translation coverage

* New translations en.json (Latvian)

* Auto commit: Calculate translation coverage

* New translations en.json (Romanian)

* Auto commit: Calculate translation coverage

* New translations en.json (Slovenian)

* Auto commit: Calculate translation coverage

* New translations en.json (Spanish)

* New translations en.json (Russian)

* Auto commit: Calculate translation coverage

* New translations en.json (German)

* Auto commit: Calculate translation coverage

* New translations en.json (Vietnamese)

* Auto commit: Calculate translation coverage

* New translations en.json (Hindi)

* Auto commit: Calculate translation coverage

* New translations en.json (Dutch)

* Auto commit: Calculate translation coverage

* New translations en.json (Marathi)

* Auto commit: Calculate translation coverage

* New translations en.json (Latvian)

* New translations en.json (French)

* Auto commit: Calculate translation coverage

* New translations en.json (French)

* Auto commit: Calculate translation coverage

* New translations en.json (Portuguese, Brazilian)

* Auto commit: Calculate translation coverage

* New translations en.json (Japanese)

* Auto commit: Calculate translation coverage
2023-01-06 12:23:14 +05:30
EternalWill43
0f11f7da15 fix: HelpDialog (#6072) 2023-01-05 17:43:19 +01:00
Aakansha Doshi
8420aecb34 feat: new Menu Component API (#6034)
* feat: new Menu Component API

* allow valid children types

* introduce menu group to group items

* Add lang footer

* use display name

* displayName

* define types inside

* fix default menu

* add json export to menu

* fix

* simplify expression

* put open menu into own compo to optimize perf

So that we don't rerun `useOutsideClickHook` (and rebind event listeners
all the time)

* naming tweaks

* rename MenuComponents->MenuDefaultItems and export default items from Menu.Items

* import Menu.scss in Menu.tsx

* move menu scss to excal app

* Don't filter children inside menu group

* move E+ out of socials

* support style prop for MenuItem and MenuGroup

* Support header in menu group and add Excalidraw links header for default items in social section

* rename header to title

* fix padding for lang

* render menu in mobile

* review fixes

* tweaks

* Export collaborators and show in mobile menu

* revert .env

* lint :p

* again lint

* show correct actions in view mode for mobile

* Whitelist Collaborators Comp

* mobile styling

* padding

* don't show nerds when menu open in mobile

* lint :(

* hide shortcuts

* refactor userlist to support mobile and keep a wrapper comp for excal app

* use only UserList

* render only on mobile for default items

* remove unused hooks

* Show collab button in menu when onCollabButtonClick present and hide export when UIOptions.canvasActions.export is false

* fix tests

* lint

* inject userlist inside menu on mobile

* revert userlist

* move menu socials to default menu

* fix collab

* use meny in library

* Make Menu generic and create hamburgemenu for public excal menu and use menu in library as well

* use appState.openMenu for mobile

* fix tests

* styling fixes and support style and class name in menu content

* fix test

* rename MenuDefaultItems->DefaultItems

* move footer css to its own comp

* rename HamburgerMenu -> MainMenu

* rename menu -> dropdownMenu and update classes, onClick->onToggle

* close main menu when dialog closes

* by bye filtering

* update docs

* fix lint

* update example, docs for useDevice and footer in mobile, rename menu ->DropDownMenu everywhere

* spec

* remove isMenuOpenAtom and set openMenu as canvas for main menu, render decreases in specs :)

* [temp] remove cyclic depenedency to fix build

* hack- update appstate to sync lang change

* Add more specs

* wip: rewrite MainMenu footer

* fix margin

* fix snaps

* not needed as lang list no more imported

* simplify custom footer rendering

* Add DropdownMenuItemLink and DropdownMenuItemCustom and update API, docs

* fix `MainMenu.ItemCustom`

* naming

* use onSelect and base class for custom items

* fix lint

* fix snap

* use custom item for lang

* update docs

* fix

* properly use `MainMenu.ItemCustom` for `LanguageList`

* add margin top to custom items

* flex

Co-authored-by: dwelle <luzar.david@gmail.com>
2023-01-05 22:04:23 +05:30
David Luzar
08afb857c3 fix: show error message on collab save failure (#6063)
* fix: show error message on collab save failure

* comment
2023-01-02 23:53:51 +01:00
David Luzar
9230c8f4d2 fix: remove ga from docker build (#6059)
* fix: remove ga from docker build

* lint

* fix debug
2023-01-02 21:21:57 +01:00
Excalidraw Bot
dba8f812f1 chore: Update translations from Crowdin (#5807)
Co-authored-by: David Luzar <luzar.david@gmail.com>
2023-01-01 17:01:46 +00:00
DanielJGeiger
fdd8552637 feat: Scroll using PageUp and PageDown (#6038)
* feat: Scroll using PageUp and PageDown

* support x-axis via `shift` & enable in viewMode

* tweak test

Co-authored-by: dwelle <luzar.david@gmail.com>
2022-12-31 15:54:37 -06:00
Aakansha Doshi
c8370b394c fix: use displayName since name gets stripped off when uglifying/minifiyng in production (#6036)
fix: use displayName since name gets stripped off when uglifying/minifiy in production
2022-12-27 15:17:13 +05:30
David Luzar
5fcf6a4845 fix: remove background from wysiwyg when editing arrow label (#6033)
Co-authored-by: Aakansha Doshi <aakansha1216@gmail.com>
2022-12-23 19:40:52 +01:00
Aakansha Doshi
af3b93c410 fix: use canvas measureText to calculate width in measureText (#6030)
* fix: use canvas measureText to calculate width in measureText

* calculate multiline width correctly using canvas measure text and rename functions

* set correct width when pasting in bound container

* take existing value + new pasted

* remove debugger :p

* fix snaps
2022-12-23 21:45:49 +05:30
David Luzar
2595e0de82 fix: restoring deleted bindings (#6029)
* fix: restoring deleted bindings

* add tests

* add one more test

* merge restore tests files
2022-12-23 11:48:14 +01:00
Aakansha Doshi
8ec5f7b982 feat: support shrinking text containers to original height when text removed (#6025)
* fix:cache bind text containers height so that it could autoshrink to original height when text deleted

* revert

* rename

* reset cache when resized

* safe check

* restore original containr height when text is unbind

* update cache when redrawing bounding box

* reset cache when unbind

* make type-safe

* add specs

* skip one test

* remoe mock

* fix

Co-authored-by: dwelle <luzar.david@gmail.com>
2022-12-23 11:57:48 +05:30
David Luzar
9086674b27 chore: bump typescript @ 4.9.4 (#6024) 2022-12-22 19:32:21 +01:00
zsviczian
6273d56524 fix: ColorPicker getColor (#5949)
Co-authored-by: dwelle <luzar.david@gmail.com>
2022-12-22 12:53:49 +00:00
David Luzar
7e135c4e22 feat: move contextMenu into the component tree and control via appState (#6021) 2022-12-21 12:47:09 +01:00
Aakansha Doshi
b704705ed8 feat: render footer as a component instead of render prop (#5970)
* feat: render footer as a component instead of render prop

* Export FooterCenter as footer

* remove useDevice export

* revert some changes

* remove

* add spec

* update specs

* parse children into a dictionary

* factor app footer components into a single file

* Add docs

* split app footer components

Co-authored-by: dwelle <luzar.david@gmail.com>
2022-12-21 14:29:06 +05:30
Aakansha Doshi
d2e371cdf0 fix: don't push whitespace to next line when exceeding max width during wrapping and make sure to use same width of text editor on DOM when measuring dimensions (#5996)
* fix: don't push whitespace to next line when exceeding max width during wrapping

* add a helper function and never push empty line

* use width same as in text area so dimensions are same

* add tests

* make sure dom element has exact same width as text editor
2022-12-21 12:32:43 +05:30
David Luzar
6ab3f0eb74 fix: showing grabbing cursor when holding spacebar (#6015) 2022-12-20 13:22:20 +01:00
David Luzar
539505affd fix: resize sometimes throwing on missing null-checks (#6013) 2022-12-18 23:06:01 +01:00
David Luzar
95d669390f fix: PWA not working after CRA@5 update (#6012)
* fix: PWA not working after CRA@5 update

* fix: fallback to default locale when fetch fails
2022-12-18 22:23:30 +01:00
David Luzar
73a45e1988 fix: not properly restoring element stroke and bg colors (#6002) 2022-12-16 18:19:26 +01:00
David Luzar
88c2812949 fix: Avatar outline on safari & center (#5997) 2022-12-16 18:18:34 +01:00
David Luzar
bdb14723b3 fix: chart pasting not working due to removing tab characters (#5987) 2022-12-16 18:18:27 +01:00
David Luzar
cc9e764585 feat: allow readonly actions to be used in viewMode (#5982) 2022-12-11 22:57:03 +01:00
Ryan Di
8466eb0eef fix: apply the right type of roundness when pasting styles (#5979)
* fix: only paste roundness when target and source elements are of the same type

* apply roundness when pasting across different types

* simplify

Co-authored-by: dwelle <luzar.david@gmail.com>
2022-12-10 20:12:09 +08:00
Aakansha Doshi
0ebe6292a3 chore: add display name to context providers (#5974)
* chore: add display name to context providers

* fix typo
2022-12-08 16:19:44 +00:00
Ryan Di
5854ac3eed feat: better default radius sizes for rectangles (#5553)
Co-authored-by: Ryan <diweihao@bytedance.com>
Co-authored-by: dwelle <luzar.david@gmail.com>
2022-12-08 16:48:49 +01:00
Aakansha Doshi
65d84a5d5a fix: remove editor onpaste handler (#5971) 2022-12-07 23:05:57 +05:30
fennghuang
808366d112 fix: remove blank space (#5950) 2022-12-06 17:40:53 +05:30
Fer
9311c99d3c fix: Galego and Kurdî missing in languages plus two locale typos (#5954) 2022-12-06 17:34:22 +05:30
DanielJGeiger
d131b31084 fix: ExcalidrawArrowElement rather than ExcalidrawArrowEleement (#5955) 2022-12-06 17:30:03 +05:30
Aakansha Doshi
0111ca2050 fix: renderFooter styling (#5962) 2022-12-06 16:42:54 +05:30
Aakansha Doshi
a1dcd6d984 build: move release scripts to use release branch (#5958) 2022-12-06 16:33:02 +05:30
David Luzar
fffd4957db fix: repair element bindings on restore (#5956)
* fix: repair element bindings on restore

* fix dropping non-text bound elements

* be more conservative
2022-12-06 00:23:47 +01:00
Aakansha Doshi
760fd7b3a6 feat: Support labels for arrow 🔥 (#5723)
* feat: support arrow with text

* render arrow -> clear rect-> render text

* move bound text when linear elements move

* fix centering cursor when linear element rotated

* fix y coord when new line added and container has 3 points

* update text position when 2nd point moved

* support adding label on top of 2nd point when 3 points are present

* change linear element editor shortcut to cmd+enter and fix tests

* scale bound text points when resizing via bounding box

* ohh yeah rotation works :)

* fix coords when updating text properties

* calculate new position after rotation always from original position

* rotate the bound text by same angle as parent

* don't rotate text and make sure dimensions and coords are always calculated from original point

* hardcoding the text width for now

* Move the linear element when bound text hit

* Rotation working yaay

* consider text element angle when editing

* refactor

* update x2 coords if needed when text updated

* simplify

* consider bound text to be part of bounding box when hit

* show bounding box correctly when multiple element selected

* fix typo

* support rotating multiple elements

* support multiple element resizing

* shift bound text to mid point when odd points

* Always render linear element handles inside editor after element rendered so point is visible for bound text

* Delete bound text when point attached to it deleted

* move bound to mid segement mid point when points are even

* shift bound text when points nearby deleted and handle segment deletion

* Resize working :)

* more resize fixes

* don't update cache-its breaking delete points, look for better soln

* update mid point cache for bound elements when updated

* introduce wrapping when resizing

* wrap when resize for 2 pointer linear elements

* support adding text for linear elements with more than 3 points

* export to svg  working :)

* clip from nearest enclosing element with non transparent color if present when exporting and fill with correct color in canvas

* fix snap

* use visible elements

* Make export to svg work with Mask :)

* remove id

* mask canvas linear element area where label is added

* decide the position of bound text during render

* fix coords when editing

* fix multiple resize

* update cache when bound text version changes

* fix masking when rotated

* render text in correct position in preview

* remove unnecessary code

* fix masking when rotating linear element

* fix masking with zoom

* fix mask in preview for export

* fix offsets in export view

* fix coords on svg export

* fix mask when element rotated in svg

* enable double-click to enter text

* fix hint

* Position cursor correctly and text dimensiosn when height of element is negative

* don't allow 2 pointer linear element with bound text width to go beyond min width

* code cleanup

* fix freedraw

* Add padding

* don't show vertical align action for linear element containers

* Add specs for getBoundTextElementPosition

* more specs

* move some utils to linearElementEditor.ts

* remove only :p

* check absoulte coods in test

* Add test to hide vertical align for linear eleemnt with bound text

* improve export preview

* support labels only for arrows

* spec

* fix large texts

* fix tests

* fix zooming

* enter line editor with cmd+double click

* Allow points to move beyond min width/height for 2 pointer arrow with bound text

* fix hint for line editing

* attempt to fix arrow getting deselected

* fix hint and shortcut

* Add padding of 5px when creating bound text and add spec

* Wrap bound text when arrow binding containers moved

* Add spec

* remove

* set boundTextElementVersion to null if not present

* dont use cache when version mismatch

* Add a padding of 5px vertically when creating text

* Add box sizing content box

* Set bound elements when text element created to fix the padding

* fix zooming in editor

* fix zoom in export

* remove globalCompositeOperation and use clearRect instead of fillRect
2022-12-05 21:03:13 +05:30
Aakansha Doshi
1933116261 fix: don't allow whitespaces for bound text (#5939)
* fix: don't allow whitespaces for bound text

* fix

* remove

* remove empty else

* fix

* fix

* fix
2022-12-02 16:47:50 +05:30
David Luzar
8b33ca3a1a fix: bindings do not survive history serialization (#5942) 2022-12-02 10:36:18 +00:00
Aakansha Doshi
a86224c797 fix: Dedupe boundElement ids when container duplicated with alt+drag (#5938)
* Dedupe boundElement ids when container duplicated with alt+drag and add spec

* set to null by default
2022-12-01 20:44:33 +05:30
Aakansha Doshi
66bbfda460 fix: scale font correctly when using shift (#5935)
* fix: scale font correctly when using shift

* fix

* Empty-Commit

* Add spec

* fix
2022-11-30 15:55:01 +05:30
Aakansha Doshi
88b2f4707d refactor: remove unnecessary code (#5933) 2022-11-29 16:41:02 +05:30
Aakansha Doshi
25c6056b03 feat: Don't add midpoint until dragged beyond a threshold (#5927)
* Don't add midpoint until dragged beyond a threshold

* remove unnecessary code

* fix tests

* fix

* add spec

* remove isMidpoint

* cleanup

* fix threshold for zoom

* split into shouldAddMidpoint and addMidpoint

* wrap in flushSync for synchronous updates

* remove threshold for line editor and add spec

* [unrelated] fix stack overflow state update

* fix tests

* don't drag arrow when dragging to add mid point

* add specs

Co-authored-by: dwelle <luzar.david@gmail.com>
2022-11-29 00:01:53 +05:30
Antonio Della Fortuna
baf9651d34 feat: changed text copy/paste behaviour (#5786)
Co-authored-by: dwelle <luzar.david@gmail.com>
Co-authored-by: Antonio Della Fortuna <a.dellafortuna00@gmail.com>
2022-11-26 23:44:26 +01:00
Aakansha Doshi
d2181847be fix: Always bind to container selected by user (#5880)
* fix: Always bind to container selected by user

* Don't bind to container when using text tool

* adjust z-index for bound text

* fix

* Add spec

* Add test

* Allow double click on transparent container and add spec

* fix spec

* adjust z-index only when binding

* update index

* fix

* add index check

* Update src/scene/Scene.ts

Co-authored-by: dwelle <luzar.david@gmail.com>
2022-11-25 15:45:34 +05:30
David Luzar
1f117995d9 fix: fonts not rendered on init if loadingdone not fired (#5923)
* fix: fonts not rendered on init if `loadingdone` not fired

* remove unnecessary check
2022-11-23 21:15:32 +01:00
David Luzar
52c96a6870 chore: bump create-react-app to 5.0.1 (from 4.0.3) (#5904) 2022-11-19 18:28:21 +01:00
David Luzar
81fd2350a9 fix: stop replacing del word with Delete (#5897) 2022-11-19 18:28:08 +01:00
David Luzar
8ed0fc2c87 fix: remove legacy React.render() from the editor (#5893) 2022-11-19 18:27:54 +01:00
Aakansha Doshi
96a5d6548b fix: allow adding text via enter only for text containers (#5891)
* fix: allow adding text via enter only for text containers

* fix

* fix

* fix

* move check isTextElement outside
2022-11-17 15:26:18 +05:30
dependabot[bot]
4709b953e7 build(deps): bump loader-utils from 2.0.3 to 2.0.4 in /dev-docs (#5885)
Bumps [loader-utils](https://github.com/webpack/loader-utils) from 2.0.3 to 2.0.4.
- [Release notes](https://github.com/webpack/loader-utils/releases)
- [Changelog](https://github.com/webpack/loader-utils/blob/v2.0.4/CHANGELOG.md)
- [Commits](https://github.com/webpack/loader-utils/compare/v2.0.3...v2.0.4)

---
updated-dependencies:
- dependency-name: loader-utils
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-17 15:14:29 +05:30
David Luzar
bbe0c35f66 fix: stop font loadingdone loop when rendering element SVGs (#5883)
* fix: stop font `loadingdone` loop when rendering element SVGs

* update snaps

* stop updating scene elements array if no change was made

* always re-render if invalidating element shape
2022-11-15 21:02:57 +01:00
David Luzar
d273acb7e4 fix: refresh text dimensions only after font load done (#5878)
* fix: refresh text dimensions only after font load done

* fix snaps
2022-11-15 00:15:02 +01:00
dependabot[bot]
3c0b29d85f build(deps): bump loader-utils from 2.0.0 to 2.0.4 in /src/packages/utils (#5874)
build(deps): bump loader-utils in /src/packages/utils

Bumps [loader-utils](https://github.com/webpack/loader-utils) from 2.0.0 to 2.0.4.
- [Release notes](https://github.com/webpack/loader-utils/releases)
- [Changelog](https://github.com/webpack/loader-utils/blob/v2.0.4/CHANGELOG.md)
- [Commits](https://github.com/webpack/loader-utils/compare/v2.0.0...v2.0.4)

---
updated-dependencies:
- dependency-name: loader-utils
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-14 15:49:05 +05:30
DanielJGeiger
bfbaeae67f fix: Correctly paste contents parsed by JSON.parse() as text. (#5868)
* Fix #5867

* Add test.

* Add tests to clipboard.test.ts

Co-authored-by: Aakansha Doshi <aakansha1216@gmail.com>
2022-11-14 14:02:54 +05:30
dependabot[bot]
74b9885955 build(deps): bump minimatch from 3.0.4 to 3.1.2 in /src/packages/excalidraw (#5861)
build(deps): bump minimatch in /src/packages/excalidraw

Bumps [minimatch](https://github.com/isaacs/minimatch) from 3.0.4 to 3.1.2.
- [Release notes](https://github.com/isaacs/minimatch/releases)
- [Commits](https://github.com/isaacs/minimatch/compare/v3.0.4...v3.1.2)

---
updated-dependencies:
- dependency-name: minimatch
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-14 13:51:10 +05:30
dependabot[bot]
2cbe869a13 build(deps): bump socket.io-parser from 3.3.2 to 3.3.3 (#5862)
Bumps [socket.io-parser](https://github.com/socketio/socket.io-parser) from 3.3.2 to 3.3.3.
- [Release notes](https://github.com/socketio/socket.io-parser/releases)
- [Changelog](https://github.com/socketio/socket.io-parser/blob/main/CHANGELOG.md)
- [Commits](https://github.com/socketio/socket.io-parser/compare/3.3.2...3.3.3)

---
updated-dependencies:
- dependency-name: socket.io-parser
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-14 13:50:15 +05:30
dependabot[bot]
a48607eb25 build(deps): bump loader-utils from 2.0.2 to 2.0.3 in /src/packages/excalidraw (#5851)
build(deps): bump loader-utils in /src/packages/excalidraw

Bumps [loader-utils](https://github.com/webpack/loader-utils) from 2.0.2 to 2.0.3.
- [Release notes](https://github.com/webpack/loader-utils/releases)
- [Changelog](https://github.com/webpack/loader-utils/blob/v2.0.3/CHANGELOG.md)
- [Commits](https://github.com/webpack/loader-utils/compare/v2.0.2...v2.0.3)

---
updated-dependencies:
- dependency-name: loader-utils
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-14 13:49:39 +05:30
zsviczian
7831b6e74b fix: SVG element attributes in icons.tsx (#5871)
Update icons.tsx
2022-11-14 11:42:28 +05:30
dependabot[bot]
640affe7c0 build(deps): bump loader-utils from 2.0.2 to 2.0.3 in /dev-docs (#5853)
Bumps [loader-utils](https://github.com/webpack/loader-utils) from 2.0.2 to 2.0.3.
- [Release notes](https://github.com/webpack/loader-utils/releases)
- [Changelog](https://github.com/webpack/loader-utils/blob/v2.0.3/CHANGELOG.md)
- [Commits](https://github.com/webpack/loader-utils/compare/v2.0.2...v2.0.3)

---
updated-dependencies:
- dependency-name: loader-utils
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-10 15:02:18 +05:30
DanielJGeiger
335aff8838 fix: merge existing text with new when pasted (#5856)
* Fix #5855.

* fix test

* tweak

* Add specs

* Add more snaps

Co-authored-by: Aakansha Doshi <aakansha1216@gmail.com>
2022-11-09 23:39:53 +05:30
Aakansha Doshi
dc97dc30bf fix: disable FAST_REFRESH to fix live reload (#5852) 2022-11-09 17:13:20 +05:30
DanielJGeiger
a0ecfed4cd fix: Paste clipboard contents into unbound text elements (#5849)
* Fix #5848.

* Add test.

* some tweaks

Co-authored-by: Aakansha Doshi <aakansha1216@gmail.com>
2022-11-09 11:30:22 +05:30
Aakansha Doshi
e201e79cd0 fix: compute dimensions of container correctly when text pasted on container (#5845)
* fix: compute dimensions of container correctly when text pasted on container

* add test

* remove only
2022-11-08 19:50:41 +05:30
Pritam Sangani
e1c5c706c6 build: stops ignoring .env files from docker context so env variables get set during react app build. (#5809)
build: stops ignoring .env.development and .env.production files from docker context so env variables get set during react app build.
* this fixes the issue where Browse Libraries button link was broken in
  docker/self-hosted versions of excalidraw
2022-11-07 16:48:38 +05:30
David Luzar
bdc56090d7 feat: reintroduce x shortcut for freedraw (#5840) 2022-11-06 23:07:15 +01:00
David Luzar
58accc9310 feat: tweak toolbar shortcuts & remove library shortcut (#5832) 2022-11-06 20:14:53 +01:00
David Luzar
b91158198e feat: clean unused images only after 24hrs (local-only) (#5839)
* feat: clean unused images only after 24hrs (local-only)

* fix test

* make optional for now
2022-11-06 19:41:14 +01:00
David Luzar
938ce241ff feat: refetch errored/pending images on collab room init load (#5833) 2022-11-05 15:55:14 +01:00
David Luzar
0228646507 fix: line editor points rendering below elements (#5781)
* fix: line editor points rendering below elements

* add test
2022-11-05 11:35:53 +01:00
Aakansha Doshi
25ea97d0f9 test: fix failing tests and API (#5823)
* tests: fix failing tests

* fix selection.test.tsx

* fix excalidraw.test.tsx and don't show image export when SaveAsImage is false in UIOptions.canvasActions

* more fixes

* require fake index db in setUp test to fix the tests

* fix regression
2022-11-04 18:22:21 +05:30
David Luzar
8d5d68e589 feat: stop deleting whole line when no point select in line editor (#5676)
* feat: stop deleting whole line when no point select in line editor

* Comments typo

Co-authored-by: DanielJGeiger <1852529+DanielJGeiger@users.noreply.github.com>
2022-11-02 14:52:32 +01:00
David Luzar
6c15d9948b fix: syncing 1-point lines to remote clients (#5677) 2022-11-02 14:39:12 +01:00
David Luzar
e8fba43cf6 fix: incorrectly selecting linear elements on creation while tool-locked (#5785) 2022-11-02 14:38:58 +01:00
Paul Yi
2e5c798c71 fix: Corrected typo in toggle theme shortcut (#5813) 2022-11-02 14:32:21 +01:00
David Luzar
8c298336fc fix: hide canvas-modifying UI in view mode (#5815)
* fix: hide canvas-modifying UI in view mode

* add class for better targeting

* fix missing `key`

* fix: useOutsideClick not working in view mode
2022-11-01 22:25:12 +01:00
David Luzar
7f91cdc0c9 fix: fix vertical/horizntal centering icons (#5812) 2022-11-01 18:39:31 +01:00
Barnabás Molnár
6334bd832f feat: editor redesign 🔥 (#5780)
* Placed eraser into shape switcher (top toolbar).
Redesigned top toolbar.

* Redesigned zoom and undo-redo buttons.

* Started redesigning left toolbar.

* Redesigned help dialog.

* Colour picker now somewhat in line with new design

* [WIP] Changed a bunch of icons.
TODO: organise new icons.

* [WIP] Organised a bunch of icons. Still some to do

* [WIP] Started working on hamburger menu.

* Fixed some bugs with hamburger menu.

* Menu and left toolbar positioning.

* Added some more items to hamburger menu.

* Changed some icons.

* Modal/dialog styling & bunch of fixes.

* Some more dialog improvements & fixes.

* Mobile menu changes.

* Menu can now be closed with outside click.

* Collab avatars and button changes.

* Icon sizing. Left toolbar positioning.

* Implemented welcome screen rendering logic.

* [WIP] Welcome screen content + design.

* Some more welcome screen content and design.

* Merge fixes.

* Tweaked icon set.

* Welcome screen darkmode fix.

* Content updates.

* Various small fixes & adjustments.
Moved language selection into menu.
Fixed some problematic icons.
Slightly moved encryption icon.

* Sidebar header redesign.

* Libraries content rendering logic + some styling.

* Somem more library sidebar styling.

* Publish library dialog styling.

* scroll-back-to-content btn styling

* ColorPicker positioning.

* Library button styling.

* ColorPicker positioning "fix".

* Misc adjustments.

* PenMode button changes.

* Trying to make mobile somewhat usable.

* Added a couple of icons.

* Added some shortcuts.

* Prevent welcome screen flickering.
Fix issue with welcome screen interactivity.
Don't show sidebar button when docked.

* Icon sizing on smaller screens.

* Sidebar styling changes.

* Alignment button... well... alignments.

* Fix inconsistent padding in left toolbar.

* HintViewer changes.

* Hamburger menu changes.

* Move encryption badge back to its original pos.

* Arrowhead changes.
Active state, colours + stronger shadow.

* Added new custom font.

* Fixed bug with library button not rendering.

* Fixed issue with lang selection colours.

* Add tooltips for undo, redo.

* Address some dark mode contrast issues.

* (Re)introduce counter for selectedItems in sidebar

* [WIP] Tweaked bounding box colour & padding.

* Dashed bounding box for remote clients.

* Some more bounding box tweaks.

* Removed docking animation for now...

* Address some RTL issues.

* Welcome screen responsiveness.

* use lighter selection color in dark mode & align naming

* use rounded corners for transform handles

* use lighter gray for welcomeScreen text in dark mode

* disable selection on dialog buttons

* change selection button icon

* fix library item width being flexible

* library: visually align spinner with first section heading

* lint

* fix scrollbar color in dark mode & make thinner

* adapt properties panel max-height

* add shrotcut label to save-to-current-file

* fix unrelated `useOutsideClick` firing for active modal

* add promo color to e+ menu item

* fix type

* lowered button size

* fix transform handles raidus not accounting for zoom

* attempt fix for excal logo on safari

* final fix for excal logo on safari

* fixing fhd resolution button sized

* remove TODO shortcut

* Collab related styling changes.
Expanding avatar list no longer offsets top toolbar.
Added active state & collaborator count badge for collab button.

* Tweaked collab button active colours.

* Added active style to collab btn in hamburger menu

* Remove unnecessary comment.

* Added back promo link for non (signed in) E+ users

* Go to E+ button added for signed in E+ users.

* Close menu & dropdown on modal close.

* tweak icons & fix rendering on smaller sizes [part one]

* align welcomeScreen icons with other UI

* switch icon resize mq to `device-width`

* disable welcomeScreen items `:hover` when selecting on canvas

* change selection box color and style

* reduce selection padding and fix group selection styling

* improve collab cursor styling

- make name borders round
- hide status when "active"
- remove black/gray colors

* add Twitter to hamburger menu

* align collab button

* add shortcut for image export dialog

* revert yarn.lock

* fix more tabler icons

* slightly better-looking penMode button

* change penMode button & tooltip

* revert hamburger menu icon

* align padding on lang picker & canvas bg

* updated robot txt to allow twitter bot and fb bot

* added new OG and tweaked the OG state

* add tooltip to collab button

* align style for scroll-to-content button

* fix pointer-events around toolbar

* fix decor arrow positioning and RTL

* fix welcomeScreen-item active state in dark mode

* change `load` button copy

* prevent shadow anim when opening a docked sidebar

* update E+ links ga params

* show redirect-to-eplus welcomeScreen subheading for signed-in users

* make more generic

* add ga for eplus redirect button

* change copy and icons for hamburger export buttons

* update snaps

* trim the username to account for trailing spaces

* tweaks around decor breakpoints

* fix linear element editor test

* remove .env change

* remove `it.only`

Co-authored-by: dwelle <luzar.david@gmail.com>
Co-authored-by: Maielo <maielo.mv@gmail.com>
Co-authored-by: Aakansha Doshi <aakansha1216@gmail.com>
2022-11-01 17:29:58 +01:00
David Luzar
4d26993c8f chore: fix yarn.lock file (#5803)
* chore: fix yarn.lock file

* ts fix
2022-10-31 13:44:08 +01:00
zsviczian
1e69609ce4 fix: consistent use of ZOOM_STEP (#5801)
introduce MIN_ZOOM, consistent use of ZOOM_STEP
2022-10-31 06:23:05 +01:00
Alex Kim
f5379d1563 fix: multiple elements resizing regressions (#5586) 2022-10-29 13:01:38 +02:00
David Luzar
c8f6e3faa8 fix: restore text dimensions (#5432)
* fix: restore text dimensions

* fix tests

* update readme & changelog

* reduce API surface area by always refreshing dimensions for full `restore()`
2022-10-28 23:31:56 +02:00
Aakansha Doshi
36bf17cf59 fix: changelog typo (#5795)
* fix: changelog typo

* fix

* fix

* Empty-Commit
2022-10-27 20:43:03 +05:30
Aakansha Doshi
75458c3192 docs: release @excalidraw/excalidraw@0.13.0 🎉 (#5793) 2022-10-27 18:28:44 +05:30
Excalidraw Bot
4cd25253bf chore: Update translations from Crowdin (#5738)
* New translations en.json (Ukrainian)

* New translations en.json (Czech)

* Auto commit: Calculate translation coverage

* New translations en.json (Czech)

* Auto commit: Calculate translation coverage

* New translations en.json (Czech)

* Auto commit: Calculate translation coverage

* New translations en.json (French)

* New translations en.json (Bengali)

* Auto commit: Calculate translation coverage

* New translations en.json (Ukrainian)

* New translations en.json (Ukrainian)

* Auto commit: Calculate translation coverage

* New translations en.json (French)

* New translations en.json (Turkish)

* Auto commit: Calculate translation coverage

* New translations en.json (Turkish)

* Auto commit: Calculate translation coverage

* New translations en.json (Hindi)

* New translations en.json (Kurdish)

* Auto commit: Calculate translation coverage

* New translations en.json (Kurdish)

* New translations en.json (Chinese Simplified)

* Auto commit: Calculate translation coverage

* New translations en.json (Kurdish)

* Auto commit: Calculate translation coverage

* New translations en.json (Kurdish)

* Auto commit: Calculate translation coverage

* New translations en.json (Kurdish)

* Auto commit: Calculate translation coverage

* New translations en.json (Italian)

* Auto commit: Calculate translation coverage

* New translations en.json (Portuguese, Brazilian)

* Auto commit: Calculate translation coverage

* Add Kurdi

* Add Galego

Co-authored-by: Aakansha Doshi <aakansha1216@gmail.com>
2022-10-25 16:26:55 +05:30
Aakansha Doshi
78e254fb30 fix: Ungroup short cut key (#5779)
* fix: Ungroup short cut key

* Add specs
2022-10-21 14:04:56 +05:30
Jakob Guddas
79bd3b8cda fix: replaced KeyboardEvent.code with KeyboardEvent.key for all letters (#5523)
* fix: Replaced KeyboardEvent.code with KeyboardEvent.key for all letters

* fix: reverted all keybindings that included alt to use code instead of keys

Co-authored-by: Aakansha Doshi <aakansha1216@gmail.com>
2022-10-21 00:31:26 +05:30
Antonio Della Fortuna
55110bf1b8 fix: free draw flip not scaling correctly (#5752) 2022-10-19 00:03:58 +02:00
David Luzar
941b2d7042 feat: render library into Sidebar on mobile (#5774) 2022-10-18 10:29:14 +05:30
David Luzar
e9067de173 feat: refactor Sidebar into standalone reusable component (#5663)
🚀!
2022-10-17 12:25:24 +02:00
David Luzar
fdc462ec01 fix: wait for window focus until prompting for library install (#5751) 2022-10-10 16:08:13 +02:00
zsviczian
d1441afec9 feat: additional drag and drop image format support (webp, bmp, ico) (#5749)
Update constants.ts
2022-10-09 19:15:30 -07:00
Pompette
3298aaf0c7 fix: update perfect freehand library to fix extra dot (#5727) 2022-10-08 21:00:33 +02:00
Joseph Buchma
e9a224a0de fix: restoreElementWithProperties drops "parent" property (#5742)
Co-authored-by: Yosyp Buchma <yo@yosyp.co>
Co-authored-by: dwelle <luzar.david@gmail.com>
2022-10-08 20:42:05 +02:00
Excalidraw Bot
76cf560914 chore: Update translations from Crowdin (#5692)
* New translations en.json (Polish)

* Auto commit: Calculate translation coverage

* New translations en.json (Korean)

* Auto commit: Calculate translation coverage

* New translations en.json (Russian)

* New translations en.json (Polish)

* New translations en.json (Bengali)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Vietnamese)

* New translations en.json (Galician)

* New translations en.json (Portuguese, Brazilian)

* New translations en.json (Indonesian)

* New translations en.json (Persian)

* New translations en.json (Tamil)

* New translations en.json (Marathi)

* New translations en.json (Swedish)

* New translations en.json (Norwegian Nynorsk)

* New translations en.json (Kazakh)

* New translations en.json (Latvian)

* New translations en.json (Hindi)

* New translations en.json (Burmese)

* New translations en.json (Chinese Traditional, Hong Kong)

* New translations en.json (Sinhala)

* New translations en.json (Norwegian Bokmal)

* New translations en.json (Occitan)

* New translations en.json (Turkish)

* New translations en.json (Slovenian)

* New translations en.json (Korean)

* New translations en.json (German)

* New translations en.json (Russian)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Arabic)

* New translations en.json (Bulgarian)

* New translations en.json (Catalan)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (Greek)

* New translations en.json (Slovak)

* New translations en.json (Basque)

* New translations en.json (Finnish)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Lithuanian)

* New translations en.json (Dutch)

* New translations en.json (Punjabi)

* New translations en.json (Portuguese)

* New translations en.json (Kabyle)

* Auto commit: Calculate translation coverage

* New translations en.json (Korean)

* New translations en.json (Slovenian)

* New translations en.json (Chinese Traditional)

* Auto commit: Calculate translation coverage

* New translations en.json (Italian)

* New translations en.json (German)

* New translations en.json (Occitan)

* Auto commit: Calculate translation coverage

* New translations en.json (Romanian)

* Auto commit: Calculate translation coverage

* New translations en.json (Dutch)

* Auto commit: Calculate translation coverage

* New translations en.json (French)

* Auto commit: Calculate translation coverage

* New translations en.json (Latvian)

* Auto commit: Calculate translation coverage

* New translations en.json (Marathi)

* New translations en.json (Hindi)

* Auto commit: Calculate translation coverage

* New translations en.json (Slovak)

* Auto commit: Calculate translation coverage

* New translations en.json (Indonesian)

* Auto commit: Calculate translation coverage

* New translations en.json (Hindi)

* Auto commit: Calculate translation coverage
2022-10-03 11:32:29 +05:30
Aakansha Doshi
6c1246ef77 feat: Enter and Exit line editor via context menu (#5719)
* feat: Enter and exit line editor via context menu

* Add tests

* fix

* review fixes

* fix
2022-09-27 16:54:50 +05:30
zsviczian
b477c2ad6b fix: horizontal text alignment for bound text when resizing (#5721)
* Update textElement.ts

* Add test

* don't use modifier keys when not needed

Co-authored-by: Aakansha Doshi <aakansha1216@gmail.com>
2022-09-27 16:44:41 +05:30
Aakansha Doshi
4cb6f09559 fix: set the dimensions of bound text correctly (#5710)
* fix: set the dimensions of bound text correctly

* use original Text when wrapping

* fix text align

* fix specs

* fix

* newline
2022-09-22 15:40:38 +05:30
Aakansha Doshi
8636ef1017 refactor: create a util to compute container dimensions for bound text container (#5708) 2022-09-19 15:30:37 +05:30
Ryan Di
3a776f8795 fix: image-mirroring in export preview and in exported svg (#5700)
Co-authored-by: dwelle <luzar.david@gmail.com>
2022-09-17 21:02:13 +00:00
zsviczian
9929a2be6f fix: double state update incorrectly resetting state (#5704)
Co-authored-by: David Luzar <luzar.david@gmail.com>
2022-09-17 20:21:27 +02:00
David Luzar
9cccac1458 feat: further reduce darkmode init flash (#5701)
* feat: further reduce darkmode init flash

* fix lint

* tweak doc

* colocate code
2022-09-16 17:12:24 +02:00
Abdullah Adeel
7eaf47c9d4 fix: default light theme splash 🔧 (#5660)
Co-authored-by: dwelle <luzar.david@gmail.com>
Co-authored-by: Aakansha Doshi <aakansha1216@gmail.com>
2022-09-16 13:59:03 +00:00
599 changed files with 79818 additions and 45691 deletions

5
.codesandbox/Dockerfile Normal file
View File

@@ -0,0 +1,5 @@
FROM node:18-bullseye
# Vite wants to open the browser using `open`, so we
# need to install those utils.
RUN apt update -y && apt install -y xdg-utils

View File

@@ -27,7 +27,10 @@
"start": {
"name": "Start Excalidraw",
"command": "yarn start",
"runAtStart": true
"runAtStart": true,
"preview": {
"port": 3000
}
},
"test": {
"name": "Run Tests",
@@ -37,7 +40,11 @@
"install-deps": {
"name": "Install Dependencies",
"command": "yarn install",
"restartOn": { "files": ["yarn.lock"] }
"restartOn": {
"files": ["yarn.lock"],
"branch": false,
"resume": false
}
}
}
}

View File

@@ -1,5 +1,6 @@
*
!.env
!.env.development
!.env.production
!.eslintrc.json
!.npmrc
!.prettierrc

View File

@@ -1,22 +1,42 @@
REACT_APP_BACKEND_V2_GET_URL=https://json-dev.excalidraw.com/api/v2/
REACT_APP_BACKEND_V2_POST_URL=https://json-dev.excalidraw.com/api/v2/post/
VITE_APP_BACKEND_V2_GET_URL=https://json-dev.excalidraw.com/api/v2/
VITE_APP_BACKEND_V2_POST_URL=https://json-dev.excalidraw.com/api/v2/post/
REACT_APP_LIBRARY_URL=https://libraries.excalidraw.com
REACT_APP_LIBRARY_BACKEND=https://us-central1-excalidraw-room-persistence.cloudfunctions.net/libraries
VITE_APP_LIBRARY_URL=https://libraries.excalidraw.com
VITE_APP_LIBRARY_BACKEND=https://us-central1-excalidraw-room-persistence.cloudfunctions.net/libraries
# collaboration WebSocket server (https://github.com/excalidraw/excalidraw-room)
REACT_APP_WS_SERVER_URL=http://localhost:3002
VITE_APP_WS_SERVER_URL=http://localhost:3002
# set this only if using the collaboration workflow we use on excalidraw.com
REACT_APP_PORTAL_URL=
VITE_APP_PORTAL_URL=
REACT_APP_FIREBASE_CONFIG='{"apiKey":"AIzaSyCMkxA60XIW8KbqMYL7edC4qT5l4qHX2h8","authDomain":"excalidraw-oss-dev.firebaseapp.com","projectId":"excalidraw-oss-dev","storageBucket":"excalidraw-oss-dev.appspot.com","messagingSenderId":"664559512677","appId":"1:664559512677:web:a385181f2928d328a7aa8c"}'
VITE_APP_PLUS_LP=https://plus.excalidraw.com
VITE_APP_PLUS_APP=https://app.excalidraw.com
VITE_APP_FIREBASE_CONFIG='{"apiKey":"AIzaSyCMkxA60XIW8KbqMYL7edC4qT5l4qHX2h8","authDomain":"excalidraw-oss-dev.firebaseapp.com","projectId":"excalidraw-oss-dev","storageBucket":"excalidraw-oss-dev.appspot.com","messagingSenderId":"664559512677","appId":"1:664559512677:web:a385181f2928d328a7aa8c"}'
# put these in your .env.local, or make sure you don't commit!
# must be lowercase `true` when turned on
#
# whether to enable Service Workers in development
REACT_APP_DEV_ENABLE_SW=
VITE_APP_DEV_ENABLE_SW=
# whether to disable live reload / HMR. Usuaully what you want to do when
# debugging Service Workers.
REACT_APP_DEV_DISABLE_LIVE_RELOAD=
VITE_APP_DEV_DISABLE_LIVE_RELOAD=
VITE_APP_DISABLE_TRACKING=true
FAST_REFRESH=false
# The port the run the dev server
VITE_APP_PORT=3000
#Debug flags
# To enable bounding box for text containers
VITE_APP_DEBUG_ENABLE_TEXT_CONTAINER_BOUNDING_BOX=
# Set this flag to false if you want to open the overlay by default
VITE_APP_COLLAPSE_OVERLAY=true
# Set this flag to false to disable eslint
VITE_APP_ENABLE_ESLINT=true

View File

@@ -1,17 +1,18 @@
REACT_APP_BACKEND_V2_GET_URL=https://json.excalidraw.com/api/v2/
REACT_APP_BACKEND_V2_POST_URL=https://json.excalidraw.com/api/v2/post/
VITE_APP_BACKEND_V2_GET_URL=https://json.excalidraw.com/api/v2/
VITE_APP_BACKEND_V2_POST_URL=https://json.excalidraw.com/api/v2/post/
REACT_APP_LIBRARY_URL=https://libraries.excalidraw.com
REACT_APP_LIBRARY_BACKEND=https://us-central1-excalidraw-room-persistence.cloudfunctions.net/libraries
VITE_APP_LIBRARY_URL=https://libraries.excalidraw.com
VITE_APP_LIBRARY_BACKEND=https://us-central1-excalidraw-room-persistence.cloudfunctions.net/libraries
VITE_APP_PORTAL_URL=https://portal.excalidraw.com
VITE_APP_PLUS_LP=https://plus.excalidraw.com
VITE_APP_PLUS_APP=https://app.excalidraw.com
REACT_APP_PORTAL_URL=https://portal.excalidraw.com
# Fill to set socket server URL used for collaboration.
# Meant for forks only: excalidraw.com uses custom REACT_APP_PORTAL_URL flow
REACT_APP_WS_SERVER_URL=
# Meant for forks only: excalidraw.com uses custom VITE_APP_PORTAL_URL flow
VITE_APP_WS_SERVER_URL=
REACT_APP_FIREBASE_CONFIG='{"apiKey":"AIzaSyAd15pYlMci_xIp9ko6wkEsDzAAA0Dn0RU","authDomain":"excalidraw-room-persistence.firebaseapp.com","databaseURL":"https://excalidraw-room-persistence.firebaseio.com","projectId":"excalidraw-room-persistence","storageBucket":"excalidraw-room-persistence.appspot.com","messagingSenderId":"654800341332","appId":"1:654800341332:web:4a692de832b55bd57ce0c1"}'
VITE_APP_FIREBASE_CONFIG='{"apiKey":"AIzaSyAd15pYlMci_xIp9ko6wkEsDzAAA0Dn0RU","authDomain":"excalidraw-room-persistence.firebaseapp.com","databaseURL":"https://excalidraw-room-persistence.firebaseio.com","projectId":"excalidraw-room-persistence","storageBucket":"excalidraw-room-persistence.appspot.com","messagingSenderId":"654800341332","appId":"1:654800341332:web:4a692de832b55bd57ce0c1"}'
# production-only vars
REACT_APP_GOOGLE_ANALYTICS_ID=UA-387204-13
REACT_APP_PLUS_APP=https://app.excalidraw.com
VITE_APP_DISABLE_TRACKING=

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

View File

@@ -2,7 +2,7 @@ name: Auto release excalidraw next
on:
push:
branches:
- master
- release
jobs:
Auto-release-excalidraw-next:
@@ -12,10 +12,10 @@ jobs:
- uses: actions/checkout@v2
with:
fetch-depth: 2
- name: Setup Node.js 14.x
- name: Setup Node.js 18.x
uses: actions/setup-node@v2
with:
node-version: 14.x
node-version: 18.x
- name: Set up publish access
run: |
npm config set //registry.npmjs.org/:_authToken ${NPM_TOKEN}

View File

@@ -32,10 +32,10 @@ jobs:
with:
ref: ${{ steps.sha.outputs.result }}
fetch-depth: 2
- name: Setup Node.js 14.x
- name: Setup Node.js 18.x
uses: actions/setup-node@v2
with:
node-version: 14.x
node-version: 18.x
- name: Set up publish access
run: |
npm config set //registry.npmjs.org/:_authToken ${NPM_TOKEN}

View File

@@ -3,7 +3,7 @@ name: Build Docker image
on:
push:
branches:
- master
- release
jobs:
build-docker:

View File

@@ -3,7 +3,7 @@ name: Cancel previous runs
on:
push:
branches:
- master
- release
pull_request:
jobs:

View File

@@ -9,10 +9,10 @@ jobs:
steps:
- uses: actions/checkout@v2
- name: Setup Node.js 14.x
- name: Setup Node.js 18.x
uses: actions/setup-node@v2
with:
node-version: 14.x
node-version: 18.x
- name: Install and lint
run: |

View File

@@ -14,10 +14,10 @@ jobs:
with:
token: ${{ secrets.PUSH_TRANSLATIONS_COVERAGE_PAT }}
- name: Setup Node.js 14.x
- name: Setup Node.js 18.x
uses: actions/setup-node@v2
with:
node-version: 14.x
node-version: 18.x
- name: Create report file
run: |

View File

@@ -3,7 +3,7 @@ name: Publish Docker
on:
push:
branches:
- master
- release
jobs:
publish-docker:

View File

@@ -1,7 +1,7 @@
name: Semantic PR title
on:
pull_request_target:
pull_request:
types:
- opened
- edited

View File

@@ -3,17 +3,17 @@ name: New Sentry production release
on:
push:
branches:
- master
- release
jobs:
sentry:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup Node.js 14.x
- name: Setup Node.js 18.x
uses: actions/setup-node@v2
with:
node-version: 14.x
node-version: 18.x
- name: Install and build
run: |
yarn --frozen-lockfile

30
.github/workflows/size-limit.yml vendored Normal file
View File

@@ -0,0 +1,30 @@
name: "Bundle Size check @excalidraw/excalidraw"
on:
pull_request:
branches:
- master
jobs:
size:
runs-on: ubuntu-latest
env:
CI_JOB_NUMBER: 1
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Setup Node.js 18.x
uses: actions/setup-node@v3
with:
node-version: 18.x
- name: Install
run: yarn --frozen-lockfile
- name: Install in src/packages/excalidraw
run: yarn --frozen-lockfile
working-directory: src/packages/excalidraw
env:
CI: true
- uses: andresz1/size-limit-action@v1
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
build_script: build:umd
skip_step: install
directory: src/packages/excalidraw

26
.github/workflows/test-coverage-pr.yml vendored Normal file
View File

@@ -0,0 +1,26 @@
name: Test Coverage PR
on:
pull_request:
jobs:
coverage:
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
steps:
- uses: actions/checkout@v2
- name: "Install Node"
uses: actions/setup-node@v2
with:
node-version: "18.x"
- name: "Install Deps"
run: yarn --frozen-lockfile
- name: "Test Coverage"
run: yarn test:coverage
- name: "Report Coverage"
if: always() # Also generate the report if tests are failing
uses: davelosert/vitest-coverage-report-action@v2
with:
github-token: ${{ secrets.GITHUB_TOKEN }}

View File

@@ -7,10 +7,10 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup Node.js 14.x
- name: Setup Node.js 18.x
uses: actions/setup-node@v2
with:
node-version: 14.x
node-version: 18.x
- name: Install and test
run: |
yarn --frozen-lockfile

4
.gitignore vendored
View File

@@ -25,4 +25,6 @@ src/packages/excalidraw/types
src/packages/excalidraw/example/public/bundle.js
src/packages/excalidraw/example/public/excalidraw-assets-dev
src/packages/excalidraw/example/public/excalidraw.development.js
coverage
dev-dist
html

View File

@@ -1,2 +1,2 @@
#!/bin/sh
yarn lint-staged
# yarn lint-staged

1
.npmrc
View File

@@ -1 +1,2 @@
save-exact=true
legacy-peer-deps=true

2
.nvmrc
View File

@@ -1 +1 @@
14
18

View File

@@ -1,63 +1,3 @@
# Contributing
## Setup
### Option 1 - Manual
1. Fork and clone the repo
1. Run `yarn` to install dependencies
1. Create a branch for your PR with `git checkout -b your-branch-name`
> To keep `master` branch pointing to remote repository and make pull requests from branches on your fork. To do this, run:
>
> ```sh
> git remote add upstream https://github.com/excalidraw/excalidraw.git
> git fetch upstream
> git branch --set-upstream-to=upstream/master master
> ```
### Option 2 - CodeSandbox
1. Go to https://codesandbox.io/s/github/excalidraw/excalidraw
1. Connect your GitHub account
1. Go to Git tab on left side
1. Tap on `Fork Sandbox`
1. Write your code
1. Commit and PR automatically
## Pull Request Guidelines
Don't worry if you get any of the below wrong, or if you don't know how. We'll gladly help out.
### Title
Make sure the title starts with a semantic prefix:
- **feat**: A new feature
- **fix**: A bug fix
- **docs**: Documentation only changes
- **style**: Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)
- **refactor**: A code change that neither fixes a bug nor adds a feature
- **perf**: A code change that improves performance
- **test**: Adding missing tests or correcting existing tests
- **build**: Changes that affect the build system or external dependencies (example scopes: gulp, broccoli, npm)
- **ci**: Changes to our CI configuration files and scripts (example scopes: Travis, Circle, BrowserStack, SauceLabs)
- **chore**: Other changes that don't modify src or test files
- **revert**: Reverts a previous commit
### Changelog
Add a brief description of your pull request to the changelog located here: [`src/packages/excalidraw/CHANGELOG.md`](src/packages/excalidraw/CHANGELOG.md)
Notes:
- Make sure to prepend to the section corresponding with the semantic prefix you selected in the title
- Link to your pull request - this will require updating the CHANGELOG _after_ creating the pull request
### Testing
Once you submit your pull request it will automatically be tested. Be sure to check the results of the test and fix any issues that arise.
It's also a good idea to consider if your change should include additional tests. This is highly recommended for new features or bug-fixes. For example, it's good practice to create a test for each bug you fix which ensures that we don't regress the code in the future.
Finally - always manually test your changes using the convenient staging environment deployed for each pull request. As much as local development attempts to replicate production, there can still be subtle differences in behavior. For larger features consider testing your change in multiple browsers as well.
Head over to the [docs](https://docs.excalidraw.com/docs/introduction/contributing)

View File

@@ -1,9 +1,9 @@
FROM node:14-alpine AS build
FROM node:18 AS build
WORKDIR /opt/node_app
COPY package.json yarn.lock ./
RUN yarn --ignore-optional
RUN yarn --ignore-optional --network-timeout 600000
ARG NODE_ENV=production

301
README.md
View File

@@ -1,201 +1,126 @@
<div align="center" style="display:flex;flex-direction:column;">
<a href="https://excalidraw.com">
<img width="540" src="./public/og-image-sm.png" alt="Excalidraw logo: Sketch handrawn like diagrams." />
</a>
<h3>Virtual whiteboard for sketching hand-drawn like diagrams.<br>Collaborative and end-to-end encrypted.</h3>
<p>
<a href="https://twitter.com/Excalidraw">
<img alt="Follow Excalidraw on Twitter" src="https://img.shields.io/twitter/follow/excalidraw.svg?label=follow+excalidraw&style=social&logo=twitter">
</a>
<a target="_blank" href="https://crowdin.com/project/excalidraw">
<img src="https://badges.crowdin.net/excalidraw/localized.svg">
</a>
</p>
<p>Ask questions or hang out on our <a target="_blank" href="https://discord.gg/UexuTaE">discord.gg/UexuTaE</a>.</p>
<a href="https://excalidraw.com/" target="_blank" rel="noopener">
<picture>
<source media="(prefers-color-scheme: dark)" alt="Excalidraw" srcset="https://excalidraw.nyc3.cdn.digitaloceanspaces.com/github/excalidraw_github_cover_2_dark.png" />
<img alt="Excalidraw" src="https://excalidraw.nyc3.cdn.digitaloceanspaces.com/github/excalidraw_github_cover_2.png" />
</picture>
</a>
<h4 align="center">
<a href="https://excalidraw.com">Excalidraw Editor</a> |
<a href="https://blog.excalidraw.com">Blog</a> |
<a href="https://docs.excalidraw.com">Documentation</a> |
<a href="https://plus.excalidraw.com">Excalidraw+</a>
</h4>
<div align="center">
<h2>
An open source virtual hand-drawn style whiteboard. </br>
Collaborative and end-to-end encrypted. </br>
<br />
</h2>
</div>
## Try it now
<br />
<p align="center">
<a href="https://github.com/excalidraw/excalidraw/blob/master/LICENSE">
<img alt="Excalidraw is released under the MIT license." src="https://img.shields.io/badge/license-MIT-blue.svg" />
</a>
<a href="https://docs.excalidraw.com/docs/introduction/contributing">
<img alt="PRs welcome!" src="https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat" />
</a>
<a href="https://discord.gg/UexuTaE">
<img alt="Chat on Discord" src="https://img.shields.io/discord/723672430744174682?color=738ad6&label=Chat%20on%20Discord&logo=discord&logoColor=ffffff&widge=false"/>
</a>
<a href="https://twitter.com/excalidraw">
<img alt="Follow Excalidraw on Twitter" src="https://img.shields.io/twitter/follow/excalidraw.svg?label=follow+@excalidraw&style=social&logo=twitter"/>
</a>
</p>
Go to [excalidraw.com](https://excalidraw.com) to start sketching.
<div align="center">
<figure>
<a href="https://excalidraw.com" target="_blank" rel="noopener">
<img src="https://excalidraw.nyc3.cdn.digitaloceanspaces.com/github%2Fproduct_showcase.png" alt="Product showcase" />
</a>
<figcaption>
<p align="center">
Create beautiful hand-drawn like diagrams, wireframes, or whatever you like.
</p>
</figcaption>
</figure>
</div>
Read the latest news and updates on our [blog](https://blog.excalidraw.com). A good start is to see all the updates of [One Year of Excalidraw](https://blog.excalidraw.com/one-year-of-excalidraw/).
## Features
## Supporting Excalidraw
The Excalidraw editor (npm package) supports:
If you like the project, you can become a sponsor at [Open Collective](https://opencollective.com/excalidraw).
- 💯&nbsp;Free & open-source.
- 🎨&nbsp;Infinite, canvas-based whiteboard.
- ✍️&nbsp;Hand-drawn like style.
- 🌓&nbsp;Dark mode.
- 🏗️&nbsp;Customizable.
- 📷&nbsp;Image support.
- 😀&nbsp;Shape libraries support.
- 👅&nbsp;Localization (i18n) support.
- 🖼️&nbsp;Export to PNG, SVG & clipboard.
- 💾&nbsp;Open format - export drawings as an `.excalidraw` json file.
- ⚒️&nbsp;Wide range of tools - rectangle, circle, diamond, arrow, line, free-draw, eraser...
- ➡️&nbsp;Arrow-binding & labeled arrows.
- 🔙&nbsp;Undo / Redo.
- 🔍&nbsp;Zoom and panning support.
[<img src="https://opencollective.com/excalidraw/tiers/sponsors/0/avatar.svg?avatarHeight=120">](https://opencollective.com/excalidraw/tiers/sponsors/0/website) [<img src="https://opencollective.com/excalidraw/tiers/sponsors/1/avatar.svg?avatarHeight=120">](https://opencollective.com/excalidraw/tiers/sponsors/1/website) [<img src="https://opencollective.com/excalidraw/tiers/sponsors/2/avatar.svg?avatarHeight=120">](https://opencollective.com/excalidraw/tiers/sponsors/2/website) [<img src="https://opencollective.com/excalidraw/tiers/sponsors/3/avatar.svg?avatarHeight=120">](https://opencollective.com/excalidraw/tiers/sponsors/3/website) [<img src="https://opencollective.com/excalidraw/tiers/sponsors/4/avatar.svg?avatarHeight=120">](https://opencollective.com/excalidraw/tiers/sponsors/4/website) [<img src="https://opencollective.com/excalidraw/tiers/sponsors/5/avatar.svg?avatarHeight=120">](https://opencollective.com/excalidraw/tiers/sponsors/5/website) [<img src="https://opencollective.com/excalidraw/tiers/sponsors/6/avatar.svg?avatarHeight=120">](https://opencollective.com/excalidraw/tiers/sponsors/6/website) [<img src="https://opencollective.com/excalidraw/tiers/sponsors/7/avatar.svg?avatarHeight=120">](https://opencollective.com/excalidraw/tiers/sponsors/7/website) [<img src="https://opencollective.com/excalidraw/tiers/sponsors/8/avatar.svg?avatarHeight=120">](https://opencollective.com/excalidraw/tiers/sponsors/8/website) [<img src="https://opencollective.com/excalidraw/tiers/sponsors/9/avatar.svg?avatarHeight=120">](https://opencollective.com/excalidraw/tiers/sponsors/9/website) [<img src="https://opencollective.com/excalidraw/tiers/sponsors/10/avatar.svg?avatarHeight=120">](https://opencollective.com/excalidraw/tiers/sponsors/10/website)
## Excalidraw.com
The app hosted at [excalidraw.com](https://excalidraw.com) is a minimal showcase of what you can build with Excalidraw. Its [source code](https://github.com/excalidraw/excalidraw/tree/master/src/excalidraw-app) is part of this repository as well, and the app features:
- 📡&nbsp;PWA support (works offline).
- 🤼&nbsp;Real-time collaboration.
- 🔒&nbsp;End-to-end encryption.
- 💾&nbsp;Local-first support (autosaves to the browser).
- 🔗&nbsp;Shareable links (export to a readonly link you can share with others).
We'll be adding these features as drop-in plugins for the npm package in the future.
## Quick start
Install the [Excalidraw npm package](https://www.npmjs.com/package/@excalidraw/excalidraw):
```
npm install react react-dom @excalidraw/excalidraw
```
or via yarn
```
yarn add react react-dom @excalidraw/excalidraw
```
Don't forget to check out our [Documentation](https://docs.excalidraw.com)!
## Contributing
- Missing something or found a bug? [Report here](https://github.com/excalidraw/excalidraw/issues).
- Want to contribute? Check out our [contribution guide](https://docs.excalidraw.com/docs/introduction/contributing) or let us know on [Discord](https://discord.gg/UexuTaE).
- Want to help with translations? See the [translation guide](https://docs.excalidraw.com/docs/introduction/contributing#translating).
## Integrations
- [VScode extension](https://marketplace.visualstudio.com/items?itemName=pomdtr.excalidraw-editor)
- [npm package](https://www.npmjs.com/package/@excalidraw/excalidraw)
## Who's integrating Excalidraw
[Google Cloud](https://googlecloudcheatsheet.withgoogle.com/architecture) • [Meta](https://meta.com/) • [CodeSandbox](https://codesandbox.io/) • [Obsidian Excalidraw](https://github.com/zsviczian/obsidian-excalidraw-plugin) • [Replit](https://replit.com/) • [Slite](https://slite.com/) • [Notion](https://notion.so/) • [HackerRank](https://www.hackerrank.com/) • and many others
## Sponsors & support
If you like the project, you can become a sponsor at [Open Collective](https://opencollective.com/excalidraw) or use [Excalidraw+](https://plus.excalidraw.com/).
## Thank you for supporting Excalidraw
[<img src="https://opencollective.com/excalidraw/tiers/sponsors/0/avatar.svg?avatarHeight=120"/>](https://opencollective.com/excalidraw/tiers/sponsors/0/website) [<img src="https://opencollective.com/excalidraw/tiers/sponsors/1/avatar.svg?avatarHeight=120"/>](https://opencollective.com/excalidraw/tiers/sponsors/1/website) [<img src="https://opencollective.com/excalidraw/tiers/sponsors/2/avatar.svg?avatarHeight=120"/>](https://opencollective.com/excalidraw/tiers/sponsors/2/website) [<img src="https://opencollective.com/excalidraw/tiers/sponsors/3/avatar.svg?avatarHeight=120"/>](https://opencollective.com/excalidraw/tiers/sponsors/3/website) [<img src="https://opencollective.com/excalidraw/tiers/sponsors/4/avatar.svg?avatarHeight=120"/>](https://opencollective.com/excalidraw/tiers/sponsors/4/website) [<img src="https://opencollective.com/excalidraw/tiers/sponsors/5/avatar.svg?avatarHeight=120"/>](https://opencollective.com/excalidraw/tiers/sponsors/5/website) [<img src="https://opencollective.com/excalidraw/tiers/sponsors/6/avatar.svg?avatarHeight=120"/>](https://opencollective.com/excalidraw/tiers/sponsors/6/website) [<img src="https://opencollective.com/excalidraw/tiers/sponsors/7/avatar.svg?avatarHeight=120"/>](https://opencollective.com/excalidraw/tiers/sponsors/7/website) [<img src="https://opencollective.com/excalidraw/tiers/sponsors/8/avatar.svg?avatarHeight=120"/>](https://opencollective.com/excalidraw/tiers/sponsors/8/website) [<img src="https://opencollective.com/excalidraw/tiers/sponsors/9/avatar.svg?avatarHeight=120"/>](https://opencollective.com/excalidraw/tiers/sponsors/9/website) [<img src="https://opencollective.com/excalidraw/tiers/sponsors/10/avatar.svg?avatarHeight=120"/>](https://opencollective.com/excalidraw/tiers/sponsors/10/website)
<a href="https://opencollective.com/excalidraw#category-CONTRIBUTE" target="_blank"><img src="https://opencollective.com/excalidraw/tiers/backers.svg?avatarHeight=32"/></a>
Last but not least, we're thankful to these companies for offering their services for free:
[![Vercel](./.github/assets/vercel.svg)](https://vercel.com) [![Sentry](./.github/assets/sentry.svg)](https://sentry.io) [![Crowdin](./.github/assets/crowdin.svg)](https://crowdin.com)
## Who's integrating Excalidraw
[Google Cloud](https://googlecloudcheatsheet.withgoogle.com/architecture) • [Meta](https://meta.com/) • [CodeSandbox](https://codesandbox.io/) • [Obsidian Excalidraw](https://github.com/zsviczian/obsidian-excalidraw-plugin) • [Replit](https://replit.com/) • [Slite](https://slite.com/) • [Notion](https://notion.so/) • [HackerRank](https://www.hackerrank.com/) •
## Documentation
### Shortcuts
You can almost do anything with shortcuts. Click on the help icon on the bottom right corner to see them all.
### Curved lines and arrows
Choose line or arrow and click click click instead of drag.
### Charts
You can easily create charts by copy pasting data from Excel or just plain comma separated text.
### Translating
To translate Excalidraw into other languages, please visit [our Crowdin page](https://crowdin.com/project/excalidraw). To add a new language, [open an issue](https://github.com/excalidraw/excalidraw/issues/new) so we can get things set up on our end first.
Translations will be available on the app if they exceed a certain threshold of completion (currently 85%).
### Create a collaboration session manually
In order to create a session manually, you just need to generate a link of this form:
```
https://excalidraw.com/#room=[0-9a-f]{20},[a-zA-Z0-9_-]{22}
```
#### Example
```
https://excalidraw.com/#room=91bd46ae3aa84dff9d20,pfLqgEoY1c2ioq8LmGwsFA
```
The first set of digits is the room. This is visible from the server thats going to dispatch messages to everyone that knows this number.
The second set of digits is the encryption key. The Excalidraw server doesnt 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).
## Embedding Excalidraw in your App?
Try out [`@excalidraw/excalidraw`](https://www.npmjs.com/package/@excalidraw/excalidraw). This package allows you to easily embed Excalidraw as a React component into your apps.
## Development
### Code Sandbox
- Go to https://codesandbox.io/p/github/excalidraw/excalidraw
- You may need to sign in with GitHub and reload the page
- You can start coding instantly, and even send PRs from there!
### Local Installation
These instructions will get you a copy of the project up and running on your local machine for development and testing purposes.
#### Requirements
- [Node.js](https://nodejs.org/en/)
- [Yarn](https://yarnpkg.com/getting-started/install) (v1 or v2.4.2+)
- [Git](https://git-scm.com/downloads)
#### Clone the repo
```bash
git clone https://github.com/excalidraw/excalidraw.git
```
#### Install the dependencies
```bash
yarn
```
#### Start the server
```bash
yarn start
```
Now you can open [http://localhost:3000](http://localhost:3000) and start coding in your favorite code editor.
#### Collaboration
For collaboration, you will need to set up [collab server](https://github.com/excalidraw/excalidraw-room) in local.
#### Commands
##### Install the dependencies
```
yarn
```
##### Run the project
```
yarn start
```
##### Reformat all files with Prettier
```
yarn fix
```
##### Run tests
```
yarn test
```
##### Update test snapshots
```
yarn test:update
```
##### Test for formatting with Prettier
```
yarn test:code
```
#### Docker Compose
You can use docker-compose to work on Excalidraw locally if you don't want to setup a Node.js env.
```sh
docker-compose up --build -d
```
### Self-hosting
We publish a Docker image with the Excalidraw client at [excalidraw/excalidraw](https://hub.docker.com/r/excalidraw/excalidraw). You can use it to self-host your own client under your own domain, on Kubernetes, AWS ECS, etc.
```sh
docker build -t excalidraw/excalidraw .
docker run --rm -dit --name excalidraw -p 5000:80 excalidraw/excalidraw:latest
```
The Docker image is free of analytics and other tracking libraries.
**At the moment, self-hosting your own instance doesn't support sharing or collaboration features.**
We are working towards providing a full-fledged solution for self-hosting your own Excalidraw.
## Contributing
Pull requests are welcome. For major changes, please [open an issue](https://github.com/excalidraw/excalidraw/issues/new) first to discuss what you would like to change.
## Notable used tools
- [Create React App](https://github.com/facebook/create-react-app)
- [Rough.js](https://roughjs.com)
- [TypeScript](https://www.typescriptlang.org)
- [Vercel](https://vercel.com)
And the main source of inspiration for starting the project is the awesome [Zwibbler](https://zwibbler.com/demo/) app.

View File

@@ -0,0 +1,11 @@
---
slug: /@excalidraw/excalidraw/api
---
# API
Currently the **API** is divided into 3 broad categories 👇
- [Props](/docs/@excalidraw/excalidraw/api/props) - The `props` you can pass to the `Excalidraw` component.
- [Children components](/docs/@excalidraw/excalidraw/api/children-components) - Official components you can use to customize the UI.
- [Utils](/docs/@excalidraw/excalidraw/api/utils) - Utilities and helpers you can use to export, restore and more.

View File

@@ -0,0 +1,22 @@
---
sidebar_label: Children Components
slug: /@excalidraw/excalidraw/api/children-components
---
# `<Excalidraw/>` children
We expose several components you can render as children of the `<Excalidraw/>` component to customize the UI.
:::info
We have only recently started migrating to this type of component API. Some UI components are still using render props, and some UI customization isn't supported yet (such as the toolbar or the element properties panel). Stay tuned for more updates!
:::
Below are the currently supported components:
- [MainMenu](/docs/@excalidraw/excalidraw/api/children-components/main-menu)
- [WelcomeScreen](/docs/@excalidraw/excalidraw/api/children-components/welcome-screen)
- [Sidebar](/docs/@excalidraw/excalidraw/api/children-components/sidebar)
- [Footer](/docs/@excalidraw/excalidraw/api/children-components/footer)
- [LiveCollaborationTrigger](/docs/@excalidraw/excalidraw/api/children-components/live-collaboration-trigger)

View File

@@ -0,0 +1,68 @@
# Footer
Earlier we were using `renderFooter` prop to render custom footer which was removed in [#5970](https://github.com/excalidraw/excalidraw/pull/5970). Now you can pass a `Footer` component instead to render the custom UI for footer.
You will need to import the `Footer` component from the package and wrap your component with the Footer component. The `Footer` should a valid React Node.
**Usage**
```jsx live
function App() {
return (
<div style={{ height: "500px"}}>
<Excalidraw>
<Footer>
<button
className="custom-footer"
onClick={() => alert("This is dummy footer")}
>
custom footer
</button>
</Footer>
</Excalidraw>
</div>
);
}
```
This will only for `Desktop` devices.
For `mobile` you will need to render it inside the [MainMenu](#mainmenu). You can use the [`useDevice`](#useDevice) hook to check the type of device, this will be available only inside the `children` of `Excalidraw` component.
Open the `Menu` in the below playground and you will see the `custom footer` rendered.
```jsx live noInline
const MobileFooter = ({}) => {
const device = useDevice();
if (device.isMobile) {
return (
<Footer>
<button
className="custom-footer"
style= {{ marginLeft: '20px', height: '2rem'}}
onClick={() => alert("This is custom footer in mobile menu")}
>
custom footer
</button>
</Footer>
);
}
return null;
};
const App = () => (
<div style={{ height: "400px" }}>
<Excalidraw>
<MainMenu>
<MainMenu.Item> Item1 </MainMenu.Item>
<MainMenu.Item> Item 2 </MainMenu.Item>
<MobileFooter />
</MainMenu>
</Excalidraw>
</div>
);
// Need to render when code is span across multiple components
// in Live Code blocks editor
render(<App />);
```

View File

@@ -0,0 +1,62 @@
# LiveCollaborationTrigger
If you implement live collaboration support and want to expose the same UI button as on [excalidraw.com](https://excalidraw.com), you can render the `<LiveCollaborationTrigger/>` component using the [renderTopRightUI](/docs/@excalidraw/excalidraw/api/props#rendertoprightui) prop.
You'll need to supply `onSelect()` to handle opening of your collaboration dialog, but the button will display `appState.collaborators` count provided you have supplied it.
| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `onSelect` | `function` | Yes | | Handler called when the user clicks on the button |
| `isCollaborating` | `boolean` | Yes | false | Whether live collaboration session is in effect. Modifies button style. |
```tsx live
function App() {
const [excalidrawAPI, setExcalidrawAPI] = useState(null);
const [isCollaborating, setIsCollaborating] = useState(false);
return (
<div style={{ height: "500px" }}>
<p style={{ fontSize: "16px" }}>
Selecting the checkbox to see the collaborator count
</p>
<label style={{ fontSize: "16px", fontWeight: "bold" }}>
<input
type="checkbox"
checked={isCollaborating}
onChange={() => {
if (!isCollaborating) {
const collaborators = new Map();
collaborators.set("id1", {
username: "Doremon",
avatarUrl: "../../../../img/doremon.png",
});
collaborators.set("id3", {
username: "Pika",
avatarUrl: "../../../../img/pika.jpeg",
});
excalidrawAPI.updateScene({ collaborators });
} else {
excalidrawAPI.updateScene({
collaborators: new Map(),
});
}
setIsCollaborating(!isCollaborating);
}}
/>
Show Collaborators
</label>
<Excalidraw
ref={(api) => setExcalidrawAPI(api)}
renderTopRightUI={() => (
<LiveCollaborationTrigger
isCollaborating={isCollaborating}
onSelect={() => {
window.alert("You clicked on collab button");
setIsCollaborating(true);
}}
/>
)}
></Excalidraw>
</div>
);
}
```

View File

@@ -0,0 +1,167 @@
# MainMenu
By default Excalidraw will render the `MainMenu` with default options. If you want to customise the `MainMenu`, you can pass the `MainMenu` component with the list options.
**Usage**
```jsx live
function App() {
return (
<div style={{ height: "300px" }}>
<Excalidraw>
<MainMenu>
<MainMenu.Item onSelect={() => window.alert("Item1")}>
Item1
</MainMenu.Item>
<MainMenu.Item onSelect={() => window.alert("Item2")}>
Item 2
</MainMenu.Item>
</MainMenu>
</Excalidraw>
</div>
);
}
```
### `<MainMenu>`
This is the `MainMenu` component. If you render it, you will need to populate the menu with your own items as we will not render any ourselves at that point.
| Prop | Type | Required | Default | Description |
| --- | --- | :-: | :-: | --- |
| `onSelect` | `function` | No | - | Triggered when any item is selected (via mouse). Calling `event.preventDefault()` will stop menu from closing. |
### MainMenu.Item
To render an item, its recommended to use `MainMenu.Item`.
| Prop | Type | Required | Default | Description |
| --- | --- | :-: | :-: | --- |
| `onSelect` | `function` | Yes | - | Triggered when selected (via mouse). Calling `event.preventDefault()` will stop menu from closing. |
| `children` | `React.ReactNode` | Yes | - | The content of the menu item |
| `icon` | `JSX.Element` | No | - | The icon used in the menu item |
| `shortcut` | `string` | No | - | The shortcut to be shown for the menu item |
### MainMenu.ItemLink
To render an item as a link, its recommended to use `MainMenu.ItemLink`.
**Usage**
```jsx live
function App() {
return (
<div style={{ height: "500px" }}>
<Excalidraw>
<MainMenu>
<MainMenu.ItemLink href="https://google.com">
Google
</MainMenu.ItemLink>
<MainMenu.ItemLink href="https://excalidraw.com">
Excalidraw
</MainMenu.ItemLink>
</MainMenu>
</Excalidraw>
</div>
);
}
```
| Prop | Type | Required | Default | Description |
| --- | --- | :-: | :-: | --- |
| `onSelect` | `function` | No | - | Triggered when selected (via mouse). Calling `event.preventDefault()` will stop menu from closing. |
| `href` | `string` | Yes | - | The `href` attribute to be added to the `anchor` element. |
| `children` | `React.ReactNode` | Yes | - | The content of the menu item |
| `icon` | `JSX.Element` | No | - | The icon used in the menu item |
| `shortcut` | `string` | No | - | The shortcut to be shown for the menu item |
### MainMenu.ItemCustom
To render a custom item, you can use `MainMenu.ItemCustom`.
**Usage**
```jsx live
function App() {
return (
<div style={{ height: "500px" }}>
<Excalidraw>
<MainMenu>
<MainMenu.ItemCustom>
<button
style={{ height: "2rem" }}
onClick={() => window.alert("custom menu item")}
>
custom item
</button>
</MainMenu.ItemCustom>
</MainMenu>
</Excalidraw>
</div>
);
}
```
| Prop | Type | Required | Default | Description |
| --- | --- | :-: | :-: | --- |
| `children` | `React.ReactNode` | Yes | - | The content of the menu item |
### MainMenu.DefaultItems
For the items which are shown in the menu in [excalidraw.com](https://excalidraw.com), you can use `MainMenu.DefaultItems`
```jsx live
function App() {
return (
<div style={{ height: "500px" }}>
<Excalidraw>
<MainMenu>
<MainMenu.DefaultItems.Socials />
<MainMenu.DefaultItems.Export />
<MainMenu.Item onSelect={() => window.alert("Item1")}>
Item1
</MainMenu.Item>
<MainMenu.Item onSelect={() => window.alert("Item2")}>
Item 2
</MainMenu.Item>
</MainMenu>
</Excalidraw>
</div>
);
}
```
Here is a [complete list](https://github.com/excalidraw/excalidraw/blob/master/src/components/mainMenu/DefaultItems.tsx) of the default items.
### MainMenu.Group
To Group item in the main menu, you can use `MainMenu.Group`
```jsx live
function App() {
return (
<div style={{ height: "500px" }}>
<Excalidraw>
<MainMenu>
<MainMenu.Group title="Excalidraw items">
<MainMenu.DefaultItems.Socials />
<MainMenu.DefaultItems.Export />
</MainMenu.Group>
<MainMenu.Group title="custom items">
<MainMenu.Item onSelect={() => window.alert("Item1")}>
Item1
</MainMenu.Item>
<MainMenu.Item onSelect={() => window.alert("Item2")}>
Item 2
</MainMenu.Item>
</MainMenu.Group>
</MainMenu>
</Excalidraw>
</div>
);
}
```
| Prop | Type | Required | Default | Description |
| --- | --- | :-: | :-: | --- |
| `children ` | `React.ReactNode` | Yes | - | The content of the `Menu Group` |

View File

@@ -0,0 +1,129 @@
# Sidebar
The editor comes with a default sidebar on the right in LTR (Left to Right) mode which contains the library. You can also add your own custom sidebar(s) by rendering this component as a child of `<Excalidraw>`.
## Props
| Prop | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | `string` | Yes | Sidebar name that uniquely identifies it. |
| `children` | `React.ReactNode` | Yes | Content you want to render inside the sidebar. |
| `onStateChange` | `(state: AppState["openSidebar"]) => void` | No | Invoked on open/close or tab change. No need to act on this event, as the editor manages the sidebar open state on its own. |
| `onDock` | `(docked: boolean) => void` | No | Invoked when the user toggles the `dock` button. Passed the current docked state. |
| `docked` | `boolean` | No | Indicates whether the sidebar is `docked`. By default, the sidebar is `undocked`. If passed, the docking becomes controlled. |
| `className` | `string` | No | |
| `style` | `React.CSSProperties` | No | |
At minimum, each sidebar needs to have a unique `name` prop, and render some content inside it, which can be either composed from the exported sidebar sub-components, or custom elements.
Unless `docked={true}` is passed, the sidebar will close when the user clicks outside of it. It can also be closed using the close button in the header, if you render the `<Sidebar.Header>` component.
Further, if the sidebader doesn't comfortably fit in the editor, it won't be dockable. To decide the breakpoint for docking you can use [UIOptions.dockedSidebarBreakpoint](/docs/@excalidraw/excalidraw/api/props/ui-options#dockedsidebarbreakpoint).
To make your sidebar user-dockable, you need to supply `props.docked` (current docked state) alongside `props.onDock` callback (to listen for and handle docked state changes). The component doesn't track local state for the `docked` prop, so you need to manage it yourself.
## Sidebar.Header
| Prop | Type | Required | Description |
| --- | --- | --- | --- |
| `children` | `React.ReactNode` | No | Content you want to render inside the sidebar header next to the `close` / `dock` buttons. |
| `className` | `string` | No | |
Renders a sidebar header which contains a close button, and a dock button (when applicable). You can also render custom content in addition.
Can be nested inside specific tabs, or rendered as direct child of `<Sidebar>` for the whole sidebar component.
## Sidebar.Tabs
| Prop | Type | Required | Description |
| ---------- | ----------------- | -------- | ------------------------------ |
| `children` | `React.ReactNode` | No | Container for individual tabs. |
Sidebar may contain inner tabs. Each `<Sidebar.Tab>` must be rendered inside this `<Sidebar.Tabs>` container component.
## Sidebar.Tab
| Prop | Type | Required | Description |
| ---------- | ----------------- | -------- | ---------------- |
| `tab` | `string` | Yes | Unique tab name. |
| `children` | `React.ReactNode` | No | Tab content. |
Content of a given sidebar tab. It must be rendered inside `<Sidebar.Tabs>`.
## Sidebar.TabTriggers
| Prop | Type | Required | Description |
| --- | --- | --- | --- |
| `children` | `React.ReactNode` | No | Container for individual tab triggers. |
Container component for tab trigger buttons to switch between tabs.
## Sidebar.TabTrigger
| Prop | Type | Required | Description |
| --- | --- | --- | --- |
| `tab` | `string` | Yes | Tab name to toggle. |
| `children` | `React.ReactNode` | No | Tab trigger content, such as a label. |
A given tab trigger button that switches to a given sidebar tab. It must be rendered inside `<Sidebar.TabTriggers>`.
## Sidebar.Trigger
| Prop | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | `string` | Yes | Sidebar name the trigger will control. |
| `tab` | `string` | No | Optional tab to open. |
| `onToggle` | `(open: boolean) => void` | No | Callback invoked on toggle. |
| `title` | `string` | No | A11y title. |
| `children` | `React.ReactNode` | No | Content (usually label) you want to render inside the button. |
| `icon` | `JSX.Element` | No | Trigger icon if any. |
| `className` | `string` | No | |
| `style` | `React.CSSProperties` | No | |
You can use the [`ref.toggleSidebar({ name: "custom" })`](/docs/@excalidraw/excalidraw/api/props/ref#toggleSidebar) api to control the sidebar, but we export a trigger button to make UI use cases easier.
## Example
```tsx live
function App() {
const [docked, setDocked] = useState(false);
return (
<div style={{ height: "580px" }}>
<Excalidraw
UIOptions={{
// this effectively makes the sidebar dockable on any screen size,
// ignoring if it fits or not
dockedSidebarBreakpoint: 0,
}}
>
<Sidebar name="custom" docked={docked} onDock={setDocked}>
<Sidebar.Header />
<Sidebar.Tabs style={{ padding: "0.5rem" }}>
<Sidebar.Tab tab="one">Tab one!</Sidebar.Tab>
<Sidebar.Tab tab="two">Tab two!</Sidebar.Tab>
<Sidebar.TabTriggers>
<Sidebar.TabTrigger tab="one">One</Sidebar.TabTrigger>
<Sidebar.TabTrigger tab="two">Two</Sidebar.TabTrigger>
</Sidebar.TabTriggers>
</Sidebar.Tabs>
</Sidebar>
<Footer>
<Sidebar.Trigger
name="custom"
tab="one"
style={{
marginLeft: "0.5rem",
background: "#70b1ec",
color: "white",
}}
>
Toggle Custom Sidebar
</Sidebar.Trigger>
</Footer>
</Excalidraw>
</div>
);
}
```

View File

@@ -0,0 +1,140 @@
# WelcomeScreen
When the canvas is empty, Excalidraw can show a welcome _splash_ screen with a logo, a few quick action items, and hints explaining what some of the UI buttons do. Once the user picks a tool, or has created an element on the canvas, the welcome screen will disappear.
You can enable this behavior by rendering a `WelcomeScreen` component like this:
```jsx live
function App() {
return (
<div style={{ height: "46rem" }}>
<Excalidraw>
<WelcomeScreen />
</Excalidraw>
</div>
);
}
```
You can also customize the welcome screen by passing children to the `WelcomeScreen` component. See below.
## <WelcomeScreen/>
This is the main component. If you render it without any children, we will render the default welcome screen.
You can customize which welcome screen subcomponents are rendered by passing them as children.
The welcome screen consists of two main groups of subcomponents:
1. [WelcomeScreen.Center](#welcomescreencenterlogo).
2. [WeelcomeScreen.Hints](#welcomescreenhints).
<img
src={require("@site/static/img/welcome-screen-overview.png").default}
alt="Excalidraw logo: Sketch handrawn like diagrams."
/>
### Center
`<WelcomeScreen.Center/>` subcomponent is the center piece of the welcome screen, containing the `logo`, `heading`, and `menu`. All three subcomponents are optional, and you can render whatever you wish into the center component.
```jsx live
function App() {
return (
<div style={{ height: "500px" }}>
<Excalidraw>
<WelcomeScreen>
<WelcomeScreen.Center>
<WelcomeScreen.Center.Logo />
<WelcomeScreen.Center.Heading>
Welcome Screen Heading!
</WelcomeScreen.Center.Heading>
<WelcomeScreen.Center.Menu>
<WelcomeScreen.Center.MenuItemLink href="https://github.com/excalidraw/excalidraw">
Excalidraw GitHub
</WelcomeScreen.Center.MenuItemLink>
<WelcomeScreen.Center.MenuItemHelp />
</WelcomeScreen.Center.Menu>
</WelcomeScreen.Center>
</WelcomeScreen>
</Excalidraw>
</div>
);
}
```
#### Logo
Use the `<WelcomeScreen.Center.Logo/>` to render a logo. By default it renders the Excalidraw logo and name. Supply `children` to customize.
#### Heading
Use the `<WelcomeScreen.Center.Heading/>` to render a heading below the logo. Supply `children` to change the default message.
#### Menu
`<WelcomeScreen.Center.Menu/>` is a wrapper component for the menu items. You can build your menu using the `<WelcomeScreen.Center.MenuItem>` and `<WelcomeScreen.Center.MenuItemLink>` components, render your own, or render one of the default menu items.
The default menu items are:
- `<WelcomeScreen.Center.MenuItemHelp/>` - opens the help dialog.
- `<WelcomeScreen.Center.MenuItemLoadScene/>` - open the load file dialog.
- `<WelcomeScreen.Center.MenuItemLiveCollaborationTrigger/>` - intended to open the live collaboration dialog. Works similarly to [`<LiveCollaborationTrigger>`](/docs/@excalidraw/excalidraw/api/children-components/live-collaboration-trigger) and you must supply `onSelect()` handler to integrate with your collaboration implementation.
#### MenuItem
The `<WelcomeScreen.Center.MenuItem/>` component can be used to render a menu item.
| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `onSelect` | `function` | Yes | | The handler is triggered when the item is selected. |
| `children` | `React.ReactNode` | Yes | | The content of the menu item |
| `icon` | `JSX.Element` | No | | The icon used in the menu item |
| `shortcut` | `string` | No | | The keyboard shortcut (label-only, does not affect behavior) |
**WelcomeScreen.Center.MenuItemLink**
To render an external link in a menu item, you can use this component.
| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `href` | `string` | Yes | | The `href` attribute to be added to the `anchor` element. |
| `children` | `React.ReactNode` | Yes | | The content of the menu item |
| `icon` | `JSX.Element` | No | | The icon used in the menu item |
| `shortcut` | `string` | No | | The keyboard shortcut (label-only, does not affect behavior) |
### Hints
These `<WelcomeScreen.Hints.*>` subcomponents render the UI hints. Text of each hint can be customized by supplying `children`.
```jsx live
function App() {
return (
<div style={{ height: "500px" }}>
<Excalidraw>
<WelcomeScreen>
<WelcomeScreen.Hints.ToolbarHint>
<p> ToolBar Hints </p>
</WelcomeScreen.Hints.ToolbarHint>
<WelcomeScreen.Hints.MenuHint />
<WelcomeScreen.Hints.HelpHint />
</WelcomeScreen>
</Excalidraw>
</div>
);
}
```
#### MenuHint
`<WelcomeScreen.Hints.MenuHint>` hint subcomponent for the main menu. Supply `children` to customize the hint text.
#### ToolbarHint
`<WelcomeScreen.Hints.ToolbarHint>` hint subcomponent for the toolbar. Supply `children` to customize the hint text.
#### Help
`<WelcomeScreen.Hints.Help>` hint subcomponent for the help dialog. Supply `children` to customize the hint text.

View File

@@ -0,0 +1,46 @@
# Constants
### 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`.
### THEME
**How to use**
```js
import { THEME } from "@excalidraw/excalidraw";
```
`THEME` contains all the themes supported by `Excalidraw` as explained below
| Theme | Description |
| ------- | ----------------- |
| `LIGHT` | The `light` theme |
| `DARK` | The `Dark` theme |
Defaults to `THEME.LIGHT` unless passed in `initialData.appState.theme`
### MIME_TYPES
[`MIME_TYPES`](https://github.com/excalidraw/excalidraw/blob/master/src/constants.ts#L101) contains all the mime types supported by `Excalidraw`.
**How to use **
```js
import { MIME_TYPES } from "@excalidraw/excalidraw";
```

View File

@@ -0,0 +1,429 @@
# Creating Elements programmatically
We support a simplified API to make it easier to generate Excalidraw elements programmatically. This API is in beta and subject to change before stable. You can check the [PR](https://github.com/excalidraw/excalidraw/pull/6546) for more details.
For this purpose we introduced a new type [`ExcalidrawElementSkeleton`](https://github.com/excalidraw/excalidraw/blob/master/src/data/transform.ts#L133). This is the simplified version of [`ExcalidrawElement`](https://github.com/excalidraw/excalidraw/blob/master/src/element/types.ts#L134) type with the minimum possible attributes so that creating elements programmatically is much easier (especially for cases like binding arrows or creating text containers).
The [`ExcalidrawElementSkeleton`](https://github.com/excalidraw/excalidraw/blob/master/src/data/transform.ts#L133) can be converted to fully qualified Excalidraw elements by using [`convertToExcalidrawElements`](/docs/@excalidraw/excalidraw/api/excalidraw-element-skeleton#converttoexcalidrawelements).
## convertToExcalidrawElements
**_Signature_**
<pre>
convertToExcalidrawElements(elements:{" "}
<a href="https://github.com/excalidraw/excalidraw/blob/master/src/data/transform.ts#L133">
ExcalidrawElementSkeleton
</a>
)
</pre>
**_How to use_**
```js
import { convertToExcalidrawElements } from "@excalidraw/excalidraw";
```
This function converts the Excalidraw Element Skeleton to excalidraw elements which could be then rendered on the canvas. Hence calling this function is necessary before passing it to APIs like [`initialData`](https://docs.excalidraw.com/docs/@excalidraw/excalidraw/api/props/initialdata), [`updateScene`](https://docs.excalidraw.com/docs/@excalidraw/excalidraw/api/props/ref#updatescene) if you are using the Skeleton API
## Supported Features
### Rectangle, Ellipse, and Diamond
To create these shapes you need to pass its `type` and `x` and `y` coordinates for position. The rest of the attributes are optional_.
For the Skeleton API to work, `convertToExcalidrawElements` needs to be called before passing it to Excalidraw Component via initialData, updateScene or any such API.
```jsx live
function App() {
const elements = convertToExcalidrawElements([
{
type: "rectangle",
x: 100,
y: 250,
},
{
type: "ellipse",
x: 250,
y: 250,
},
{
type: "diamond",
x: 380,
y: 250,
},
]);
return (
<div style={{ height: "500px" }}>
<Excalidraw
initialData={{
elements,
appState: { zenModeEnabled: true, viewBackgroundColor: "#a5d8ff" },
scrollToContent: true,
}}
/>
</div>
);
}
```
You can pass additional [`properties`](https://github.com/excalidraw/excalidraw/blob/master/src/element/types.ts#L27) as well to decorate the shapes.
:::info
You can copy the below test examples and replace the elements in the live editor above to test it out.
:::
```js
convertToExcalidrawElements([
{
type: "rectangle",
x: 50,
y: 250,
width: 200,
height: 100,
backgroundColor: "#c0eb75",
strokeWidth: 2,
},
{
type: "ellipse",
x: 300,
y: 250,
width: 200,
height: 100,
backgroundColor: "#ffc9c9",
strokeStyle: "dotted",
fillStyle: "solid",
strokeWidth: 2,
},
{
type: "diamond",
x: 550,
y: 250,
width: 200,
height: 100,
backgroundColor: "#a5d8ff",
strokeColor: "#1971c2",
strokeStyle: "dashed",
fillStyle: "cross-hatch",
strokeWidth: 2,
},
]);
```
![image](https://github.com/excalidraw/excalidraw/assets/11256141/70ca7063-88fb-434c-838a-cd466e1bc3c2)
### Text Element
The `type`, `x`, `y` and `text` properties are required to create a text element, rest of the attributes are optional
```js
convertToExcalidrawElements([
{
type: "text",
x: 100,
y: 100,
text: "HELLO WORLD!",
},
{
type: "text",
x: 100,
y: 150,
text: "STYLED HELLO WORLD!",
fontSize: 20,
strokeColor: "#5f3dc4",
},
]);
```
![image](https://github.com/excalidraw/excalidraw/assets/11256141/085c7ac3-7952-4f22-b9c3-6beb51438526)
### Lines and Arrows
The `type`, `x`, and `y` properties are required, rest of the attributes are optional
```js
convertToExcalidrawElements([
{
type: "arrow",
x: 100,
y: 20,
},
{
type: "line",
x: 100,
y: 60,
},
]);
```
![image](https://github.com/excalidraw/excalidraw/assets/11256141/0c22a06b-b568-4ab5-9848-a5f0160f66a6)
#### With Addtional properties
```js
convertToExcalidrawElements([
{
type: "arrow",
x: 450,
y: 20,
startArrowhead: "dot",
endArrowhead: "triangle",
strokeColor: "#1971c2",
strokeWidth: 2,
},
{
type: "line",
x: 450,
y: 60,
strokeColor: "#2f9e44",
strokeWidth: 2,
strokeStyle: "dotted",
},
]);
```
![image](https://github.com/excalidraw/excalidraw/assets/11256141/14f1bf3f-ad81-4096-8c1c-f35235084ec5)
### Text Containers
In addition to `type`, `x` and `y` properties, [`label`](https://github.com/excalidraw/excalidraw/blob/master/src/data/transform.ts#L124C7-L130C59) property is required for text containers. The `text` property in `label` is required, rest of the attributes are optional.
If you don't provide the dimensions of container, we calculate it based of the label dimensions.
```js
convertToExcalidrawElements([
{
type: "rectangle",
x: 300,
y: 290,
label: {
text: "RECTANGLE TEXT CONTAINER",
},
},
{
type: "ellipse",
x: 500,
y: 100,
label: {
text: "ELLIPSE\n TEXT CONTAINER",
},
},
{
type: "diamond",
x: 100,
y: 100,
label: {
text: "DIAMOND\nTEXT CONTAINER",
},
},
]);
```
![image](https://github.com/excalidraw/excalidraw/assets/11256141/1e2c7b5d-fcb4-4f86-946d-0bfb0e97d532)
#### With Additional properties
```js
convertToExcalidrawElements([
{
type: "diamond",
x: -120,
y: 100,
width: 270,
backgroundColor: "#fff3bf",
strokeWidth: 2,
label: {
text: "STYLED DIAMOND TEXT CONTAINER",
strokeColor: "#099268",
fontSize: 20,
},
},
{
type: "rectangle",
x: 180,
y: 150,
width: 200,
strokeColor: "#c2255c",
label: {
text: "TOP LEFT ALIGNED RECTANGLE TEXT CONTAINER",
textAlign: "left",
verticalAlign: "top",
fontSize: 20,
},
},
{
type: "ellipse",
x: 400,
y: 130,
strokeColor: "#f08c00",
backgroundColor: "#ffec99",
width: 200,
label: {
text: "STYLED ELLIPSE TEXT CONTAINER",
strokeColor: "#c2255c",
},
},
]);
```
![image](https://github.com/excalidraw/excalidraw/assets/11256141/f8123cd1-c9aa-452d-b96b-05c846c5030d)
### Labelled Arrows
Similar to Text Containers, you can create labelled arrows as well.
```js
convertToExcalidrawElements([
{
type: "arrow",
x: 100,
y: 100,
label: {
text: "LABELED ARROW",
},
},
{
type: "arrow",
x: 100,
y: 200,
label: {
text: "STYLED LABELED ARROW",
strokeColor: "#099268",
fontSize: 20,
},
},
{
type: "arrow",
x: 100,
y: 300,
strokeColor: "#1098ad",
strokeWidth: 2,
label: {
text: "ANOTHER STYLED LABELLED ARROW",
},
},
{
type: "arrow",
x: 100,
y: 400,
strokeColor: "#1098ad",
strokeWidth: 2,
label: {
text: "ANOTHER STYLED LABELLED ARROW",
strokeColor: "#099268",
},
},
]);
```
![image](https://github.com/excalidraw/excalidraw/assets/11256141/70635e9b-f1c8-4839-89e1-73b813abeb93)
### Arrow bindings
To bind arrow to a shape you need to specify its [`start`](https://github.com/excalidraw/excalidraw/blob/master/src/data/transform.ts#L86) and [`end`](https://github.com/excalidraw/excalidraw/blob/master/src/data/transform.ts#L54) properties. You need to pass either `type` or `id` property in `start` and `end` properties, rest of the attributes are optional
```js
convertToExcalidrawElements([
{
type: "arrow",
x: 255,
y: 239,
label: {
text: "HELLO WORLD!!",
},
start: {
type: "rectangle",
},
end: {
type: "ellipse",
},
},
]);
```
When position for `start` and `end ` properties are not specified, we compute it according to arrow position.
![image](https://github.com/excalidraw/excalidraw/assets/11256141/5aff09fd-b7e8-4c63-98be-da40b0698704)
```js
convertToExcalidrawElements([
{
type: "arrow",
x: 255,
y: 239,
label: {
text: "HELLO WORLD!!",
},
start: {
type: "text",
text: "HEYYYYY",
},
end: {
type: "text",
text: "WHATS UP ?",
},
},
]);
```
![image](https://github.com/excalidraw/excalidraw/assets/11256141/2a9f03ac-e45c-4fbd-9be0-5d9f8c8e0343)
#### When passing `id`
Useful when you want to bind multiple arrows to one diagram / use some existing diagram
```js
convertToExcalidrawElements([
{
type: "ellipse",
id: "ellipse-1",
strokeColor: "#66a80f",
x: 390,
y: 356,
width: 150,
height: 150,
backgroundColor: "#d8f5a2",
},
{
type: "diamond",
id: "diamond-1",
strokeColor: "#9c36b5",
width: 100,
x: -30,
y: 380,
},
{
type: "arrow",
x: 100,
y: 440,
width: 295,
height: 35,
strokeColor: "#1864ab",
start: {
type: "rectangle",
width: 150,
height: 150,
},
end: {
id: "ellipse-1",
},
},
{
type: "arrow",
x: 60,
y: 420,
width: 330,
strokeColor: "#e67700",
start: {
id: "diamond-1",
},
end: {
id: "ellipse-1",
},
},
]);
```
![image](https://github.com/excalidraw/excalidraw/assets/11256141/a8b047c8-2eed-4aea-82a2-e1e6bbddb8d4)

View File

@@ -0,0 +1,55 @@
# initialData
<pre>
&#123; elements?: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/element/types.ts#L114">ExcalidrawElement[]</a>, appState?: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L95">AppState</a> &#125;
</pre>
This helps to load Excalidraw with `initialData`. It must be an object or a [promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/Promise) which resolves to an object containing the below optional fields.
| Name | Type | Description |
| --- | --- | --- |
| `elements` | [ExcalidrawElement[]](https://github.com/excalidraw/excalidraw/blob/master/src/element/types.ts#L114) | The `elements` with which `Excalidraw` should be mounted. |
| `appState` | [AppState](https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L95) | The `AppState` with which `Excalidraw` should be mounted. |
| `scrollToContent` | `boolean` | This attribute indicates whether to `scroll` to the nearest element to center once `Excalidraw` is mounted. By default, it will not scroll the nearest element to the center. Make sure you pass `initialData.appState.scrollX` and `initialData.appState.scrollY` when `scrollToContent` is false so that scroll positions are retained |
| `libraryItems` | [LibraryItems](https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L247) &#124; Promise&lt;[LibraryItems](https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L200)&gt; | This library items with which `Excalidraw` should be mounted. |
| `files` | [BinaryFiles](https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L82) | The `files` added to the scene. |
You might want to use this when you want to load excalidraw with some initial elements and app state.
```jsx live
function App() {
return (
<div style={{ height: "500px" }}>
<Excalidraw
initialData={{
elements: [
{
type: "rectangle",
version: 141,
versionNonce: 361174001,
isDeleted: false,
id: "oDVXy8D6rom3H1-LLH2-f",
fillStyle: "hachure",
strokeWidth: 1,
strokeStyle: "solid",
roughness: 1,
opacity: 100,
angle: 0,
x: 100.50390625,
y: 93.67578125,
strokeColor: "#000000",
backgroundColor: "transparent",
width: 186.47265625,
height: 141.9765625,
seed: 1968410350,
groupIds: [],
},
],
appState: { zenModeEnabled: true, viewBackgroundColor: "#a5d8ff" },
scrollToContent: true
}}
/>
</div>
);
}
```

View File

@@ -0,0 +1,239 @@
# Props
All `props` are *optional*.
| Name | Type | Default | Description |
| --- | --- | --- | --- |
| [`initialData`](/docs/@excalidraw/excalidraw/api/props/initialdata) | `object` &#124; `null` &#124; <code>Promise<object &#124; null></code> | `null` | The initial data with which app loads. |
| [`ref`](/docs/@excalidraw/excalidraw/api/props/ref) | `object` | _ | `Ref` to be passed to Excalidraw |
| [`isCollaborating`](#iscollaborating) | `boolean` | _ | This indicates if the app is in `collaboration` mode |
| [`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`. |
| [`onPointerUpdate`](#onpointerupdate) | `function` | _ | Callback triggered when mouse pointer is updated. |
| [`onPointerDown`](#onpointerdown) | `function` | _ | This prop if passed gets triggered on pointer down evenets |
| [`onScrollChange`](#onscrollchange) | `function` | _ | This prop if passed gets triggered when scrolling the canvas. |
| [`onPaste`](#onpaste) | `function` | _ | Callback to be triggered if passed when the something is pasted in to the scene |
| [`onLibraryChange`](#onlibrarychange) | `function` | _ | The callback if supplied is triggered when the library is updated and receives the library items. |
| [`onLinkOpen`](#onlinkopen) | `function` | _ | The callback if supplied is triggered when any link is opened. |
| [`langCode`](#langcode) | `string` | `en` | Language code string to be used in Excalidraw |
| [`renderTopRightUI`](/docs/@excalidraw/excalidraw/api/props/render-props#rendertoprightui) | `function` | _ | Render function that renders custom UI in top right corner |
| [`renderCustomStats`](/docs/@excalidraw/excalidraw/api/props/render-props#rendercustomstats) | `function` | _ | Render function that can be used to render custom stats on the stats dialog. |
| [`viewModeEnabled`](#viewmodeenabled) | `boolean` | _ | This indicates if the app is in `view` mode. |
| [`zenModeEnabled`](#zenmodeenabled) | `boolean` | _ | This indicates if the `zen` mode is enabled |
| [`gridModeEnabled`](#gridmodeenabled) | `boolean` | _ | This indicates if the `grid` mode is enabled |
| [`libraryReturnUrl`](#libraryreturnurl) | `string` | _ | What URL should [libraries.excalidraw.com](https://libraries.excalidraw.com) be installed to |
| [`theme`](#theme) | `"light"` &#124; `"dark"` | `"light"` | The theme of the Excalidraw component |
| [`name`](#name) | `string` | | Name of the drawing |
| [`UIOptions`](/docs/@excalidraw/excalidraw/api/props/ui-options) | `object` | [DEFAULT UI OPTIONS](https://github.com/excalidraw/excalidraw/blob/master/src/constants.ts#L151) | To customise UI options. Currently we support customising [`canvas actions`](#canvasactions) |
| [`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. |
| [`autoFocus`](#autofocus) | `boolean` | `false` | indicates whether to focus the Excalidraw component on page load |
| [`generateIdForFile`](#generateidforfile) | `function` | _ | Allows you to override `id` generation for files added on canvas |
| [`validateEmbeddable`](#validateEmbeddable) | string[] | `boolean | RegExp | RegExp[] | ((link: string) => boolean | undefined)` | \_ | use for custom src url validation |
| [`renderEmbeddable`](/docs/@excalidraw/excalidraw/api/props/render-props#renderEmbeddable) | `function` | \_ | Render function that can override the built-in `<iframe>` |
### Storing custom data on Excalidraw elements
Beyond attributes that Excalidraw elements already support, you can store `custom` data on each `element` in a `customData` object. The type of the attribute is [`Record<string, any>`](https://github.com/excalidraw/excalidraw/blob/master/src/element/types.ts#L66) and is optional.
You can use this to add any extra information you need to keep track of.
You can add `customData` to elements when passing them as [`initialData`](/docs/@excalidraw/excalidraw/api/props/initialdata), or using [`updateScene`](/docs/@excalidraw/excalidraw/api/props/ref#updatescene) / [`updateLibrary`](/docs/@excalidraw/excalidraw/api/props/ref#updatelibrary) afterwards.
```js showLineNumbers
{
type: "rectangle",
id: "oDVXy8D6rom3H1-LLH2-f",
customData: {customId: '162'},
}
```
### isCollaborating
This prop indicates if the app is in `collaboration` mode.
### onChange
Every time component updates, this callback if passed will get triggered and has the below signature.
```js
(excalidrawElements, appState, files) => void;
```
1. `excalidrawElements`: Array of [excalidrawElements](https://github.com/excalidraw/excalidraw/blob/master/src/element/types.ts#L114) in the scene.
2. `appState`: [AppState](https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L95) of the scene.
3. `files`: The [BinaryFiles](https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L64) which are added to the scene.
Here you can try saving the data to your backend or local storage for example.
### onPointerUpdate
This callback is triggered when mouse pointer is updated.
```js
({ x, y }, button, pointersMap}) => void;
```
1.`{x, y}`: Pointer coordinates
2.`button`: The position of the button. This will be one of `["down", "up"]`
3.`pointersMap`: [`pointers`](https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L131) map of the scene
```js
(exportedElements, appState, canvas) => void
```
1. `exportedElements`: An array of [non deleted elements](https://github.com/excalidraw/excalidraw/blob/master/src/element/types.ts#L87) which needs to be exported.
2. `appState`: [AppState](https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L95) of the scene.
3. `canvas`: The `HTMLCanvasElement` of the scene.
### onPointerDown
This prop if passed will be triggered on pointer down events and has the below signature.
<pre>
(activeTool: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L115"> AppState["activeTool"]</a>, pointerDownState: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L424">PointerDownState</a>) => void
</pre>
### onScrollChange
This prop if passed will be triggered when canvas is scrolled and has the below signature.
```ts
(scrollX: number, scrollY: number) => void
```
### onPaste
This callback is triggered if passed when something is pasted into the scene. You can use this callback in case you want to do something additional when the paste event occurs.
<pre>
(data: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/clipboard.ts#L18">ClipboardData</a>, event: ClipboardEvent &#124; null) => boolean
</pre>
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 `false`, it will stop the native excalidraw clipboard management flow (nothing will be pasted into the scene).
### onLibraryChange
This callback if supplied will get triggered when the library is updated and has the below signature.
<pre>
(items:{" "}
<a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L200">
LibraryItems
</a>
) => void | Promise&lt;any&gt;
</pre>
It is invoked with empty items when user clears the library. You can use this callback when you want to do something additional when library is updated for example persisting it to local storage.
### onLinkOpen
This prop if passed will be triggered when clicked on `link`. To handle the redirect yourself (such as when using your own router for internal links), you must call `event.preventDefault()`.
<pre>
(element: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/element/types.ts#L114">ExcalidrawElement</a>,
event: CustomEvent&lt;&#123; nativeEvent: MouseEvent }&gt;) => void
</pre>
Example:
```js showLineNumbers
const history = useHistory();
// open internal links using the app's router, but opens external links in
// a new tab/window
const onLinkOpen: ExcalidrawProps["onLinkOpen"] = useCallback(
(element, event) => {
const link = element.link;
const { nativeEvent } = event.detail;
const isNewTab = nativeEvent.ctrlKey || nativeEvent.metaKey;
const isNewWindow = nativeEvent.shiftKey;
const isInternalLink =
link.startsWith("/") || link.includes(window.location.origin);
if (isInternalLink && !isNewTab && !isNewWindow) {
history.push(link.replace(window.location.origin, ""));
// signal that we're handling the redirect ourselves
event.preventDefault();
}
},
[history],
);
```
### langCode
Determines the `language` of the UI. It should be one of the [available language codes](https://github.com/excalidraw/excalidraw/blob/master/src/i18n.ts#L14). Defaults to `en` (English). We also export default language and supported languages which you can import as shown below.
```js
import { defaultLang, languages } from "@excalidraw/excalidraw";
```
| name | type |
| --- | --- |
| `defaultLang` | `string` |
| `languages` | [`Language[]`](https://github.com/excalidraw/excalidraw/blob/master/src/i18n.ts#L15) |
### viewModeEnabled
This prop indicates whether the app is in `view mode`. When supplied, the value takes precedence over *intialData.appState.viewModeEnabled*, the `view mode` will be fully controlled by the host app, and users won't be able to toggle it from within the app.
### zenModeEnabled
This prop indicates whether the app is in `zen mode`. When supplied, the value takes precedence over *intialData.appState.zenModeEnabled*, the `zen mode` will be fully controlled by the host app, and users won't be able to toggle it from within the app.
### gridModeEnabled
This prop indicates whether the shows the grid. When supplied, the value takes precedence over *intialData.appState.gridModeEnabled*, the grid will be fully controlled by the host app, and users won't be able to toggle it from within the app.
### libraryReturnUrl
If supplied, this URL will be used when user tries to install a library from [libraries.excalidraw.com](https://libraries.excalidraw.com).
Defaults to *window.location.origin + window.location.pathname*. To install the libraries in the same tab from which it was opened, you need to set `window.name` (to any alphanumeric string) — if it's not set it will open in a new tab.
### theme
This prop controls Excalidraw's theme. When supplied, the value takes precedence over *intialData.appState.theme*, the theme will be fully controlled by the host app, and users won't be able to toggle it from within the app unless *UIOptions.canvasActions.toggleTheme* is set to `true`, in which case the `theme` prop will control Excalidraw's default theme with ability to allow theme switching (you must take care of updating the `theme` prop when you detect a change to `appState.theme` from the [onChange](#onchange) callback).
You can use [`THEME`](/docs/@excalidraw/excalidraw/api/utils#theme) to specify the theme.
### name
This prop sets the `name` of the drawing which will be used when exporting the drawing. When supplied, the value takes precedence over *intialData.appState.name*, the `name` will be fully controlled by host app and the users won't be able to edit from within Excalidraw.
### detectScroll
Indicates whether Excalidraw should listen for `scroll` event on the nearest scrollable container in the DOM tree and recompute the coordinates (e.g. to correctly handle the cursor) when the component's position changes. You can disable this when you either know this doesn't affect your app or you want to take care of it yourself (calling the [`refresh()`](#ref) method).
### handleKeyboardGlobally
Indicates whether to bind keyboard events to `document`. Disabled by default, meaning the keyboard events are bound to the Excalidraw component. This allows for multiple Excalidraw components to live on the same page, and ensures that Excalidraw keyboard handling doesn't collide with your app's (or the browser) when the component isn't focused.
Enable this if you want Excalidraw to handle keyboard even if the component isn't focused (e.g. a user is interacting with the navbar, sidebar, or similar).
### autoFocus
This prop indicates whether to `focus` the Excalidraw component on page load. Defaults to false.
### generateIdForFile
Allows you to override `id` generation for files added on canvas (images). By default, an SHA-1 digest of the file is used.
```tsx
(file: File) => string | Promise<string>
```
### validateEmbeddable
```tsx
validateEmbeddable?: boolean | string[] | RegExp | RegExp[] | ((link: string) => boolean | undefined)
```
This is an optional property. By default we support a handful of well-known sites. You may allow additional sites or disallow the default ones by supplying a custom validator. If you pass `true`, all URLs will be allowed. You can also supply a list of hostnames, RegExp (or list of RegExp objects), or a function. If the function returns `undefined`, the built-in validator will be used.
Supplying a list of hostnames (with or without `www.`) is the preferred way to allow a specific list of domains.

View File

@@ -0,0 +1,423 @@
# ref
<pre>
<a href="https://reactjs.org/docs/refs-and-the-dom.html#creating-refs">
createRef
</a>{" "}
&#124;{" "}
<a href="https://reactjs.org/docs/hooks-reference.html#useref">useRef</a>{" "}
&#124;{" "}
<a href="https://reactjs.org/docs/refs-and-the-dom.html#callback-refs">
callbackRef
</a>{" "}
&#124; <br />
&#123; current: &#123; readyPromise: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/utils.ts#L460">
resolvablePromise
</a> } }
</pre>
You can pass a `ref` when you want to access some excalidraw APIs. We expose the below APIs:
| API | Signature | Usage |
| --- | --- | --- |
| ready | `boolean` | This is set to true once Excalidraw is rendered |
| [readyPromise](#readypromise) | `function` | 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](#updatescene) | `function` | updates the scene with the sceneData |
| [updateLibrary](#updatelibrary) | `function` | updates the scene with the sceneData |
| [addFiles](#addfiles) | `function` | add files data to the appState |
| [resetScene](#resetscene) | `function` | Resets the scene. If `resetLoadingState` is passed as true then it will also force set the loading state to false. |
| [getSceneElementsIncludingDeleted](#getsceneelementsincludingdeleted) | `function` | Returns all the elements including the deleted in the scene |
| [getSceneElements](#getsceneelements) | `function` | Returns all the elements excluding the deleted in the scene |
| [getAppState](#getappstate) | `function` | Returns current appState |
| [history](#history) | `object` | This is the history API. `history.clear()` will clear the history |
| [scrollToContent](#scrolltocontent) | `function` | Scroll the nearest element out of the elements supplied to the center. Defaults to the elements on the scene. |
| [refresh](#refresh) | `function` | Updates the offsets for the Excalidraw component so that the coordinates are computed correctly (for example the cursor position). |
| [setToast](#settoast) | `function` | This API can be used to show the toast with custom message. |
| [id](#id) | `string` | Unique ID for the excalidraw component. |
| [getFiles](#getfiles) | `function` | This API can be used to get the files present in the scene. |
| [setActiveTool](#setactivetool) | `function` | This API can be used to set the active tool |
| [setCursor](#setcursor) | `function` | This API can be used to set customise the mouse cursor on the canvas |
| [resetCursor](#resetcursor) | `function` | This API can be used to reset to default mouse cursor on the canvas |
| [toggleMenu](#togglemenu) | `function` | Toggles specific menus on/off |
## readyPromise
<pre>
const excalidrawRef = &#123; current:&#123; readyPromise:
<a href="https://github.com/excalidraw/excalidraw/blob/master/src/utils.ts#L460">
&nbsp;resolvablePromise
</a>
&nbsp;&#125; &#125;
</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.
```jsx showLineNumbers
const resolvablePromise = () => {
let resolve;
let reject;
const promise = new Promise((_resolve, _reject) => {
resolve = _resolve;
reject = _reject;
});
promise.resolve = resolve;
promise.reject = reject;
return promise;
};
const App = () => {
const excalidrawRef = useMemo(
() => ({
current: {
readyPromise: resolvablePromise(),
},
}),
[],
);
useEffect(() => {
excalidrawRef.current.readyPromise.then((api) => {
console.log("loaded", api);
});
}, [excalidrawRef]);
return (
<div style={{ height: "500px" }}>
<Excalidraw ref={excalidrawRef} />
</div>
);
};
```
## updateScene
<pre>
(scene:{" "}
<a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L339">
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#L38) | The `elements` to be updated in the scene |
| `appState` | [`ImportedDataState["appState"]`](https://github.com/excalidraw/excalidraw/blob/master/src/data/types.ts#L39) | The `appState` to be updated in the scene. |
| `collaborators` | <code>Map<string, <a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L37">Collaborator></a></code> | The list of collaborators to be updated in the scene. |
| `commitToHistory` | `boolean` | Implies if the `history (undo/redo)` should be recorded. Defaults to `false`. |
```jsx live
function App() {
const updateScene = () => {
const sceneData = {
elements: [
{
type: "rectangle",
version: 141,
versionNonce: 361174001,
isDeleted: false,
id: "oDVXy8D6rom3H1-LLH2-f",
fillStyle: "hachure",
strokeWidth: 1,
strokeStyle: "solid",
roughness: 1,
opacity: 100,
angle: 0,
x: 100.50390625,
y: 93.67578125,
strokeColor: "#c92a2a",
backgroundColor: "transparent",
width: 186.47265625,
height: 141.9765625,
seed: 1968410350,
groupIds: [],
boundElements: null,
locked: false,
link: null,
updated: 1,
roundness: {
type: 3,
value: 32,
},
},
],
appState: {
viewBackgroundColor: "#edf2ff",
},
};
excalidrawAPI.updateScene(sceneData);
};
const [excalidrawAPI, setExcalidrawAPI] = useState(null);
return (
<div style={{ height: "500px" }}>
<p style={{ fontSize: "16px" }}> Click to update the scene</p>
<button className="custom-button" onClick={updateScene}>
Update Scene
</button>
<Excalidraw ref={(api) => setExcalidrawAPI(api)} />
</div>
);
}
```
### updateLibrary
<pre>
(opts: &#123; <br /> libraryItems:{" "}
<a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L249">
LibraryItemsSource
</a>
;<br /> merge?: boolean; <br /> prompt?: boolean;
<br /> openLibraryMenu?: boolean;
<br /> defaultStatus?: "unpublished" | "published"; <br /> &#125;) => Promise&lt;
<a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L246">
LibraryItems
</a>
&gt;
</pre>
You can use this function to update the library. It accepts the below attributes.
| Name | Type | Default | Description |
| --- | --- | --- | --- |
| `libraryItems` | [LibraryItemsSource](https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L249) | \_ | The `libraryItems` to be replaced/merged with current library |
| `merge` | boolean | `false` | Whether to merge with existing library items. |
| `prompt` | boolean | `false` | Whether to prompt user for confirmation. |
| `openLibraryMenu` | boolean | `false` | Keep the library menu open after library is updated. |
| `defaultStatus` | <code>"unpublished" &#124; "published"</code> | `"unpublished"` | Default library item's `status` if not present. |
```tsx live
function App() {
const [excalidrawAPI, setExcalidrawAPI] = useState(null);
useEffect(() => {
if (!excalidrawAPI) {
return;
}
// to open the library sidebar
excalidrawAPI.updateScene({ appState: { openSidebar: "library" } });
}, [excalidrawAPI]);
return (
<div style={{ height: "500px" }}>
<p style={{ fontSize: "16px" }}> Click to update the library items</p>
<button
className="custom-button"
onClick={() => {
const libraryItems = [
{
status: "published",
id: "1",
created: 1,
elements: initialData.libraryItems[1],
},
{
status: "unpublished",
id: "2",
created: 2,
elements: initialData.libraryItems[1],
},
];
excalidrawAPI.updateLibrary({
libraryItems,
openLibraryMenu: true,
});
}}
>
Update Library
</button>
<Excalidraw
ref={(api) => setExcalidrawAPI(api)}
// initial data retrieved from https://github.com/excalidraw/excalidraw/blob/master/dev-docs/src/initialData.js
initialData={{
libraryItems: initialData.libraryItems,
appState: { openSidebar: "library" },
}}
/>
</div>
);
}
```
### addFiles
<pre>
(files:{" "}
<a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L59">
BinaryFileData
</a>
) => void
</pre>
Adds supplied files data to the `appState.files` cache on top of existing files present in the cache.
## resetScene
```tsx
(opts?: { 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#L115">
ExcalidrawElement[]
</a>
</pre>
Returns all the elements including the deleted in the scene.
## getSceneElements
<pre>
() => NonDeleted&#60;
<a href="https://github.com/excalidraw/excalidraw/blob/master/src/element/types.ts#L115">
ExcalidrawElement
</a>
[]&#62;
</pre>
Returns all the elements excluding the deleted in the scene
## getAppState
<pre>
() =>{" "}
<a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L95">
AppState
</a>
</pre>
Returns current appState.
## history
```tsx
{
clear: () => void
}
```
This is the history API. history.clear() will clear the history.
## scrollToContent
```tsx
(
target?: ExcalidrawElement | ExcalidrawElement[],
opts?:
| {
fitToContent?: boolean;
animate?: boolean;
duration?: number;
}
| {
fitToViewport?: boolean;
viewportZoomFactor?: number;
animate?: boolean;
duration?: number;
}
) => void
```
Scroll the nearest element out of the elements supplied to the center of the viewport. Defaults to the elements on the scene.
| Attribute | type | default | Description |
| --- | --- | --- | --- |
| target | [ExcalidrawElement](https://github.com/excalidraw/excalidraw/blob/master/src/element/types.ts#L115) &#124; [ExcalidrawElement[]](https://github.com/excalidraw/excalidraw/blob/master/src/element/types.ts#L115) | All scene elements | The element(s) to scroll to. |
| opts.fitToContent | boolean | false | Whether to fit the elements to viewport by automatically changing zoom as needed. Note that the zoom range is between 10%-100%. |
| opts.fitToViewport | boolean | false | Similar to fitToContent but the zoom range is not limited. If elements are smaller than the viewport, zoom will go above 100%. |
| opts.viewportZoomFactor | number | 0.7 | when fitToViewport=true, how much screen should the content cover, between 0.1 (10%) and 1 (100%) |
| opts.animate | boolean | false | Whether to animate between starting and ending position. Note that for larger scenes the animation may not be smooth due to performance issues. |
| opts.duration | number | 500 | Duration of the animation if `opts.animate` is `true`. |
## refresh
```tsx
() => void
```
Updates the `offsets` for the `Excalidraw` component so that the coordinates are computed correctly (for example the cursor position).
You don't have to call this when the position is changed on page scroll or when the excalidraw container resizes (we handle that ourselves).
For any other cases if the position of excalidraw is updated (example due to scroll on parent container and not page scroll) you should call this API.
## setToast
This API can be used to show the toast with custom message.
```tsx
({ message: string, closable?:boolean,duration?:number
} | null) => void
```
| Attribute | type | Description |
| --- | --- | --- |
| message | string | The message to be shown on the toast. |
| closable | boolean | Indicates whether to show the closable button on toast to dismiss the toast. |
| duration | number | Determines the duration after which the toast should auto dismiss. To prevent autodimiss you can pass `Infinity`. |
To dismiss an existing toast you can simple pass `null`
```js
setToast(null);
```
## id
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).
## getFiles
<pre>
() =>{" "}
<a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L82">
files
</a>
</pre>
This API can be used to get the files present in the scene. It may contain files that aren't referenced by any element, so if you're persisting the files to a storage, you should compare them against stored elements.
## setActiveTool
This API has the below signature. It sets the `tool` passed in param as the active tool.
<pre>
(tool: <br /> &#123; type:{" "}
<a href="https://github.com/excalidraw/excalidraw/blob/master/src/shapes.tsx#L15">
SHAPES
</a>
[number]["value"]&#124; "eraser" &#125; &#124;
<br /> &#123; type: "custom"; customType: string &#125;) => void
</pre>
## setCursor
This API can be used to customise the mouse cursor on the canvas and has the below signature. It sets the mouse cursor to the cursor passed in param.
```tsx
(cursor: string) => void
```
## toggleSidebar
```tsx
(opts: { name: string; tab?: string; force?: boolean }) => boolean;
```
This API can be used to toggle sidebar, optionally opening a specific sidebar tab. It returns whether the sidebar was toggled on or off. If the `force` flag passed, it will force the sidebar to be toggled either on/off.
This API is especially useful when you render a custom [`<Sidebar/>`](/docs/@excalidraw/excalidraw/api/children-components/sidebar), and you want to toggle it from your app based on a user action.
## resetCursor
```tsx
() => void
```
This API can be used to reset to default mouse cursor.

View File

@@ -0,0 +1,80 @@
# Render Props
## renderTopRightUI
<pre>
(isMobile: boolean, appState:
<a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L95">
AppState
</a>) => JSX | null
</pre>
A function returning `JSX` to render `custom` UI in the top right corner of the app.
```jsx live
function App() {
return (
<div style={{ height: "500px" }}>
<Excalidraw
renderTopRightUI={() => {
return (
<button
style={{
background: "#70b1ec",
border: "none",
color: "#fff",
width: "max-content",
fontWeight: "bold",
}}
onClick={() => window.alert("This is dummy top right UI")}
>
Click me
</button>
);
}}
/>
</div>
);
}
```
## renderCustomStats
A function that can be used to render custom stats (returns JSX) in the `nerd stats` dialog.
![Nerd Stats](../../../../assets/nerd-stats.png)
For example you can use this prop to render the size of the elements in the storage as do in [excalidraw.com](https://excalidraw.com).
```jsx live
function App() {
return (
<div style={{ height: "500px" }}>
<Excalidraw
renderCustomStats={() => (
<p style={{ color: "#70b1ec", fontWeight: "bold" }}>
Dummy stats will be shown here
</p>
)}
/>
</div>
);
}
```
## renderEmbeddable
<pre>
(element: NonDeleted&lt;ExcalidrawEmbeddableElement&gt;, appState:{" "}
<a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L95">
AppState
</a>
) => JSX.Element | null
</pre>
Allows you to replace the renderer for embeddable elements (which renders `<iframe>` elements).
| Parameter | Type | Description |
| --- | --- | --- |
| `element` | `NonDeleted<ExcalidrawEmbeddableElement>` | The embeddable element to be rendered. |
| `appState` | `AppState` | The current state of the UI. |

View File

@@ -0,0 +1,72 @@
# UIOptions
This prop can be used to customise UI of Excalidraw. Currently we support customising [`canvasActions`](#canvasactions), [`dockedSidebarBreakpoint`](#dockedsidebarbreakpoint) and [`welcomeScreen`](#welcmescreen).
<pre>
&#123;
<br /> canvasActions?: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L372">
CanvasActions
</a>, <br /> dockedSidebarBreakpoint?: number, <br /> welcomeScreen?: boolean <br />
}
</pre>
## canvasActions
This `prop` controls the visibility of the canvas actions inside the `menu`.
| Prop | Type | Default | Description |
| --- | --- | --- | --- |
| `changeViewBackgroundColor` | `boolean` | `true` | Indicates whether to show `Background color picker`. |
| `clearCanvas` | `boolean` | `true` | Indicates whether to show `Clear canvas` button. |
| `export` | `false` &#124; [`exportOpts`](#exportopts) | `object` | This prop allows to customize the UI inside the export dialog. By default it shows the `save file to disk`. For more details visit [`exportOpts`](#exportopts). |
| `loadScene` | `boolean` | `true` | Indicates whether to show `Load` button. |
| `saveToActiveFile` | `boolean` | `true` | Indicates whether to show `Save` button to save to current file. |
| `toggleTheme` | `boolean` &#124; `null` | `null` | Indicates whether to show `Theme toggle`. When defined as `boolean`, takes precedence over [`props.theme`](/docs/@excalidraw/excalidraw/api/props#theme) to show `Theme toggle`. |
| `saveAsImage` | `boolean` | `true` | Indicates whether to show `Save as image` button. |
```tsx live
function App() {
const UIOptions = {
canvasActions: {
changeViewBackgroundColor: false,
clearCanvas: false,
loadScene: false,
},
};
return (
<div style={{ height: "500px" }}>
<Excalidraw UIOptions={UIOptions} />
</div>
);
}
```
### 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.
| Prop | Type | Default | Description |
| --- | --- | --- | --- |
| `saveFileToDisk` | `boolean` | `true` | Indicates whether `save file to disk` button should be shown |
| `onExportToBackend` | `object` | \_ | 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` | `object` | \_ | This callback should be supplied if you want to render custom UI in the export dialog. |
## dockedSidebarBreakpoint
This prop indicates at what point should we break to a docked, permanent sidebar. If not passed it defaults to [`MQ_RIGHT_SIDEBAR_MAX_WIDTH_PORTRAIT`](https://github.com/excalidraw/excalidraw/blob/master/src/constants.ts#L161).
If the _width_ of the _excalidraw_ container exceeds _dockedSidebarBreakpoint_, the sidebar will be `dockable` and the button to `dock` the sidebar will be shown
If user choses to `dock` the sidebar, it will push the right part of the UI towards the left, making space for the sidebar as shown below.
![image](https://user-images.githubusercontent.com/11256141/174664866-c698c3fa-197b-43ff-956c-d79852c7b326.png)
```tsx live
function App() {
return (
<div style={{ height: "500px" }}>
<Excalidraw UIOptions={{dockedSidebarBreakpoint: 200}}/>
</div>
);
}
```

View File

@@ -0,0 +1,196 @@
---
title: Export Utilities
id: "export"
---
:::info
We're working on much improved export utilities. Stay tuned!
:::
### exportToCanvas
**_Signature_**
<pre>
exportToCanvas(&#123;<br/>&nbsp;
elements,<br/>&nbsp;
appState<br/>&nbsp;
getDimensions,<br/>&nbsp;
files,<br/>&nbsp;
exportPadding?: number;<br/>
&#125;: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/packages/utils.ts#L21">ExportOpts</a>
</pre>
| Name | Type | Default | Description |
| --- | --- | --- | --- |
| `elements` | [Excalidraw Element []](https://github.com/excalidraw/excalidraw/blob/master/src/element/types.ts#L114) | | The elements to be exported to canvas. |
| `appState` | [AppState](https://github.com/excalidraw/excalidraw/blob/master/src/packages/utils.ts#L23) | [Default App State](https://github.com/excalidraw/excalidraw/blob/master/src/appState.ts#L17) | The app state of the scene. |
| [`getDimensions`](#getdimensions) | `function` | _ | A function which returns the `width`, `height`, and optionally `scale` (defaults to `1`), with which canvas is to be exported. |
| `maxWidthOrHeight` | `number` | _ | The maximum `width` or `height` of the exported image. If provided, `getDimensions` is ignored. |
| `files` | [BinaryFiles](https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L59) | _ | The files added to the scene. |
| `exportPadding` | `number` | `10` | The `padding` to be added on canvas. |
#### getDimensions
```tsx
(width: number, height: number) => {
width: number,
height: number,
scale?: number
}
```
A function which returns the `width`, `height`, and optionally `scale` (defaults to `1`), with which canvas is to be exported.
**How to use**
```js
import { exportToCanvas } from "@excalidraw/excalidraw";
```
This function returns the canvas with the exported elements, appState and dimensions.
```jsx live
function App() {
const [canvasUrl, setCanvasUrl] = useState("");
const [excalidrawAPI, setExcalidrawAPI] = useState(null);
return (
<>
<button
className="custom-button"
onClick={async () => {
if (!excalidrawAPI) {
return
}
const elements = excalidrawAPI.getSceneElements();
if (!elements || !elements.length) {
return
}
const canvas = await exportToCanvas({
elements,
appState: {
...initialData.appState,
exportWithDarkMode: false,
},
files: excalidrawAPI.getFiles(),
getDimensions: () => { return {width: 350, height: 350}}
});
const ctx = canvas.getContext("2d");
ctx.font = "30px Virgil";
ctx.strokeText("My custom text", 50, 60);
setCanvasUrl(canvas.toDataURL());
}}
>
Export to Canvas
</button>
<div className="export export-canvas">
<img src={canvasUrl} alt="" />
</div>
<div style={{ height: "400px" }}>
<Excalidraw ref={(api) => setExcalidrawAPI(api)}
/>
</div>
</>
)
}
```
### exportToBlob
**_Signature_**
<pre>
exportToBlob(<br/>&nbsp;
opts: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/packages/utils.ts#L14">ExportOpts</a> & &#123;<br/>&nbsp;
mimeType?: string,<br/>&nbsp;
quality?: number,<br/>&nbsp;
exportPadding?: number;<br/>
})
</pre>
| Name | Type | Default | Description |
| --- | --- | --- | --- |
| `opts` | `object` | _ | This param is passed to `exportToCanvas`. You can refer to [`exportToCanvas`](#exporttocanvas) |
| `mimeType` | `string` | `image/png` | Indicates the image format. |
| `quality` | `number` | `0.92` | A value between `0` and `1` indicating the [image quality](https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toBlob#parameters). Applies only to `image/jpeg`/`image/webp` MIME types. |
| `exportPadding` | `number` | `10` | The padding to be added on canvas. |
**How to use**
```js
import { exportToBlob } from "@excalidraw/excalidraw";
```
Returns a promise which resolves with a [blob](https://developer.mozilla.org/en-US/docs/Web/API/Blob). It internally uses [canvas.ToBlob](https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toBlob).
### exportToSvg
**_Signature_**
<pre>
exportToSvg(&#123;<br/>&nbsp;
elements:&nbsp;
<a href="https://github.com/excalidraw/excalidraw/blob/master/src/element/types.ts#L114">
ExcalidrawElement[]
</a>,<br/>&nbsp;
appState:
<a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L95"> AppState
</a>,<br/>&nbsp;
exportPadding: number,<br/>&nbsp;
metadata: string,<br/>&nbsp;
files:&nbsp;
<a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L59">
BinaryFiles
</a>,<br/>
&#125;);
</pre>
| Name | Type | Default | Description |
| --- | --- | --- | --- |
| elements | [Excalidraw Element []](https://github.com/excalidraw/excalidraw/blob/master/src/element/types.ts#L114) | | The elements to exported as `svg `|
| appState | [AppState](https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L95) | [defaultAppState](https://github.com/excalidraw/excalidraw/blob/master/src/appState.ts#L11) | The `appState` of the scene |
| exportPadding | number | 10 | The `padding` to be added on canvas |
| files | [BinaryFiles](https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L64) | undefined | The `files` added to the scene. |
This function returns a promise which resolves to `svg` of the exported drawing.
### exportToClipboard
**_Signature_**
<pre>
exportToClipboard(<br/>&nbsp;
opts: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/packages/utils.ts#L21">ExportOpts</a> & &#123;<br/>&nbsp;
mimeType?: string,<br/>&nbsp;
quality?: number;<br/>&nbsp;
type: 'png' | 'svg' |'json'<br/>
})
</pre>
| Name | Type | Default | Description |
| --- | --- | --- | --- |
| `opts` | | | This param is same as the params passed to `exportToCanvas`. You can refer to [`exportToCanvas`](#exporttocanvas). |
| `mimeType` | `string` | `image/png` | Indicates the image format, this will be used when exporting as `png`. |
| `quality` | `number` | `0.92` | A value between `0` and `1` indicating the [image quality](https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toBlob#parameters). Applies only to `image/jpeg` / `image/webp` MIME types. This will be used when exporting as `png`. |
| `type` | 'png' &#124; 'svg' &#124; 'json' | _ | This determines the format to which the scene data should be `exported`. |
**How to use**
```js
import { exportToClipboard } from "@excalidraw/excalidraw";
```
Copies the scene data in the specified format (determined by `type`) to clipboard.
### Additional attributes of appState for export\* APIs
| Name | Type | Default | Description |
| --- | --- | --- | --- |
| `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/png`. This will increase the image size. |

View File

@@ -0,0 +1,108 @@
---
title: Restore Utilities
id: "restore"
---
### restoreAppState
**_Signature_**
<pre>
restoreAppState(appState: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/data/types.ts#L34">ImportedDataState["appState"]</a>,<br/>&nbsp; localAppState: Partial&lt;<a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L95">AppState</a>> | null): <a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L95">AppState</a>
</pre>
**_How to use_**
```js
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#L95) and if any key is missing, it will be set to its `default` value.
When `localAppState` is supplied, it's used in place of values that are missing (`undefined`) in `appState` instead of the defaults.
Use this as a way to not override user's defaults if you persist them.
You can pass `null` / `undefined` if not applicable.
### restoreElements
**_Signature_**
<pre>
restoreElements(
elements: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/element/types.ts#L114">ImportedDataState["elements"]</a>,<br/>&nbsp;
localElements: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/element/types.ts#L114">ExcalidrawElement[]</a> | null | undefined): <a href="https://github.com/excalidraw/excalidraw/blob/master/src/element/types.ts#L114">ExcalidrawElement[]</a>,<br/>&nbsp;
opts: &#123; refreshDimensions?: boolean, repairBindings?: boolean }<br/>
)
</pre>
| Prop | Type | Description |
| ---- | ---- | ---- |
| `elements` | <a href="https://github.com/excalidraw/excalidraw/blob/master/src/element/types.ts#L114">ImportedDataState["elements"]</a> | The `elements` to be restored |
| [`localElements`](#localelements) | <a href="https://github.com/excalidraw/excalidraw/blob/master/src/element/types.ts#L114">ExcalidrawElement[]</a> &#124; null &#124; undefined | When `localElements` are supplied, they are used to ensure that existing restored elements reuse `version` (and increment it), and regenerate `versionNonce`. |
| [`opts`](#opts) | `Object` | The extra optional parameter to configure restored elements
#### localElements
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 update
#### opts
The extra optional parameter to configure restored elements. It has the following attributes
| Prop | Type | Description|
| --- | --- | ------|
| `refreshDimensions` | `boolean` | Indicates whether we should also `recalculate` text element dimensions. Since this is a potentially costly operation, you may want to disable it if you restore elements in tight loops, such as during collaboration. |
| `repairBindings` |`boolean` | Indicates whether the `bindings` for the elements should be repaired. This is to make sure there are no containers with non existent bound text element id and no bound text elements with non existent container id. |
**_How to use_**
```js
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 its default value.
Parameter `refreshDimensions` indicates whether we should also `recalculate` text element dimensions. Defaults to `false`. Since this is a potentially costly operation, you may want to disable it if you restore elements in tight loops, such as during collaboration.
### restore
**_Signature_**
<pre>
restore(
data: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/data/types.ts#L34">ImportedDataState</a>,<br/>&nbsp;
localAppState: Partial&lt;<a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L95">AppState</a>> | null | undefined,<br/>&nbsp;
localElements: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/element/types.ts#L114">ExcalidrawElement[]</a> | null | undefined<br/>): <a href="https://github.com/excalidraw/excalidraw/blob/master/src/data/types.ts#L4">DataState</a><br/>
opts: &#123; refreshDimensions?: boolean, repairBindings?: boolean }<br/>
)
</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 a combination of [restoreElements](#restoreelements) and [restoreAppState](#restoreappstate).
### restoreLibraryItems
**_Signature_**
<pre>
restoreLibraryItems(libraryItems: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/data/types.ts#L34">ImportedDataState["libraryItems"]</a>,<br/>&nbsp;
defaultStatus: "published" | "unpublished")
</pre>
**_How to use_**
```js
import { restoreLibraryItems } from "@excalidraw/excalidraw";
restoreLibraryItems(libraryItems, "unpublished");
```
This function normalizes library items elements, adding missing values when needed.

View File

@@ -0,0 +1,385 @@
---
slug: /@excalidraw/excalidraw/api/utils
---
# Utils
These are pure Javascript functions exported from the @excalidraw/excalidraw [`@excalidraw/excalidraw`](https://npmjs.com/@excalidraw/excalidraw). If you want to export your drawings in different formats eg `png`, `svg` and more you can check out [Export Utilities](/docs/@excalidraw/excalidraw/API/utils/export). If you want to restore your drawings you can check out [Restore Utilities](/docs/@excalidraw/excalidraw/API/utils/restore).
### serializeAsJSON
Takes the scene elements and state and returns a JSON string. `Deleted` elements as well as most properties from `AppState` are removed from the resulting JSON. (see [`serializeAsJSON()`](https://github.com/excalidraw/excalidraw/blob/master/src/data/json.ts#L42) source for details).
If you want to overwrite the `source` field in the `JSON` string, you can set `window.EXCALIDRAW_EXPORT_SOURCE` to the desired value.
**_Signature_**
<pre>
serializeAsJSON(&#123;<br/>&nbsp;
elements: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/element/types.ts#L114">ExcalidrawElement[]</a>,<br/>&nbsp;
appState: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L95">AppState</a>,<br/>
}): string
</pre>
**How to use**
```js
import { serializeAsJSON } from "@excalidraw/excalidraw";
```
### serializeLibraryAsJSON
Takes the `library` items and returns a `JSON` string.
If you want to overwrite the source field in the JSON string, you can set `window.EXCALIDRAW_EXPORT_SOURCE` to the desired value.
**_Signature_**
<pre>
serializeLibraryAsJSON(
libraryItems: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L200">LibraryItems[]</a>)
</pre>
**How to use**
```js
import { serializeLibraryAsJSON } from "@excalidraw/excalidraw";
```
#### isInvisiblySmallElement
Returns `true` if element is invisibly small (e.g. width & height are zero).
**_Signature_**
<pre>
isInvisiblySmallElement(element: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/element/types.ts#L114">ExcalidrawElement</a>): boolean
</pre>
**How to use**
```js
import { isInvisiblySmallElement } from "@excalidraw/excalidraw";
```
### loadFromBlob
This function loads the scene data from the blob (or file). If you pass `localAppState`, `localAppState` value will be preferred over the `appState` derived from `blob`. Throws if blob doesn't contain valid scene data.
**How to use**
```js
import { loadFromBlob } from "@excalidraw/excalidraw";
const scene = await loadFromBlob(file, null, null);
excalidrawAPI.updateScene(scene);
```
**Signature**
<pre>
loadFromBlob(<br/>&nbsp;
blob: <a href="https://developer.mozilla.org/en-US/docs/Web/API/Blob">Blob</a>,<br/>&nbsp;
localAppState: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L95">AppState</a> | null,<br/>&nbsp;
localElements: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/element/types.ts#L114">ExcalidrawElement[]</a> | null,<br/>&nbsp;
fileHandle?: FileSystemHandle | null <br/>
) => Promise&lt;<a href="https://github.com/excalidraw/excalidraw/blob/master/src/data/restore.ts#L61">RestoredDataState</a>>
</pre>
### loadLibraryFromBlob
This function loads the library from the blob. Additonally takes `defaultStatus` param which sets the default status for library item if not present, defaults to `unpublished`.
**How to use **
```js
import { loadLibraryFromBlob } from "@excalidraw/excalidraw";
```
**_Signature_**
<pre>
loadLibraryFromBlob(blob: <a href="https://developer.mozilla.org/en-US/docs/Web/API/Blob">Blob</a>, defaultStatus: "published" | "unpublished")
</pre>
### loadSceneOrLibraryFromBlob
This function loads either scene or library data from the supplied blob. If the blob contains scene data, and you pass `localAppState`, `localAppState` value will be preferred over the `appState` derived from `blob`.
:::caution
Throws if blob doesn't contain valid `scene` data or `library` data.
:::
**How to use**
```js showLineNumbers
import { loadSceneOrLibraryFromBlob, MIME_TYPES } from "@excalidraw/excalidraw";
const contents = await loadSceneOrLibraryFromBlob(file, null, null);
if (contents.type === MIME_TYPES.excalidraw) {
excalidrawAPI.updateScene(contents.data);
} else if (contents.type === MIME_TYPES.excalidrawlib) {
excalidrawAPI.updateLibrary(contents.data);
}
```
**_Signature_**
<pre>
loadSceneOrLibraryFromBlob(<br/>&nbsp;
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#L95">AppState</a> | null,<br/>&nbsp;
localElements: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/element/types.ts#L114">ExcalidrawElement[]</a> | null,<br/>&nbsp;
fileHandle?: FileSystemHandle | null<br/>
) => Promise&lt;&#123; type: string, data: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/data/restore.ts#L53">RestoredDataState</a> | <a href="https://github.com/excalidraw/excalidraw/blob/master/src/data/types.ts#L33">ImportedLibraryState</a>}>
</pre>
### getFreeDrawSvgPath
This function returns the `free draw` svg path for the element.
**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#L182">ExcalidrawFreeDrawElement</a>)
</pre>
### isLinearElement
This function returns true if the element is `linear` type (`arrow` |`line`) else returns `false`.
**How to use**
```js
import { isLinearElement } from "@excalidraw/excalidraw";
```
**Signature**
```tsx
isLinearElement(elementType?: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/element/types.ts#L80">ExcalidrawElement</a>): boolean
```
### getNonDeletedElements
This function returns an array of `deleted` elements.
**How to use**
```js
import { getNonDeletedElements } from "@excalidraw/excalidraw";
```
**Signature**
<pre>
getNonDeletedElements(elements:<a href="https://github.com/excalidraw/excalidraw/blob/master/src/element/types.ts#L114"> readonly ExcalidrawElement[]</a>): as readonly <a href="https://github.com/excalidraw/excalidraw/blob/master/src/element/types.ts#L125">NonDeletedExcalidrawElement[]</a>
</pre>
### mergeLibraryItems
This function merges two `LibraryItems` arrays, where unique items from `otherItems` are sorted first in the returned array.
```js
import { mergeLibraryItems } from "@excalidraw/excalidraw";
```
**_Signature_**
<pre>
mergeLibraryItems(localItems: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L250">LibraryItems</a>,<br/>&nbsp;
otherItems: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L200">LibraryItems</a>) => <a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L250">LibraryItems</a>
</pre>
### parseLibraryTokensFromUrl
Parses library parameters from URL if present (expects the `#addLibrary` hash key), and returns an object with the `libraryUrl` and `idToken`. Returns `null` if `#addLibrary` hash key not found.
**How to use**
```js
import { parseLibraryTokensFromUrl } from "@excalidraw/excalidraw";
```
**Signature**
```tsx
parseLibraryTokensFromUrl(): {
libraryUrl: string;
idToken: string | null;
} | null
```
### useHandleLibrary
A hook that automatically imports library from url if `#addLibrary` hash key exists on initial load, or when it changes during the editing session (e.g. when a user installs a new library), and handles initial library load if `getInitialLibraryItems` getter is supplied.
**How to use**
```js
import { useHandleLibrary } from "@excalidraw/excalidraw";
export const App = () => {
// ...
useHandleLibrary({ excalidrawAPI });
};
```
**Signature**
<pre>
useHandleLibrary(opts: &#123;<br/>&nbsp;
excalidrawAPI: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L494">ExcalidrawAPI</a>,<br/>&nbsp;
getInitialLibraryItems?: () => <a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L253">LibraryItemsSource</a><br/>
});
</pre>
In the future, we will be adding support for handling `library` persistence to `browser storage` (or elsewhere).
### getSceneVersion
This function returns the current `scene` version.
**_Signature_**
<pre>
getSceneVersion(elements: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/element/types.ts#L114">ExcalidrawElement[]</a>)
</pre>
**How to use**
```js
import { getSceneVersion } from "@excalidraw/excalidraw";
```
### sceneCoordsToViewportCoords
This function returns equivalent `viewport` coords for the provided `scene` coords in params.
```js
import { sceneCoordsToViewportCoords } from "@excalidraw/excalidraw";
```
**_Signature_**
<pre>
sceneCoordsToViewportCoords(&#123; sceneX: number, sceneY: number },<br/>&nbsp;
appState: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L95">AppState</a><br/>): &#123; x: number, y: number }
</pre>
### viewportCoordsToSceneCoords
This function returns equivalent `scene` coords for the provided `viewport` coords in params.
```js
import { viewportCoordsToSceneCoords } from "@excalidraw/excalidraw";
```
**_Signature_**
<pre>
viewportCoordsToSceneCoords(&#123; clientX: number, clientY: number },<br/>&nbsp;
appState: <a href="https://github.com/excalidraw/excalidraw/blob/master/src/types.ts#L95">AppState</a><br/>): &#123;x: number, y: number}
</pre>
### useDevice
This hook can be used to check the type of device which is being used. It can only be used inside the `children` of `Excalidraw` component.
Open the `main menu` in the below example to view the footer.
```jsx live noInline
const MobileFooter = ({}) => {
const device = useDevice();
if (device.isMobile) {
return (
<Footer>
<button
className="custom-footer"
style={{ marginLeft: "20px", height: "2rem" }}
onClick={() => alert("This is custom footer in mobile menu")}
>
custom footer
</button>
</Footer>
);
}
return null;
};
const App = () => (
<div style={{ height: "400px" }}>
<Excalidraw>
<MainMenu>
<MainMenu.Item> Item1 </MainMenu.Item>
<MainMenu.Item> Item 2 </MainMenu.Item>
<MobileFooter />
</MainMenu>
</Excalidraw>
</div>
);
// Need to render when code is span across multiple components
// in Live Code blocks editor
render(<App />);
```
The `device` has the following `attributes`
| Name | Type | Description |
| --- | --- | --- |
| `isSmScreen` | `boolean` | Set to `true` when the device small screen is small (Width < `640px` ) |
| `isMobile` | `boolean` | Set to `true` when the device is `mobile` |
| `isTouchScreen` | `boolean` | Set to `true` for `touch` devices |
| `canDeviceFitSidebar` | `boolean` | Implies whether there is enough space to fit the `sidebar` |
### i18n
To help with localization, we export the following.
| name | type |
| --- | --- |
| `defaultLang` | `string` |
| `languages` | [`Language[]`](https://github.com/excalidraw/excalidraw/blob/master/src/i18n.ts#L15) |
| `useI18n` | [`() => { langCode, t }`](https://github.com/excalidraw/excalidraw/blob/master/src/i18n.ts#L15) |
```js
import { defaultLang, languages, useI18n } from "@excalidraw/excalidraw";
```
#### defaultLang
Default language code, `en`.
#### languages
List of supported language codes. You can pass any of these to `Excalidraw`'s [`langCode` prop](/docs/@excalidraw/excalidraw/api/props/#langcode).
#### useI18n
A hook that returns the current language code and translation helper function. You can use this to translate strings in the components you render as children of `<Excalidraw>`.
```jsx live
function App() {
const { t } = useI18n();
return (
<div style={{ height: "500px" }}>
<Excalidraw>
<button
style={{ position: "absolute", zIndex: 10, height: "2rem" }}
onClick={() => window.alert(t("labels.madeWithExcalidraw"))}
>
{t("buttons.confirm")}
</button>
</Excalidraw>
</div>
);
}
```

View File

@@ -0,0 +1,49 @@
# Customizing Styles
Excalidraw is using CSS variables to style certain components. To override them, you should set your own on the `.excalidraw` and `.excalidraw.theme--dark` (for dark mode variables) selectors.
Make sure the selector has higher specificity, e.g. by prefixing it with your app's selector:
```css
.your-app .excalidraw {
--color-primary: red;
}
.your-app .excalidraw.theme--dark {
--color-primary: pink;
}
```
Most notably, you can customize the primary colors, by overriding these variables:
- `--color-primary`
- `--color-primary-darker`
- `--color-primary-darkest`
- `--color-primary-light`
- `--color-primary-contrast-offset` — a slightly darker (in light mode), or lighter (in dark mode) `--color-primary` color to fix contrast issues (see [Chubb illusion](https://en.wikipedia.org/wiki/Chubb_illusion)). It will fall back to `--color-primary` if not present.
For a complete list of variables, check [theme.scss](https://github.com/excalidraw/excalidraw/blob/master/src/css/theme.scss), though most of them will not make sense to override.
```css showLineNumbers
.custom-styles .excalidraw {
--color-primary: #fcc6d9;
--color-primary-darker: #f783ac;
--color-primary-darkest: #e64980;
--color-primary-light: #f2a9c4;
}
.custom-styles .excalidraw.theme--dark {
--color-primary: #d494aa;
--color-primary-darker: #d64c7e;
--color-primary-darkest: #e86e99;
--color-primary-light: #dcbec9;
}
```
```tsx live
function App() {
return (
<div style={{ height: "500px" }} className="custom-styles">
<Excalidraw />
</div>
);
}
```

View File

@@ -0,0 +1,59 @@
---
pagination_prev: "@excalidraw/excalidraw/installation"
---
# Development
This page relates to developing the `@excalidraw/excalidraw` package itself.
## Example app
To start the example app using the `@excalidraw/excalidraw` package, follow the below steps:
1. Install the dependencies
```bash
cd src/packages/excalidraw && yarn
```
2. Start the example app
```bash
yarn start
```
[http://localhost:3001](http://localhost:3001) will open in your default browser.
The example is same as the [codesandbox example](https://ehlz3.csb.app/)
## Releasing
### Create a test release
You can create a test release by posting the below comment in your pull request:
```bash
@excalibot trigger release
```
Once the version is released `@excalibot` will post a comment with the release version.
### Creating a production release
To release the next stable version follow the below steps:
```bash
yarn prerelease version
```
You need to pass the `version` for which you want to create the release. This will make the changes needed before making the release like updating `package.json`, `changelog` and more.
The next step is to run the `release` script:
```bash
yarn release
```
This will publish the package.
Right now there are two steps to create a production release but once this works fine these scripts will be combined and more automation will be done.

View File

@@ -0,0 +1,37 @@
# FAQ
### Does this package support collaboration ?
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). Here is a [detailed answer](https://github.com/excalidraw/excalidraw/discussions/3879#discussioncomment-1110524) on how you can achieve the same.
### Turning off Aggressive Anti-Fingerprinting in Brave browser
When *Aggressive Anti-Fingerprinting* is turned on, the `measureText` API breaks which in turn breaks the Text Elements in your drawings. Here is more [info](https://github.com/excalidraw/excalidraw/pull/6336) on the same.
We strongly recommend turning it off. You can follow the steps below on how to do so.
1. Open [excalidraw.com](https://excalidraw.com) in Brave and click on the **Shield** button
![Shield button](../../assets/brave-shield.png)
<div style={{width:'30rem'}}>
2. Once opened, look for **Aggressively Block Fingerprinting**
![Aggresive block fingerprinting](../../assets/aggressive-block-fingerprint.png)
3. Switch to **Block Fingerprinting**
![Block filtering](../../assets/block-fingerprint.png)
4. Thats all. All text elements should be fixed now 🎉
</div>
If disabling this setting doesn't fix the display of text elements, please consider opening an [issue](https://github.com/excalidraw/excalidraw/issues/new) on our GitHub, or message us on [Discord](https://discord.gg/UexuTaE).
## 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).

View File

@@ -0,0 +1,43 @@
# Installation
**Excalidraw** is published to npm as a component you can directly embed in your projects.
Using `npm`:
```bash
npm install react react-dom @excalidraw/excalidraw
```
or `yarn`:
```bash
yarn add react react-dom @excalidraw/excalidraw
```
:::tip
**If you don't want to wait for the next stable release and try out the unreleased changes you can use `@excalidraw/excalidraw@next`.**
:::
### Static assets
Excalidraw depends on assets such as localization files (if you opt to use them), fonts, and others.
By default these assets are loaded from a public CDN [`https://unpkg.com/@excalidraw/excalidraw/dist/`](https://unpkg.com/@excalidraw/excalidraw/dist), so you don't need to do anything on your end.
However, if you want to host these files yourself, you can find them in your `node_modules/@excalidraw/excalidraw/dist` directory, in folders `excalidraw-assets` (for production) and `excalidraw-assets-dev` (for development).
Copy these folders to your static assets directory, and add a `window.EXCALIDRAW_ASSET_PATH` variable in your `index.html` or `index.js` entry file pointing to your public assets path (relative). For example, if you serve your assets from the root of your hostname, you would do:
```js
window.EXCALIDRAW_ASSET_PATH = "/";
```
### Dimensions of Excalidraw
Excalidraw takes _100%_ of `width` and `height` of the containing block so make sure the container in which you render Excalidraw has non zero dimensions.
### Demo
[Try here](https://codesandbox.io/s/excalidraw-ehlz3).

View File

@@ -0,0 +1,131 @@
# Integration
## Module bundler
If you are using a module bundler (for instance, Webpack), you can import it as an ES6 module as shown below
```js
import { Excalidraw } from "@excalidraw/excalidraw";
```
:::info
Throughout the documentation we use live, editable Excalidraw examples like the one shown below.
While we aim for the examples to closely reflect what you'd get if you rendered it yourself, we actually initialize it with some props behind the scenes.
For example, we're passing a `theme` prop to it based on the current color theme of the docs you're just reading.
:::
```jsx live
function App() {
return (
<>
<h1 style={{ textAlign: "center" }}>Excalidraw Example</h1>
<div style={{ height: "500px" }}>
<Excalidraw />
</div>
</>
);
}
```
### Rendering Excalidraw only on client
Since _Excalidraw_ doesn't support server side rendering, you should render the component once the host is `mounted`.
The following worfklow shows one way how to render Excalidraw on Next.js. We'll add more detailed and alternative Next.js examples, soon.
```jsx showLineNumbers
import { useState, useEffect } from "react";
export default function App() {
const [Excalidraw, setExcalidraw] = useState(null);
useEffect(() => {
import("@excalidraw/excalidraw").then((comp) => setExcalidraw(comp.Excalidraw));
}, []);
return <>{Excalidraw && <Excalidraw />}</>;
}
```
The `types` are available at `@excalidraw/excalidraw/types`, you can view [example for typescript](https://codesandbox.io/s/excalidraw-types-9h2dm)
## Browser
To use it in a browser directly:
For development use :point_down:
```js
<script
type="text/javascript"
src="https://unpkg.com/@excalidraw/excalidraw/dist/excalidraw.development.js"
></script>
```
For production use :point_down:
```js
<script
type="text/javascript"
src="https://unpkg.com/@excalidraw/excalidraw/dist/excalidraw.production.min.js"
></script>
```
You will need to make sure `react`, `react-dom` is available as shown in the below example. For prod please use the production versions of `react`, `react-dom`.
import Tabs from "@theme/Tabs";
import TabItem from "@theme/TabItem";
<Tabs>
<TabItem value="html" label="html">
```html
<!DOCTYPE html>
<html>
<head>
<title>Excalidraw in browser</title>
<meta charset="UTF-8" />
<script src="https://unpkg.com/react@18.2.0/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@18.2.0/umd/react-dom.development.js"></script>
<script
type="text/javascript"
src="https://unpkg.com/@excalidraw/excalidraw/dist/excalidraw.development.js"
></script>
</head>
<body>
<div class="container">
<h1>Excalidraw Embed Example</h1>
<div id="app"></div>
</div>
<script type="text/javascript" src="src/index.js"></script>
</body>
</html>
```
</TabItem>
<TabItem value="js" label="Javascript">
```js showLineNumbers
const App = () => {
return React.createElement(
React.Fragment,
null,
React.createElement(
"div",
{
style: { height: "500px" },
},
React.createElement(ExcalidrawLib.Excalidraw),
),
);
};
const excalidrawWrapper = document.getElementById("app");
const root = ReactDOM.createRoot(excalidrawWrapper);
root.render(React.createElement(App));
```
</TabItem>
</Tabs>

View File

@@ -0,0 +1,155 @@
# API
At the moment the mermaid-to-excalidraw works in two steps. First, you call `parseMermaidToExcalidraw(mermaidSyntax)` on the mermaid diagram definition string, which resolves with elements in a skeleton format — a simplified excalidraw JSON format (docs coming soon). You then pass them to `convertToExcalidrawElements(elements)` to get the fully qualified excalidraw elements you can render in the editor.
The need for these two steps is due to the [@excalidraw/excalidraw](/docs/@excalidraw/excalidraw/installation) being a **UMD** build so we currently cannot import the `convertToExcalidrawElements()` util alone, until we support a tree-shakeable **ESM** build.
## parseMermaidToExcalidraw
This API receives the mermaid syntax as the input, and resolves to skeleton Excalidraw elements. You will need to call `convertToExcalidraw` API to convert them to fully qualified elements that you can render in Excalidraw.
** Example **
```ts
import { parseMermaidToExcalidraw } from "@excalidraw/mermaid-to-excalidraw";
import { convertToExcalidrawElements} from "@excalidraw/excalidraw"
try {
const { elements, files } = await parseMermaid(mermaidSyntax: string, {
fontSize: number,
});
const excalidrawElements = convertToExcalidrawElements(elements);
// Render elements and files on Excalidraw
} catch (e) {
// Parse error, displaying error message to users
}
```
## Supported Diagram Types
Currently only [flowcharts](https://mermaid.js.org/syntax/flowchart.html) are supported. Oother diagram types will be rendered as an image in Excalidraw.
### Flowchart
#### Excalidraw Regular Shapes
**Rectangles**, **Circle**, **Diamond**, and **Arrows** are fully supported in Excalidraw
```
flowchart TD
A[Christmas] -->|Get money| B(Go shopping)
B --> C{Let me think}
C -->|One| D[Laptop]
C -->|Two| E[iPhone]
C -->|Three| F[Car]
```
<img src="https://github.com/excalidraw/excalidraw/assets/11256141/c8ea84fc-e9fb-4652-9a12-154136d1a798" width="250" height="200"/>
```
flowchart LR
id1((Hello from Circle))
```
<img src="https://github.com/excalidraw/excalidraw/assets/11256141/6202a8b9-8aa7-451e-9478-4d8d75c0f2fa" width="250" height="200"/>
#### Subgraphs
Subgraphs are grouped diagrams hence they are also supported in Excalidraw
```
flowchart TB
c1-->a2
subgraph one
a1-->a2
end
subgraph two
b1-->b2
end
subgraph three
c1-->c2
end
```
<img src="https://github.com/excalidraw/excalidraw/assets/11256141/098bce52-8f93-437c-9a06-c6972e27c70a" width="350" height="200"/>
#### Unsupported shapes fallback to Rectangle
**Subroutine**, **Cylindrical**, **Asymmetric**, **Hexagon**, **Parallelogram**, **Trapezoid** are not supported in Excalidraw hence they fallback to the closest shape **Rectangle**
```
flowchart LR
id1[[Subroutine fallback to Rectangle]]
id2[(Cylindrical fallback to Rectangle)]
id3>Asymmetric fallback to Rectangle]
id4{{Hexagon fallback to Rectangle}}
id5[/Parallelogram fallback to Rectangle /]
id6[/Trapezoid fallback to Rectangle\]
```
The above shapes are not supported in Excalidraw hence they fallback to Rectangle
<img src="https://github.com/excalidraw/excalidraw/assets/11256141/cb269473-16c5-4c35-bd7a-d631d8cc5b47" width="350" height="200"/>
#### Markdown fallback to Regular text
Since we don't support wysiwyg text editor yet, hence [Markdown Strings](https://mermaid.js.org/syntax/flowchart.html#markdown-strings) will fallback to regular text.
```
flowchart LR
A("`Hello **World**`") --> B("`Whats **up** ?`")
```
<img src="https://github.com/excalidraw/excalidraw/assets/11256141/107bd428-9ab9-42d4-ba12-b1e29c8db478" width="250" height="200"/>
#### Basic FontAwesome fallback to text
The [FontAwesome](https://mermaid.js.org/syntax/flowchart.html#basic-support-for-fontawesome) icons aren't support so they won't be rendered in Excalidraw
```
flowchart TD
B["fab:fa-twitter for peace"]
B-->C[fa:fa-ban forbidden]
B-->E(A fa:fa-camera-retro perhaps?)
```
<img src="https://github.com/excalidraw/excalidraw/assets/11256141/7a693863-c3f9-42ff-b325-4b3f8303c7af" width="250" height="200"/>
#### Cross Arrow head fallback to Bar Arrow head
```
flowchart LR
Start x--x Stop
```
<img src="https://github.com/excalidraw/excalidraw/assets/11256141/217dd1ad-7f4e-4c80-8c1c-03647b42d821" width="250" height="200"/>
## Unsupported Diagram Types
Currently only [flowcharts](https://mermaid.js.org/syntax/flowchart.html) are supported. All other diagram types will be rendered as an image in Excalidraw.
```
erDiagram
CUSTOMER ||--o{ ORDER : places
ORDER ||--|{ LINE-ITEM : contains
CUSTOMER }|..|{ DELIVERY-ADDRESS : uses
```
<img src="https://github.com/excalidraw/excalidraw/assets/11256141/c1d3fdb3-32ef-4bf3-a38a-02ac3d7d2cb9" width="300" height="200"/>
```
gitGraph
commit
commit
branch develop
checkout develop
commit
commit
checkout main
merge develop
commit
commit
```
<img src="https://github.com/excalidraw/excalidraw/assets/11256141/e5dcec0b-d570-4eb4-b981-412a996aa96c" width="400" height="300"/>

View File

@@ -0,0 +1,7 @@
# Codebase
The Codebase is divided into 2 Sections
* [How Parser Works under the hood](/docs/@excalidraw/mermaid-to-excalidraw/codebase/parser) - If you are interested in understanding and deep diving into inner workings of the Parser, then make sure to checkout this section.
* [Adding a new diagram type](/docs/@excalidraw/mermaid-to-excalidraw/codebase/new-diagram-type) - If you want to help us make the mermaid to Excalidraw Parser more powerful, you will find all information in this section to do so.

View File

@@ -0,0 +1,54 @@
# Adding a new Diagram Type
To add a new diagram type to the parser you can follow the below steps :point_down:
All the code for the parser resides in [`src`](https://github.com/excalidraw/mermaid-to-excalidraw/tree/master/src) folder and for playground resides in [`playground`](https://github.com/excalidraw/mermaid-to-excalidraw/tree/master/playground) folder.
lets run the playground server in local :point_down:
```bash
yarn start
```
This will start the playground server in port `1234` and open it in browser so you start playing with the playground.
## Update Supported Diagram Types
First step is to add the new diagram type in [`SUPPORTED_DIAGRAM_TYPES`](https://github.com/excalidraw/mermaid-to-excalidraw/blob/master/src/constants.ts#L2).
Once this is done the new diagram type won't be rendered as an image but start throwing error since we don't support parsing the data yet.
## Writing the Diagram Parser
Once the diagram type is added in previous step. Next step is to write the parser to parse the mermaid diagram.
For this create a file named `{{diagramType}}.ts` in [`src/parser`](https://github.com/excalidraw/mermaid-to-excalidraw/tree/master/src/parser) and write a function `parseMermaid{{diagramType}}Diagram` similar to how we [`parseMermaidFlowChartDiagram`](https://github.com/excalidraw/mermaid-to-excalidraw/blob/master/src/parser/flowchart.ts#L256) for parsing flowchart diagram.
The main aim of the parser is :point_down:
1. Determine how elements are connected in the diagram and thus finding arrow and text bindings.
For this you might have to dig in to the parser `diagram.parser.yy` and which attributes to parse for the new diagram.
2. Determine the position and dimensions of each element, for this would be using the `svg`
Once the parser is ready, lets start using it.
Add the diagram type in switch case in [`parseMermaid`](https://github.com/excalidraw/mermaid-to-excalidraw/blob/master/src/parseMermaid.ts#L97) and call the parser for the same.
## Writing the Excalidraw Skeleton Convertor
With the completion of previous step, we have all the data, now we need to transform it so to [ExcalidrawElementSkeleton](https://github.com/excalidraw/excalidraw/blob/master/src/data/transform.ts#L133) format.
Similar to [`FlowChartToExcalidrawSkeletonConverter`](https://github.com/excalidraw/mermaid-to-excalidraw/blob/master/src/converter/types/flowchart.ts#L24), you have to write the `{{diagramType}}ToExcalidrawSkeletonConverter` which parses the data received in previous step and returns the [ExcalidrawElementSkeleton](https://github.com/excalidraw/excalidraw/blob/master/src/data/transform.ts#L133).
Thats it, you have added the new diagram type 🥳, now lets test it out!
## Updating the Playground
1. Create a file named `{{diagramType}}.ts` in [`playround/testcases/`](https://github.com/excalidraw/mermaid-to-excalidraw/tree/master/playground/testcases). For reference you can check [`flowchart.ts`](https://github.com/excalidraw/mermaid-to-excalidraw/blob/master/playground/testcases/flowchart.ts).
2. Incase the new diagram type added is present in [`unsupported.ts`](https://github.com/excalidraw/mermaid-to-excalidraw/blob/master/playground/testcases/unsupported.ts) then remove it from there.
3. Verify if the test cases are running fine in playground.

View File

@@ -0,0 +1,177 @@
# Flowchart Parser
As mentioned in the previous section, we use [getDiagramFromText](https://github.com/mermaid-js/mermaid/blob/00d06c7282a701849793680c1e97da1cfdfcce62/packages/mermaid/src/Diagram.ts#L80) to parse the full defination and get the [Diagram](https://github.com/mermaid-js/mermaid/blob/00d06c7282a701849793680c1e97da1cfdfcce62/packages/mermaid/src/Diagram.ts#L15) json from it.
In this section we will be diving into how the [flowchart parser](https://github.com/excalidraw/mermaid-to-excalidraw/blob/master/src/parser/flowchart.ts#L256) works behind the scenes.
![image](https://github.com/excalidraw/excalidraw/assets/11256141/2a097bbb-64bf-49d6-bf7f-21172bdb538d)
We use `diagram.parser.yy` attribute to parse the data. If you want to know more about how the `diagram.parse.yy` attribute looks like, you can check it [here](https://github.com/mermaid-js/mermaid/blob/00d06c7282a701849793680c1e97da1cfdfcce62/packages/mermaid/src/diagrams/flowchart/flowDb.js#L768), however for scope of flowchart we are using **3** APIs from this parser to compute `vertices`, `edges` and `clusters` as we need these data to transform to [ExcalidrawElementSkeleton](https://github.com/excalidraw/excalidraw/blob/master/src/data/transform.ts#L133C13-L133C38).
For computing `vertices` and `edge`s lets consider the below svg generated by mermaid
![image](https://github.com/excalidraw/excalidraw/assets/11256141/d7013305-0b90-4fa0-a66e-b4f4604ad0b2)
## Computing the vertices
We use `getVertices` API from `diagram.parse.yy` to get the vertices for a given flowchart.
Considering the same example this is the response from the API
```js
{
"start": {
"id": "start",
"labelType": "text",
"domId": "flowchart-start-1414",
"styles": [],
"classes": [],
"text": "start",
"props": {}
},
"stop": {
"id": "stop",
"labelType": "text",
"domId": "flowchart-stop-1415",
"styles": [],
"classes": [],
"text": "stop",
"props": {}
}
}
```
The dimensions and position is missing in this response and we need that to transform to [ExcalidrawElementSkeleton](https://github.com/excalidraw/excalidraw/blob/master/src/data/transform.ts#L133C13-L133C38), for this we have our own parser [`parseVertex`](https://github.com/excalidraw/mermaid-to-excalidraw/blob/master/src/parseMermaid.ts#L178) which takes the above response and uses the `svg` together to compute position, dimensions and cleans up the response.
The final output from `parseVertex` looks like :point_down:
```js
{
"start": {
"id": "start",
"labelType": "text",
"text": "start",
"x": 0,
"y": 0,
"width": 67.796875,
"height": 44,
"containerStyle": {},
"labelStyle": {}
},
"stop": {
"id": "stop",
"labelType": "text",
"text": "stop",
"x": 117.796875,
"y": 0,
"width": 62.3828125,
"height": 44,
"containerStyle": {},
"labelStyle": {}
}
}
```
## Computing the edges
The lines and arrows are considered as `edges` in mermaid as shown in the above diagram.
We use `getEdges` API from `diagram.parse.yy` to get the edges for a given flowchart.
Considering the same example this is the response from the API
```js
[
{
"start": "start",
"end": "stop",
"type": "arrow_point",
"text": "",
"labelType": "text",
"stroke": "normal",
"length": 1
}
]
```
Similarly here the dimensions and position is missing and we compute that from the svg. The [`parseEdge`](https://github.com/excalidraw/mermaid-to-excalidraw/blob/master/src/parseMermaid.ts#L245) takes the above response along with `svg` and computes the position, dimensions and cleans up the response.
The final output from `parseEdge` looks like :point_down:
```js
[
{
"start": "start",
"end": "stop",
"type": "arrow_point",
"text": "",
"labelType": "text",
"stroke": "normal",
"startX": 67.797,
"startY": 22,
"endX": 117.797,
"endY": 22,
"reflectionPoints": [
{
"x": 67.797,
"y": 22
},
{
"x": 117.797,
"y": 22
}
]
}
]
```
## Computing the Subgraphs
`Subgraphs` is collection of elements grouped together. The Subgraphs map to `grouping` elements in Excalidraw.
Lets consider the below example :point_down:
![image](https://github.com/excalidraw/excalidraw/assets/11256141/5243ce4c-beaa-43d2-812a-0577b0a574d7)
We use `getSubgraphs` API to get the subgraph data for a given flowchart.
Considering the same example this is the response from the API
```js
[
{
"id": "one",
"nodes": [
"flowchart-a2-1399",
"flowchart-a1-1400"
],
"title": "one",
"classes": [],
"labelType": "text"
}
]
```
For position and dimensions we use the svg to compute. The [`parseSubgraph`](https://github.com/excalidraw/mermaid-to-excalidraw/blob/master/src/parseMermaid.ts#L139) takes the above response along with `svg` and computes the position, dimensions and cleans up the response.
```js
[
{
"id": "one",
"nodes": [
"flowchart-a2-1399",
"flowchart-a1-1400"
],
"title": "one",
"labelType": "text",
"nodeIds": [
"a2",
"a1"
],
"x": 75.4921875,
"y": 0,
"width": 121.25,
"height": 188,
"text": "one"
}
]
```

View File

@@ -0,0 +1,65 @@
# How the Parser works under the hood ?
[This](https://github.com/excalidraw/mermaid-to-excalidraw/blob/master/src/index.ts) is the entry point of the library.
`parseMermaidToExcalidraw` function is the only function exposed which receives mermaid syntax as the input, parses the mermaid syntax and resolves to Excalidraw Skeleton.
Lets look at the high level overview at how the parse works :point_down:
![image](https://github.com/excalidraw/excalidraw/assets/11256141/8e060de7-b867-44ad-864b-0c1b24466b67)
Lets dive deeper into individual section now to understand better.
## Parsing Mermaid diagram
One of the dependencies of the library is [`mermaid`](https://www.npmjs.com/package/mermaid) library.
We need the mermaid diagram in some extractable format so we can parse it to Excalidraw Elements.
Parsing is broken into two steps
1. [`Rendering Mermaid to Svg`](/docs/@excalidraw/mermaid-to-excalidraw/codebase/parser#rendering-mermaid-to-svg) - This helps in determining the position and dimensions of each element in the diagram
2. [`Parsing the mermaid syntax`](/docs/@excalidraw/mermaid-to-excalidraw/codebase/parser#parsing-the-mermaid-syntax) - We also need to know how elements are connected which isn't possible with svg alone hence we also parse the mermaid syntax which helps in determining the connections and bindings between elements in the diagram.
### Rendering Mermaid to Svg
![image](https://github.com/excalidraw/excalidraw/assets/11256141/2c24cf7b-f096-4c12-88db-55520de27558)
The [`mermaid`](https://www.npmjs.com/package/mermaid) library provides the API `mermaid.render` API which gives the output of the diagram in `svg`.
If the diagram isn't supported, this svg is converted to `dataURL` and can be rendered as an image in Excalidraw.
### Parsing the mermaid syntax
For this we first need to process the options along with mermaid defination for diagram provided by the user.
[`processMermaidTextWithOptions`](https://github.com/excalidraw/mermaid-to-excalidraw/blob/master/src/parseMermaid.ts#L13) takes the mermaid defination and options and returns the full defination including the mermaid [directives ](https://mermaid.js.org/config/directives.html).
![image](https://github.com/excalidraw/excalidraw/assets/11256141/3a4825d8-9704-468c-a02f-7e507f4d5b7a)
Next we use mermaid api [getDiagramFromText](https://github.com/mermaid-js/mermaid/blob/00d06c7282a701849793680c1e97da1cfdfcce62/packages/mermaid/src/Diagram.ts#L80) to parse the full defination and get the [Diagram](https://github.com/mermaid-js/mermaid/blob/00d06c7282a701849793680c1e97da1cfdfcce62/packages/mermaid/src/Diagram.ts#L15) json from it.
```js
const diagram = await mermaid.mermaidAPI.getDiagramFromText(fullDefinition);
```
Next we write our own parser to parse this diagram.
### Parsing the Diagram
For each diagram type, we need a parser as the result of every diagram would differ and dependinng on the data we have to write the parser. Since currently we support flowchart, so here is the [`parseMermaidFlowChartDiagram`](https://github.com/excalidraw/mermaid-to-excalidraw/blob/master/src/parser/flowchart.ts#L256) to parse the flowchart diagram.
If you want to understand how flowchart parser works, you can navigate to [Flowchart Parser](http://localhost:3003/docs/@excalidraw/mermaid-to-excalidraw/codebase/parser/flowchart).
## Converting to ExcalidrawElementSkeleton
Now we have all the data, we just need to transform it to [ExcalidrawElementSkeleton](https://github.com/excalidraw/excalidraw/blob/master/src/data/transform.ts#L133C13-L133C38) API so it can be rendered in Excalidraw.
For this we have `converters` which takes the parsed mermaid data and gives back the Excalidraw Skeleton.
For Unsupported types, we have already mentioned above that we convert it to `dataURL` and return the ExcalidrawImageSkeleton.
For supported types, currently only flowchart, we have [flowchartConverter](https://github.com/excalidraw/mermaid-to-excalidraw/blob/master/src/converter/types/flowchart.ts#L24) which parses the data and converts to [ExcalidrawElementSkeleton](https://github.com/excalidraw/excalidraw/blob/master/src/data/transform.ts#L133C13-L133C38).
![image](https://github.com/excalidraw/excalidraw/assets/11256141/00226e9d-043d-4a08-989a-3ad9d2a574f1)

View File

@@ -0,0 +1,60 @@
# Development
This page relates to developing the `@excalidraw/mermaid-to-excalidraw` package itself.
## Setting up in Local
To set up the library in local, follow the below steps 👇🏼
### Clone the Repository
Go to [@excalidraw/mermaid-to-excalidraw](https://github.com/excalidraw/mermaid-to-excalidraw) and clone the repository to your local.
```bash
git clone git@github.com:excalidraw/mermaid-to-excalidraw.git
```
### Install the dependencies
Using `npm`
```bash
npm install @excalidraw/mermaid-to-excalidraw
```
Using `yarn`
```bash
yarn add @excalidraw/mermaid-to-excalidraw
```
### Run the playground server
```bash
yarn start
```
This will start the playground server in port `1234` and you start playing with the playground.
## Creating a test release
We will soon simplify creating release via commenting on GitHub PR similar till then you can create a release by following the below steps
1. Create the build
```bash
yarn build
```
This will create the dist folder which we need to publish next.
2. Publish the library
Update the package name and version in [package.json](https://github.com/excalidraw/mermaid-to-excalidraw/blob/master/package.json) and run the below command to publish it
```bash
yarn publish
```
And thats all your test release is successfully created 🎉

View File

@@ -0,0 +1,42 @@
# Installation
`@excalidraw/mermaid-to-excalidraw` is published to npm. This library is used in [excalidraw](https://excalidraw.com) to transform mermaid syntax to Excalidraw diagrams.
Using `npm`
```bash
npm install @excalidraw/mermaid-to-excalidraw
```
Using `yarn`
```bash
yarn add @excalidraw/mermaid-to-excalidraw
```
## Usage
Once the library is installed, its ready to use.
```js
import { parseMermaidToExcalidraw } from "@excalidraw/mermaid-to-excalidraw";
import { convertToExcalidrawElements} from "@excalidraw/excalidraw"
try {
const { elements, files } = await parseMermaid(diagramDefinition, {
fontSize: DEFAULT_FONT_SIZE,
});
// currently the elements returned from the parser are in a "skeleton" format
// which we need to convert to fully qualified excalidraw elements first
const excalidrawElements = convertToExcalidrawElements(elements);
// Render elements and files on Excalidraw
} catch (e) {
// Error handling
}
```
## Playground
Try it out [here](https://mermaid-to-excalidraw.vercel.app)

Binary file not shown.

After

Width:  |  Height:  |  Size: 214 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 266 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

View File

@@ -0,0 +1,75 @@
# JSON Schema
The Excalidraw data format uses plaintext JSON.
## Excalidraw files
When saving an Excalidraw scene locally to a file, the JSON file (`.excalidraw`) is using the below format.
### Attributes
| Attribute | Description | Value |
| --- | --- | --- |
| `type` | The type of the Excalidraw schema | `"excalidraw"` |
| `version` | The version of the Excalidraw schema | number |
| `source` | The source URL of the Excalidraw application | `"https://excalidraw.com"` |
| `elements` | An array of objects representing excalidraw elements on canvas | Array containing excalidraw element objects |
| `appState` | Additional application state/configuration | Object containing application state properties |
| `files` | Data for excalidraw `image` elements | Object containing image data |
### JSON Schema example
```json
{
// schema information
"type": "excalidraw",
"version": 2,
"source": "https://excalidraw.com",
// elements on canvas
"elements": [
// example element
{
"id": "pologsyG-tAraPgiN9xP9b",
"type": "rectangle",
"x": 928,
"y": 319,
"width": 134,
"height": 90
/* ...other element properties */
}
/* other elements */
],
// editor state (canvas config, preferences, ...)
"appState": {
"gridSize": null,
"viewBackgroundColor": "#ffffff"
},
// files data for "image" elements, using format `{ [fileId]: fileData }`
"files": {
// example of an image data object
"3cebd7720911620a3938ce77243696149da03861": {
"mimeType": "image/png",
"id": "3cebd7720911620a3938c.77243626149da03861",
"dataURL": "data:image/png;base64,iVBORWOKGgoAAAANSUhEUgA=",
"created": 1690295874454,
"lastRetrieved": 1690295874454
}
/* ...other image data objects */
}
}
```
## Excalidraw clipboard format
When copying selected excalidraw elements to clipboard, the JSON schema is similar to `.excalidraw` format, except it differs in attributes.
### Attributes
| Attribute | Description | Example Value |
| --- | --- | --- |
| `type` | The type of the Excalidraw document. | "excalidraw/clipboard" |
| `elements` | An array of objects representing excalidraw elements on canvas. | Array containing excalidraw element objects (see example below) |
| `files` | Data for excalidraw `image` elements. | Object containing image data |

View File

@@ -1,6 +0,0 @@
---
sidebar_position: 1
title: Overview
---
In development. For now, refer to [excalidraw Readme](https://github.com/excalidraw/excalidraw/blob/master/README.md).

View File

@@ -1,8 +0,0 @@
---
sidebar_position: 1
title: Introduction
---
Want to integrate Excalidraw into your app? Head over to the [package docs](/docs/package/overview).
If you're looking into the Excalidraw codebase itself, start [here](/docs/codebase/overview).

View File

@@ -0,0 +1,81 @@
# Contributing
Pull requests are welcome. For major changes, please [open an issue](https://github.com/excalidraw/excalidraw/issues/new) first to discuss what you would like to change.
We have a [roadmap](https://github.com/orgs/excalidraw/projects/3) which we strongly recommend to go through and check if something interests you.
For new contributors we would recommend to start with *Easy* tasks.
In case you want to pick up something from the roadmap, comment on that issue and one of the project maintainers will assign it to you, post which you can discuss in the issue and start working on it.
## Setup
### Option 1 - Manual
1. Fork and clone the repo
1. Run `yarn` to install dependencies
1. Create a branch for your PR with `git checkout -b your-branch-name`
> To keep `master` branch pointing to remote repository and make pull requests from branches on your fork. To do this, run:
>
> ```bash
> git remote add upstream https://github.com/excalidraw/excalidraw.git
> git fetch upstream
> git branch --set-upstream-to=upstream/master master
> ```
### Option 2 - CodeSandbox
1. Go to https://codesandbox.io/p/github/excalidraw/excalidraw
1. Connect your GitHub account
1. Go to Git tab on left side
1. Tap on `Fork Sandbox`
1. Write your code
1. Commit and PR automatically
## Pull Request Guidelines
Don't worry if you get any of the below wrong, or if you don't know how. We'll gladly help out.
### Title
Make sure the title starts with a semantic prefix:
- **feat**: A new feature
- **fix**: A bug fix
- **docs**: Documentation only changes
- **style**: Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)
- **refactor**: A code change that neither fixes a bug nor adds a feature
- **perf**: A code change that improves performance
- **test**: Adding missing tests or correcting existing tests
- **build**: Changes that affect the build system or external dependencies (example scopes: gulp, broccoli, npm)
- **ci**: Changes to our CI configuration files and scripts (example scopes: Travis, Circle, BrowserStack, SauceLabs)
- **chore**: Other changes that don't modify src or test files
- **revert**: Reverts a previous commit
### Changelog
Add a brief description of your pull request to the changelog located here: [changelog](https://github.com/excalidraw/excalidraw/blob/master/CHANGELOG.md)
Notes:
- Make sure to prepend to the section corresponding with the semantic prefix you selected in the title
- Link to your pull request - this will require updating the CHANGELOG _after_ creating the pull request
### Testing
Once you submit your pull request it will automatically be tested. Be sure to check the results of the test and fix any issues that arise.
It's also a good idea to consider if your change should include additional tests. This is highly recommended for new features or bug-fixes. For example, it's good practice to create a test for each bug you fix which ensures that we don't regress the code in the future.
Finally - always manually test your changes using the convenient staging environment deployed for each pull request. As much as local development attempts to replicate production, there can still be subtle differences in behavior. For larger features consider testing your change in multiple browsers as well.
:::note
Some checks, such as the `lint` and `test`, require approval from the maintainers to run.
They will appear as `Expected — Waiting for status to be reported` in the PR checks when they are waiting for approval.
:::
## Translating
To translate Excalidraw into other languages, please visit [our Crowdin page](https://crowdin.com/project/excalidraw). To add a new language, [open an issue](https://github.com/excalidraw/excalidraw/issues/new) so we can get things set up on our end first.
Translations will be available on the app if they exceed a certain threshold of completion (currently **85%**).

View File

@@ -0,0 +1,102 @@
# Development
## Code Sandbox
- Go to https://codesandbox.io/p/github/excalidraw/excalidraw
- You may need to sign in with GitHub and reload the page
- You can start coding instantly, and even send PRs from there!
## Local Installation
These instructions will get you a copy of the project up and running on your local machine for development and testing purposes.
### Requirements
- [Node.js](https://nodejs.org/en/)
- [Yarn](https://yarnpkg.com/getting-started/install) (v1 or v2.4.2+)
- [Git](https://git-scm.com/downloads)
### Clone the repo
```bash
git clone https://github.com/excalidraw/excalidraw.git
```
### Install the dependencies
```bash
yarn
```
### Start the server
```bash
yarn start
```
Now you can open [http://localhost:3000](http://localhost:3000) and start coding in your favorite code editor.
## Collaboration
For collaboration, you will need to set up [collab server](https://github.com/excalidraw/excalidraw-room) in local.
## Commands
### Install the dependencies
```bash
yarn
```
### Run the project
```bash
yarn start
```
### Reformat all files with Prettier
```bash
yarn fix
```
### Run tests
```bash
yarn test
```
### Update test snapshots
```bash
yarn test:update
```
### Test for formatting with Prettier
```bash
yarn test:code
```
### Docker Compose
You can use docker-compose to work on Excalidraw locally if you don't want to setup a Node.js env.
```bash
docker-compose up --build -d
```
## Self-hosting
We publish a Docker image with the Excalidraw client at [excalidraw/excalidraw](https://hub.docker.com/r/excalidraw/excalidraw). You can use it to self-host your own client under your own domain, on Kubernetes, AWS ECS, etc.
```bash
docker build -t excalidraw/excalidraw .
docker run --rm -dit --name excalidraw -p 5000:80 excalidraw/excalidraw:latest
```
The Docker image is free of analytics and other tracking libraries.
**At the moment, self-hosting your own instance doesn't support sharing or collaboration features.**
We are working towards providing a full-fledged solution for self-hosting your own Excalidraw.

View File

@@ -0,0 +1,17 @@
---
title: Introduction
slug: ../
---
## Try now
Go to [excalidraw.com](https://excalidraw.com) to start sketching.
## How are these docs structured
These docs are focused on developers, and structured in the following way:
- [Introduction](/docs/) — development setup and introduction.
- [@excalidraw/excalidraw](/docs/@excalidraw/excalidraw/installation) — docs for the npm package to help you integrate Excalidraw into your own app.
- Editor — IN PROGRESS. Docs describing the internals of the Excalidraw editor to help in contributing to the codebase.
- [@excalidraw/mermaid-to-excalidraw](/docs/@excalidraw/mermaid-to-excalidraw/installation) - Docs for the mermaid to excalidraw parser

View File

@@ -1,6 +0,0 @@
---
sidebar_position: 1
title: Overview
---
In development. For now, refer to [excalidraw package readme](https://github.com/excalidraw/excalidraw/blob/master/src/packages/excalidraw/README.md).

View File

@@ -1,19 +1,16 @@
// @ts-check
// Note: type annotations allow type checking and IDEs autocompletion
const lightCodeTheme = require("prism-react-renderer/themes/github");
const darkCodeTheme = require("prism-react-renderer/themes/dracula");
/** @type {import('@docusaurus/types').Config} */
const config = {
title: "Excalidraw developer docs",
tagline:
"For Excalidraw contributors or those integrating the Excalidraw editor",
url: "https://docs.excalidraw.com.com",
url: "https://docs.excalidraw.com",
baseUrl: "/",
onBrokenLinks: "throw",
onBrokenMarkdownLinks: "warn",
favicon: "img/favicon.ico",
favicon: "img/favicon.png",
organizationName: "Excalidraw", // Usually your GitHub org/user name.
projectName: "excalidraw", // Usually your repo name.
@@ -33,10 +30,16 @@ const config = {
docs: {
sidebarPath: require.resolve("./sidebars.js"),
// Please change this to your repo.
editUrl: "https://github.com/excalidraw/docs/tree/master/",
editUrl:
"https://github.com/excalidraw/excalidraw/tree/master/dev-docs/",
showLastUpdateAuthor: true,
showLastUpdateTime: true,
},
theme: {
customCss: require.resolve("./src/css/custom.css"),
customCss: [
require.resolve("./src/css/custom.scss"),
require.resolve("../src/packages/excalidraw/example/App.scss"),
],
},
}),
],
@@ -45,18 +48,20 @@ const config = {
themeConfig:
/** @type {import('@docusaurus/preset-classic').ThemeConfig} */
({
colorMode: {
respectPrefersColorScheme: true,
},
navbar: {
title: "Excalidraw Docs",
title: "Excalidraw",
logo: {
alt: "Excalidraw Logo",
src: "img/logo.svg",
},
items: [
{
type: "doc",
docId: "get-started",
to: "/docs",
position: "left",
label: "Get started",
label: "Docs",
},
{
to: "https://blog.excalidraw.com",
@@ -78,7 +83,7 @@ const config = {
items: [
{
label: "Get Started",
to: "/docs/get-started",
to: "/docs",
},
],
},
@@ -93,6 +98,10 @@ const config = {
label: "Twitter",
href: "https://twitter.com/excalidraw",
},
{
label: "Linkedin",
href: "https://www.linkedin.com/company/excalidraw",
},
],
},
{
@@ -109,13 +118,28 @@ const config = {
],
},
],
copyright: `Made with ❤️ Built with Docusaurus`,
copyright: `Copyright © 2023 Excalidraw community. Built with Docusaurus ❤️`,
},
prism: {
theme: lightCodeTheme,
darkTheme: darkCodeTheme,
theme: require("prism-react-renderer/themes/dracula"),
},
image: "img/og-image-2.png",
docs: {
sidebar: {
hideable: true,
},
},
tableOfContents: {
maxHeadingLevel: 4,
},
algolia: {
appId: "8FEAOD28DI",
apiKey: "4b07cca33ff2d2919bc95ff98f148e9e",
indexName: "excalidraw",
},
}),
themes: ["@docusaurus/theme-live-codeblock"],
plugins: ["docusaurus-plugin-sass"],
};
module.exports = config;

View File

@@ -15,13 +15,17 @@
"typecheck": "tsc"
},
"dependencies": {
"@docusaurus/core": "2.0.0-rc.1",
"@docusaurus/preset-classic": "2.0.0-rc.1",
"@docusaurus/core": "2.2.0",
"@docusaurus/preset-classic": "2.2.0",
"@docusaurus/theme-live-codeblock": "2.2.0",
"@excalidraw/excalidraw": "0.15.2-eb020d0",
"@mdx-js/react": "^1.6.22",
"clsx": "^1.2.1",
"docusaurus-plugin-sass": "0.2.3",
"prism-react-renderer": "^1.3.5",
"react": "^17.0.2",
"react-dom": "^17.0.2"
"react-dom": "^17.0.2",
"sass": "1.57.1"
},
"devDependencies": {
"@docusaurus/module-type-aliases": "2.0.0-rc.1",

View File

@@ -13,19 +13,117 @@
/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */
const sidebars = {
// By default, Docusaurus generates a sidebar from the docs folder structure
tutorialSidebar: [{ type: "autogenerated", dirName: "." }],
// But you can create a sidebar manually
/*
tutorialSidebar: [
docs: [
{
type: 'category',
label: 'Tutorial',
items: ['hello'],
type: "category",
label: "Introduction",
link: {
type: "doc",
id: "introduction/get-started",
},
items: ["introduction/development", "introduction/contributing"],
},
{ type: "category", label: "Codebase", items: ["codebase/json-schema"] },
{
type: "category",
label: "@excalidraw/excalidraw",
collapsed: false,
items: [
"@excalidraw/excalidraw/installation",
"@excalidraw/excalidraw/integration",
"@excalidraw/excalidraw/customizing-styles",
{
type: "category",
label: "API",
link: {
type: "doc",
id: "@excalidraw/excalidraw/api/api-intro",
},
items: [
{
type: "category",
label: "Props",
link: {
type: "doc",
id: "@excalidraw/excalidraw/api/props/props",
},
items: [
"@excalidraw/excalidraw/api/props/initialdata",
"@excalidraw/excalidraw/api/props/ref",
"@excalidraw/excalidraw/api/props/render-props",
"@excalidraw/excalidraw/api/props/ui-options",
],
},
{
type: "category",
label: "Children Components",
link: {
type: "doc",
id: "@excalidraw/excalidraw/api/children-components/children-components-intro",
},
items: [
"@excalidraw/excalidraw/api/children-components/main-menu",
"@excalidraw/excalidraw/api/children-components/welcome-screen",
"@excalidraw/excalidraw/api/children-components/sidebar",
"@excalidraw/excalidraw/api/children-components/footer",
"@excalidraw/excalidraw/api/children-components/live-collaboration-trigger",
],
},
{
type: "category",
label: "Utils",
link: {
type: "doc",
id: "@excalidraw/excalidraw/api/utils/utils-intro",
},
items: [
"@excalidraw/excalidraw/api/utils/export",
"@excalidraw/excalidraw/api/utils/restore",
],
},
"@excalidraw/excalidraw/api/constants",
"@excalidraw/excalidraw/api/excalidraw-element-skeleton",
],
},
"@excalidraw/excalidraw/faq",
"@excalidraw/excalidraw/development",
],
},
{
type: "category",
label: "@excalidraw/mermaid-to-excalidraw",
link: {
type: "doc",
id: "@excalidraw/mermaid-to-excalidraw/installation",
},
items: [
"@excalidraw/mermaid-to-excalidraw/api",
"@excalidraw/mermaid-to-excalidraw/development",
{
type: "category",
label: "Codebase",
link: {
type: "doc",
id: "@excalidraw/mermaid-to-excalidraw/codebase/codebase",
},
items: [
{
type: "category",
label: "How Parser works under the hood?",
link: {
type: "doc",
id: "@excalidraw/mermaid-to-excalidraw/codebase/parser/parser",
},
items: [
"@excalidraw/mermaid-to-excalidraw/codebase/parser/flowchart",
],
},
"@excalidraw/mermaid-to-excalidraw/codebase/new-diagram-type",
],
},
],
},
],
*/
};
module.exports = sidebars;

View File

@@ -0,0 +1,15 @@
import React from "react";
export default function Highlight({ children }) {
return (
<span
style={{
backgroundColor: "#7874e8",
borderRadius: "2px",
color: "#fff",
padding: "0.2rem",
}}
>
{children}
</span>
);
}

View File

@@ -14,11 +14,13 @@
--ifm-color-primary-lighter: #5b57d1;
--ifm-color-primary-lightest: #5b57d1;
--ifm-code-font-size: 95%;
scrollbar-gutter: stable;
}
/* For readability concerns, you should choose a lighter palette in dark mode. */
[data-theme="dark"] {
--ifm-color-primary: #5650f0;
--ifm-color-primary: #8784e3;
--ifm-color-primary-dark: #4b46d8;
--ifm-color-primary-darker: #4b46d8;
--ifm-color-primary-darkest: #3e39be;
@@ -41,3 +43,59 @@
[data-theme="dark"] .navbar__logo {
filter: invert(93%) hue-rotate(180deg);
}
pre a {
color: #5dccff;
&:hover {
color: #8fd3f3;
}
}
.custom-button {
height: 40px;
max-width: 200px;
margin: 10px 0;
padding: 5px;
background: #70b1ec;
color: white;
font-weight: bold;
border: none;
}
.custom-styles .excalidraw {
--color-primary: #fcc6d9;
--color-primary-darker: #f783ac;
--color-primary-darkest: #e64980;
--color-primary-light: #f2a9c4;
}
.custom-styles .excalidraw.theme--dark {
--color-primary: #d494aa;
--color-primary-darker: #d64c7e;
--color-primary-darkest: #e86e99;
--color-primary-light: #dcbec9;
}
/* The global css conflicts with Excal css hence overriding */
.excalidraw .context-menu-item__shortcut {
background-color: transparent;
border: none;
box-shadow: none;
padding: 0;
}
.excalidraw .Stats table td,
.excalidraw .Stats table th,
.excalidraw .Stats table tr {
border: none;
background: none;
padding: 0;
}
.excalidraw .Stats .close {
padding: 0;
}
.excalidraw .Stats table {
display: table;
}

1230
dev-docs/src/initialData.js Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,42 +0,0 @@
import React from "react";
import clsx from "clsx";
import Layout from "@theme/Layout";
import Link from "@docusaurus/Link";
import useDocusaurusContext from "@docusaurus/useDocusaurusContext";
import styles from "./index.module.css";
import HomepageFeatures from "@site/src/components/Homepage";
function HomepageHeader() {
const { siteConfig } = useDocusaurusContext();
return (
<header className={clsx("hero hero--primary", styles.heroBanner)}>
<div className="container">
<h1 className="hero__title">{siteConfig.title}</h1>
<p className="hero__subtitle">{siteConfig.tagline}</p>
<div className={styles.buttons}>
<Link
className="button button--secondary button--lg"
to="/docs/get-started"
>
Get started
</Link>
</div>
</div>
</header>
);
}
export default function Home() {
const { siteConfig } = useDocusaurusContext();
return (
<Layout
title={`Hello from ${siteConfig.title}`}
description="Description will go into a meta tag in <head />"
>
<HomepageHeader />
<main>
<HomepageFeatures />
</main>
</Layout>
);
}

View File

@@ -14,10 +14,7 @@ function HomepageHeader() {
<h1 className="hero__title">{siteConfig.title}</h1>
<p className="hero__subtitle">{siteConfig.tagline}</p>
<div className={styles.buttons}>
<Link
className="button button--secondary button--lg"
to="/docs/get-started"
>
<Link className="button button--secondary button--lg" to="/docs">
Get started
</Link>
</div>
@@ -27,12 +24,8 @@ function HomepageHeader() {
}
export default function Home() {
const { siteConfig } = useDocusaurusContext();
return (
<Layout
title={`Hello from ${siteConfig.title}`}
description="Description will go into a meta tag in <head />"
>
<Layout description="For Excalidraw contributors or those integrating the Excalidraw editor">
<HomepageHeader />
<main>
<HomepageFeatures />

View File

@@ -0,0 +1,11 @@
// Import the original mapper
import MDXComponents from "@theme-original/MDXComponents";
import Highlight from "@site/src/components/Highlight";
export default {
// Re-use the default mapping
...MDXComponents,
// Map the "highlight" tag to our <Highlight /> component!
// `Highlight` will receive all props that were passed to `highlight` in MDX
highlight: Highlight,
};

View File

@@ -0,0 +1,31 @@
import React from "react";
import ExecutionEnvironment from "@docusaurus/ExecutionEnvironment";
import initialData from "@site/src/initialData";
import { useColorMode } from "@docusaurus/theme-common";
let ExcalidrawComp = {};
if (ExecutionEnvironment.canUseDOM) {
ExcalidrawComp = require("@excalidraw/excalidraw");
}
const Excalidraw = React.forwardRef((props, ref) => {
const { colorMode } = useColorMode();
return <ExcalidrawComp.Excalidraw theme={colorMode} {...props} ref={ref} />;
});
// Add react-live imports you need here
const ExcalidrawScope = {
React,
...React,
Excalidraw,
Footer: ExcalidrawComp.Footer,
useDevice: ExcalidrawComp.useDevice,
MainMenu: ExcalidrawComp.MainMenu,
WelcomeScreen: ExcalidrawComp.WelcomeScreen,
LiveCollaborationTrigger: ExcalidrawComp.LiveCollaborationTrigger,
Sidebar: ExcalidrawComp.Sidebar,
exportToCanvas: ExcalidrawComp.exportToCanvas,
initialData,
useI18n: ExcalidrawComp.useI18n,
convertToExcalidrawElements: ExcalidrawComp.convertToExcalidrawElements,
};
export default ExcalidrawScope;

View File

Before

Width:  |  Height:  |  Size: 197 KiB

After

Width:  |  Height:  |  Size: 197 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@@ -1,4 +1,7 @@
<svg viewBox="0 0 80 180" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2">
<path d="M22.197 150.382c-4.179-3.359-10.618-9.051-15.702-13.946l-4.01-3.813.734-5.009c.396-2.732 1.13-8.083 1.582-11.839.508-3.757 1.017-7.286 1.186-7.798.226-.683 0-1.025-.621-1.025-1.073 0-1.13.285 1.807-9.107a617.602 617.602 0 0 1 2.203-7.229c.113-.398.565-.569 1.073-.398.508.227.791.683.621 1.081-.169.455.113.911.565 1.082.621.227.565.683-.395 2.333-1.525 2.562-5.422 24.419-5.648 31.477-.17 5.009-.17 5.066 1.92 7.912 2.033 2.789 6.721 7.001 13.951 12.351 2.033 1.537 4.067 3.245 4.631 3.814.848 1.024 1.243.74 8.36-6.887 4.123-4.383 8.698-8.88 10.166-10.018l2.711-2.049-2.089-4.44c-1.13-2.391-5.705-11.612-10.223-20.377-9.433-18.442-7.513-16.678-18.47-16.849l-7.117-.056-2.372-2.733c-2.485-2.903-2.824-3.984-1.638-5.805.452-.627.791-1.651.791-2.277 0-1.025.395-1.196 2.655-1.309 1.412-.057 2.711-.228 2.88-.399.17-.171.396-3.7.565-7.855l.226-7.513-3.784-8.197C2.485 39.844 0 33.583 0 31.533c0-1.081.226-1.992.452-1.992.565 0 .565.057 23.553 48.382 10.675 22.426 20.785 43.544 22.479 47.016 1.695 3.472 3.22 6.659 3.333 7.115.113.512-3.785 4.439-9.998 9.961-5.591 5.008-10.505 9.562-10.957 10.074-1.299 1.594-3.219 1.082-6.665-1.707Zm1.921-65.458c-2.599-5.066-2.712-5.123-9.828-5.464-6.27-.342-6.383-.285-6.383.911 0 .683-.226 1.593-.508 2.049-.339.512-.113 1.423.678 2.675l1.242 1.935h5.649c3.106.057 6.664.285 7.907.512 1.243.228 2.316.342 2.429.285.113-.057-.452-1.366-1.186-2.903Zm-4.745-9.107c-.452-1.195-1.638-3.7-2.598-5.578-1.581-3.188-1.751-3.301-2.146-1.992-.226.797-.396 3.13-.452 5.236-.057 4.155-.17 4.098 4.575 4.383l1.525.057-.904-2.106Z" style="fill-rule:nonzero;stroke:#000;stroke-width:2px" transform="matrix(1.01351 0 0 -1 9.088 166.517)" />
<path d="M23.892 136.835c-1.017-.74-1.299-1.48-1.299-3.358 0-2.22.169-2.562 1.694-3.188 1.525-.626 1.92-.569 3.671.626 2.316 1.594 2.373 1.992.678 4.554-1.468 2.22-2.937 2.618-4.744 1.366Zm3.219-2.049c.904-1.594.339-2.789-1.355-2.789-1.525 0-2.203 1.536-1.356 3.073.678 1.253 1.977 1.139 2.711-.284ZM59.306 124.028c0-.285-.339-.569-.735-.569-.339 0-1.299-1.594-2.033-3.529-2.259-5.92-24.852-50.943-24.908-49.52 0 .74-.339 1.252-.904 1.252-.791 0-.904-.456-.565-2.675.339-2.562.113-3.131-7.907-18.841-4.519-8.936-9.376-18.271-10.788-20.775-1.469-2.619-2.598-5.465-2.711-6.66-.17-2.049.056-2.334 4.97-6.603 2.824-2.504 6.439-5.635 8.02-7.058C28.862 2.504 32.194-.114 33.098.057c1.356.228 22.31 22.369 22.367 23.622 0 .569-1.017 9.221-2.259 19.238-2.147 17.076-4.18 37.055-3.954 38.99.169 1.196-.678 7.229-1.299 9.847-.509 2.05-.283 2.903 3.784 12.238 2.372 5.521 5.479 12.295 6.834 15.027 1.299 2.732 2.429 5.123 2.429 5.294 0 .17-.395.284-.847.284-.452 0-.847-.228-.847-.569ZM46.315 81.509c.621-3.984 1.864-13.547 2.767-21.231 1.751-14.116 3.785-29.769 4.349-33.753.339-1.993.113-2.391-3.558-6.489-6.382-7.229-13.16-14.344-15.476-16.165l-2.146-1.708-11.014 10.359C11.07 21.971 10.223 22.939 10.844 24.077c.339.626 3.22 5.92 6.383 11.725 3.163 5.806 7.342 13.547 9.263 17.19 1.977 3.7 3.784 6.887 4.123 7.058.395.228.508-5.521.395-17.759-.226-18.271-.169-18.328 1.638-17.929.226 0 .396 9.221.396 20.434v20.377l5.93 11.953c3.276 6.603 5.987 11.896 6.1 11.84.113-.058.678-3.416 1.243-7.457Z" style="fill-rule:nonzero;stroke:#000;stroke-width:2px" transform="matrix(1.01351 0 0 -1 9.088 166.517)" />
<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000">
<rect width="1000" height="1000" rx="200" ry="200" fill="#fff" />
<svg viewBox="0 0 107 101" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2">
<path style="fill:none" d="M24 17h121v121H24z" transform="matrix(.8843 0 0 .83471 -21.223 -14.19)" />
<path d="M119.81 105.98a.549.549 0 0 0-.53-.12c-4.19-6.19-9.52-12.06-14.68-17.73l-.85-.93c0-.11-.05-.21-.12-.3a.548.548 0 0 0-.34-.2l-.17-.18-.12-.09c-.15-.32-.53-.56-.95-.35-1.58.81-3 1.97-4.4 3.04-1.87 1.43-3.7 2.92-5.42 4.52-.7.65-1.39 1.33-1.97 2.09-.28.37-.07.72.27.87-1.22 1.2-2.45 2.45-3.68 3.74-.11.12-.17.28-.16.44.01.16.09.31.22.41l2.16 1.65s.01.03.03.04c3.09 3.05 8.51 7.28 14.25 11.76.85.67 1.71 1.34 2.57 2.01.39.47.76.94 1.12 1.4.19.25.55.3.8.11.13.1.26.21.39.31a.57.57 0 0 0 .8-.1c.07-.09.1-.2.11-.31.04 0 .07.03.1.03.15 0 .31-.06.42-.18l10.18-11.12a.56.56 0 0 0-.04-.8l.01-.01Zm-29.23-3.85c.07.09.14.17.21.25 1.16.98 2.4 2.04 3.66 3.12l-5.12-3.91s-.32-.22-.52-.36c-.11-.08-.21-.16-.31-.24l-.38-.32s.07-.07.1-.11l.35-.35c1.72-1.74 4.67-4.64 6.19-6.06-1.61 1.62-4.87 6.37-4.17 7.98h-.01Zm17.53 13.81-4.22-3.22c-1.65-1.71-3.43-3.4-5.24-5.03 2.28 1.76 4.23 3.25 4.52 3.51 2.21 1.97 2.11 1.61 3.63 2.91l1.83 1.33c-.18.16-.36.33-.53.49l.01.01Zm1.06.81-.08-.06c.16-.13.33-.25.49-.38l-.4.44h-.01ZM42.24 51.45c.14.72.27 1.43.4 2.11.69 3.7 1.33 7.03 2.55 9.56l.48 1.92c.19.73.46 1.64.71 1.83 2.85 2.52 7.22 6.28 11.89 9.82.21.16.5.15.7-.01.01.02.03.03.04.04.11.1.24.15.38.15.16 0 .31-.06.42-.19 5.98-6.65 10.43-12.12 13.6-16.7.2-.25.3-.54.29-.84.2-.24.41-.48.6-.68a.558.558 0 0 0-.1-.86.578.578 0 0 0-.17-.36c-1.39-1.34-2.42-2.31-3.46-3.28-1.84-1.72-3.74-3.5-7.77-7.51-.02-.02-.05-.04-.07-.06a.555.555 0 0 0-.22-.14c-1.11-.39-3.39-.78-6.26-1.28-4.22-.72-10-1.72-15.2-3.27h-.04v-.01s-.02 0-.03.02h-.01l.04-.02s-.31.01-.37.04c-.08.04-.14.09-.19.15-.05.06-.09.12-.47.2-.38.08.08 0 .11 0h-.11v.03c.07.34.05.58.16.97-.02.1.21 1.02.24 1.11l1.83 7.26h.03Zm30.95 6.54s-.03.04-.04.05l-.64-.71c.22.21.44.42.68.66Zm-7.09 9.39s-.07.08-.1.12l-.02-.02c.04-.03.08-.07.13-.1h-.01Zm-7.07 8.47Zm3.02-28.57c.35.35 1.74 1.65 2.06 1.97-1.45-.66-5.06-2.34-6.74-2.88 1.65.29 3.93.66 4.68.91Zm-19.18-2.77c.84 1.44 1.5 6.49 2.16 11.4-.37-1.58-.69-3.12-.99-4.6-.52-2.56-1-4.85-1.67-6.88.14.01.31.03.49.05 0 .01 0 .02.02.03h-.01Zm-.29-1.21c-.23-.02-.44-.04-.62-.05-.02-.04-.03-.08-.04-.12l.66.18v-.01Zm-2.22.45v-.02.02ZM118.9 42.57c.04-.23-1.1-1.24-.74-1.26.85-.04.86-1.35 0-1.31-1.13.06-2.27.32-3.37.53-1.98.37-3.95.78-5.92 1.21-4.39.94-8.77 1.93-13.1 3.11-1.36.37-2.86.7-4.11 1.36-.42.22-.4.67-.17.95-.09.05-.18.08-.28.09-.37.07-.74.13-1.11.19a.566.566 0 0 0-.39.86c-2.32 3.1-4.96 6.44-7.82 9.95-2.81 3.21-5.73 6.63-8.72 10.14-9.41 11.06-20.08 23.6-31.9 34.64-.23.21-.24.57-.03.8.05.06.12.1.19.13-.16.15-.32.3-.48.44-.1.09-.14.2-.16.32-.08.08-.16.17-.23.25-.21.23-.2.59.03.8.23.21.59.2.8-.03.04-.04.08-.09.12-.13a.84.84 0 0 1 1.22 0c.69.74 1.34 1.44 1.95 2.09l-1.38-1.15a.57.57 0 0 0-.8.07c-.2.24-.17.6.07.8l14.82 12.43c.11.09.24.13.37.13.15 0 .29-.06.4-.17l.36-.36a.56.56 0 0 0 .63-.12c20.09-20.18 36.27-35.43 54.8-49.06.17-.12.25-.32.23-.51a.57.57 0 0 0 .48-.39c3.42-10.46 4.08-19.72 4.28-24.27 0-.03.01-.05.02-.07.02-.05.03-.1.04-.14.03-.11.05-.19.05-.19.26-.78.17-1.53-.15-2.15v.02ZM82.98 58.94c.9-1.03 1.79-2.04 2.67-3.02-5.76 7.58-15.3 19.26-28.81 33.14 9.2-10.18 18.47-20.73 26.14-30.12Zm-32.55 52.81-.03-.03c.11.02.19.04.2.04a.47.47 0 0 0-.17 0v-.01Zm6.9 6.42-.05-.04.03-.03c.02 0 .03.02.04.02 0 .02-.02.03-.03.05h.01Zm8.36-7.21 1.38-1.44c.01.01.02.03.03.05-.47.46-.94.93-1.42 1.39h.01Zm2.24-2.21c.26-.3.56-.65.87-1.02.01-.01.02-.03.04-.04 3.29-3.39 6.68-6.82 10.18-10.25.02-.02.05-.04.07-.06.86-.66 1.82-1.39 2.72-2.08-4.52 4.32-9.11 8.78-13.88 13.46v-.01Zm21.65-55.88c-1.86 2.42-3.9 5.56-5.63 8.07-5.46 7.91-23.04 27.28-23.43 27.65-2.71 2.62-10.88 10.46-16.09 15.37-.14.13-.25.24-.34.35a.794.794 0 0 1 .03-1.13c24.82-23.4 39.88-42.89 46-51.38-.13.33-.24.69-.55 1.09l.01-.02Zm16.51 7.1-.01.02c0-.02-.02-.07.01-.02Zm-.91-5.13Zm-5.89 9.45c-2.26-1.31-3.32-3.27-2.71-5.25l.19-.66c.08-.19.17-.38.28-.57.59-.98 1.49-1.85 2.52-2.36.05-.02.1-.03.15-.04a.795.795 0 0 1-.04-.43c.05-.31.25-.58.66-.58.67 0 2.75.62 3.54 1.3.24.19.47.4.68.63.3.35.74.92.96 1.33.13.06.23.62.38.91.14.46.2.93.18 1.4 0 .02 0 .02.01.03-.03.07 0 .37-.04.4-.1.72-.36 1.43-.75 2.05-.04.05-.07.11-.11.16 0 .01-.02.02-.03.04-.3.43-.65.83-1.08 1.13-1.26.89-2.73 1.16-4.2.79a6.33 6.33 0 0 1-.57-.25l-.02-.03Zm16.27-1.63c-.49 2.05-1.09 4.19-1.8 6.38-.03.08-.03.16-.03.23-.1.01-.19.05-.27.11-4.44 3.26-8.73 6.62-12.98 10.11 3.67-3.32 7.39-6.62 11.23-9.95a6.409 6.409 0 0 0 2.11-3.74l.56-3.37.03-.1c.25-.71 1.34-.4 1.17.33h-.02Z" style="fill:#6965db;fill-rule:nonzero" transform="matrix(1 0 0 1 -26.41 -29.49)" />
</svg>
</svg>

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

View File

Before

Width:  |  Height:  |  Size: 6.1 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

View File

@@ -1191,10 +1191,10 @@
"@docsearch/css" "3.1.1"
algoliasearch "^4.0.0"
"@docusaurus/core@2.0.0-rc.1":
version "2.0.0-rc.1"
resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-2.0.0-rc.1.tgz#828d93d241171565d8947a9ab404091e04759141"
integrity sha512-b9FX0Z+EddfQ6wAiNh+Wx4fysKfcvEcWJrZ5USROn3C+EVU5P4luaa8mwWK//O+hTwD9ur7/A44IZ/tWCTAoLQ==
"@docusaurus/core@2.2.0":
version "2.2.0"
resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-2.2.0.tgz#64c9ee31502c23b93c869f8188f73afaf5fd4867"
integrity sha512-Vd6XOluKQqzG12fEs9prJgDtyn6DPok9vmUWDR2E6/nV5Fl9SVkhEQOBxwObjk3kQh7OY7vguFaLh0jqdApWsA==
dependencies:
"@babel/core" "^7.18.6"
"@babel/generator" "^7.18.7"
@@ -1206,13 +1206,13 @@
"@babel/runtime" "^7.18.6"
"@babel/runtime-corejs3" "^7.18.6"
"@babel/traverse" "^7.18.8"
"@docusaurus/cssnano-preset" "2.0.0-rc.1"
"@docusaurus/logger" "2.0.0-rc.1"
"@docusaurus/mdx-loader" "2.0.0-rc.1"
"@docusaurus/cssnano-preset" "2.2.0"
"@docusaurus/logger" "2.2.0"
"@docusaurus/mdx-loader" "2.2.0"
"@docusaurus/react-loadable" "5.5.2"
"@docusaurus/utils" "2.0.0-rc.1"
"@docusaurus/utils-common" "2.0.0-rc.1"
"@docusaurus/utils-validation" "2.0.0-rc.1"
"@docusaurus/utils" "2.2.0"
"@docusaurus/utils-common" "2.2.0"
"@docusaurus/utils-validation" "2.2.0"
"@slorber/static-site-generator-webpack-plugin" "^4.0.7"
"@svgr/webpack" "^6.2.1"
autoprefixer "^10.4.7"
@@ -1268,33 +1268,33 @@
webpack-merge "^5.8.0"
webpackbar "^5.0.2"
"@docusaurus/cssnano-preset@2.0.0-rc.1":
version "2.0.0-rc.1"
resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-rc.1.tgz#76bbd7f6912779a0667f8f2fd8fc1a05618a6148"
integrity sha512-9/KmQvF+eTlMqUqG6UcXbRgxbGed/8bQInXuKEs+95/jI6jO/3xSzuRwuHHHP0naUvSVWjnNI9jngPrQerXE5w==
"@docusaurus/cssnano-preset@2.2.0":
version "2.2.0"
resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-2.2.0.tgz#fc05044659051ae74ab4482afcf4a9936e81d523"
integrity sha512-mAAwCo4n66TMWBH1kXnHVZsakW9VAXJzTO4yZukuL3ro4F+JtkMwKfh42EG75K/J/YIFQG5I/Bzy0UH/hFxaTg==
dependencies:
cssnano-preset-advanced "^5.3.8"
postcss "^8.4.14"
postcss-sort-media-queries "^4.2.1"
tslib "^2.4.0"
"@docusaurus/logger@2.0.0-rc.1":
version "2.0.0-rc.1"
resolved "https://registry.yarnpkg.com/@docusaurus/logger/-/logger-2.0.0-rc.1.tgz#db95e9b15bc243695830a5b791c0eff705ef1b54"
integrity sha512-daa3g+SXuO9K60PVMiSUmDEK9Vro+Ed7i7uF8CH6QQJLcNZy/zJc0Xz62eH7ip1x77fmeb6Rg4Us1TqTFc9AbQ==
"@docusaurus/logger@2.2.0":
version "2.2.0"
resolved "https://registry.yarnpkg.com/@docusaurus/logger/-/logger-2.2.0.tgz#ea2f7feda7b8675485933b87f06d9c976d17423f"
integrity sha512-DF3j1cA5y2nNsu/vk8AG7xwpZu6f5MKkPPMaaIbgXLnWGfm6+wkOeW7kNrxnM95YOhKUkJUophX69nGUnLsm0A==
dependencies:
chalk "^4.1.2"
tslib "^2.4.0"
"@docusaurus/mdx-loader@2.0.0-rc.1":
version "2.0.0-rc.1"
resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-rc.1.tgz#e78d7d416aacc289f2427c5ccdb9145820acb0cb"
integrity sha512-8Fg0c/ceu39knmr7w0dutm7gq3YxKYCqWVS2cB/cPATzChCCNH/AGLfBT6sz/Z4tjVXE+NyREq2pfOFvkhjVXg==
"@docusaurus/mdx-loader@2.2.0":
version "2.2.0"
resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-2.2.0.tgz#fd558f429e5d9403d284bd4214e54d9768b041a0"
integrity sha512-X2bzo3T0jW0VhUU+XdQofcEeozXOTmKQMvc8tUnWRdTnCvj4XEcBVdC3g+/jftceluiwSTNRAX4VBOJdNt18jA==
dependencies:
"@babel/parser" "^7.18.8"
"@babel/traverse" "^7.18.8"
"@docusaurus/logger" "2.0.0-rc.1"
"@docusaurus/utils" "2.0.0-rc.1"
"@docusaurus/logger" "2.2.0"
"@docusaurus/utils" "2.2.0"
"@mdx-js/mdx" "^1.6.22"
escape-html "^1.0.3"
file-loader "^6.2.0"
@@ -1323,18 +1323,32 @@
react-helmet-async "*"
react-loadable "npm:@docusaurus/react-loadable@5.5.2"
"@docusaurus/plugin-content-blog@2.0.0-rc.1":
version "2.0.0-rc.1"
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-rc.1.tgz#8ae5d5ec2da08c583a057bf2754a5b9278b3eb08"
integrity sha512-BVVrAGZujpjS/0rarY2o24rlylRRh2NZuM65kg0JNkkViF79SeEHsepog7IuHyoqGWPm1N/I7LpEp7k+gowZzQ==
"@docusaurus/module-type-aliases@2.2.0":
version "2.2.0"
resolved "https://registry.yarnpkg.com/@docusaurus/module-type-aliases/-/module-type-aliases-2.2.0.tgz#1e23e54a1bbb6fde1961e4fa395b1b69f4803ba5"
integrity sha512-wDGW4IHKoOr9YuJgy7uYuKWrDrSpsUSDHLZnWQYM9fN7D5EpSmYHjFruUpKWVyxLpD/Wh0rW8hYZwdjJIQUQCQ==
dependencies:
"@docusaurus/core" "2.0.0-rc.1"
"@docusaurus/logger" "2.0.0-rc.1"
"@docusaurus/mdx-loader" "2.0.0-rc.1"
"@docusaurus/types" "2.0.0-rc.1"
"@docusaurus/utils" "2.0.0-rc.1"
"@docusaurus/utils-common" "2.0.0-rc.1"
"@docusaurus/utils-validation" "2.0.0-rc.1"
"@docusaurus/react-loadable" "5.5.2"
"@docusaurus/types" "2.2.0"
"@types/history" "^4.7.11"
"@types/react" "*"
"@types/react-router-config" "*"
"@types/react-router-dom" "*"
react-helmet-async "*"
react-loadable "npm:@docusaurus/react-loadable@5.5.2"
"@docusaurus/plugin-content-blog@2.2.0":
version "2.2.0"
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.2.0.tgz#dc55982e76771f4e678ac10e26d10e1da2011dc1"
integrity sha512-0mWBinEh0a5J2+8ZJXJXbrCk1tSTNf7Nm4tYAl5h2/xx+PvH/Bnu0V+7mMljYm/1QlDYALNIIaT/JcoZQFUN3w==
dependencies:
"@docusaurus/core" "2.2.0"
"@docusaurus/logger" "2.2.0"
"@docusaurus/mdx-loader" "2.2.0"
"@docusaurus/types" "2.2.0"
"@docusaurus/utils" "2.2.0"
"@docusaurus/utils-common" "2.2.0"
"@docusaurus/utils-validation" "2.2.0"
cheerio "^1.0.0-rc.12"
feed "^4.2.2"
fs-extra "^10.1.0"
@@ -1345,18 +1359,18 @@
utility-types "^3.10.0"
webpack "^5.73.0"
"@docusaurus/plugin-content-docs@2.0.0-rc.1":
version "2.0.0-rc.1"
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-rc.1.tgz#2dda88166bf21b0eeb3821ef748059b20c8c49f7"
integrity sha512-Yk5Hu6uaw3tRplzJnbDygwRhmZ3PCzEXD4SJpBA6cPC73ylfqOEh6qhiU+BWhMTtDXNhY+athk5Kycfk3DW1aQ==
"@docusaurus/plugin-content-docs@2.2.0":
version "2.2.0"
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.2.0.tgz#0fcb85226fcdb80dc1e2d4a36ef442a650dcc84d"
integrity sha512-BOazBR0XjzsHE+2K1wpNxz5QZmrJgmm3+0Re0EVPYFGW8qndCWGNtXW/0lGKhecVPML8yyFeAmnUCIs7xM2wPw==
dependencies:
"@docusaurus/core" "2.0.0-rc.1"
"@docusaurus/logger" "2.0.0-rc.1"
"@docusaurus/mdx-loader" "2.0.0-rc.1"
"@docusaurus/module-type-aliases" "2.0.0-rc.1"
"@docusaurus/types" "2.0.0-rc.1"
"@docusaurus/utils" "2.0.0-rc.1"
"@docusaurus/utils-validation" "2.0.0-rc.1"
"@docusaurus/core" "2.2.0"
"@docusaurus/logger" "2.2.0"
"@docusaurus/mdx-loader" "2.2.0"
"@docusaurus/module-type-aliases" "2.2.0"
"@docusaurus/types" "2.2.0"
"@docusaurus/utils" "2.2.0"
"@docusaurus/utils-validation" "2.2.0"
"@types/react-router-config" "^5.0.6"
combine-promises "^1.1.0"
fs-extra "^10.1.0"
@@ -1367,84 +1381,84 @@
utility-types "^3.10.0"
webpack "^5.73.0"
"@docusaurus/plugin-content-pages@2.0.0-rc.1":
version "2.0.0-rc.1"
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-rc.1.tgz#2be82f53d6c77e6aa66787726c30dc60b210e6f8"
integrity sha512-FdO79WC5hfWDQu3/CTFLRQzTNc0e5n+HNzavm2MNkSzGV08BFJ6RAkbPbtra5CWef+6iXZav6D/tzv2jDPvLzA==
"@docusaurus/plugin-content-pages@2.2.0":
version "2.2.0"
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.2.0.tgz#e3f40408787bbe229545dd50595f87e1393bc3ae"
integrity sha512-+OTK3FQHk5WMvdelz8v19PbEbx+CNT6VSpx7nVOvMNs5yJCKvmqBJBQ2ZSxROxhVDYn+CZOlmyrC56NSXzHf6g==
dependencies:
"@docusaurus/core" "2.0.0-rc.1"
"@docusaurus/mdx-loader" "2.0.0-rc.1"
"@docusaurus/types" "2.0.0-rc.1"
"@docusaurus/utils" "2.0.0-rc.1"
"@docusaurus/utils-validation" "2.0.0-rc.1"
"@docusaurus/core" "2.2.0"
"@docusaurus/mdx-loader" "2.2.0"
"@docusaurus/types" "2.2.0"
"@docusaurus/utils" "2.2.0"
"@docusaurus/utils-validation" "2.2.0"
fs-extra "^10.1.0"
tslib "^2.4.0"
webpack "^5.73.0"
"@docusaurus/plugin-debug@2.0.0-rc.1":
version "2.0.0-rc.1"
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-2.0.0-rc.1.tgz#73c06ad08d66810941e456d50b07be008f5235cb"
integrity sha512-aOsyYrPMbnsyqHwsVZ+0frrMRtnYqm4eaJpG4sC/6LYAJ07IDRQ9j3GOku2dKr5GsFK1Vx7VlE6ZLwe0MaGstg==
"@docusaurus/plugin-debug@2.2.0":
version "2.2.0"
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-2.2.0.tgz#b38741d2c492f405fee01ee0ef2e0029cedb689a"
integrity sha512-p9vOep8+7OVl6r/NREEYxf4HMAjV8JMYJ7Bos5fCFO0Wyi9AZEo0sCTliRd7R8+dlJXZEgcngSdxAUo/Q+CJow==
dependencies:
"@docusaurus/core" "2.0.0-rc.1"
"@docusaurus/types" "2.0.0-rc.1"
"@docusaurus/utils" "2.0.0-rc.1"
"@docusaurus/core" "2.2.0"
"@docusaurus/types" "2.2.0"
"@docusaurus/utils" "2.2.0"
fs-extra "^10.1.0"
react-json-view "^1.21.3"
tslib "^2.4.0"
"@docusaurus/plugin-google-analytics@2.0.0-rc.1":
version "2.0.0-rc.1"
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-rc.1.tgz#0136cc7534573ca56e023178ec2bda5c1e89ce71"
integrity sha512-f+G8z5OJWfg5QqWDLIdcN2SDoK5J5Gg8HMrqCI6Pfl+rxPb5I1niA+/UkAM+kMCpnekvhSt5AWz2fgkRenkPLA==
"@docusaurus/plugin-google-analytics@2.2.0":
version "2.2.0"
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.2.0.tgz#63c7137eff5a1208d2059fea04b5207c037d7954"
integrity sha512-+eZVVxVeEnV5nVQJdey9ZsfyEVMls6VyWTIj8SmX0k5EbqGvnIfET+J2pYEuKQnDIHxy+syRMoRM6AHXdHYGIg==
dependencies:
"@docusaurus/core" "2.0.0-rc.1"
"@docusaurus/types" "2.0.0-rc.1"
"@docusaurus/utils-validation" "2.0.0-rc.1"
"@docusaurus/core" "2.2.0"
"@docusaurus/types" "2.2.0"
"@docusaurus/utils-validation" "2.2.0"
tslib "^2.4.0"
"@docusaurus/plugin-google-gtag@2.0.0-rc.1":
version "2.0.0-rc.1"
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-rc.1.tgz#61698fdc41a4ace912fb8f6c834efd288edad3c0"
integrity sha512-yE1Et9hhhX9qMRnMJzpNq0854qIYiSEc2dZaXNk537HN7Q0rKkr/YONUHz2iqNYwPX2hGOY4LdpTxlMP88uVhA==
"@docusaurus/plugin-google-gtag@2.2.0":
version "2.2.0"
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.2.0.tgz#7b086d169ac5fe9a88aca10ab0fd2bf00c6c6b12"
integrity sha512-6SOgczP/dYdkqUMGTRqgxAS1eTp6MnJDAQMy8VCF1QKbWZmlkx4agHDexihqmYyCujTYHqDAhm1hV26EET54NQ==
dependencies:
"@docusaurus/core" "2.0.0-rc.1"
"@docusaurus/types" "2.0.0-rc.1"
"@docusaurus/utils-validation" "2.0.0-rc.1"
"@docusaurus/core" "2.2.0"
"@docusaurus/types" "2.2.0"
"@docusaurus/utils-validation" "2.2.0"
tslib "^2.4.0"
"@docusaurus/plugin-sitemap@2.0.0-rc.1":
version "2.0.0-rc.1"
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-rc.1.tgz#0b638e774b253d90e9f2d11663e961250f557bc4"
integrity sha512-5JmbNpssUF03odFM4ArvIsrO9bv7HnAJ0VtefXhh0WBpaFs8NgI3rTkCTFimvtRQjDR9U2bh23fXz2vjQQz6oA==
"@docusaurus/plugin-sitemap@2.2.0":
version "2.2.0"
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.2.0.tgz#876da60937886032d63143253d420db6a4b34773"
integrity sha512-0jAmyRDN/aI265CbWZNZuQpFqiZuo+5otk2MylU9iVrz/4J7gSc+ZJ9cy4EHrEsW7PV8s1w18hIEsmcA1YgkKg==
dependencies:
"@docusaurus/core" "2.0.0-rc.1"
"@docusaurus/logger" "2.0.0-rc.1"
"@docusaurus/types" "2.0.0-rc.1"
"@docusaurus/utils" "2.0.0-rc.1"
"@docusaurus/utils-common" "2.0.0-rc.1"
"@docusaurus/utils-validation" "2.0.0-rc.1"
"@docusaurus/core" "2.2.0"
"@docusaurus/logger" "2.2.0"
"@docusaurus/types" "2.2.0"
"@docusaurus/utils" "2.2.0"
"@docusaurus/utils-common" "2.2.0"
"@docusaurus/utils-validation" "2.2.0"
fs-extra "^10.1.0"
sitemap "^7.1.1"
tslib "^2.4.0"
"@docusaurus/preset-classic@2.0.0-rc.1":
version "2.0.0-rc.1"
resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-2.0.0-rc.1.tgz#5e5b1cf80b3dd4e2c3f824c78a111f105858d853"
integrity sha512-5jjTVZkhArjyoNHwCI9x4PSG0zPmBJILjZLVrxPcHpm/K0ltkYcp6J3GxYpf5EbMuOh5+yCWM63cSshGcNOo3Q==
"@docusaurus/preset-classic@2.2.0":
version "2.2.0"
resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-2.2.0.tgz#bece5a043eeb74430f7c6c7510000b9c43669eb7"
integrity sha512-yKIWPGNx7BT8v2wjFIWvYrS+nvN04W+UameSFf8lEiJk6pss0kL6SG2MRvyULiI3BDxH+tj6qe02ncpSPGwumg==
dependencies:
"@docusaurus/core" "2.0.0-rc.1"
"@docusaurus/plugin-content-blog" "2.0.0-rc.1"
"@docusaurus/plugin-content-docs" "2.0.0-rc.1"
"@docusaurus/plugin-content-pages" "2.0.0-rc.1"
"@docusaurus/plugin-debug" "2.0.0-rc.1"
"@docusaurus/plugin-google-analytics" "2.0.0-rc.1"
"@docusaurus/plugin-google-gtag" "2.0.0-rc.1"
"@docusaurus/plugin-sitemap" "2.0.0-rc.1"
"@docusaurus/theme-classic" "2.0.0-rc.1"
"@docusaurus/theme-common" "2.0.0-rc.1"
"@docusaurus/theme-search-algolia" "2.0.0-rc.1"
"@docusaurus/types" "2.0.0-rc.1"
"@docusaurus/core" "2.2.0"
"@docusaurus/plugin-content-blog" "2.2.0"
"@docusaurus/plugin-content-docs" "2.2.0"
"@docusaurus/plugin-content-pages" "2.2.0"
"@docusaurus/plugin-debug" "2.2.0"
"@docusaurus/plugin-google-analytics" "2.2.0"
"@docusaurus/plugin-google-gtag" "2.2.0"
"@docusaurus/plugin-sitemap" "2.2.0"
"@docusaurus/theme-classic" "2.2.0"
"@docusaurus/theme-common" "2.2.0"
"@docusaurus/theme-search-algolia" "2.2.0"
"@docusaurus/types" "2.2.0"
"@docusaurus/react-loadable@5.5.2", "react-loadable@npm:@docusaurus/react-loadable@5.5.2":
version "5.5.2"
@@ -1454,23 +1468,23 @@
"@types/react" "*"
prop-types "^15.6.2"
"@docusaurus/theme-classic@2.0.0-rc.1":
version "2.0.0-rc.1"
resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-2.0.0-rc.1.tgz#4ab30745e6b03b0f277837debae786a0a83aee6a"
integrity sha512-qNiz7ieeq3AC+V8TbW6S63pWLJph1CbzWDDPTqxDLHgA8VQaNaSmJM8S92pH+yKALRb9u14ogjjYYc75Nj2JmQ==
"@docusaurus/theme-classic@2.2.0":
version "2.2.0"
resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-2.2.0.tgz#a048bb1bc077dee74b28bec25f4b84b481863742"
integrity sha512-kjbg/qJPwZ6H1CU/i9d4l/LcFgnuzeiGgMQlt6yPqKo0SOJIBMPuz7Rnu3r/WWbZFPi//o8acclacOzmXdUUEg==
dependencies:
"@docusaurus/core" "2.0.0-rc.1"
"@docusaurus/mdx-loader" "2.0.0-rc.1"
"@docusaurus/module-type-aliases" "2.0.0-rc.1"
"@docusaurus/plugin-content-blog" "2.0.0-rc.1"
"@docusaurus/plugin-content-docs" "2.0.0-rc.1"
"@docusaurus/plugin-content-pages" "2.0.0-rc.1"
"@docusaurus/theme-common" "2.0.0-rc.1"
"@docusaurus/theme-translations" "2.0.0-rc.1"
"@docusaurus/types" "2.0.0-rc.1"
"@docusaurus/utils" "2.0.0-rc.1"
"@docusaurus/utils-common" "2.0.0-rc.1"
"@docusaurus/utils-validation" "2.0.0-rc.1"
"@docusaurus/core" "2.2.0"
"@docusaurus/mdx-loader" "2.2.0"
"@docusaurus/module-type-aliases" "2.2.0"
"@docusaurus/plugin-content-blog" "2.2.0"
"@docusaurus/plugin-content-docs" "2.2.0"
"@docusaurus/plugin-content-pages" "2.2.0"
"@docusaurus/theme-common" "2.2.0"
"@docusaurus/theme-translations" "2.2.0"
"@docusaurus/types" "2.2.0"
"@docusaurus/utils" "2.2.0"
"@docusaurus/utils-common" "2.2.0"
"@docusaurus/utils-validation" "2.2.0"
"@mdx-js/react" "^1.6.22"
clsx "^1.2.1"
copy-text-to-clipboard "^3.0.1"
@@ -1485,17 +1499,17 @@
tslib "^2.4.0"
utility-types "^3.10.0"
"@docusaurus/theme-common@2.0.0-rc.1":
version "2.0.0-rc.1"
resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-2.0.0-rc.1.tgz#ea5d9732a16b03b488555e50107161bfa2abad98"
integrity sha512-1r9ZLKD9SeoCYVzWzcdR79Dia4ANlrlRjNl6uzETOEybjK6FF7yEa9Yra8EJcOCbi3coyYz5xFh/r1YHFTFHug==
"@docusaurus/theme-common@2.2.0":
version "2.2.0"
resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-2.2.0.tgz#2303498d80448aafdd588b597ce9d6f4cfa930e4"
integrity sha512-R8BnDjYoN90DCL75gP7qYQfSjyitXuP9TdzgsKDmSFPNyrdE3twtPNa2dIN+h+p/pr+PagfxwWbd6dn722A1Dw==
dependencies:
"@docusaurus/mdx-loader" "2.0.0-rc.1"
"@docusaurus/module-type-aliases" "2.0.0-rc.1"
"@docusaurus/plugin-content-blog" "2.0.0-rc.1"
"@docusaurus/plugin-content-docs" "2.0.0-rc.1"
"@docusaurus/plugin-content-pages" "2.0.0-rc.1"
"@docusaurus/utils" "2.0.0-rc.1"
"@docusaurus/mdx-loader" "2.2.0"
"@docusaurus/module-type-aliases" "2.2.0"
"@docusaurus/plugin-content-blog" "2.2.0"
"@docusaurus/plugin-content-docs" "2.2.0"
"@docusaurus/plugin-content-pages" "2.2.0"
"@docusaurus/utils" "2.2.0"
"@types/history" "^4.7.11"
"@types/react" "*"
"@types/react-router-config" "*"
@@ -1505,19 +1519,34 @@
tslib "^2.4.0"
utility-types "^3.10.0"
"@docusaurus/theme-search-algolia@2.0.0-rc.1":
version "2.0.0-rc.1"
resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-rc.1.tgz#e78c0aeaea6a3717ae3a6ecd75a8652bd7c8e974"
integrity sha512-H5yq6V/B4qo6GZrDKMbeSpk3T9e9K2MliDzLonRu0w3QHW9orVGe0c/lZvRbGlDZjnsOo7XGddhXXIDWGwnpaA==
"@docusaurus/theme-live-codeblock@2.2.0":
version "2.2.0"
resolved "https://registry.yarnpkg.com/@docusaurus/theme-live-codeblock/-/theme-live-codeblock-2.2.0.tgz#a507e496a1a74d261beee30ad072e4341310809a"
integrity sha512-4XRFxfZGcyqmbLmNbnbZ2ZOsoY7FYCJUZKsYW5yzhZYjmjGg7lkdJH5trt9otUoKBsZopBpPWvcDZwCu1SENYg==
dependencies:
"@docusaurus/core" "2.2.0"
"@docusaurus/theme-common" "2.2.0"
"@docusaurus/theme-translations" "2.2.0"
"@docusaurus/utils-validation" "2.2.0"
"@philpl/buble" "^0.19.7"
clsx "^1.2.1"
fs-extra "^10.1.0"
react-live "2.2.3"
tslib "^2.4.0"
"@docusaurus/theme-search-algolia@2.2.0":
version "2.2.0"
resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.2.0.tgz#77fd9f7a600917e6024fe3ac7fb6cfdf2ce84737"
integrity sha512-2h38B0tqlxgR2FZ9LpAkGrpDWVdXZ7vltfmTdX+4RsDs3A7khiNsmZB+x/x6sA4+G2V2CvrsPMlsYBy5X+cY1w==
dependencies:
"@docsearch/react" "^3.1.1"
"@docusaurus/core" "2.0.0-rc.1"
"@docusaurus/logger" "2.0.0-rc.1"
"@docusaurus/plugin-content-docs" "2.0.0-rc.1"
"@docusaurus/theme-common" "2.0.0-rc.1"
"@docusaurus/theme-translations" "2.0.0-rc.1"
"@docusaurus/utils" "2.0.0-rc.1"
"@docusaurus/utils-validation" "2.0.0-rc.1"
"@docusaurus/core" "2.2.0"
"@docusaurus/logger" "2.2.0"
"@docusaurus/plugin-content-docs" "2.2.0"
"@docusaurus/theme-common" "2.2.0"
"@docusaurus/theme-translations" "2.2.0"
"@docusaurus/utils" "2.2.0"
"@docusaurus/utils-validation" "2.2.0"
algoliasearch "^4.13.1"
algoliasearch-helper "^3.10.0"
clsx "^1.2.1"
@@ -1527,10 +1556,10 @@
tslib "^2.4.0"
utility-types "^3.10.0"
"@docusaurus/theme-translations@2.0.0-rc.1":
version "2.0.0-rc.1"
resolved "https://registry.yarnpkg.com/@docusaurus/theme-translations/-/theme-translations-2.0.0-rc.1.tgz#bd647f78c741ee7f6c6d2cbbd3e3f282ef2f89ad"
integrity sha512-JLhNdlnbQhxVQzOnLyiCaTzKFa1lpVrM3nCrkGQKscoG2rY6ARGYMgMN2DkoH6hm7TflQ8+PE1S5MzzASeLs4Q==
"@docusaurus/theme-translations@2.2.0":
version "2.2.0"
resolved "https://registry.yarnpkg.com/@docusaurus/theme-translations/-/theme-translations-2.2.0.tgz#5fbd4693679806f80c26eeae1381e1f2c23d83e7"
integrity sha512-3T140AG11OjJrtKlY4pMZ5BzbGRDjNs2co5hJ6uYJG1bVWlhcaFGqkaZ5lCgKflaNHD7UHBHU9Ec5f69jTdd6w==
dependencies:
fs-extra "^10.1.0"
tslib "^2.4.0"
@@ -1549,30 +1578,44 @@
webpack "^5.73.0"
webpack-merge "^5.8.0"
"@docusaurus/utils-common@2.0.0-rc.1":
version "2.0.0-rc.1"
resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-2.0.0-rc.1.tgz#3e233a28794325d5d9d3af3f7b1c22b59aa8b847"
integrity sha512-+iZICpeFPZJ9oGJXuG92WTWee6WRnVx5BdzlcfuKf/f5KQX8PvwXR2tDME78FGGhShB8zr+vjuNEXuLvXT7j2A==
"@docusaurus/types@2.2.0":
version "2.2.0"
resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-2.2.0.tgz#02c577a4041ab7d058a3c214ccb13647e21a9857"
integrity sha512-b6xxyoexfbRNRI8gjblzVOnLr4peCJhGbYGPpJ3LFqpi5nsFfoK4mmDLvWdeah0B7gmJeXabN7nQkFoqeSdmOw==
dependencies:
"@types/history" "^4.7.11"
"@types/react" "*"
commander "^5.1.0"
joi "^17.6.0"
react-helmet-async "^1.3.0"
utility-types "^3.10.0"
webpack "^5.73.0"
webpack-merge "^5.8.0"
"@docusaurus/utils-common@2.2.0":
version "2.2.0"
resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-2.2.0.tgz#a401c1b93a8697dd566baf6ac64f0fdff1641a78"
integrity sha512-qebnerHp+cyovdUseDQyYFvMW1n1nv61zGe5JJfoNQUnjKuApch3IVsz+/lZ9a38pId8kqehC1Ao2bW/s0ntDA==
dependencies:
tslib "^2.4.0"
"@docusaurus/utils-validation@2.0.0-rc.1":
version "2.0.0-rc.1"
resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-2.0.0-rc.1.tgz#dded12f036cda8a54a19e01694b35859fe0cf1d5"
integrity sha512-lj36gm9Ksu4tt/EUeLDWoMbXe3sfBxeIPIUUdqYcBYkF/rpQkh+uL/dncjNGiw6uvBOqXhOfsFVP045HtgShVw==
"@docusaurus/utils-validation@2.2.0":
version "2.2.0"
resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-2.2.0.tgz#04d4d103137ad0145883971d3aa497f4a1315f25"
integrity sha512-I1hcsG3yoCkasOL5qQAYAfnmVoLei7apugT6m4crQjmDGxq+UkiRrq55UqmDDyZlac/6ax/JC0p+usZ6W4nVyg==
dependencies:
"@docusaurus/logger" "2.0.0-rc.1"
"@docusaurus/utils" "2.0.0-rc.1"
"@docusaurus/logger" "2.2.0"
"@docusaurus/utils" "2.2.0"
joi "^17.6.0"
js-yaml "^4.1.0"
tslib "^2.4.0"
"@docusaurus/utils@2.0.0-rc.1":
version "2.0.0-rc.1"
resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-2.0.0-rc.1.tgz#53584b800df9e13864d5ef1a76aa7655a90ec86e"
integrity sha512-ym9I1OwIYbKs1LGaUajaA/vDG8VweJj/6YoZjHp+eDQHhTRIrHXiYoGDqorafRhftKwnA1EnyomuXpNd9bq8Gg==
"@docusaurus/utils@2.2.0":
version "2.2.0"
resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-2.2.0.tgz#3d6f9b7a69168d5c92d371bf21c556a4f50d1da6"
integrity sha512-oNk3cjvx7Tt1Lgh/aeZAmFpGV2pDr5nHKrBVx6hTkzGhrnMuQqLt6UPlQjdYQ3QHXwyF/ZtZMO1D5Pfi0lu7SA==
dependencies:
"@docusaurus/logger" "2.0.0-rc.1"
"@docusaurus/logger" "2.2.0"
"@svgr/webpack" "^6.2.1"
file-loader "^6.2.0"
fs-extra "^10.1.0"
@@ -1588,6 +1631,11 @@
url-loader "^4.1.1"
webpack "^5.73.0"
"@excalidraw/excalidraw@0.15.2-eb020d0":
version "0.15.2-eb020d0"
resolved "https://registry.yarnpkg.com/@excalidraw/excalidraw/-/excalidraw-0.15.2-eb020d0.tgz#25bd61e6f23da7c084fb16a3e0fe0dd9ad8e6533"
integrity sha512-TKGLzpOVqFQcwK1GFKTDXgg1s2U6tc5KE3qXuv87osbzOtftQn3x4+VH61vwdj11l00nEN80SMdXUC43T9uJqQ==
"@hapi/hoek@^9.0.0":
version "9.3.0"
resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb"
@@ -1709,6 +1757,21 @@
"@nodelib/fs.scandir" "2.1.5"
fastq "^1.6.0"
"@philpl/buble@^0.19.7":
version "0.19.7"
resolved "https://registry.yarnpkg.com/@philpl/buble/-/buble-0.19.7.tgz#27231e6391393793b64bc1c982fc7b593198b893"
integrity sha512-wKTA2DxAGEW+QffRQvOhRQ0VBiYU2h2p8Yc1oBNlqSKws48/8faxqKNIuub0q4iuyTuLwtB8EkwiKwhlfV1PBA==
dependencies:
acorn "^6.1.1"
acorn-class-fields "^0.2.1"
acorn-dynamic-import "^4.0.0"
acorn-jsx "^5.0.1"
chalk "^2.4.2"
magic-string "^0.25.2"
minimist "^1.2.0"
os-homedir "^1.0.1"
regexpu-core "^4.5.4"
"@polka/url@^1.0.0-next.20":
version "1.0.0-next.21"
resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1"
@@ -1722,9 +1785,9 @@
"@hapi/hoek" "^9.0.0"
"@sideway/formula@^3.0.0":
version "3.0.0"
resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.0.tgz#fe158aee32e6bd5de85044be615bc08478a0a13c"
integrity sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==
version "3.0.1"
resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.1.tgz#80fcbcbaf7ce031e0ef2dd29b1bfc7c3f583611f"
integrity sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==
"@sideway/pinpoint@^2.0.0":
version "2.0.0"
@@ -2242,16 +2305,36 @@ accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8:
mime-types "~2.1.34"
negotiator "0.6.3"
acorn-class-fields@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/acorn-class-fields/-/acorn-class-fields-0.2.1.tgz#748058bceeb0ef25164bbc671993984083f5a085"
integrity sha512-US/kqTe0H8M4LN9izoL+eykVAitE68YMuYZ3sHn3i1fjniqR7oQ3SPvuMK/VT1kjOQHrx5Q88b90TtOKgAv2hQ==
acorn-dynamic-import@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz#482210140582a36b83c3e342e1cfebcaa9240948"
integrity sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==
acorn-import-assertions@^1.7.6:
version "1.8.0"
resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9"
integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==
acorn-jsx@^5.0.1:
version "5.3.2"
resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
acorn-walk@^8.0.0:
version "8.2.0"
resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1"
integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==
acorn@^6.1.1:
version "6.4.2"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6"
integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==
acorn@^8.0.4, acorn@^8.5.0, acorn@^8.7.1:
version "8.8.0"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8"
@@ -2618,6 +2701,18 @@ browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.16.6, browserslist@^4
node-releases "^2.0.6"
update-browserslist-db "^1.0.4"
buble@0.19.6:
version "0.19.6"
resolved "https://registry.yarnpkg.com/buble/-/buble-0.19.6.tgz#915909b6bd5b11ee03b1c885ec914a8b974d34d3"
integrity sha512-9kViM6nJA1Q548Jrd06x0geh+BG2ru2+RMDkIHHgJY/8AcyCs34lTHwra9BX7YdPrZXd5aarkpr/SY8bmPgPdg==
dependencies:
chalk "^2.4.1"
magic-string "^0.25.1"
minimist "^1.2.0"
os-homedir "^1.0.1"
regexpu-core "^4.2.0"
vlq "^1.0.0"
buffer-from@^1.0.0:
version "1.1.2"
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
@@ -2697,7 +2792,7 @@ ccount@^1.0.0:
resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.1.0.tgz#246687debb6014735131be8abab2d93898f8d043"
integrity sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==
chalk@^2.0.0:
chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2:
version "2.4.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
@@ -2754,7 +2849,7 @@ cheerio@^1.0.0-rc.12:
parse5 "^7.0.0"
parse5-htmlparser2-tree-adapter "^7.0.0"
chokidar@^3.4.2, chokidar@^3.5.3:
"chokidar@>=3.0.0 <4.0.0", chokidar@^3.4.2, chokidar@^3.5.3:
version "3.5.3"
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
@@ -2905,6 +3000,16 @@ commondir@^1.0.1:
resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==
component-props@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/component-props/-/component-props-1.1.1.tgz#f9b7df9b9927b6e6d97c9bd272aa867670f34944"
integrity sha512-69pIRJs9fCCHRqCz3390YF2LV1Lu6iEMZ5zuVqqUn+G20V9BNXlMs0cWawWeW9g4Ynmg29JmkG6R7/lUJoGd1Q==
component-xor@0.0.4:
version "0.0.4"
resolved "https://registry.yarnpkg.com/component-xor/-/component-xor-0.0.4.tgz#c55d83ccc1b94cd5089a4e93fa7891c7263e59aa"
integrity sha512-ZIt6sla8gfo+AFVRZoZOertcnD5LJaY2T9CKE2j13NJxQt/mUafD69Bl7/Y4AnpI2LGjiXH7cOfJDx/n2G9edA==
compressible@~2.0.16:
version "2.0.18"
resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba"
@@ -3016,6 +3121,11 @@ core-js-pure@^3.20.2:
resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.24.0.tgz#10eeb90dbf0d670a6b22b081aecc7deb2faec7e1"
integrity sha512-uzMmW8cRh7uYw4JQtzqvGWRyC2T5+4zipQLQdi2FmiRqP83k3d6F3stv2iAlNhOs6cXN401FCD5TL0vvleuHgA==
core-js@^2.4.1:
version "2.6.12"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec"
integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==
core-js@^3.23.3:
version "3.24.0"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.24.0.tgz#4928d4e99c593a234eb1a1f9abd3122b04d3ac57"
@@ -3345,6 +3455,13 @@ dns-packet@^5.2.2:
dependencies:
"@leichtgewicht/ip-codec" "^2.0.1"
docusaurus-plugin-sass@0.2.3:
version "0.2.3"
resolved "https://registry.yarnpkg.com/docusaurus-plugin-sass/-/docusaurus-plugin-sass-0.2.3.tgz#5b61f7e560d236cfc1531ed497ac32fc166fc5e2"
integrity sha512-FbaE06K8NF8SPUYTwiG+83/jkXrwHJ/Afjqz3SUIGon6QvFwSSoKOcoxGQmUBnjTOk+deUONDx8jNWsegFJcBQ==
dependencies:
sass-loader "^10.1.1"
dom-converter@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768"
@@ -3352,6 +3469,14 @@ dom-converter@^0.2.0:
dependencies:
utila "~0.4"
dom-iterator@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/dom-iterator/-/dom-iterator-1.0.0.tgz#9c09899846ec41c2d257adc4d6015e4759ef05ad"
integrity sha512-7dsMOQI07EMU98gQM8NSB3GsAiIeBYIPKpnxR3c9xOvdvBjChAcOM0iJ222I3p5xyiZO9e5oggkNaCusuTdYig==
dependencies:
component-props "1.1.1"
component-xor "0.0.4"
dom-serializer@^1.0.1:
version "1.4.1"
resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30"
@@ -4251,9 +4376,9 @@ htmlparser2@^8.0.1:
entities "^4.3.0"
http-cache-semantics@^4.0.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390"
integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==
version "4.1.1"
resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a"
integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==
http-deceiver@^1.2.7:
version "1.2.7"
@@ -4340,6 +4465,11 @@ immer@^9.0.7:
resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.15.tgz#0b9169e5b1d22137aba7d43f8a81a495dd1b62dc"
integrity sha512-2eB/sswms9AEUSkOm4SbV5Y7Vmt/bKRwByd52jfLkW4OLYeaTP3EEiJ9agqU0O/tq6Dk62Zfj+TJSqfm1rLVGQ==
immutable@^4.0.0:
version "4.2.2"
resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.2.2.tgz#2da9ff4384a4330c36d4d1bc88e90f9e0b0ccd16"
integrity sha512-fTMKDwtbvO5tldky9QZ2fMX7slR0mYpY5nbnFWYp0fOzDhHqhgIw9KoYgxLWsoNTS9ZHGauHj18DTyEw6BK3Og==
import-fresh@^3.1.0, import-fresh@^3.2.1, import-fresh@^3.3.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
@@ -4692,9 +4822,9 @@ json-schema-traverse@^1.0.0:
integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==
json5@^2.1.2, json5@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c"
integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==
version "2.2.3"
resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
jsonfile@^6.0.1:
version "6.1.0"
@@ -4722,7 +4852,7 @@ kleur@^3.0.3:
resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e"
integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==
klona@^2.0.5:
klona@^2.0.4, klona@^2.0.5:
version "2.0.5"
resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.5.tgz#d166574d90076395d9963aa7a928fabb8d76afbc"
integrity sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==
@@ -4755,9 +4885,9 @@ loader-runner@^4.2.0:
integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==
loader-utils@^2.0.0:
version "2.0.2"
resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.2.tgz#d6e3b4fb81870721ae4e0868ab11dd638368c129"
integrity sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==
version "2.0.4"
resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c"
integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==
dependencies:
big.js "^5.2.2"
emojis-list "^3.0.0"
@@ -4851,6 +4981,13 @@ lru-cache@^6.0.0:
dependencies:
yallist "^4.0.0"
magic-string@^0.25.1, magic-string@^0.25.2:
version "0.25.9"
resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c"
integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==
dependencies:
sourcemap-codec "^1.4.8"
make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
@@ -5208,6 +5345,11 @@ opener@^1.5.2:
resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598"
integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==
os-homedir@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
integrity sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==
p-cancelable@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc"
@@ -5737,7 +5879,7 @@ pretty-time@^1.1.0:
resolved "https://registry.yarnpkg.com/pretty-time/-/pretty-time-1.1.0.tgz#ffb7429afabb8535c346a34e41873adf3d74dd0e"
integrity sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==
prism-react-renderer@^1.3.5:
prism-react-renderer@^1.0.1, prism-react-renderer@^1.3.5:
version "1.3.5"
resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-1.3.5.tgz#786bb69aa6f73c32ba1ee813fbe17a0115435085"
integrity sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg==
@@ -5767,7 +5909,7 @@ prompts@^2.4.2:
kleur "^3.0.3"
sisteransi "^1.0.5"
prop-types@^15.6.2, prop-types@^15.7.2:
prop-types@^15.5.8, prop-types@^15.6.2, prop-types@^15.7.2:
version "15.8.1"
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
@@ -5967,6 +6109,19 @@ react-lifecycles-compat@^3.0.4:
resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362"
integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==
react-live@2.2.3:
version "2.2.3"
resolved "https://registry.yarnpkg.com/react-live/-/react-live-2.2.3.tgz#260f99194213799f0005e473e7a4154c699d6a7c"
integrity sha512-tpKruvfytNETuzO3o1mrQUj180GVrq35IE8F5gH1NJVPt4szYCx83/dOSCOyjgRhhc3gQvl0pQ3k/CjOjwJkKQ==
dependencies:
buble "0.19.6"
core-js "^2.4.1"
dom-iterator "^1.0.0"
prism-react-renderer "^1.0.1"
prop-types "^15.5.8"
react-simple-code-editor "^0.10.0"
unescape "^1.0.1"
react-loadable-ssr-addon-v5-slorber@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz#2cdc91e8a744ffdf9e3556caabeb6e4278689883"
@@ -6010,6 +6165,11 @@ react-router@5.3.3, react-router@^5.3.3:
tiny-invariant "^1.0.2"
tiny-warning "^1.0.0"
react-simple-code-editor@^0.10.0:
version "0.10.0"
resolved "https://registry.yarnpkg.com/react-simple-code-editor/-/react-simple-code-editor-0.10.0.tgz#73e7ac550a928069715482aeb33ccba36efe2373"
integrity sha512-bL5W5mAxSW6+cLwqqVWY47Silqgy2DKDTR4hDBrLrUqC5BXc29YVx17l2IZk5v36VcDEq1Bszu2oHm1qBwKqBA==
react-textarea-autosize@^8.3.2:
version "8.3.4"
resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.3.4.tgz#270a343de7ad350534141b02c9cb78903e553524"
@@ -6082,6 +6242,13 @@ regenerate-unicode-properties@^10.0.1:
dependencies:
regenerate "^1.4.2"
regenerate-unicode-properties@^9.0.0:
version "9.0.0"
resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz#54d09c7115e1f53dc2314a974b32c1c344efe326"
integrity sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==
dependencies:
regenerate "^1.4.2"
regenerate@^1.4.2:
version "1.4.2"
resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a"
@@ -6099,6 +6266,18 @@ regenerator-transform@^0.15.0:
dependencies:
"@babel/runtime" "^7.8.4"
regexpu-core@^4.2.0, regexpu-core@^4.5.4:
version "4.8.0"
resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.8.0.tgz#e5605ba361b67b1718478501327502f4479a98f0"
integrity sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==
dependencies:
regenerate "^1.4.2"
regenerate-unicode-properties "^9.0.0"
regjsgen "^0.5.2"
regjsparser "^0.7.0"
unicode-match-property-ecmascript "^2.0.0"
unicode-match-property-value-ecmascript "^2.0.0"
regexpu-core@^5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.1.0.tgz#2f8504c3fd0ebe11215783a41541e21c79942c6d"
@@ -6125,11 +6304,23 @@ registry-url@^5.0.0:
dependencies:
rc "^1.2.8"
regjsgen@^0.5.2:
version "0.5.2"
resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733"
integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==
regjsgen@^0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.6.0.tgz#83414c5354afd7d6627b16af5f10f41c4e71808d"
integrity sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==
regjsparser@^0.7.0:
version "0.7.0"
resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.7.0.tgz#a6b667b54c885e18b52554cb4960ef71187e9968"
integrity sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==
dependencies:
jsesc "~0.5.0"
regjsparser@^0.8.2:
version "0.8.4"
resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.8.4.tgz#8a14285ffcc5de78c5b95d62bbf413b6bc132d5f"
@@ -6317,6 +6508,26 @@ safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0:
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
sass-loader@^10.1.1:
version "10.4.1"
resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.4.1.tgz#bea4e173ddf512c9d7f53e9ec686186146807cbf"
integrity sha512-aX/iJZTTpNUNx/OSYzo2KsjIUQHqvWsAhhUijFjAPdZTEhstjZI9zTNvkTTwsx+uNUJqUwOw5gacxQMx4hJxGQ==
dependencies:
klona "^2.0.4"
loader-utils "^2.0.0"
neo-async "^2.6.2"
schema-utils "^3.0.0"
semver "^7.3.2"
sass@1.57.1:
version "1.57.1"
resolved "https://registry.yarnpkg.com/sass/-/sass-1.57.1.tgz#dfafd46eb3ab94817145e8825208ecf7281119b5"
integrity sha512-O2+LwLS79op7GI0xZ8fqzF7X2m/m8WFfI02dHOdsK5R2ECeS5F62zrwg/relM1rjSLy7Vd/DiMNIvPrQGsA0jw==
dependencies:
chokidar ">=3.0.0 <4.0.0"
immutable "^4.0.0"
source-map-js ">=0.6.2 <2.0.0"
sax@^1.2.4:
version "1.2.4"
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
@@ -6400,19 +6611,19 @@ semver@7.0.0:
integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==
semver@^5.4.1:
version "5.7.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
version "5.7.2"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8"
integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==
semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0:
version "6.3.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
version "6.3.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7:
version "7.3.7"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f"
integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==
version "7.5.4"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e"
integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==
dependencies:
lru-cache "^6.0.0"
@@ -6594,7 +6805,7 @@ sort-css-media-queries@2.0.4:
resolved "https://registry.yarnpkg.com/sort-css-media-queries/-/sort-css-media-queries-2.0.4.tgz#b2badfa519cb4a938acbc6d3aaa913d4949dc908"
integrity sha512-PAIsEK/XupCQwitjv7XxoMvYhT7EAfyzI3hsy/MyDgTvc+Ft55ctdkctJLOy6cQejaIC+zjpUL4djFVm2ivOOw==
source-map-js@^1.0.2:
"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
@@ -6617,6 +6828,11 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0:
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
sourcemap-codec@^1.4.8:
version "1.4.8"
resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4"
integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==
space-separated-tokens@^1.0.0:
version "1.1.5"
resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz#85f32c3d10d9682007e917414ddc5c26d1aa6899"
@@ -6943,9 +7159,16 @@ typescript@^4.7.4:
integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==
ua-parser-js@^0.7.30:
version "0.7.31"
resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.31.tgz#649a656b191dffab4f21d5e053e27ca17cbff5c6"
integrity sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ==
version "0.7.33"
resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.33.tgz#1d04acb4ccef9293df6f70f2c3d22f3030d8b532"
integrity sha512-s8ax/CeZdK9R/56Sui0WM6y9OFREJarMRHqLB2EwkovemBxNQ+Bqu8GAsUnVcXKgphb++ghr/B2BZx4mahujPw==
unescape@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/unescape/-/unescape-1.0.1.tgz#956e430f61cad8a4d57d82c518f5e6cc5d0dda96"
integrity sha512-O0+af1Gs50lyH1nUu3ZyYS1cRh01Q/kUKatTOkSs7jukXE6/NebucDVxyiDsA9AQ4JC1V1jUH9EO8JX2nMDgGQ==
dependencies:
extend-shallow "^2.0.1"
unherit@^1.0.4:
version "1.1.3"
@@ -7203,6 +7426,11 @@ vfile@^4.0.0:
unist-util-stringify-position "^2.0.0"
vfile-message "^2.0.0"
vlq@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/vlq/-/vlq-1.0.1.tgz#c003f6e7c0b4c1edd623fd6ee50bbc0d6a1de468"
integrity sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==
wait-on@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/wait-on/-/wait-on-6.0.1.tgz#16bbc4d1e4ebdd41c5b4e63a2e16dbd1f4e5601e"
@@ -7314,9 +7542,9 @@ webpack-sources@^3.2.2, webpack-sources@^3.2.3:
integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==
webpack@^5.73.0:
version "5.74.0"
resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.74.0.tgz#02a5dac19a17e0bb47093f2be67c695102a55980"
integrity sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==
version "5.76.1"
resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.76.1.tgz#7773de017e988bccb0f13c7d75ec245f377d295c"
integrity sha512-4+YIK4Abzv8172/SGqObnUjaIHjLEuUasz9EwQj/9xmPPkYJy2Mh03Q/lJfSD3YLzbxy5FeTq5Uw0323Oh6SJQ==
dependencies:
"@types/eslint-scope" "^3.7.3"
"@types/estree" "^0.0.51"

234
index.html Normal file
View File

@@ -0,0 +1,234 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Excalidraw | Hand-drawn look & feel • Collaborative • Secure</title>
<meta
name="viewport"
content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, viewport-fit=cover, shrink-to-fit=no"
/>
<meta name="referrer" content="origin" />
<meta name="mobile-web-app-capable" content="yes" />
<meta name="theme-color" content="#121212" />
<!-- Primary Meta Tags -->
<meta
name="title"
content="Excalidraw — Collaborative whiteboarding made easy"
/>
<meta
name="description"
content="Excalidraw is a virtual collaborative whiteboard tool that lets you easily sketch diagrams that have a hand-drawn feel to them."
/>
<meta name="image" content="https://excalidraw.com/og-image-2.png" />
<!-- Open Graph / Facebook -->
<meta property="og:site_name" content="Excalidraw" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://excalidraw.com" />
<meta
property="og:title"
content="Excalidraw — Collaborative whiteboarding made easy"
/>
<meta property="og:image:alt" content="Excalidraw logo" />
<meta
property="og:description"
content="Excalidraw is a virtual collaborative whiteboard tool that lets you easily sketch diagrams that have a hand-drawn feel to them."
/>
<meta property="og:image" content="https://excalidraw.com/og-image-2.png" />
<!-- Twitter -->
<meta property="twitter:card" content="summary_large_image" />
<meta property="twitter:site" content="@excalidraw" />
<meta property="twitter:url" content="https://excalidraw.com" />
<meta
property="twitter:title"
content="Excalidraw — Collaborative whiteboarding made easy"
/>
<meta
property="twitter:description"
content="Excalidraw is a virtual collaborative whiteboard tool that lets you easily sketch diagrams that have a hand-drawn feel to them."
/>
<meta
property="twitter:image"
content="https://excalidraw.com/og-twitter-v2.png"
/>
<!-- General tags -->
<meta
name="description"
content="Excalidraw is a virtual collaborative whiteboard tool that lets you easily sketch diagrams that have a hand-drawn feel to them."
/>
<!------------------------------------------------------------------------->
<!-- to minimize white flash on load when user has dark mode enabled -->
<script>
try {
//
const theme = window.localStorage.getItem("excalidraw-theme");
if (theme === "dark") {
document.documentElement.classList.add("dark");
}
} catch {}
</script>
<style>
html.dark {
background-color: #121212;
color: #fff;
}
</style>
<!------------------------------------------------------------------------->
<% if ("%PROD%" === "true") { %>
<script>
// Redirect Excalidraw+ users which have auto-redirect enabled.
//
// Redirect only the bare root path, so link/room/library urls are not
// redirected.
//
// Putting into index.html for best performance (can't redirect on server
// due to location.hash checks).
if (
window.location.pathname === "/" &&
!window.location.hash &&
!window.location.search &&
// if its present redirect
document.cookie.includes("excplus-autoredirect=true")
) {
window.location.href = "https://app.excalidraw.com";
}
</script>
<% } %>
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" />
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png" />
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png" />
<!-- Excalidraw version -->
<meta name="version" content="{version}" />
<link
rel="preload"
href="/Virgil.woff2"
as="font"
type="font/woff2"
crossorigin="anonymous"
/>
<link
rel="preload"
href="/Cascadia.woff2"
as="font"
type="font/woff2"
crossorigin="anonymous"
/>
<link rel="stylesheet" href="/fonts.css" type="text/css" />
<% if ("%VITE_APP_DEV_DISABLE_LIVE_RELOAD%"==="true" ) { %>
<script>
{
const _WebSocket = window.WebSocket;
window.WebSocket = function (url) {
if (/ws:\/\/localhost:.+?\/sockjs-node/.test(url)) {
console.info(
"[!!!] Live reload is disabled via VITE_APP_DEV_DISABLE_LIVE_RELOAD [!!!]",
);
} else {
return new _WebSocket(url);
}
};
}
</script>
<% } %>
<script>
window.EXCALIDRAW_ASSET_PATH = "/";
// setting this so that libraries installation reuses this window tab.
window.name = "_excalidraw";
</script>
<!-- FIXME: remove this when we update CRA (fix SW caching) -->
<style>
body,
html {
margin: 0;
-webkit-text-size-adjust: 100%;
width: 100%;
height: 100%;
overflow: hidden;
}
.visually-hidden {
position: absolute !important;
height: 1px;
width: 1px;
overflow: hidden;
clip: rect(1px, 1px, 1px, 1px);
white-space: nowrap;
user-select: none;
}
#root {
height: 100%;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
@media screen and (min-width: 1200px) {
#root {
-webkit-touch-callout: default;
-webkit-user-select: auto;
-khtml-user-select: auto;
-moz-user-select: auto;
-ms-user-select: auto;
user-select: auto;
}
}
</style>
</head>
<body>
<noscript> You need to enable JavaScript to run this app. </noscript>
<header>
<h1 class="visually-hidden">Excalidraw</h1>
</header>
<div id="root"></div>
<script type="module" src="/src/index.tsx"></script>
<% if ("%VITE_APP_DEV_DISABLE_LIVE_RELOAD%" !== 'true') { %>
<!-- 100% privacy friendly analytics -->
<script>
// need to load this script dynamically bcs. of iframe embed tracking
var scriptEle = document.createElement("script");
scriptEle.setAttribute(
"src",
"https://scripts.simpleanalyticscdn.com/latest.js",
);
scriptEle.setAttribute("type", "text/javascript");
scriptEle.setAttribute("defer", true);
scriptEle.setAttribute("async", true);
// if iframe
if (window.self !== window.top) {
scriptEle.setAttribute("data-auto-collect", true);
}
document.body.appendChild(scriptEle);
// if iframe
if (window.self !== window.top) {
scriptEle.addEventListener("load", () => {
if (window.sa_pageview) {
window.window.sa_event(action, {
category: "iframe",
label: "embed",
value: window.location.pathname,
});
}
});
}
</script>
<!-- end LEGACY GOOGLE ANALYTICS -->
<% } %>
</body>
</html>

View File

@@ -19,29 +19,31 @@
]
},
"dependencies": {
"@braintree/sanitize-url": "6.0.2",
"@excalidraw/random-username": "1.0.0",
"@radix-ui/react-popover": "1.0.3",
"@radix-ui/react-tabs": "1.0.2",
"@sentry/browser": "6.2.5",
"@sentry/integrations": "6.2.5",
"@testing-library/jest-dom": "5.16.2",
"@testing-library/react": "12.1.5",
"@tldraw/vec": "1.7.1",
"@types/jest": "27.4.0",
"@types/pica": "5.1.3",
"@types/react": "18.0.15",
"@types/react-dom": "18.0.6",
"@types/socket.io-client": "1.4.36",
"browser-fs-access": "0.29.1",
"canvas-roundrect-polyfill": "0.0.1",
"clsx": "1.1.1",
"cross-env": "7.0.3",
"eslint-plugin-react": "7.32.2",
"fake-indexeddb": "3.1.7",
"firebase": "8.3.3",
"i18next-browser-languagedetector": "6.1.4",
"idb-keyval": "6.0.3",
"image-blob-reduce": "3.0.1",
"jotai": "1.6.4",
"jotai": "1.13.1",
"lodash.throttle": "4.1.1",
"nanoid": "3.3.3",
"open-color": "1.9.1",
"pako": "1.0.11",
"perfect-freehand": "1.0.16",
"perfect-freehand": "1.2.0",
"pica": "7.1.1",
"png-chunk-text": "1.0.0",
"png-chunks-encode": "1.0.0",
@@ -50,54 +52,60 @@
"pwacompat": "2.0.17",
"react": "18.2.0",
"react-dom": "18.2.0",
"react-scripts": "4.0.3",
"roughjs": "4.5.2",
"sass": "1.51.0",
"socket.io-client": "2.3.1",
"typescript": "4.5.5"
"tunnel-rat": "0.1.2"
},
"devDependencies": {
"@excalidraw/eslint-config": "1.0.0",
"@excalidraw/eslint-config": "1.0.3",
"@excalidraw/prettier-config": "1.0.2",
"@types/chai": "4.3.0",
"@types/jest": "27.4.0",
"@types/lodash.throttle": "4.1.7",
"@types/pako": "1.0.3",
"@types/pica": "5.1.3",
"@types/react": "18.0.15",
"@types/react-dom": "18.0.6",
"@types/resize-observer-browser": "0.1.7",
"@types/socket.io-client": "1.4.36",
"@vitejs/plugin-react": "3.1.0",
"@vitest/coverage-v8": "0.33.0",
"@vitest/ui": "0.32.2",
"chai": "4.3.6",
"dotenv": "16.0.1",
"eslint-config-prettier": "8.5.0",
"eslint-config-react-app": "7.0.1",
"eslint-plugin-prettier": "3.3.1",
"http-server": "14.1.1",
"husky": "7.0.4",
"jest-canvas-mock": "2.4.0",
"jsdom": "22.1.0",
"lint-staged": "12.3.7",
"pepjs": "0.5.3",
"prettier": "2.6.2",
"rewire": "6.0.0"
},
"resolutions": {
"@typescript-eslint/typescript-estree": "5.10.2"
"rewire": "6.0.0",
"typescript": "4.9.4",
"vite": "4.4.2",
"vite-plugin-checker": "0.6.1",
"vite-plugin-ejs": "1.6.4",
"vite-plugin-pwa": "0.16.4",
"vite-plugin-svgr": "2.4.0",
"vitest": "0.34.1",
"vitest-canvas-mock": "0.3.2"
},
"engines": {
"node": ">=14.0.0"
"node": ">=18.0.0"
},
"homepage": ".",
"jest": {
"transformIgnorePatterns": [
"node_modules/(?!(roughjs|points-on-curve|path-data-parser|points-on-path|browser-fs-access)/)"
],
"resetMocks": false
},
"name": "excalidraw",
"prettier": "@excalidraw/prettier-config",
"private": true,
"scripts": {
"build-node": "node ./scripts/build-node.js",
"build:app:docker": "REACT_APP_DISABLE_SENTRY=true react-scripts build",
"build:app": "REACT_APP_GIT_SHA=$VERCEL_GIT_COMMIT_SHA react-scripts build",
"build:app:docker": "cross-env VITE_APP_DISABLE_SENTRY=true VITE_APP_DISABLE_TRACKING=true vite build",
"build:app": "cross-env VITE_APP_GIT_SHA=$VERCEL_GIT_COMMIT_SHA vite build",
"build:version": "node ./scripts/build-version.js",
"build:prebuild": "node ./scripts/prebuild.js",
"build": "yarn build:prebuild && yarn build:app && yarn build:version",
"eject": "react-scripts eject",
"build": "yarn build:app && yarn build:version",
"fix:code": "yarn test:code --fix",
"fix:other": "yarn prettier --write",
"fix": "yarn fix:other && yarn fix:code",
@@ -105,17 +113,21 @@
"locales-coverage:description": "node scripts/locales-coverage-description.js",
"prepare": "husky install",
"prettier": "prettier \"**/*.{css,scss,json,md,html,yml}\" --ignore-path=.eslintignore",
"start": "react-scripts start",
"test:all": "yarn test:typecheck && yarn test:code && yarn test:other && yarn test:app --watchAll=false",
"test:app": "react-scripts test --passWithNoTests",
"start": "vite",
"start:production": "npm run build && npx http-server build -a localhost -p 5001 -o",
"test:all": "yarn test:typecheck && yarn test:code && yarn test:other && yarn test:app --watch=false",
"test:app": "vitest --config vitest.config.ts",
"test:code": "eslint --max-warnings=0 --ext .js,.ts,.tsx .",
"test:debug": "react-scripts --inspect-brk test --runInBand --no-cache",
"test:other": "yarn prettier --list-different",
"test:typecheck": "tsc",
"test:update": "yarn test:app --updateSnapshot --watchAll=false",
"test:update": "yarn test:app --update --watch=false",
"test": "yarn test:app",
"test:coverage": "vitest --coverage",
"test:coverage:watch": "vitest --coverage --watch",
"test:ui": "yarn test --ui",
"autorelease": "node scripts/autorelease.js",
"prerelease": "node scripts/prerelease.js",
"build:preview": "yarn build && vite preview --port 5000",
"release": "node scripts/release.js"
}
}

BIN
public/Assistant-Bold.woff2 Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

View File

@@ -0,0 +1,32 @@
<svg width="480" height="360" viewBox="0 0 480 360" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_17344_46416)">
<rect width="480" height="360" fill="#FFFBF0"/>
<path d="M375.625 346.219L446.207 346.115L447.362 346.27L448.426 347.494L448.861 348.724L449.483 364.45L449.121 366.473L447.698 367.887L445.498 368.16L375.275 367.759L373.815 368.136L372.511 366.745L372 365.099L372.548 349.01L373.272 347.506L373.757 346.769L375.718 346.506" fill="#FFF0C9"/>
<path d="M375.441 346.425C395.74 346.168 416.114 346.067 445.882 346.425M375.441 346.425C395.04 345.937 414.622 345.785 445.882 346.425M375.441 346.425C373.395 346.411 372.006 347.719 372.107 349.755M375.441 346.425C373.401 346.428 371.947 347.409 372.107 349.755M445.882 346.425C447.824 346.636 449.124 347.25 449.216 349.755M445.882 346.425C447.755 346.66 449.434 347.375 449.216 349.755M449.216 349.755C449.546 354.766 449.344 359.987 449.216 364.627M449.216 349.755C448.848 352.937 448.902 355.874 449.216 364.627M449.216 364.627C449.037 366.525 447.79 368.095 445.882 367.957M449.216 364.627C448.974 366.618 448.175 368.384 445.882 367.957M445.882 367.957C422.989 368.317 399.942 368.157 375.441 367.957M445.882 367.957C425.919 367.876 405.944 367.942 375.441 367.957M375.441 367.957C373.055 368.098 371.788 366.954 372.107 364.627M375.441 367.957C372.757 367.864 372.226 366.502 372.107 364.627M372.107 364.627C371.89 360.051 372.16 355.774 372.107 349.755M372.107 364.627C372.234 359.799 371.92 355.144 372.107 349.755" stroke="#FFF0C9" stroke-width="2" stroke-linecap="round"/>
<path d="M53.8832 316.705L124.022 316.652L125.502 317.46L126.198 317.597L127.549 319.387L127.448 335.607L126.911 337.072L125.648 338.283L123.836 338.349L53.3915 338.935L52.0363 338.428L50.5352 336.939L50.6664 336.035L50.6091 319.814L50.8341 317.985L52.378 317.305L53.5155 317.12" fill="#FFF0C9"/>
<path d="M53.5584 317.016C79.0128 316.682 104.668 316.644 124 317.016M53.5584 317.016C81.6837 316.434 109.837 316.554 124 317.016M53.5584 317.016C51.1958 316.907 50.401 318.113 50.2249 320.346M53.5584 317.016C51.4375 316.618 50.4072 318.128 50.2249 320.346M124 317.016C126.132 316.731 127.03 318.331 127.334 320.346M124 317.016C126.44 316.857 127.563 318.532 127.334 320.346M127.334 320.346C127.264 323.556 126.995 326.662 127.334 335.218M127.334 320.346C127.077 323.761 127.061 327.011 127.334 335.218M127.334 335.218C127.018 337.575 126.013 338.349 124 338.548M127.334 335.218C127.405 337.865 126.347 338.625 124 338.548M124 338.548C100.114 338.998 76.2158 339.028 53.5584 338.548M124 338.548C104.042 338.677 83.9411 338.633 53.5584 338.548M53.5584 338.548C51.0177 338.655 49.8239 337.357 50.2249 335.218M53.5584 338.548C51.4552 338.204 50.2718 337.375 50.2249 335.218M50.2249 335.218C50.4208 331.04 50.4645 326.193 50.2249 320.346M50.2249 335.218C49.8416 330.728 49.9447 326.633 50.2249 320.346" stroke="#FFF0C9" stroke-width="2" stroke-linecap="round"/>
<path d="M15.9086 346.082L86.0474 346.029L87.5277 346.837L88.2236 346.974L89.5747 348.764L89.4736 364.984L88.9361 366.449L87.6735 367.66L85.8609 367.726L15.4169 368.312L14.0617 367.805L12.5605 366.316L12.6918 365.412L12.6345 349.191L12.8595 347.361L14.4033 346.682L15.5409 346.497" fill="#FFF0C9"/>
<path d="M15.5838 346.393C41.0382 346.059 66.6936 346.021 86.0258 346.393M15.5838 346.393C43.7091 345.811 71.8626 345.931 86.0258 346.393M15.5838 346.393C13.2212 346.283 12.4264 347.49 12.2503 349.723M15.5838 346.393C13.4629 345.995 12.4326 347.505 12.2503 349.723M86.0258 346.393C88.1571 346.108 89.0551 347.708 89.3592 349.723M86.0258 346.393C88.4655 346.234 89.5884 347.909 89.3592 349.723M89.3592 349.723C89.2895 352.933 89.0207 356.039 89.3592 364.595M89.3592 349.723C89.1019 353.138 89.0863 356.388 89.3592 364.595M89.3592 364.595C89.0436 366.952 88.0383 367.726 86.0258 367.925M89.3592 364.595C89.4301 367.241 88.3727 368.002 86.0258 367.925M86.0258 367.925C62.1392 368.375 38.2412 368.405 15.5838 367.925M86.0258 367.925C66.0675 368.054 45.9665 368.01 15.5838 367.925M15.5838 367.925C13.0431 368.032 11.8493 366.734 12.2503 364.595M15.5838 367.925C13.4806 367.581 12.2972 366.752 12.2503 364.595M12.2503 364.595C12.4462 360.417 12.4899 355.57 12.2503 349.723M12.2503 364.595C11.867 360.105 11.9701 356.009 12.2503 349.723" stroke="#FFF0C9" stroke-width="2" stroke-linecap="round"/>
<path d="M-31.4727 316.623L38.9911 317.223L40.1036 316.944L41.7151 317.641L42.3433 319.925L42.0662 335.586L41.6891 336.848L40.8141 337.852L38.7806 338.906L-31.5582 338.607L-33.1114 338.003L-33.9697 337.254L-34.4437 336.219L-35 319.673L-33.7166 317.9L-32.9957 317.299L-31.2311 316.747" fill="#FFF0C9"/>
<path d="M-31.4941 316.987C-6.25752 316.958 19.2177 316.976 38.9478 316.987M-31.4941 316.987C-4.11158 317.552 23.3658 317.453 38.9478 316.987M-31.4941 316.987C-33.5578 316.989 -34.9672 317.987 -34.8276 320.317M-31.4941 316.987C-33.8161 316.75 -34.7266 317.699 -34.8276 320.317M38.9478 316.987C40.8666 317.192 42.4698 317.958 42.2813 320.317M38.9478 316.987C41.3989 317.393 41.9146 318.185 42.2813 320.317M42.2813 320.317C41.799 323.862 41.8979 327.821 42.2813 335.189M42.2813 320.317C42.0865 325.498 42.0177 331.069 42.2813 335.189M42.2813 335.189C42.0709 337.21 41.2312 338.89 38.9478 338.519M42.2813 335.189C42.4063 337.486 41.3573 338.728 38.9478 338.519M38.9478 338.519C11.9194 338.462 -15.0809 338.518 -31.4941 338.519M38.9478 338.519C17.0905 339.043 -4.76578 339.036 -31.4941 338.519M-31.4941 338.519C-34.1172 338.437 -34.7235 337.109 -34.8276 335.189M-31.4941 338.519C-33.6703 338.457 -34.8037 337.115 -34.8276 335.189M-34.8276 335.189C-34.7797 330.672 -34.8714 326.379 -34.8276 320.317M-34.8276 335.189C-34.6589 331.981 -34.5193 328.584 -34.8276 320.317" stroke="#FFF0C9" stroke-width="2" stroke-linecap="round"/>
<path d="M14.5569 288.533L84.653 288.046L86.6812 288.327L87.5698 289.518L88.0219 291.244L87.9053 306.702L87.9157 307.757L86.8198 309.748L84.8916 309.918L14.3548 309.521L13.4444 309.657L11.9808 308.778L11.0078 307.417L11.5099 290.928L11.9704 289.233L13.3183 288.265L14.759 288" fill="#FFF0C9"/>
<path d="M14.5144 288.296C35.6623 288.411 56.6279 288.349 84.9564 288.296M14.5144 288.296C29.087 287.954 43.6346 288.052 84.9564 288.296M14.5144 288.296C12.38 287.951 11.3393 289.409 11.181 291.627M14.5144 288.296C12.7685 288.739 11.0809 289.17 11.181 291.627M84.9564 288.296C87.368 288.158 88.4888 289.76 88.2899 291.627M84.9564 288.296C86.8127 288.385 88.1024 289.263 88.2899 291.627M88.2899 291.627C87.7148 295.42 88.2555 299.578 88.2899 306.498M88.2899 291.627C88.0044 296.165 88.0565 300.465 88.2899 306.498M88.2899 306.498C88.3513 309.09 87.2867 309.895 84.9564 309.829M88.2899 306.498C88.4763 308.928 87.5773 309.808 84.9564 309.829M84.9564 309.829C64.6471 309.93 44.4065 309.974 14.5144 309.829M84.9564 309.829C57.5655 310.04 30.2215 310.003 14.5144 309.829M14.5144 309.829C12.3956 309.529 11.2216 308.664 11.181 306.498M14.5144 309.829C12.3164 309.535 11.2143 308.735 11.181 306.498M11.181 306.498C11.106 301.081 10.8143 294.714 11.181 291.627M11.181 306.498C11.3414 303.114 11.183 299.688 11.181 291.627" stroke="#FFF0C9" stroke-width="2" stroke-linecap="round"/>
<path d="M135.013 17L199.498 17.5062L200.864 17.1811L201.678 18.1556L202.281 19.4354L202.636 33.5292L202.321 34.9143L201.056 36.5334L199.551 36.7382L135.397 37.1582L133.45 36.6273L132.148 35.7362L132.142 34.3199L132.139 19.5255L132.736 17.9527L134.102 17.2759L135.219 17.5792" fill="#FFF0C9"/>
<path d="M135.081 17.2911C158.035 17.4295 180.919 17.3944 199.244 17.2911M135.081 17.2911C153.669 17.0484 172.16 17.1072 199.244 17.2911M135.081 17.2911C133.105 17.0295 131.785 17.9414 132.045 20.3247M135.081 17.2911C133.343 17.5186 132.135 18.1879 132.045 20.3247M199.244 17.2911C201.496 17.5565 202.286 17.9433 202.28 20.3247M199.244 17.2911C201.473 17.4096 201.871 18.1538 202.28 20.3247M202.28 20.3247C201.709 23.1649 202.024 26.3577 202.28 33.8706M202.28 20.3247C202.05 24.202 202.102 28.4177 202.28 33.8706M202.28 33.8706C202.469 35.613 201.418 37.2758 199.244 36.9042M202.28 33.8706C202.29 35.6794 201.658 36.6283 199.244 36.9042M199.244 36.9042C183.153 36.798 167.097 36.5856 135.081 36.9042M199.244 36.9042C185.627 37.1317 172.103 37.1592 135.081 36.9042M135.081 36.9042C132.859 36.9819 132.034 35.7239 132.045 33.8706M135.081 36.9042C133.358 36.7857 131.962 35.9846 132.045 33.8706M132.045 33.8706C131.933 30.4426 132.069 27.811 132.045 20.3247M132.045 33.8706C132.141 30.8247 132.297 27.792 132.045 20.3247" stroke="#FFF0C9" stroke-width="2" stroke-linecap="round"/>
<path d="M423.013 17L487.498 17.5062L488.864 17.1811L489.678 18.1556L490.281 19.4354L490.636 33.5292L490.321 34.9143L489.056 36.5334L487.551 36.7382L423.397 37.1582L421.45 36.6273L420.148 35.7362L420.142 34.3199L420.139 19.5255L420.736 17.9527L422.102 17.2759L423.219 17.5792" fill="#FFF0C9"/>
<path d="M423.081 17.2911C446.035 17.4295 468.919 17.3944 487.244 17.2911M423.081 17.2911C441.669 17.0484 460.16 17.1072 487.244 17.2911M423.081 17.2911C421.105 17.0295 419.785 17.9414 420.045 20.3247M423.081 17.2911C421.343 17.5186 420.135 18.1879 420.045 20.3247M487.244 17.2911C489.496 17.5565 490.286 17.9433 490.28 20.3247M487.244 17.2911C489.473 17.4096 489.871 18.1538 490.28 20.3247M490.28 20.3247C489.709 23.1649 490.024 26.3577 490.28 33.8706M490.28 20.3247C490.05 24.202 490.102 28.4177 490.28 33.8706M490.28 33.8706C490.469 35.613 489.418 37.2758 487.244 36.9042M490.28 33.8706C490.29 35.6794 489.658 36.6283 487.244 36.9042M487.244 36.9042C471.153 36.798 455.097 36.5856 423.081 36.9042M487.244 36.9042C473.627 37.1317 460.103 37.1592 423.081 36.9042M423.081 36.9042C420.859 36.9819 420.034 35.7239 420.045 33.8706M423.081 36.9042C421.358 36.7857 419.962 35.9846 420.045 33.8706M420.045 33.8706C419.933 30.4426 420.069 27.811 420.045 20.3247M420.045 33.8706C420.141 30.8247 420.297 27.792 420.045 20.3247" stroke="#FFF0C9" stroke-width="2" stroke-linecap="round"/>
<path d="M471.013 44L535.498 44.5062L536.864 44.1811L537.678 45.1556L538.281 46.4354L538.636 60.5292L538.321 61.9143L537.056 63.5334L535.551 63.7382L471.397 64.1582L469.45 63.6273L468.148 62.7362L468.142 61.3199L468.139 46.5255L468.736 44.9527L470.102 44.2759L471.219 44.5792" fill="#FFF0C9"/>
<path d="M471.081 44.2911C494.035 44.4295 516.919 44.3944 535.244 44.2911M471.081 44.2911C489.669 44.0484 508.16 44.1072 535.244 44.2911M471.081 44.2911C469.105 44.0295 467.785 44.9414 468.045 47.3247M471.081 44.2911C469.343 44.5186 468.135 45.1879 468.045 47.3247M535.244 44.2911C537.496 44.5565 538.286 44.9433 538.28 47.3247M535.244 44.2911C537.473 44.4096 537.871 45.1538 538.28 47.3247M538.28 47.3247C537.709 50.1649 538.024 53.3577 538.28 60.8706M538.28 47.3247C538.05 51.202 538.102 55.4177 538.28 60.8706M538.28 60.8706C538.469 62.613 537.418 64.2758 535.244 63.9042M538.28 60.8706C538.29 62.6794 537.658 63.6283 535.244 63.9042M535.244 63.9042C519.153 63.798 503.097 63.5856 471.081 63.9042M535.244 63.9042C521.627 64.1317 508.103 64.1592 471.081 63.9042M471.081 63.9042C468.859 63.9819 468.034 62.7239 468.045 60.8706M471.081 63.9042C469.358 63.7857 467.962 62.9846 468.045 60.8706M468.045 60.8706C467.933 57.4426 468.069 54.811 468.045 47.3247M468.045 60.8706C468.141 57.8247 468.297 54.792 468.045 47.3247" stroke="#FFF0C9" stroke-width="2" stroke-linecap="round"/>
<path d="M392.013 44L456.498 44.5062L457.864 44.1811L458.678 45.1556L459.281 46.4354L459.636 60.5292L459.321 61.9143L458.056 63.5334L456.551 63.7382L392.397 64.1582L390.45 63.6273L389.148 62.7362L389.142 61.3199L389.139 46.5255L389.736 44.9527L391.102 44.2759L392.219 44.5792" fill="#FFF0C9"/>
<path d="M392.081 44.2911C415.035 44.4295 437.919 44.3944 456.244 44.2911M392.081 44.2911C410.669 44.0484 429.16 44.1072 456.244 44.2911M392.081 44.2911C390.105 44.0295 388.785 44.9414 389.045 47.3247M392.081 44.2911C390.343 44.5186 389.135 45.1879 389.045 47.3247M456.244 44.2911C458.496 44.5565 459.286 44.9433 459.28 47.3247M456.244 44.2911C458.473 44.4096 458.871 45.1538 459.28 47.3247M459.28 47.3247C458.709 50.1649 459.024 53.3577 459.28 60.8706M459.28 47.3247C459.05 51.202 459.102 55.4177 459.28 60.8706M459.28 60.8706C459.469 62.613 458.418 64.2758 456.244 63.9042M459.28 60.8706C459.29 62.6794 458.658 63.6283 456.244 63.9042M456.244 63.9042C440.153 63.798 424.097 63.5856 392.081 63.9042M456.244 63.9042C442.627 64.1317 429.103 64.1592 392.081 63.9042M392.081 63.9042C389.859 63.9819 389.034 62.7239 389.045 60.8706M392.081 63.9042C390.358 63.7857 388.962 62.9846 389.045 60.8706M389.045 60.8706C388.933 57.4426 389.069 54.811 389.045 47.3247M389.045 60.8706C389.141 57.8247 389.297 54.792 389.045 47.3247" stroke="#FFF0C9" stroke-width="2" stroke-linecap="round"/>
<path d="M171.391 -9.71045L235.309 -9.48483L236.749 -8.91603L238.082 -8.38231L238.797 -6.93093L238.852 7.52125L238.675 8.93566L237.415 9.63907L235.305 10.3112L171.07 10.26L170.04 10.4562L168.938 8.98116L168.322 7.617L168.41 -6.91481L169.134 -8.5302L170.092 -9.41183L171.303 -9.42415" fill="#FFF0C9"/>
<path d="M171.297 -9.33995C195.65 -9.45466 220.061 -9.49068 235.46 -9.33995M171.297 -9.33995C194.113 -9.39304 216.926 -9.34658 235.46 -9.33995M171.297 -9.33995C169.305 -9.04607 168.276 -8.05257 168.261 -6.30636M171.297 -9.33995C169.3 -9.58737 167.889 -8.37205 168.261 -6.30636M235.46 -9.33995C237.347 -9.36554 238.462 -8.50287 238.496 -6.30636M235.46 -9.33995C237.36 -9.6471 238.347 -8.37584 238.496 -6.30636M238.496 -6.30636C238.615 -1.47728 238.553 3.69593 238.496 7.23953M238.496 -6.30636C238.82 -1.28579 238.506 3.72626 238.496 7.23953M238.496 7.23953C238.175 9.4986 237.761 10.4769 235.46 10.2731M238.496 7.23953C238.8 9.2635 237.839 10.3518 235.46 10.2731M235.46 10.2731C215.54 10.7528 195.791 10.8893 171.297 10.2731M235.46 10.2731C210.414 10.4836 185.45 10.4106 171.297 10.2731M171.297 10.2731C169.114 10.5111 168.12 9.23411 168.261 7.23953M171.297 10.2731C169.701 10.2779 168.612 9.36683 168.261 7.23953M168.261 7.23953C168.313 2.89866 167.715 -1.8944 168.261 -6.30636M168.261 7.23953C168.366 3.95757 168.519 0.546689 168.261 -6.30636" stroke="#FFF0C9" stroke-width="2" stroke-linecap="round"/>
<path d="M91.8001 -9.82272L156.309 -10L157.767 -9.28237L158.847 -9.2454L159.618 -7.39017L159.39 6.60128L158.988 8.42712L158.236 9.59505L156.056 9.67847L92.4216 9.63013L91.1558 9.50594L89.2866 8.46125L89.4706 7.55307L89 -7.50677L89.7192 -8.89653L91.1463 -9.61891L91.987 -9.88434" fill="#FFF0C9"/>
<path d="M92.1234 -9.7847C114.71 -9.34672 137.222 -9.29743 156.286 -9.7847M92.1234 -9.7847C114.125 -9.78091 136.093 -9.65008 156.286 -9.7847M92.1234 -9.7847C90.3851 -9.94301 89.3983 -8.64995 89.0871 -6.75112M92.1234 -9.7847C89.8566 -10.1895 89.1611 -8.76086 89.0871 -6.75112M156.286 -9.7847C158.314 -9.71834 159.096 -8.60824 159.322 -6.75112M156.286 -9.7847C158.642 -10.0615 159.091 -8.55989 159.322 -6.75112M159.322 -6.75112C159.338 -2.60364 159.32 1.87374 159.322 6.79478M159.322 -6.75112C159.407 -3.69099 159.545 -0.287687 159.322 6.79478M159.322 6.79478C158.995 8.48032 158.195 9.68901 156.286 9.82836M159.322 6.79478C158.889 8.89269 158.251 10.0341 156.286 9.82836M156.286 9.82836C142.989 9.49657 129.71 9.58947 92.1234 9.82836M156.286 9.82836C139.169 10.3592 121.913 10.3545 92.1234 9.82836M92.1234 9.82836C89.7323 10.0578 89.4306 8.86141 89.0871 6.79478M92.1234 9.82836C89.7143 9.85965 89.144 8.8908 89.0871 6.79478M89.0871 6.79478C89.0235 3.59056 89.3272 1.22152 89.0871 -6.75112M89.0871 6.79478C89.2512 3.60573 89.1326 0.450801 89.0871 -6.75112" stroke="#FFF0C9" stroke-width="2" stroke-linecap="round"/>
</g>
<defs>
<clipPath id="clip0_17344_46416">
<rect width="480" height="360" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 15 KiB

View File

@@ -0,0 +1,32 @@
<svg width="480" height="360" viewBox="0 0 480 360" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_17628_50628)">
<rect width="480" height="360" fill="#181610"/>
<path d="M375.625 346.219L446.207 346.115L447.362 346.27L448.426 347.494L448.861 348.724L449.483 364.45L449.121 366.473L447.698 367.887L445.498 368.16L375.275 367.759L373.815 368.136L372.511 366.745L372 365.099L372.548 349.01L373.272 347.506L373.757 346.769L375.718 346.506" fill="#423B24"/>
<path d="M375.441 346.425C395.74 346.168 416.114 346.067 445.882 346.425M375.441 346.425C395.04 345.937 414.622 345.785 445.882 346.425M375.441 346.425C373.395 346.411 372.006 347.719 372.107 349.755M375.441 346.425C373.401 346.428 371.947 347.409 372.107 349.755M445.882 346.425C447.824 346.636 449.124 347.25 449.216 349.755M445.882 346.425C447.755 346.66 449.434 347.375 449.216 349.755M449.216 349.755C449.546 354.766 449.344 359.987 449.216 364.627M449.216 349.755C448.848 352.937 448.902 355.874 449.216 364.627M449.216 364.627C449.037 366.525 447.79 368.095 445.882 367.957M449.216 364.627C448.974 366.618 448.175 368.384 445.882 367.957M445.882 367.957C422.989 368.317 399.942 368.157 375.441 367.957M445.882 367.957C425.919 367.876 405.944 367.942 375.441 367.957M375.441 367.957C373.055 368.098 371.788 366.954 372.107 364.627M375.441 367.957C372.757 367.864 372.226 366.502 372.107 364.627M372.107 364.627C371.89 360.051 372.16 355.774 372.107 349.755M372.107 364.627C372.234 359.799 371.92 355.144 372.107 349.755" stroke="#423B24" stroke-width="2" stroke-linecap="round"/>
<path d="M53.8832 316.705L124.022 316.652L125.502 317.46L126.198 317.597L127.549 319.387L127.448 335.607L126.911 337.072L125.648 338.283L123.836 338.349L53.3915 338.935L52.0363 338.428L50.5352 336.939L50.6664 336.035L50.6091 319.814L50.8341 317.985L52.378 317.305L53.5155 317.12" fill="#423B24"/>
<path d="M53.5584 317.016C79.0128 316.682 104.668 316.644 124 317.016M53.5584 317.016C81.6837 316.434 109.837 316.554 124 317.016M53.5584 317.016C51.1958 316.907 50.401 318.113 50.2249 320.346M53.5584 317.016C51.4375 316.618 50.4072 318.128 50.2249 320.346M124 317.016C126.132 316.731 127.03 318.331 127.334 320.346M124 317.016C126.44 316.857 127.563 318.532 127.334 320.346M127.334 320.346C127.264 323.556 126.995 326.662 127.334 335.218M127.334 320.346C127.077 323.761 127.061 327.011 127.334 335.218M127.334 335.218C127.018 337.575 126.013 338.349 124 338.548M127.334 335.218C127.405 337.865 126.347 338.625 124 338.548M124 338.548C100.114 338.998 76.2158 339.028 53.5584 338.548M124 338.548C104.042 338.677 83.9411 338.633 53.5584 338.548M53.5584 338.548C51.0177 338.655 49.8239 337.357 50.2249 335.218M53.5584 338.548C51.4552 338.204 50.2718 337.375 50.2249 335.218M50.2249 335.218C50.4208 331.04 50.4645 326.193 50.2249 320.346M50.2249 335.218C49.8416 330.728 49.9447 326.633 50.2249 320.346" stroke="#423B24" stroke-width="2" stroke-linecap="round"/>
<path d="M15.9086 346.082L86.0474 346.029L87.5277 346.837L88.2236 346.974L89.5747 348.764L89.4736 364.984L88.9361 366.449L87.6735 367.66L85.8609 367.726L15.4169 368.312L14.0617 367.805L12.5605 366.316L12.6918 365.412L12.6345 349.191L12.8595 347.361L14.4033 346.682L15.5409 346.497" fill="#423B24"/>
<path d="M15.5838 346.393C41.0382 346.059 66.6936 346.021 86.0258 346.393M15.5838 346.393C43.7091 345.811 71.8626 345.931 86.0258 346.393M15.5838 346.393C13.2212 346.283 12.4264 347.49 12.2503 349.723M15.5838 346.393C13.4629 345.995 12.4326 347.505 12.2503 349.723M86.0258 346.393C88.1571 346.108 89.0551 347.708 89.3592 349.723M86.0258 346.393C88.4655 346.234 89.5884 347.909 89.3592 349.723M89.3592 349.723C89.2895 352.933 89.0207 356.039 89.3592 364.595M89.3592 349.723C89.1019 353.138 89.0863 356.388 89.3592 364.595M89.3592 364.595C89.0436 366.952 88.0383 367.726 86.0258 367.925M89.3592 364.595C89.4301 367.241 88.3727 368.002 86.0258 367.925M86.0258 367.925C62.1392 368.375 38.2412 368.405 15.5838 367.925M86.0258 367.925C66.0675 368.054 45.9665 368.01 15.5838 367.925M15.5838 367.925C13.0431 368.032 11.8493 366.734 12.2503 364.595M15.5838 367.925C13.4806 367.581 12.2972 366.752 12.2503 364.595M12.2503 364.595C12.4462 360.417 12.4899 355.57 12.2503 349.723M12.2503 364.595C11.867 360.105 11.9701 356.009 12.2503 349.723" stroke="#423B24" stroke-width="2" stroke-linecap="round"/>
<path d="M-31.4727 316.623L38.9911 317.223L40.1036 316.944L41.7151 317.641L42.3433 319.925L42.0662 335.586L41.6891 336.848L40.8141 337.852L38.7806 338.906L-31.5582 338.607L-33.1114 338.003L-33.9697 337.254L-34.4437 336.219L-35 319.673L-33.7166 317.9L-32.9957 317.299L-31.2311 316.747" fill="#423B24"/>
<path d="M-31.4941 316.987C-6.25752 316.958 19.2177 316.976 38.9478 316.987M-31.4941 316.987C-4.11158 317.552 23.3658 317.453 38.9478 316.987M-31.4941 316.987C-33.5578 316.989 -34.9672 317.987 -34.8276 320.317M-31.4941 316.987C-33.8161 316.75 -34.7266 317.699 -34.8276 320.317M38.9478 316.987C40.8666 317.192 42.4698 317.958 42.2813 320.317M38.9478 316.987C41.3989 317.393 41.9146 318.185 42.2813 320.317M42.2813 320.317C41.799 323.862 41.8979 327.821 42.2813 335.189M42.2813 320.317C42.0865 325.498 42.0177 331.069 42.2813 335.189M42.2813 335.189C42.0709 337.21 41.2312 338.89 38.9478 338.519M42.2813 335.189C42.4063 337.486 41.3573 338.728 38.9478 338.519M38.9478 338.519C11.9194 338.462 -15.0809 338.518 -31.4941 338.519M38.9478 338.519C17.0905 339.043 -4.76578 339.036 -31.4941 338.519M-31.4941 338.519C-34.1172 338.437 -34.7235 337.109 -34.8276 335.189M-31.4941 338.519C-33.6703 338.457 -34.8037 337.115 -34.8276 335.189M-34.8276 335.189C-34.7797 330.672 -34.8714 326.379 -34.8276 320.317M-34.8276 335.189C-34.6589 331.981 -34.5193 328.584 -34.8276 320.317" stroke="#423B24" stroke-width="2" stroke-linecap="round"/>
<path d="M14.5569 288.533L84.653 288.046L86.6812 288.327L87.5698 289.518L88.0219 291.244L87.9053 306.702L87.9157 307.757L86.8198 309.748L84.8916 309.918L14.3548 309.521L13.4444 309.657L11.9808 308.778L11.0078 307.417L11.5099 290.928L11.9704 289.233L13.3183 288.265L14.759 288" fill="#423B24"/>
<path d="M14.5144 288.296C35.6623 288.411 56.6279 288.349 84.9564 288.296M14.5144 288.296C29.087 287.954 43.6346 288.052 84.9564 288.296M14.5144 288.296C12.38 287.951 11.3393 289.409 11.181 291.627M14.5144 288.296C12.7685 288.739 11.0809 289.17 11.181 291.627M84.9564 288.296C87.368 288.158 88.4888 289.76 88.2899 291.627M84.9564 288.296C86.8127 288.385 88.1024 289.263 88.2899 291.627M88.2899 291.627C87.7148 295.42 88.2555 299.578 88.2899 306.498M88.2899 291.627C88.0044 296.165 88.0565 300.465 88.2899 306.498M88.2899 306.498C88.3513 309.09 87.2867 309.895 84.9564 309.829M88.2899 306.498C88.4763 308.928 87.5773 309.808 84.9564 309.829M84.9564 309.829C64.6471 309.93 44.4065 309.974 14.5144 309.829M84.9564 309.829C57.5655 310.04 30.2215 310.003 14.5144 309.829M14.5144 309.829C12.3956 309.529 11.2216 308.664 11.181 306.498M14.5144 309.829C12.3164 309.535 11.2143 308.735 11.181 306.498M11.181 306.498C11.106 301.081 10.8143 294.714 11.181 291.627M11.181 306.498C11.3414 303.114 11.183 299.688 11.181 291.627" stroke="#423B24" stroke-width="2" stroke-linecap="round"/>
<path d="M135.013 17L199.498 17.5062L200.864 17.1811L201.678 18.1556L202.281 19.4354L202.636 33.5292L202.321 34.9143L201.056 36.5334L199.551 36.7382L135.397 37.1582L133.45 36.6273L132.148 35.7362L132.142 34.3199L132.139 19.5255L132.736 17.9527L134.102 17.2759L135.219 17.5792" fill="#423B24"/>
<path d="M135.081 17.2911C158.035 17.4295 180.919 17.3944 199.244 17.2911M135.081 17.2911C153.669 17.0484 172.16 17.1072 199.244 17.2911M135.081 17.2911C133.105 17.0295 131.785 17.9414 132.045 20.3247M135.081 17.2911C133.343 17.5186 132.135 18.1879 132.045 20.3247M199.244 17.2911C201.496 17.5565 202.286 17.9433 202.28 20.3247M199.244 17.2911C201.473 17.4096 201.871 18.1538 202.28 20.3247M202.28 20.3247C201.709 23.1649 202.024 26.3577 202.28 33.8706M202.28 20.3247C202.05 24.202 202.102 28.4177 202.28 33.8706M202.28 33.8706C202.469 35.613 201.418 37.2758 199.244 36.9042M202.28 33.8706C202.29 35.6794 201.658 36.6283 199.244 36.9042M199.244 36.9042C183.153 36.798 167.097 36.5856 135.081 36.9042M199.244 36.9042C185.627 37.1317 172.103 37.1592 135.081 36.9042M135.081 36.9042C132.859 36.9819 132.034 35.7239 132.045 33.8706M135.081 36.9042C133.358 36.7857 131.962 35.9846 132.045 33.8706M132.045 33.8706C131.933 30.4426 132.069 27.811 132.045 20.3247M132.045 33.8706C132.141 30.8247 132.297 27.792 132.045 20.3247" stroke="#423B24" stroke-width="2" stroke-linecap="round"/>
<path d="M423.013 17L487.498 17.5062L488.864 17.1811L489.678 18.1556L490.281 19.4354L490.636 33.5292L490.321 34.9143L489.056 36.5334L487.551 36.7382L423.397 37.1582L421.45 36.6273L420.148 35.7362L420.142 34.3199L420.139 19.5255L420.736 17.9527L422.102 17.2759L423.219 17.5792" fill="#423B24"/>
<path d="M423.081 17.2911C446.035 17.4295 468.919 17.3944 487.244 17.2911M423.081 17.2911C441.669 17.0484 460.16 17.1072 487.244 17.2911M423.081 17.2911C421.105 17.0295 419.785 17.9414 420.045 20.3247M423.081 17.2911C421.343 17.5186 420.135 18.1879 420.045 20.3247M487.244 17.2911C489.496 17.5565 490.286 17.9433 490.28 20.3247M487.244 17.2911C489.473 17.4096 489.871 18.1538 490.28 20.3247M490.28 20.3247C489.709 23.1649 490.024 26.3577 490.28 33.8706M490.28 20.3247C490.05 24.202 490.102 28.4177 490.28 33.8706M490.28 33.8706C490.469 35.613 489.418 37.2758 487.244 36.9042M490.28 33.8706C490.29 35.6794 489.658 36.6283 487.244 36.9042M487.244 36.9042C471.153 36.798 455.097 36.5856 423.081 36.9042M487.244 36.9042C473.627 37.1317 460.103 37.1592 423.081 36.9042M423.081 36.9042C420.859 36.9819 420.034 35.7239 420.045 33.8706M423.081 36.9042C421.358 36.7857 419.962 35.9846 420.045 33.8706M420.045 33.8706C419.933 30.4426 420.069 27.811 420.045 20.3247M420.045 33.8706C420.141 30.8247 420.297 27.792 420.045 20.3247" stroke="#423B24" stroke-width="2" stroke-linecap="round"/>
<path d="M471.013 44L535.498 44.5062L536.864 44.1811L537.678 45.1556L538.281 46.4354L538.636 60.5292L538.321 61.9143L537.056 63.5334L535.551 63.7382L471.397 64.1582L469.45 63.6273L468.148 62.7362L468.142 61.3199L468.139 46.5255L468.736 44.9527L470.102 44.2759L471.219 44.5792" fill="#423B24"/>
<path d="M471.081 44.2911C494.035 44.4295 516.919 44.3944 535.244 44.2911M471.081 44.2911C489.669 44.0484 508.16 44.1072 535.244 44.2911M471.081 44.2911C469.105 44.0295 467.785 44.9414 468.045 47.3247M471.081 44.2911C469.343 44.5186 468.135 45.1879 468.045 47.3247M535.244 44.2911C537.496 44.5565 538.286 44.9433 538.28 47.3247M535.244 44.2911C537.473 44.4096 537.871 45.1538 538.28 47.3247M538.28 47.3247C537.709 50.1649 538.024 53.3577 538.28 60.8706M538.28 47.3247C538.05 51.202 538.102 55.4177 538.28 60.8706M538.28 60.8706C538.469 62.613 537.418 64.2758 535.244 63.9042M538.28 60.8706C538.29 62.6794 537.658 63.6283 535.244 63.9042M535.244 63.9042C519.153 63.798 503.097 63.5856 471.081 63.9042M535.244 63.9042C521.627 64.1317 508.103 64.1592 471.081 63.9042M471.081 63.9042C468.859 63.9819 468.034 62.7239 468.045 60.8706M471.081 63.9042C469.358 63.7857 467.962 62.9846 468.045 60.8706M468.045 60.8706C467.933 57.4426 468.069 54.811 468.045 47.3247M468.045 60.8706C468.141 57.8247 468.297 54.792 468.045 47.3247" stroke="#423B24" stroke-width="2" stroke-linecap="round"/>
<path d="M392.013 44L456.498 44.5062L457.864 44.1811L458.678 45.1556L459.281 46.4354L459.636 60.5292L459.321 61.9143L458.056 63.5334L456.551 63.7382L392.397 64.1582L390.45 63.6273L389.148 62.7362L389.142 61.3199L389.139 46.5255L389.736 44.9527L391.102 44.2759L392.219 44.5792" fill="#423B24"/>
<path d="M392.081 44.2911C415.035 44.4295 437.919 44.3944 456.244 44.2911M392.081 44.2911C410.669 44.0484 429.16 44.1072 456.244 44.2911M392.081 44.2911C390.105 44.0295 388.785 44.9414 389.045 47.3247M392.081 44.2911C390.343 44.5186 389.135 45.1879 389.045 47.3247M456.244 44.2911C458.496 44.5565 459.286 44.9433 459.28 47.3247M456.244 44.2911C458.473 44.4096 458.871 45.1538 459.28 47.3247M459.28 47.3247C458.709 50.1649 459.024 53.3577 459.28 60.8706M459.28 47.3247C459.05 51.202 459.102 55.4177 459.28 60.8706M459.28 60.8706C459.469 62.613 458.418 64.2758 456.244 63.9042M459.28 60.8706C459.29 62.6794 458.658 63.6283 456.244 63.9042M456.244 63.9042C440.153 63.798 424.097 63.5856 392.081 63.9042M456.244 63.9042C442.627 64.1317 429.103 64.1592 392.081 63.9042M392.081 63.9042C389.859 63.9819 389.034 62.7239 389.045 60.8706M392.081 63.9042C390.358 63.7857 388.962 62.9846 389.045 60.8706M389.045 60.8706C388.933 57.4426 389.069 54.811 389.045 47.3247M389.045 60.8706C389.141 57.8247 389.297 54.792 389.045 47.3247" stroke="#423B24" stroke-width="2" stroke-linecap="round"/>
<path d="M171.391 -9.71045L235.309 -9.48483L236.749 -8.91603L238.082 -8.38231L238.797 -6.93093L238.852 7.52125L238.675 8.93566L237.415 9.63907L235.305 10.3112L171.07 10.26L170.04 10.4562L168.938 8.98116L168.322 7.617L168.41 -6.91481L169.134 -8.5302L170.092 -9.41183L171.303 -9.42415" fill="#423B24"/>
<path d="M171.297 -9.33995C195.65 -9.45466 220.061 -9.49068 235.46 -9.33995M171.297 -9.33995C194.113 -9.39304 216.926 -9.34658 235.46 -9.33995M171.297 -9.33995C169.305 -9.04607 168.276 -8.05257 168.261 -6.30636M171.297 -9.33995C169.3 -9.58737 167.889 -8.37205 168.261 -6.30636M235.46 -9.33995C237.347 -9.36554 238.462 -8.50287 238.496 -6.30636M235.46 -9.33995C237.36 -9.6471 238.347 -8.37584 238.496 -6.30636M238.496 -6.30636C238.615 -1.47728 238.553 3.69593 238.496 7.23953M238.496 -6.30636C238.82 -1.28579 238.506 3.72626 238.496 7.23953M238.496 7.23953C238.175 9.4986 237.761 10.4769 235.46 10.2731M238.496 7.23953C238.8 9.2635 237.839 10.3518 235.46 10.2731M235.46 10.2731C215.54 10.7528 195.791 10.8893 171.297 10.2731M235.46 10.2731C210.414 10.4836 185.45 10.4106 171.297 10.2731M171.297 10.2731C169.114 10.5111 168.12 9.23411 168.261 7.23953M171.297 10.2731C169.701 10.2779 168.612 9.36683 168.261 7.23953M168.261 7.23953C168.313 2.89866 167.715 -1.8944 168.261 -6.30636M168.261 7.23953C168.366 3.95757 168.519 0.546689 168.261 -6.30636" stroke="#423B24" stroke-width="2" stroke-linecap="round"/>
<path d="M91.8001 -9.82272L156.309 -10L157.767 -9.28237L158.847 -9.2454L159.618 -7.39017L159.39 6.60128L158.988 8.42712L158.236 9.59505L156.056 9.67847L92.4216 9.63013L91.1558 9.50594L89.2866 8.46125L89.4706 7.55307L89 -7.50677L89.7192 -8.89653L91.1463 -9.61891L91.987 -9.88434" fill="#423B24"/>
<path d="M92.1234 -9.7847C114.71 -9.34672 137.222 -9.29743 156.286 -9.7847M92.1234 -9.7847C114.125 -9.78091 136.093 -9.65008 156.286 -9.7847M92.1234 -9.7847C90.3851 -9.94301 89.3983 -8.64995 89.0871 -6.75112M92.1234 -9.7847C89.8566 -10.1895 89.1611 -8.76086 89.0871 -6.75112M156.286 -9.7847C158.314 -9.71834 159.096 -8.60824 159.322 -6.75112M156.286 -9.7847C158.642 -10.0615 159.091 -8.55989 159.322 -6.75112M159.322 -6.75112C159.338 -2.60364 159.32 1.87374 159.322 6.79478M159.322 -6.75112C159.407 -3.69099 159.545 -0.287687 159.322 6.79478M159.322 6.79478C158.995 8.48032 158.195 9.68901 156.286 9.82836M159.322 6.79478C158.889 8.89269 158.251 10.0341 156.286 9.82836M156.286 9.82836C142.989 9.49657 129.71 9.58947 92.1234 9.82836M156.286 9.82836C139.169 10.3592 121.913 10.3545 92.1234 9.82836M92.1234 9.82836C89.7323 10.0578 89.4306 8.86141 89.0871 6.79478M92.1234 9.82836C89.7143 9.85965 89.144 8.8908 89.0871 6.79478M89.0871 6.79478C89.0235 3.59056 89.3272 1.22152 89.0871 -6.75112M89.0871 6.79478C89.2512 3.60573 89.1326 0.450801 89.0871 -6.75112" stroke="#423B24" stroke-width="2" stroke-linecap="round"/>
</g>
<defs>
<clipPath id="clip0_17628_50628">
<rect width="480" height="360" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 15 KiB

View File

@@ -0,0 +1,25 @@
<svg width="480" height="360" viewBox="0 0 480 360" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_17019_8101)">
<rect width="480" height="360" fill="#FFFBF0"/>
<path d="M102.132 140.598C107.487 143.723 110.409 150.637 113.81 155.78C117.211 160.922 120.131 165.924 122.533 171.453C124.936 176.984 126.846 182.971 128.223 188.959C129.597 194.947 130.45 201.178 130.787 207.379C131.124 213.58 131.054 220.039 130.247 226.17C129.437 232.298 128.056 238.306 125.939 244.158C123.819 250.009 120.694 255.861 117.537 261.276C114.38 266.689 110.904 271.958 106.994 276.642C103.083 281.327 98.8593 285.431 94.0748 289.381C89.2926 293.33 83.683 297.329 78.2922 300.343C72.9037 303.354 67.6542 305.665 61.7368 307.458C55.8195 309.25 49.0087 310.316 42.7904 311.098C36.5699 311.877 30.5409 312.466 24.423 312.139C18.3073 311.814 12.0982 310.553 6.08973 309.144C0.0812149 307.732 -5.97289 306.226 -11.6281 303.681C-17.281 301.133 -22.7493 297.411 -27.8369 293.864C-32.9246 290.319 -37.8458 286.665 -42.1539 282.407C-46.4642 278.146 -50.2549 273.494 -53.6945 268.309C-57.1364 263.121 -60.3823 256.942 -62.8007 251.284C-65.2192 245.626 -66.9105 240.313 -68.2052 234.355C-69.5022 228.399 -70.3319 221.797 -70.5781 215.537C-70.822 209.277 -70.5803 202.823 -69.6754 196.792C-68.7728 190.761 -67.0564 185.191 -65.1531 179.354C-63.2521 173.518 -61.2599 167.158 -58.2647 161.774C-55.2719 156.391 -51.2008 151.78 -47.1868 147.056C-43.1751 142.334 -39.0197 137.389 -34.1919 133.435C-29.3641 129.479 -23.7295 126.243 -18.2224 123.332C-12.7154 120.419 -7.00774 117.892 -1.15195 115.961C4.70157 114.027 10.881 112.523 16.9078 111.741C22.9368 110.957 28.7903 110.996 35.0154 111.268C41.2382 111.541 48.1721 111.995 54.2513 113.382C60.3327 114.768 65.9127 116.915 71.4927 119.587C77.0727 122.258 81.7181 124.753 87.7357 129.406C93.7534 134.06 103.733 143.161 107.603 147.508C111.473 151.855 112.319 154.398 110.956 155.489M68.4657 118.69C74.7021 119.494 80.51 124.366 85.8233 127.698C91.1389 131.031 95.8983 134.567 100.352 138.685C104.806 142.805 109.046 147.324 112.552 152.41C116.057 157.496 118.774 163.533 121.391 169.198C124.006 174.866 126.597 180.597 128.243 186.407C129.889 192.218 130.855 197.849 131.261 204.064C131.669 210.279 131.573 217.421 130.684 223.695C129.795 229.969 127.789 235.802 125.929 241.701C124.072 247.603 122.394 253.568 119.531 259.096C116.668 264.625 112.615 270.127 108.754 274.871C104.891 279.616 101.009 283.681 96.3542 287.563C91.7019 291.444 86.1516 295.05 80.8314 298.154C75.5136 301.256 70.2185 303.994 64.4402 306.18C58.6619 308.369 52.4027 310.309 46.1617 311.275C39.9207 312.241 33.2922 312.189 26.9964 311.977C20.7007 311.766 14.4437 311.175 8.38965 310.007C2.33783 308.841 -3.63194 307.326 -9.31678 304.983C-15.0016 302.638 -20.7434 299.397 -25.7194 295.943C-30.6953 292.487 -34.7162 288.406 -39.1701 284.252C-43.6218 280.096 -48.6388 275.971 -52.4363 271.017C-56.2338 266.066 -59.4318 260.167 -61.9551 254.54C-64.4807 248.914 -66.0079 243.165 -67.5852 237.263C-69.1626 231.36 -71.0545 225.263 -71.4192 219.121C-71.7816 212.981 -70.5006 206.609 -69.762 200.416C-69.0235 194.222 -68.734 187.825 -66.9834 181.962C-65.2351 176.097 -62.1283 170.821 -59.2699 165.233C-56.4116 159.645 -53.5851 153.273 -49.8355 148.431C-46.0881 143.586 -41.5134 140.134 -36.7836 136.169C-32.0538 132.202 -26.8386 127.87 -21.4614 124.632C-16.0843 121.394 -10.42 118.719 -4.5209 116.733C1.37592 114.747 7.70811 113.784 13.9286 112.718C20.1491 111.65 26.5816 110.257 32.8066 110.332C39.0294 110.407 45.3092 111.795 51.2721 113.166C57.235 114.536 65.7874 117.336 68.5819 118.554C71.3765 119.772 68.5637 118.994 68.044 120.471" fill="#FFDAD6"/>
<path d="M25.7556 110.821C31.5909 108.85 38.698 110.932 44.9345 111.832C51.1709 112.734 57.2889 114.256 63.1743 116.227C69.0597 118.197 74.9155 120.549 80.247 123.653C85.5786 126.755 90.5158 130.806 95.1612 134.847C99.8066 138.885 104.174 143.102 108.117 147.888C112.063 152.673 115.895 158.091 118.824 163.558C121.755 169.026 123.895 174.816 125.703 180.69C127.511 186.564 128.853 192.733 129.671 198.803C130.49 204.87 130.825 211.019 130.615 217.1C130.405 223.181 129.824 229.224 128.415 235.286C127.007 241.347 124.732 247.791 122.161 253.47C119.587 259.146 116.588 264.334 112.979 269.352C109.373 274.369 104.903 279.287 100.518 283.579C96.1322 287.872 91.7193 291.733 86.6704 295.109C81.6215 298.486 75.9321 301.427 70.2222 303.84C64.5146 306.255 58.5562 308.23 52.4178 309.596C46.2816 310.961 39.6303 311.725 33.4007 312.03C27.1711 312.334 21.0441 312.302 15.0447 311.425C9.04526 310.546 3.29204 308.791 -2.59566 306.76C-8.48337 304.731 -14.8931 302.279 -20.2861 299.24C-25.6792 296.205 -30.2152 292.512 -34.9564 288.535C-39.6975 284.561 -44.7578 280.198 -48.7308 275.385C-52.7038 270.57 -55.8471 265.061 -58.7944 259.653C-61.7439 254.245 -64.4724 248.748 -66.419 242.935C-68.3656 237.125 -69.7128 230.905 -70.4695 224.781C-71.2263 218.657 -71.3676 212.376 -70.9596 206.197C-70.5493 200.016 -69.5464 193.72 -68.0146 187.702C-66.4851 181.685 -64.2467 175.659 -61.7736 170.094C-59.2981 164.529 -56.6176 159.413 -53.1688 154.316C-49.7224 149.217 -45.485 143.838 -41.088 139.507C-36.691 135.176 -31.9453 131.652 -26.787 128.322C-21.6264 124.993 -15.896 122.028 -10.1314 119.533C-4.36676 117.036 -1.36023 114.538 7.80298 113.343C16.9662 112.148 35.7075 111.414 44.8524 112.363C53.9951 113.313 62.7914 117.492 62.6683 119.042M22.6601 111.77C28.443 109.739 35.8989 111.175 42.2585 111.811C48.6157 112.445 54.9183 113.777 60.8083 115.581C66.696 117.385 72.276 119.831 77.5893 122.639C82.9048 125.448 87.8147 128.566 92.6949 132.429C97.5751 136.292 102.774 141.023 106.871 145.815C110.967 150.61 114.165 155.93 117.269 161.186C120.374 166.442 123.499 171.698 125.496 177.352C127.49 183.005 128.436 188.884 129.243 195.108C130.05 201.334 130.362 208.338 130.339 214.698C130.316 221.057 130.36 227.294 129.108 233.264C127.857 239.233 125.386 244.803 122.835 250.511C120.283 256.222 117.226 262.36 113.793 267.525C110.36 272.692 106.378 277.071 102.236 281.509C98.0971 285.947 93.9349 290.692 88.9475 294.157C83.9625 297.62 77.9768 299.827 72.3216 302.297C66.6663 304.767 60.9154 307.237 55.014 308.982C49.1104 310.725 43.1338 312.266 36.911 312.764C30.6905 313.259 23.9503 312.827 17.6842 311.959C11.4204 311.091 5.06998 309.441 -0.676401 307.557C-6.42506 305.674 -11.4375 303.597 -16.7941 300.654C-22.1507 297.711 -27.8811 293.823 -32.8183 289.896C-37.7578 285.97 -42.255 281.754 -46.4218 277.094C-50.5885 272.435 -54.81 267.309 -57.8234 261.935C-60.8367 256.558 -62.5395 250.641 -64.502 244.846C-66.4623 239.054 -68.4887 233.218 -69.5919 227.176C-70.6952 221.134 -71.2149 214.794 -71.1169 208.592C-71.0188 202.391 -70.2097 196.04 -69.0061 189.973C-67.8026 183.903 -66.3028 177.804 -63.898 172.182C-61.4932 166.558 -58.1858 161.252 -54.5752 156.232C-50.9646 151.21 -46.4491 146.422 -42.2322 142.057C-38.0131 137.692 -34.2019 133.749 -29.2624 130.036C-24.323 126.323 -18.3418 122.387 -12.5886 119.776C-6.83536 117.165 -0.644495 115.833 5.25233 114.37C11.1469 112.907 19.7129 111.136 22.7878 110.996C25.8627 110.855 23.597 111.82 23.6996 113.518" stroke="#FFDAD6" stroke-width="8" stroke-linecap="round"/>
<path d="M69.7808 -100.904C76.6919 -104.194 85.1234 -102.697 92.7435 -102.422C100.361 -102.149 107.968 -100.849 115.494 -99.2583C123.021 -97.6676 130.7 -95.3895 137.903 -92.8816C145.104 -90.3738 151.958 -87.859 158.7 -84.211C165.445 -80.5629 172.217 -75.6791 178.363 -70.9979C184.508 -66.3166 190.284 -61.5216 195.57 -56.1235C200.856 -50.7276 205.686 -44.9199 210.078 -38.6115C214.471 -32.3008 218.649 -25.098 221.924 -18.2684C225.2 -11.4388 227.488 -4.88007 229.731 2.37052C231.974 9.62339 234.197 17.716 235.382 25.242C236.567 32.7679 236.811 39.9571 236.845 47.5285C236.879 55.1023 236.677 63.0993 235.585 70.6822C234.495 78.2628 232.633 85.7682 230.299 93.0188C227.967 100.269 225.081 107.331 221.585 114.186C218.086 121.04 213.664 127.968 209.312 134.142C204.963 140.316 200.712 145.817 195.481 151.235C190.252 156.654 184.068 161.899 177.934 166.653C171.798 171.41 165.395 176.055 158.668 179.769C151.942 183.48 144.81 186.391 137.57 188.936C130.333 191.48 122.804 193.571 115.243 195.037C107.68 196.502 99.7572 197.529 92.1942 197.727C84.6311 197.927 77.3848 197.192 69.8628 196.232C62.3431 195.271 54.4472 193.874 47.0642 191.965C39.6812 190.057 32.4692 187.816 25.5603 184.782C18.6514 181.749 12.0411 177.921 5.60866 173.761C-0.821545 169.603 -7.23124 164.972 -13.0232 159.828C-18.8152 154.685 -24.3405 148.789 -29.1432 142.899C-33.9436 137.007 -37.9941 130.979 -41.8349 124.488C-45.678 117.995 -49.2407 111.031 -52.1971 103.949C-55.1535 96.8649 -57.8773 89.5278 -59.5709 81.9905C-61.2645 74.4531 -61.8754 66.3446 -62.3564 58.7276C-62.8373 51.1129 -63.0516 43.8737 -62.4544 36.2908C-61.8572 28.7102 -60.5716 20.6677 -58.7777 13.2373C-56.9815 5.80465 -54.4879 -1.24567 -51.6865 -8.30282C-48.8874 -15.3577 -45.7714 -22.565 -41.9762 -29.1033C-38.1787 -35.6416 -33.7635 -41.6792 -28.9129 -47.5279C-24.0646 -53.3766 -18.6465 -59.041 -12.8773 -64.1956C-7.11043 -69.3525 -0.705296 -74.2545 5.69071 -78.4669C12.0867 -82.6771 18.5716 -86.357 25.4965 -89.4703C32.4236 -92.5812 38.3341 -95.0231 47.2443 -97.1442C56.1567 -99.2629 72.2402 -101.939 78.9622 -102.19C85.6842 -102.442 87.494 -101.159 87.5761 -98.653M206.741 -42.4962C213.069 -38.1518 214.648 -29.736 218.343 -23.0202C222.038 -16.3044 226.321 -9.31326 228.908 -2.20149C231.495 4.908 232.514 12.1358 233.868 19.6481C235.22 27.1604 236.779 35.3873 237.025 42.8701C237.271 50.3528 236.335 56.9843 235.345 64.5422C234.358 72.1 233.077 80.7911 231.099 88.2169C229.12 95.6405 226.572 102.258 223.474 109.09C220.379 115.92 216.606 122.706 212.522 129.199C208.437 135.694 203.942 142.453 198.966 148.054C193.99 153.654 188.526 158.044 182.666 162.81C176.806 167.575 170.464 172.671 163.804 176.646C157.144 180.622 149.836 183.836 142.706 186.66C135.576 189.484 128.341 191.944 121.029 193.592C113.719 195.242 106.377 195.938 98.8386 196.555C91.3006 197.169 83.5461 197.793 75.8007 197.288C68.053 196.78 59.838 195.406 52.357 193.514C44.8783 191.625 37.9466 188.913 30.9215 185.941C23.8963 182.968 16.7116 179.493 10.2108 175.681C3.70991 171.872 -2.22338 167.944 -8.08601 163.074C-13.9509 158.206 -19.8455 152.111 -24.9719 146.47C-30.0982 140.83 -34.7072 135.482 -38.842 129.231C-42.9746 122.979 -46.5236 115.961 -49.7741 108.963C-53.0245 101.965 -56.357 94.6824 -58.3401 87.2384C-60.3231 79.7921 -60.8588 71.8451 -61.6726 64.2896C-62.484 56.734 -63.3958 49.3742 -63.2203 41.9074C-63.0425 34.4383 -62.1421 26.9829 -60.6103 19.4888C-59.0786 11.9947 -56.6259 4.15699 -54.0274 -3.05946C-51.4266 -10.2759 -48.5956 -17.1942 -45.0101 -23.8053C-41.4269 -30.4164 -37.1553 -36.6634 -32.5258 -42.7283C-27.894 -48.7932 -22.8315 -54.7444 -17.2242 -60.1948C-11.6168 -65.6453 -5.20484 -71.0684 1.11823 -75.4288C7.4413 -79.7892 13.949 -83.1118 20.7097 -86.357C27.4704 -89.6045 34.3725 -92.6313 41.6825 -94.9025C48.9926 -97.176 56.9477 -98.8965 64.5655 -99.9957C72.1832 -101.097 79.8785 -101.493 87.3892 -101.505C94.8998 -101.518 102.185 -101.058 109.627 -100.066C117.072 -99.074 124.685 -97.7472 132.047 -95.5511C139.41 -93.3573 146.87 -90.3783 153.806 -86.8964C160.743 -83.4122 167.433 -79.2248 173.662 -74.6505C179.894 -70.0762 185.7 -64.6917 191.193 -59.4507C196.684 -54.2073 204.407 -46.2899 206.616 -43.1949C208.824 -40.0975 206.363 -42.4393 204.443 -40.8736" fill="#FCEECA"/>
<path d="M203.455 -47.1637C210.07 -43.1151 212.796 -34.8791 216.696 -28.3454C220.596 -21.8117 224.093 -15.1027 226.858 -7.96139C229.625 -0.817764 231.677 7.01542 233.293 14.5072C234.911 21.9968 235.987 29.3725 236.561 36.9827C237.136 44.5928 237.398 52.5171 236.737 60.1682C236.076 67.817 234.487 75.4613 232.597 82.8826C230.708 90.3039 228.276 97.691 225.399 104.698C222.52 111.703 219.14 118.469 215.331 124.921C211.522 131.372 207.376 137.485 202.543 143.409C197.711 149.333 192.092 155.363 186.339 160.461C180.586 165.557 174.52 169.919 168.022 173.986C161.523 178.053 154.304 181.815 147.348 184.862C140.389 187.909 133.566 190.36 126.279 192.274C118.99 194.186 111.233 195.538 103.617 196.339C95.9995 197.142 88.3065 197.42 80.5771 197.09C72.8476 196.76 64.7694 195.777 57.236 194.354C49.7048 192.934 42.4267 191.154 35.3787 188.565C28.3285 185.973 21.6636 182.509 14.937 178.808C8.2128 175.11 1.0851 171.012 -4.97584 166.367C-11.0345 161.72 -16.1426 156.454 -21.4217 150.937C-26.6986 145.421 -32.2239 139.556 -36.6436 133.261C-41.0611 126.966 -44.5987 120.016 -47.9312 113.171C-51.2637 106.328 -54.3455 99.4252 -56.6386 92.1973C-58.9294 84.9695 -60.607 77.3525 -61.6852 69.8061C-62.761 62.2596 -63.2146 54.5584 -63.1007 46.9164C-62.9867 39.2721 -62.2732 31.4981 -61.0013 23.9448C-59.7294 16.3938 -57.7441 8.8019 -55.4738 1.60365C-53.2012 -5.59232 -50.7053 -12.3878 -47.3728 -19.2401C-44.038 -26.0901 -39.8827 -33.2838 -35.4697 -39.5012C-31.0568 -45.7186 -26.245 -51.1964 -20.8952 -56.5444C-15.5454 -61.8948 -9.54833 -66.9538 -3.36658 -71.5941C2.81516 -76.2344 9.51662 -80.7677 16.1953 -84.3861C22.8739 -88.0046 29.5936 -90.847 36.7031 -93.3003C43.8148 -95.7559 51.2183 -97.6015 58.8521 -99.1195C66.4858 -100.637 74.8147 -102.11 82.5077 -102.408C90.1984 -102.708 97.4789 -101.825 105.005 -100.917C112.532 -100.009 120.243 -99.0398 127.667 -96.962C135.089 -94.8843 142.595 -91.7482 149.543 -88.4484C156.49 -85.1463 163.037 -81.3321 169.355 -77.1629C175.676 -72.9937 180.041 -70.9022 187.461 -63.4332C194.878 -55.9641 208.502 -40.4866 213.865 -32.3485C219.231 -24.2126 221.752 -15.9744 219.648 -14.6089M142.258 -92.0555C149.743 -91.5229 156.028 -84.9574 162.741 -80.886C169.456 -76.8124 176.597 -72.3951 182.546 -67.6229C188.496 -62.8506 193.51 -57.944 198.441 -52.2478C203.369 -46.5493 207.991 -39.8358 212.122 -33.4386C216.25 -27.0414 219.926 -20.8013 223.215 -13.8625C226.502 -6.92137 229.76 0.977812 231.85 8.20109C233.942 15.4266 234.911 22.0446 235.759 29.4841C236.607 36.9235 237.124 45.0025 236.942 52.8334C236.762 60.6666 236.156 68.9003 234.674 76.4786C233.19 84.0569 230.735 91.2529 228.05 98.2986C225.367 105.342 222.044 112.081 218.57 118.746C215.096 125.412 211.718 132.271 207.212 138.298C202.705 144.321 197.118 149.679 191.532 154.897C185.943 160.118 180.034 165.206 173.679 169.614C167.324 174.02 160.128 177.991 153.397 181.344C146.668 184.698 140.452 187.399 133.297 189.734C126.145 192.069 118.146 194.117 110.478 195.349C102.808 196.58 94.9806 197.137 87.2785 197.121C79.5787 197.106 71.9131 196.436 64.2702 195.255C56.6274 194.072 48.6905 192.242 41.4215 190.028C34.1547 187.814 27.3028 185.199 20.6675 181.969C14.0344 178.74 7.93699 174.942 1.61392 170.652C-4.71143 166.362 -11.6727 161.633 -17.2823 156.233C-22.8897 150.835 -27.5374 144.31 -32.0369 138.25C-36.5388 132.192 -40.5254 126.498 -44.2865 119.877C-48.0498 113.255 -51.9931 105.684 -54.6099 98.5262C-57.2244 91.3712 -58.494 84.3983 -59.9756 76.9429C-61.4549 69.4875 -63.1098 61.5063 -63.4973 53.7915C-63.8825 46.0767 -63.3377 38.2708 -62.2938 30.6515C-61.2521 23.0345 -59.2234 15.3333 -57.238 8.0782C-55.255 0.823058 -53.3129 -5.99058 -50.3884 -12.877C-47.464 -19.7635 -43.9856 -26.7456 -39.6912 -33.2429C-35.3945 -39.7402 -29.7188 -46.0714 -24.6106 -51.8586C-19.5025 -57.6459 -14.7226 -63.1032 -9.0423 -67.9619C-3.35974 -72.823 2.96561 -77.2539 9.47787 -81.0203C15.9924 -84.7867 22.9036 -87.8362 30.0335 -90.5671C37.1658 -93.2958 44.7972 -95.4851 52.2669 -97.4058C59.7388 -99.3243 67.2198 -101.32 74.8558 -102.085C82.494 -102.849 90.4036 -102.67 98.0897 -101.991C105.774 -101.313 113.578 -99.7385 120.968 -98.0134C128.36 -96.2907 138.893 -93.3049 142.429 -91.6436C145.962 -89.98 143.026 -90.3009 142.173 -88.0388" stroke="#FCEECA" stroke-width="8" stroke-linecap="round"/>
<path d="M293.558 163.643C297.069 156.779 304.949 153.769 311.231 149.496C317.513 145.224 324.39 141.478 331.253 138.007C338.116 134.536 345.091 130.976 352.413 128.671C359.734 126.367 367.552 125.283 375.175 124.177C382.797 123.07 390.52 122.126 398.149 122.037C405.778 121.947 413.407 122.387 420.954 123.64C428.504 124.894 436.267 127.23 443.436 129.553C450.607 131.874 457.186 134.172 463.967 137.567C470.75 140.962 477.867 145.512 484.13 149.927C490.396 154.342 496.022 158.775 501.556 164.053C507.089 169.332 512.632 175.439 517.334 181.597C522.035 187.753 526.147 194.269 529.76 201C533.375 207.73 536.552 214.729 539.018 221.98C541.485 229.229 543.069 237.023 544.56 244.5C546.05 251.978 547.612 259.247 547.963 266.847C548.314 274.443 547.612 282.327 546.666 290.088C545.722 297.85 544.341 305.94 542.292 313.413C540.242 320.888 537.555 327.96 534.373 334.932C531.189 341.903 527.423 348.785 523.199 355.241C518.976 361.697 514.045 368.027 509.026 373.663C504.005 379.296 498.912 384.252 493.077 389.047C487.244 393.839 480.613 398.392 474.021 402.424C467.431 406.453 460.564 410.282 453.534 413.23C446.504 416.179 439.308 418.392 431.848 420.119C424.385 421.849 416.475 423.09 408.766 423.599C401.057 424.11 393.155 423.778 385.594 423.175C378.033 422.573 370.782 421.677 363.406 419.982C356.028 418.289 348.515 415.899 341.33 413.012C334.148 410.124 326.815 406.699 320.3 402.655C313.784 398.611 308.017 393.656 302.232 388.751C296.446 383.846 290.652 378.939 285.585 373.223C280.52 367.505 275.929 360.907 271.836 354.449C267.744 347.993 264.204 341.472 261.031 334.478C257.858 327.484 254.923 319.873 252.798 312.483C250.674 305.094 249.162 297.733 248.283 290.139C247.405 282.544 247.161 274.668 247.526 266.913C247.893 259.156 249.033 251.204 250.48 243.598C251.927 235.994 253.664 228.5 256.21 221.284C258.756 214.065 262.025 207.006 265.757 200.289C269.486 193.572 271.963 188.656 278.587 180.979C285.211 173.304 298.626 159.884 305.5 154.236C312.377 148.591 318.238 145.242 319.845 147.1M435.506 127.705C443.21 127.187 451.387 132.183 458.4 135.194C465.414 138.206 471.231 141.631 477.588 145.773C483.946 149.918 490.832 155.132 496.542 160.053C502.254 164.974 507.048 169.435 511.857 175.299C516.667 181.167 521.385 188.605 525.401 195.247C529.415 201.888 532.996 208.177 535.95 215.151C538.905 222.125 541.248 229.524 543.126 237.087C545.006 244.647 546.468 252.954 547.229 260.519C547.992 268.086 548.186 274.902 547.705 282.485C547.224 290.065 546.11 298.434 544.343 306.013C542.577 313.594 539.942 320.831 537.106 327.96C534.268 335.09 531.043 342.238 527.323 348.792C523.603 355.349 519.518 361.282 514.786 367.292C510.052 373.299 504.72 379.599 498.928 384.843C493.136 390.089 486.453 394.682 480.03 398.767C473.609 402.852 467.283 406.263 460.393 409.352C453.504 412.44 445.987 415.104 438.695 417.297C431.405 419.489 424.207 421.574 416.649 422.511C409.088 423.448 401.026 423.086 393.337 422.916C385.646 422.749 378.017 422.74 370.513 421.498C363.012 420.257 355.663 418.039 348.314 415.468C340.968 412.898 333.143 409.778 326.432 406.075C319.719 402.376 314.105 397.844 308.042 393.262C301.979 388.68 295.523 383.919 290.053 378.586C284.58 373.253 279.599 367.514 275.218 361.262C270.837 355.007 267.206 347.963 263.764 341.067C260.325 334.173 257.017 327.11 254.576 319.892C252.135 312.673 250.355 305.346 249.115 297.761C247.877 290.175 247.116 282.228 247.147 274.379C247.179 266.53 248.134 258.244 249.306 250.663C250.475 243.082 252.019 236.106 254.173 228.897C256.329 221.685 258.875 214.289 262.23 207.396C265.588 200.502 269.898 193.806 274.309 187.54C278.717 181.277 283.566 175.409 288.69 169.808C293.814 164.209 299.116 158.83 305.049 153.938C310.982 149.047 317.522 144.307 324.287 140.465C331.052 136.623 338.374 133.45 345.638 130.884C352.903 128.319 360.395 126.417 367.872 125.07C375.35 123.723 382.877 123.219 390.504 122.807C398.133 122.394 405.983 121.842 413.64 122.593C421.296 123.345 432.734 126.067 436.445 127.311C440.154 128.555 436.682 127.576 435.898 130.06" fill="#D3FFD2"/>
<path d="M335.765 135.377C341.381 130.057 350.125 129.246 357.426 127.23C364.729 125.214 372.08 124.14 379.579 123.278C387.076 122.417 394.753 121.801 402.417 122.06C410.078 122.319 418.083 123.361 425.553 124.836C433.02 126.309 440.139 128.337 447.228 130.903C454.319 133.466 461.353 136.639 468.096 140.22C474.836 143.801 481.457 147.851 487.682 152.39C493.908 156.93 500.064 161.888 505.446 167.46C510.828 173.029 515.573 179.501 519.973 185.81C524.374 192.12 528.491 198.498 531.846 205.313C535.204 212.131 537.745 219.442 540.116 226.713C542.484 233.985 544.772 241.433 546.063 248.943C547.355 256.455 547.845 264.132 547.859 271.777C547.872 279.419 547.371 287.211 546.145 294.803C544.916 302.398 542.805 309.935 540.496 317.335C538.185 324.735 535.509 332.288 532.281 339.207C529.051 346.128 525.514 352.579 521.117 358.856C516.72 365.136 511.174 371.312 505.897 376.879C500.618 382.446 495.51 387.569 489.449 392.259C483.386 396.946 476.279 401.345 469.529 405.012C462.782 408.678 456.113 411.617 448.96 414.256C441.805 416.893 434.121 419.287 426.606 420.841C419.088 422.396 411.443 423.253 403.864 423.583C396.283 423.911 388.638 423.668 381.12 422.809C373.603 421.947 366.067 420.44 358.759 418.421C351.449 416.403 344.324 413.739 337.269 410.696C330.212 407.652 322.948 404.334 316.424 400.158C309.903 395.984 303.876 390.726 298.134 385.645C292.394 380.563 286.839 375.447 281.978 369.667C277.113 363.89 272.807 357.599 268.955 350.971C265.103 344.343 261.802 337.016 258.862 329.901C255.922 322.785 253.18 315.66 251.308 308.281C249.439 300.899 248.14 293.376 247.645 285.621C247.15 277.864 247.736 269.444 248.34 261.742C248.947 254.038 249.626 246.883 251.274 239.394C252.92 231.905 255.334 223.921 258.222 216.805C261.11 209.691 264.738 203.178 268.602 196.706C272.468 190.234 276.651 183.925 281.412 177.968C286.172 172.014 291.519 166.207 297.163 160.972C302.809 155.735 308.141 151.086 315.28 146.557C322.419 142.025 334.826 135.819 340.002 133.787C345.176 131.757 345.297 132.057 346.334 134.374M309.706 150.58C314.311 144.513 323.479 142.264 330.342 138.745C337.203 135.224 343.786 131.81 350.879 129.459C357.975 127.107 365.415 125.853 372.912 124.632C380.411 123.411 388.088 122.206 395.87 122.138C403.65 122.071 411.999 123.237 419.601 124.227C427.203 125.219 434.235 125.957 441.483 128.083C448.734 130.209 456.14 133.416 463.101 136.983C470.06 140.55 477.013 145.029 483.242 149.487C489.472 153.943 495.063 158.582 500.484 163.723C505.904 168.864 510.93 174.305 515.762 180.33C520.595 186.358 525.673 193.217 529.478 199.879C533.284 206.544 536.061 213.187 538.595 220.308C541.13 227.428 543.298 235.073 544.688 242.601C546.079 250.129 546.48 257.857 546.933 265.474C547.389 273.092 548.114 280.666 547.417 288.311C546.721 295.955 544.845 303.88 542.753 311.344C540.66 318.806 537.993 326.098 534.859 333.09C531.723 340.08 528.137 346.852 523.943 353.285C519.747 359.72 514.709 365.86 509.692 371.695C504.675 377.53 499.476 383.232 493.841 388.295C488.204 393.361 482.476 398.027 475.875 402.08C469.276 406.133 461.39 409.821 454.237 412.614C447.084 415.409 440.239 417.049 432.963 418.845C425.685 420.644 418.281 422.683 410.577 423.397C402.873 424.112 394.368 423.645 386.734 423.129C379.103 422.612 372.242 421.968 364.786 420.3C357.33 418.634 349.181 416.043 342.003 413.129C334.826 410.217 328.126 406.742 321.721 402.827C315.316 398.914 309.517 394.38 303.57 389.645C297.623 384.911 291.341 380.029 286.037 374.419C280.733 368.808 275.782 362.474 271.745 355.979C267.708 349.482 264.95 342.499 261.816 335.438C258.682 328.38 255.217 320.991 252.942 313.614C250.665 306.235 249.134 298.64 248.158 291.172C247.185 283.701 246.804 276.329 247.096 268.796C247.385 261.266 248.466 253.689 249.902 245.98C251.338 238.271 253.161 229.948 255.712 222.544C258.263 215.139 261.538 208.211 265.206 201.558C268.871 194.903 273.177 188.752 277.71 182.619C282.242 176.488 286.874 170.076 292.399 164.768C297.924 159.46 307.564 152.889 310.864 150.77C314.167 148.651 310.944 150.142 312.212 152.058" stroke="#D3FFD2" stroke-width="8" stroke-linecap="round"/>
<path d="M386.373 19.5247C389.583 14.5303 396.268 10.9995 401.473 7.89729C406.675 4.79247 411.891 2.81929 417.596 0.903603C423.298 -1.00947 429.704 -2.8964 435.694 -3.58898C441.68 -4.27894 447.633 -4.05679 453.523 -3.24661C459.416 -2.43643 465.39 -0.648807 471.04 1.27472C476.691 3.19824 482.214 5.31517 487.426 8.29454C492.639 11.2765 497.91 14.8857 502.315 19.164C506.72 23.4449 510.573 28.9411 513.863 33.9694C517.151 38.9978 519.902 43.8797 522.046 49.3315C524.188 54.7832 525.766 60.7655 526.725 66.6824C527.684 72.5967 528.028 78.7724 527.798 84.8304C527.566 90.8885 526.858 97.1974 525.339 103.028C523.82 108.859 521.642 114.483 518.691 119.817C515.739 125.151 511.652 130.399 507.629 135.033C503.607 139.669 499.259 144.034 494.557 147.627C489.854 151.223 484.866 154.041 479.416 156.607C473.966 159.171 467.68 161.683 461.854 163.021C456.029 164.359 450.512 164.79 444.465 164.631C438.419 164.471 431.533 163.402 425.575 162.062C419.617 160.718 414.089 159.119 408.717 156.578C403.346 154.038 398.109 150.429 393.342 146.825C388.577 143.218 384.013 139.562 380.121 134.947C376.231 130.329 372.811 124.474 370.003 119.119C367.194 113.764 364.821 108.464 363.268 102.809C361.716 97.1556 360.973 91.291 360.687 85.1911C360.397 79.0912 360.507 72.1498 361.538 66.212C362.57 60.2715 364.555 55.0785 366.879 49.5536C369.205 44.0287 368.888 40.4273 375.489 33.0599C382.088 25.6951 397.51 10.861 406.48 5.35175C415.447 -0.157472 428.79 -1.23423 429.303 0.0097909M460.515 -1.35967C466.291 -1.41979 472.692 1.71117 478.267 4.11035C483.839 6.50953 489.143 9.65093 493.955 13.038C498.767 16.4251 503.133 19.8278 507.137 24.4354C511.138 29.043 515.171 35.2918 517.972 40.6861C520.77 46.0777 522.354 51.1217 523.93 56.793C525.508 62.4668 526.78 68.747 527.439 74.7267C528.098 80.7037 528.624 86.7932 527.879 92.6657C527.134 98.5355 525.146 104.437 522.966 109.951C520.785 115.466 518.06 120.601 514.801 125.752C511.545 130.904 507.866 136.543 503.422 140.858C498.98 145.176 493.374 148.508 488.14 151.652C482.907 154.796 477.477 157.624 472.02 159.73C466.559 161.839 461.195 163.598 455.389 164.299C449.584 164.999 443.186 164.662 437.186 163.941C431.189 163.219 425.242 161.711 419.404 159.966C413.566 158.222 407.368 156.401 402.163 153.471C396.961 150.541 392.495 146.642 388.181 142.385C383.864 138.13 379.738 132.79 376.271 127.932C372.803 123.071 369.885 118.612 367.379 113.221C364.876 107.829 362.33 101.504 361.236 95.5875C360.145 89.6706 360.564 83.6544 360.825 77.7217C361.085 71.7891 361.304 65.9166 362.797 59.9866C364.292 54.0593 367.043 47.7033 369.789 42.147C372.537 36.5933 375.447 31.3298 379.279 26.6569C383.114 21.984 388.022 17.724 392.792 14.1148C397.562 10.5055 402.645 7.64117 407.899 5.00155C413.157 2.35931 418.609 -0.269852 424.325 -1.73079C430.043 -3.19173 436.196 -3.80067 442.199 -3.76669C448.204 -3.73533 457.363 -2.10974 460.349 -1.53216C463.332 -0.951971 460.148 -1.57659 460.104 -0.301214" fill="#FFE3C7"/>
<path d="M409.327 3.74958C413.868 0.158652 420.287 -0.209849 426.055 -1.45125C431.822 -2.69266 437.895 -3.69624 443.936 -3.70408C449.978 -3.70931 456.472 -2.8364 462.3 -1.49568C468.128 -0.154966 473.575 1.8156 478.908 4.34284C484.238 6.86747 489.482 10.0821 494.288 13.6599C499.098 17.2378 503.703 21.3226 507.749 25.8126C511.795 30.3052 515.671 35.2107 518.566 40.6049C521.457 45.9992 523.515 52.316 525.107 58.1806C526.699 64.0479 527.853 69.8289 528.116 75.7955C528.379 81.7621 527.613 88.0737 526.686 93.9854C525.761 99.8971 524.675 105.733 522.562 111.26C520.452 116.785 517.406 122.18 514.017 127.14C510.63 132.1 506.697 136.867 502.231 141.025C497.766 145.181 492.413 148.887 487.223 152.088C482.034 155.29 476.639 158.267 471.092 160.235C465.543 162.203 459.953 163.251 453.94 163.893C447.93 164.536 441.006 164.714 435.019 164.089C429.032 163.465 423.731 162.046 418.02 160.143C412.307 158.24 405.972 155.799 400.748 152.669C395.525 149.535 391.034 145.471 386.683 141.347C382.333 137.223 378.06 132.837 374.645 127.919C371.23 123.003 368.372 117.447 366.189 111.846C364.003 106.248 362.445 100.294 361.539 94.3277C360.635 88.3638 360.371 82.0966 360.754 76.0516C361.137 70.0066 362.325 63.8022 363.834 58.0604C365.342 52.316 367.111 46.9662 369.805 41.5928C372.498 36.2195 376.135 30.4254 379.993 25.8152C383.854 21.205 385.816 18.3093 392.956 13.9317C400.097 9.55674 415.342 2.17888 422.837 -0.439836C430.335 -3.05593 437.635 -3.11082 437.934 -1.7701M379.17 26.6515C381.681 21.2861 388.298 17.8206 393.027 14.2506C397.753 10.6805 402.077 7.82139 407.53 5.23404C412.98 2.64669 419.643 0.195241 425.739 -1.27354C431.836 -2.74232 438.114 -3.46886 444.103 -3.57863C450.09 -3.6884 455.954 -3.06377 461.662 -1.93214C467.37 -0.797883 472.822 0.728392 478.348 3.21904C483.873 5.70969 489.938 9.26926 494.815 13.0092C499.691 16.7491 503.68 21.1894 507.603 25.6558C511.524 30.1223 515.572 34.6932 518.344 39.8078C521.114 44.9198 522.752 50.4003 524.227 56.3407C525.704 62.2812 526.649 69.2148 527.199 75.4479C527.749 81.6811 528.384 87.8567 527.53 93.7423C526.676 99.6253 524.422 105.108 522.07 110.751C519.717 116.391 516.779 122.561 513.418 127.595C510.057 132.626 506.058 136.765 501.911 140.947C497.766 145.126 493.593 149.65 488.536 152.671C483.48 155.692 477.298 157.242 471.574 159.074C465.853 160.909 460.06 162.707 454.203 163.669C448.344 164.63 442.464 165.326 436.434 164.842C430.403 164.359 423.869 162.785 418.02 160.768C412.172 158.748 406.336 155.826 401.34 152.731C396.343 149.634 392.316 146.344 388.033 142.191C383.753 138.038 379.191 132.861 375.653 127.82C372.115 122.778 369.229 117.504 366.806 111.94C364.386 106.376 362.044 100.42 361.127 94.4323C360.212 88.4474 360.911 82.0208 361.309 76.0203C361.708 70.0223 362.117 64.1995 363.516 58.4367C364.917 52.6714 367.025 46.8224 369.703 41.4308C372.384 36.0392 377.823 28.4758 379.597 26.0844C381.371 23.6957 379.256 26.121 380.35 27.0906" stroke="#FFE3C7" stroke-width="8" stroke-linecap="round"/>
<path d="M13.3778 276.18C18.8365 270.706 24.7351 262.829 31.6187 255.671M13.2266 276.218C18.4196 269.936 24.1601 263.89 31.0391 256.822M11.4627 283.931C20.4858 274.382 27.8619 266.386 43.0126 249.424M11.7743 283.712C18.5433 276.414 25.5804 269.044 41.9383 249.075M11.3322 289.121C24.9092 274.903 38.1334 259.457 53.0803 242.766M11.2543 289.74C27.1861 271.697 42.9119 253.792 52.6222 243.313M11 295.351C26.0591 278.543 39.7072 262.714 58.0603 243.169M11.6849 294.779C24.8817 280.235 37.9708 264.757 57.8267 242.59M11.2474 301.176C31.1147 276.806 52.3679 253.992 63.2602 242.502M11.1878 300.778C21.4594 288.738 31.6049 277.061 63.3175 242M12.8028 304.427C28.0406 287.33 42.0391 270.875 67.3995 242.246M13.2541 304.343C32.4479 283.104 51.4974 261.324 67.6217 242.863M14.4429 308.274C25.7522 294.32 38.3007 279.926 71.2891 242.984M13.9825 308.58C36.3765 284.235 58.3695 259.049 71.9466 243.383M15.1737 313.365C32.2898 293.509 50.2627 273.285 76.0836 244.246M15.4211 312.885C28.233 298.41 41.3519 283.956 76.1569 244.131M15.9594 317.081C30.0472 300.942 44.1695 285.555 80.8918 243.953M16.0189 317.372C39.1116 291.132 61.5101 265.983 80.6627 244.291M18.4219 320.298C39.2719 295.892 60.3006 271.839 83.8239 245.94M18.06 320.566C38.0991 297.674 58.074 275.108 83.9705 246.041M19.7253 324.157C38.7221 303.348 57.2792 282.332 87.2508 247.735M19.9406 323.853C41.2167 300.194 62.3439 276.443 87.2645 247.766M21.1112 328.09C45.844 300.293 70.6477 272.515 90.6136 249.42M21.6312 327.777C36.1474 312.187 50.4781 295.948 90.838 249.564M24.1349 330.331C42.2979 309.727 59.941 289.085 93.8366 251.084M23.7501 330.432C43.2577 309.035 61.9614 287.688 93.8137 251.319M26.3592 332.971C51.2913 303.99 77.1694 275.671 96.6152 253.384M26.3455 333.189C49.6351 307.785 72.281 282.154 96.8443 253.308M28.9225 335.669C47.7132 313.185 67.0101 292.292 99.868 256.042M28.8973 335.629C57.8244 303.697 86.0115 271.695 99.7168 255.567M31.8294 338.636C56.0605 311.087 80.4749 284.039 102.658 257.79M31.4469 338.156C46.4762 321.057 62.1103 303.204 102.397 257.849M34.8257 340.238C49.3442 324.497 63.6565 308.288 105.073 259.881M34.9494 340.044C54.1065 318.242 73.4218 296.525 105.35 260.387M38.3694 341.949C59.153 317.991 79.6159 295.203 107.693 263.633M38.0945 341.63C57.1142 320.393 75.7835 299.433 107.748 263.075M41.8306 343.202C67.3697 314.464 93.328 286.314 109.803 266.003M41.6428 343.278C58.4016 324.274 74.9634 305.817 109.723 266.467M45.143 344.995C62.7288 325.959 79.3593 307.121 111.995 269.85M45.5187 344.452C59.4164 328.626 73.2821 312.788 111.631 269.623M49.1655 346.094C69.0168 322.992 89.6927 300.352 113.727 273.502M49.335 345.984C65.1707 326.871 81.382 308.188 113.255 273.191M52.8054 347.579C68.6686 328.95 84.0209 312.385 114.886 276.847M52.6428 347.216C76.7616 319.89 100.993 292.554 114.941 276.646M56.4385 349.518C77.8199 324.627 99.6321 299.564 116.725 280.991M56.1476 348.993C71.2823 333.122 86.1031 316.329 116.407 280.94M60.5824 348.856C78.7454 328.833 96.1708 308.362 117.108 285.888M60.745 348.998C79.2104 328.414 97.9621 307.366 116.881 285.731M65.6609 350C79.2814 334.462 93.2983 318.028 117.284 290.281M65.5349 349.588C83.1069 329.502 100.548 310.333 117.44 290.524M70.5859 349.153C85.0655 331.806 101.398 313.619 118.647 294.664M70.1026 349.272C87.9517 330.869 105.029 311.256 119 294.304M75.5499 348.437C91.6352 328.68 108.88 310.506 118.004 300.178M75.9622 348.493C84.6554 337.212 93.6739 327.52 118.107 301.12M82.8847 346.63C95.3782 332.554 107.352 318.647 116.657 307.328M82.3235 346.851C93.4861 333.525 105.803 319.931 116.732 307.418M94.013 338.742C100.464 332.908 104.617 326.698 110.618 319.136M94.1664 339.143C100.821 331.662 107.379 324.132 111.289 320.066" stroke="#D1ECFF" stroke-linecap="round"/>
<path d="M440.735 401.702C439.549 392.172 440.242 383.477 439.641 367.783M441.338 400.76C440.965 392.853 440.284 384.713 438.438 367.859M445.546 416.786C444.582 404.264 443.797 389.715 441.343 352.488M445.474 415.872C445.064 402.095 443.899 389.06 441.491 352.255M449.576 421.906C448.259 405.212 447.496 388.812 445.209 345.523M449.202 421.33C448.444 402.837 447.572 385.869 444.685 345.224M453.755 426.871C451.581 394.863 450.539 362.69 447.791 337.717M453.576 426.801C451.561 397.454 449.553 366.844 448.159 338.446M457.667 428.67C455.185 395.428 452.815 361.373 451.787 334.221M456.891 428.584C455.301 396.615 453.639 366.038 451.529 333.381M461.016 431.722C458.502 400.777 456.754 367.329 455.339 329.394M460.931 431.606C459.785 408.686 458.326 385.579 455.209 329.171M465.203 438.464C462.965 406.712 461.24 372.878 458.315 324.831M464.899 438.824C462.45 394.688 460.022 351.616 458.126 325.653M469.028 440.465C466.304 395.373 463.116 349.426 462.178 322.849M468.836 440.535C466.345 402.334 464.033 365.116 461.925 323.134M472.506 443.204C470.156 410.931 468.338 377.891 465.149 320.585M472.705 442.645C471.144 414.153 469.333 385.68 465.5 320.49M476.222 444.393C473.873 405.876 471.269 367.335 469.057 318.229M476.359 444.311C473.565 412.081 471.87 379.854 468.775 318.403M479.75 445.325C477.653 404.077 474.992 364.084 472.916 316.726M479.811 445.15C477.554 402.954 474.756 361.57 472.469 316.785M483.623 445.995C482.287 416.284 480.784 386.819 476.526 315.143M483.605 445.901C482.071 410.859 480.149 376.423 476.131 315.087M487.44 446.88C485.291 409.287 482.951 371.146 480.04 313.525M487.262 447.021C485.114 411.309 483.375 375.925 479.593 313.737M491.538 447.664C489.158 406.229 486.561 363.958 482.732 311.064M491.229 447.931C488.289 398.738 485.236 350.719 483.057 310.873M494.973 448.143C492.048 415.162 490.376 380.926 486.892 311.337M495.084 448.309C492.322 411.519 490.363 375.402 486.564 311.098M498.509 447.662C496.148 405.079 493.513 361.789 490.046 310.667M498.517 447.576C495.202 403.772 492.473 359.117 490.475 310.797M502.237 447.004C499.881 409.268 497.877 371.327 493.75 310.477M501.991 447.475C499.844 404.325 497.404 360.652 493.933 310.595M505.848 446.935C503.375 415.807 501.562 384.314 497.678 310.971M505.754 446.737C503.011 397.681 500.084 347.53 497.479 310.633M509.305 446.178C506.697 410.594 504.976 374.09 501.776 311.068M509.469 446.441C507.874 418.468 506.257 390.611 501.578 311.196M512.725 445.171C509.871 410.607 508.436 376.354 505.121 312.172M512.88 445.007C510.541 411.191 508.581 376.884 504.977 311.648M516.573 443.383C514.282 402.181 511.347 359.811 508.583 312.584M516.494 443.549C513.757 403.295 511.462 364.082 508.659 311.987M519.836 441.214C516.974 390.938 514.163 338.94 512.814 312.609M520.085 441.363C517.164 395.188 514.592 349.066 512.482 312.888M523.45 438.719C521.279 395.006 518.142 351.345 515.981 314.317M523.663 438.78C521.027 395.617 518.415 351.088 516.228 314.681M526.912 436.022C524.828 403.568 523.115 370.03 519.706 316.382M527.067 436.114C525.397 410.418 523.658 384.145 519.959 316.102M530.548 434.385C529.167 401.637 527.881 369.719 523.8 319.961M530.601 434.036C528.925 397.925 526.519 361.476 523.755 319.236M534.425 432.3C532.552 395.853 530.208 359.243 527.515 323.454M534.207 432.489C531.733 390.741 529.428 349.701 527.475 323.01M537.901 428.418C534.992 402.217 533.677 375.705 531.738 326.693M537.324 428.54C534.666 396.613 532.895 364.376 531.884 326.844M540.923 425.254C539.808 404.823 537.664 384.393 535.5 330.241M540.749 424.41C539.249 389.999 537.218 356.547 535.319 329.253M543.649 420.49C544.303 401.387 542.857 381.73 540.037 335.069M544.685 420.561C543.33 397.248 541.863 373.262 539.287 335.499M547.474 414.189C545.731 387.119 545.348 360.355 542.99 341.132M547.495 413.955C546.07 393.707 545.201 373.092 543.148 340.544M550.931 406.702C548.624 382.603 547.867 358.213 547.032 342.101M550.899 405.996C549.928 386.527 548.892 367.567 547.438 341.826M552.888 390.354C552.483 381.062 552.322 373.603 551.935 358.728M553.374 389.495C552.253 382.514 552.443 375.463 551.695 358.203" stroke="#0B6513" stroke-linecap="round"/>
<path d="M413.642 208.557C418.893 208.154 423.301 207.61 433.991 206.015M414.639 209.537C418.161 208.695 422.983 208.146 433.886 207.725M410.319 213.589C417.163 212.925 423.616 212.868 442.57 210.274M409.835 214.124C421.457 212.734 432.896 211.691 442.055 210.972M406.517 217.906C416.737 217.012 428.463 216.151 445.206 215.354M406.77 217.991C421.469 217.294 436.287 215.662 446.221 215.099M400.21 223.997C411.183 221.933 420.761 222.717 449.941 219.593M401.026 223.367C418.829 221.464 437.222 220.087 449.052 219.088M400.187 227.87C414.578 225.74 431.87 224.667 451.633 222.977M400.155 227.724C416.272 225.676 432.368 224.745 451.151 222.987M398.822 233.053C413.312 230.702 428.087 228.587 452.927 228.15M398.994 232.506C414.214 230.631 430.722 229.665 452.71 227.559M398.079 236.438C416.141 235.046 434.779 233.359 454.28 230.763M398.364 236.291C414.958 235.618 429.714 234.155 453.784 231.545M398.761 241.945C417.533 239.312 435.547 237.952 455.499 235.924M398.722 240.629C411.025 239.651 422.512 239.126 454.924 235.877M398.621 245.236C418.26 244.052 438.02 241.779 455.294 240.365M399.093 244.964C415.584 244.155 432.834 242.178 454.927 240.562M398.822 250.015C417.56 247.509 437.102 246.268 455.847 245.208M398.642 249.621C417.501 247.892 436.257 246.253 455.318 244.735M401.116 254.149C415.142 252.153 428.247 250.697 453.92 248.495M400.618 253.937C413.254 252.43 425.414 251.701 454.52 249.293M403.041 257.474C412.956 256.545 424.746 255.883 453.083 253.687M403.22 257.797C416.626 256.386 430.328 255.69 452.398 254.043M407.576 261.572C416.756 260.505 429.111 259.51 449.794 258.533M406.675 261.224C418.212 261.597 429.296 259.956 449.219 257.775M410.107 266.31C423.335 264.71 435.34 264.168 445.72 262.286M410.135 265.728C420.271 264.937 430.052 264.551 446.137 262.487M417.529 270.113C422.471 268.522 428.028 267.573 439.95 268.428M417.071 269.099C422.216 269.132 428.19 268.426 440.186 267.341" stroke="#D3FFD2" stroke-linecap="round"/>
<path d="M465.252 79.806C465.563 74.7795 464.96 71.754 464.312 63.4445M465.6 78.5813C465.049 73.4575 464.812 67.7175 464.464 61.9489M470.149 84.5827C469.017 76.3952 468.877 69.4954 467.692 55.7511M469.52 86.0325C468.635 75.7676 467.839 65.5276 467.478 54.9899M473.611 88.1995C472.536 79.4913 472.894 70.598 470.974 52.863M473.445 87.2323C473.101 79.5351 472.65 72.3587 471.114 51.1404M477.047 88.6077C477.366 79.5886 475.908 72.2805 474.997 50.3144M476.743 88.995C476.132 75.3918 475.735 62.1874 474.941 49.2404M480.762 88.8538C480.166 80.2696 478.906 72.4408 478.868 48.2084M480.707 88.4685C480.35 79.4035 479.41 69.8788 477.882 48.0672M484.571 88.1194C483.999 80.0788 482.551 69.6633 482.115 45.8659M484.648 88.0316C483.751 74.8291 482.308 61.4167 482.308 46.4839M487.408 86.0515C486.681 78.0072 486.71 70.7353 485.071 47.1287M488.083 86.0687C486.536 76.1835 485.886 65.106 485.386 47.4454M491.458 84.6685C490.667 74.1748 489.87 62.7902 489.651 49.0821M491.645 84.4282C490.591 74.0927 489.389 62.9638 488.891 48.4068M495.334 79.2376C493.687 70.0009 494.559 60.1672 493.528 52.9335M494.767 80.2219C494.64 70.1669 494.137 60.0375 493.37 52.4185" stroke="#FCEECA" stroke-linecap="round"/>
<path d="M387.28 -4.29409C391.641 -4.96063 394.751 -3.39795 403.26 -2.28765M386.902 -4.86966C392.721 -3.38284 398.037 -2.86243 403.752 -1.0261M379.197 -2.84709C389.618 0.881663 399.563 0.763146 410.914 3.79168M378.746 -1.92503C385.972 -0.408072 392.827 1.07548 410.644 4.33949M375.969 1.16729C385.976 3.55612 395.48 5.77063 413.393 8.87933M375.653 1.80324C385.983 3.68377 396.966 5.42843 413.049 8.82146M372.352 4.27352C383.914 6.3008 394.954 10.1221 414.382 12.5591M372.076 5.86204C384.943 8.03768 398.647 10.2279 415.339 12.1785M369.608 9.30127C387.317 12.2953 403.017 13.8935 416.631 16.9309M370.273 9.289C381.069 10.0792 392.555 12.4663 415.584 16.9925M368.147 14.0185C381.819 14.1368 393.742 17.0199 417.046 20.3296M368.527 12.9841C383.51 15.7087 399.198 18.2813 417.179 20.8077M367.674 17.1708C382.298 18.9009 398.99 21.2995 415.882 25.5516M367.538 17.0605C380.906 19.1449 394.339 21.7143 416.468 24.8694M366.374 20.2147C381.503 23.0025 397.5 26.3978 415.657 28.7338M366.291 20.9081C377.582 22.1038 388.979 24.098 414.893 29.0023M365.94 24.9765C382.226 27.9659 400.479 31.2424 414.725 32.1378M365.674 24.7218C378.287 26.3017 391.382 29.0516 414.281 33.5316M365.575 29.402C376.079 30.1069 385.338 31.8207 412.54 37.874M366.099 28.6913C378.644 29.9464 390.526 32.6768 412.407 36.8686M366.664 32.9091C377.827 35.0124 389.235 37.2835 411.184 40.3503M367.046 33.3189C380.366 35.7653 394.778 37.6969 410.647 40.4156M366.711 37.2247C380.386 39.1892 391.508 41.1878 408.191 43.9561M366.951 37.0803C382.182 39.8237 398.835 42.9878 407.233 44.6675M370.995 42.4029C381.961 43.7731 394.113 46.6259 402.475 47.6821M371.314 42.0694C382.534 44.5056 394.078 45.7933 403.47 47.3908M377.031 47.8803C382.363 48.268 389.843 49.62 394.761 50.3983M377.184 47.1418C381.792 47.8727 386.658 49.0101 395.32 50.0667" stroke="#FCEECA" stroke-linecap="round"/>
<path d="M91.6715 60.8309C90.8483 54.2358 91.2097 49.9776 89.5428 37.3954M91.5019 60.0435C90.6437 52.1011 90.2158 43.7143 89.8621 35.9263M96.2397 70.1815C94.4514 59.6963 93.4387 49.2699 92.2901 28.463M95.1266 69.5188C94.1323 53.5843 93.5033 38.3888 92.6607 28.8866M98.2911 73.9266C97.4901 55.7643 96.064 36.4989 96.4989 25.9311M99.4951 73.9057C99.3048 59.7895 98.2322 47.2898 96.8855 25.3857M104.299 77.8955C101.402 61.9958 101.569 45.5157 99.1745 21.4748M103.387 78.0166C101.429 56.4934 100.776 35.9587 99.5325 21.9477M107.224 79.8777C105.615 64.3279 104.468 49.2496 103.004 16.4084M107.415 79.3732C106.169 61.1879 104.933 43.3161 103.201 17.175M110.512 81.816C108.761 55.0915 107.676 31.3893 106.701 14.425M110.501 80.7766C109.071 54.8269 107.529 29.1446 106.281 15.2344M114.314 80.8915C114.48 68.2609 112.692 53.1776 110.212 11.2115M114.408 82.1459C112.976 58.8316 111.054 36.5523 110.345 12.4053M118.26 81.3869C117.676 67.6033 117.077 53.6999 114.385 11.8619M118.02 82.1439C116.909 67.9075 116.013 52.9862 114.017 11.7443M121.474 83.8284C120.337 64.2699 119.289 43.5964 117.028 12.4159M121.629 83.5118C119.893 57.6158 118.249 32.8659 117.414 12.0358M125.304 81.2149C124.251 59.4394 123.049 38.3948 120.658 11.9846M125.563 81.9381C124.128 57.136 122.223 32.8599 120.579 11.5814M128.846 80.158C128.449 59.2901 126.686 40.2739 125.228 12.711M128.713 80.1859C127.427 58.5727 126.582 37.9896 124.905 12.5973M132.548 79.0734C131.295 63.0142 130.883 47.9394 128.968 13.6748M132.755 79.1257C130.689 55.6316 129.955 32.2389 128.381 13.4193M135.023 76.5447C134.805 58.1457 133.136 37.1388 131.57 12.9992M135.818 76.5542C134.494 57.2589 133.005 38.4378 131.892 13.2249M138.762 72.8934C138.233 53.4403 136.964 35.1371 135.582 15.8738M139.722 73.2C138.248 53.5677 136.959 34.5025 135.808 17.1745M142.258 66.5048C140.913 49.3945 140.985 31.1488 139.388 20.1554M142.557 67.4182C142.405 54.6645 141.089 42.331 139.312 20.6262M146.074 62.0615C144.652 49.9403 143.62 37.5757 143.42 28.9468M145.996 63.1651C146.008 56.3212 145.648 48.4458 144.276 29.2035" stroke="#FFDAD6" stroke-linecap="round"/>
<path d="M9.79487 105.338C16.0326 105.338 24.1639 103.743 32.4528 103.527M9.66678 105.252C16.3239 104.42 23.1395 104.185 31.2709 103.999M4.01235 110.024C15.1339 109.589 23.8693 109.144 42.9254 107.741M4.4138 110.104C12.6536 109.625 21.188 109.404 42.3877 106.468M1.31778 114.009C15.9787 113.872 31.3857 112.158 48.2039 110.8M0.778261 114.509C18.9031 113.014 36.5709 111.428 47.4331 110.891M-2.63939 118.795C15.3123 117.516 31.3586 115.827 52.0401 115.092M-1.66962 118.888C13.4601 117.963 29.1298 116.066 52.3143 114.344M-6.90571 123.83C17.9471 120.25 42.6644 119.237 55.1219 118.743M-6.63808 123.4C5.90518 122.114 18.0484 120.915 55.564 118.326M-8.25652 127.67C10.8583 126.157 28.593 124.131 60.1258 121.547M-7.84761 128C15.6905 126.345 39.5967 124.135 59.8176 122.317M-9.04267 132.062C5.40872 130.004 21.1691 128.503 61.3233 125.266M-9.64637 131.925C17.3401 130.443 44.7092 127.865 61.5199 126.253M-11.5388 136.801C9.5304 134.582 31.6169 132.82 62.802 130.34M-10.9471 136.568C4.57691 135.216 20.2348 134.246 62.9565 130.296M-11.5316 140.122C5.3223 138.613 21.5932 137.801 64.8012 133.998M-11.7327 140.481C15.7907 138.071 41.9469 136.045 64.3161 134.116M-11.4979 144.749C13.2012 141.983 37.682 139.665 64.8402 137.954M-12.0491 144.66C11.5836 142.539 34.9753 140.597 64.8785 138.211M-13.1023 148.875C8.89872 147.608 30.732 145.744 65.7453 142.195M-12.6404 148.777C11.9587 147.093 36.4901 145.176 65.7314 142.244M-12.7283 152.992C15.4095 150.779 43.3927 148.708 66.4127 146.275M-11.9594 153.21C3.90521 152.452 20.1937 151.053 66.4849 146.679M-11.3228 157.196C9.01383 155.504 28.9852 153.105 67.0541 150.175M-11.778 156.884C9.91249 155.663 30.9737 153.691 66.8099 150.413M-11.1137 160.968C16.7254 157.922 44.7218 156.58 66.4088 154.316M-11.341 161.201C14.0207 159.801 39.0373 157.674 66.7005 154.485M-9.24938 165.06C11.5519 162.124 31.3901 161.486 65.8535 159.424M-9.23385 164.983C21.353 163.065 51.4774 160.399 66.1833 158.683M-7.63917 169.93C17.5213 167.531 42.4939 166.077 65.8745 162.915M-7.53149 168.883C7.60786 167.61 23.8718 166.047 65.5489 162.672M-6.1788 173.386C8.03927 172.89 22.2241 171.673 63.9696 166.429M-5.84202 173.294C13.2236 171.544 32.5407 170.069 63.7184 167.413M-3.04816 177.549C16.6681 175.408 35.0273 174.297 60.4298 172.327M-2.99483 176.778C14.5506 175.582 31.7702 174.326 61.1069 171.668M0.0430368 181.039C21.5398 179.022 42.7274 178.758 57.6616 175.8M-0.256418 180.897C14.0041 179.657 27.9415 178.828 57.0449 176.319M0.676424 185.193C15.134 184.541 28.1234 183.414 54.0373 181.298M1.72222 184.952C12.6898 184.086 23.707 182.963 53.8868 180.505M6.02507 189.086C20.8285 187.119 36.0162 186.782 53.5338 185.637M6.34159 189.16C18.3404 187.19 30.3618 185.744 53.3558 184.584M10.8131 193.003C20.6029 191.544 27.7822 192.054 43.5529 189.541M11.0703 192.224C23.8555 191.371 36.2656 190.429 43.8744 189.325" stroke="#FF9494" stroke-linecap="round"/>
</g>
<defs>
<clipPath id="clip0_17019_8101">
<rect width="480" height="360" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 46 KiB

View File

@@ -0,0 +1,20 @@
<svg width="480" height="360" viewBox="0 0 480 360" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_17344_6287)">
<rect width="480" height="360" fill="#FFF0F0"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M-129.705 103.753L-85.7352 156.891L-65.1941 182.572L-53.3297 199.384L-49.0527 208.143L-45.0712 215.448L-42.194 222.952L-39.1565 229.336L-36.6975 242.805L-36.2167 248.48L-35.205 261.842L-37.306 274.041L-38.7784 286.182L-47.0794 320.426L-50.0168 331.305L-53.3647 342.023L-57.9547 352.351L-74.8924 390.396L-80.0534 404.852L-85.8779 417.314L-87.4179 422.31L-88.5122 427.494L-88.4947 432.693L-86.8846 437.483L-86.1308 439.823L-79.4699 448.703L-72.9418 456.457L-64.1924 465.141L-55.3029 473.689L-45.2815 479.532L-40.997 482.248L-36.4646 483.102L-31.817 483.739L-26.621 483.786L-23.0101 481.992L-18.7831 478.359L-15.325 474.225L-10.9128 467.621L-3.20515 451.624L0.182877 441.219L7.90302 420.073L18.7808 384.363L28.1161 348.776L35.4356 317.523L37.9422 300.172L41.0197 283.722L42.1465 269.025L43.6164 253.674L43.4136 238.14L43.0881 223.894L41.6332 208.516L39.3595 192.839L32.7411 159.292L29.3731 141.448L23.7089 122.832L17.8743 106.289L14.4337 97.3871L11.1558 89.6428L7.04662 82.4146L2.42154 75.3141L-2.20602 69.3211L-8.25842 62.9122L-14.5737 57.9139L-21.0318 52.8804L-29.413 47.4912L-38.9286 43.4249L-48.344 38.4792L-58.115 34.7009L-78.7212 27.147L-98.6188 22.3817L-116.861 18.1625L-131.69 17L-137.142 17.3533L-142.335 18.4381L-143.728 18.7162L-145.39 20.1093L-147.677 23.1333L-148.29 27.1896L-148.738 32.0853L-148.713 38.3814L-147.218 44.5047L-143.815 57.8011L-131.465 95.9164L-129.695 103.117" fill="#FFE599"/>
<path d="M-129.294 103.455C-114.753 123.321 -55.8737 186.556 -42.0686 222.734C-28.261 258.915 -40.4685 291.321 -46.4533 320.539C-52.4406 349.758 -71.6646 377.749 -77.9849 398.043C-84.3077 418.337 -94.234 428.882 -84.3829 442.304C-74.5317 455.723 -38.8133 499.37 -18.8857 478.567C1.04442 457.765 25.527 365.064 35.1928 317.488C44.8611 269.909 46.2834 235.507 39.1117 193.098C31.94 150.69 22.2892 92.1358 -7.83511 63.0376C-37.9594 33.9394 -121.393 11.8063 -141.632 18.5134C-161.87 25.2204 -131.275 89.1819 -129.264 103.282M-129.612 103.245C-114.988 123.013 -55.3979 186.075 -41.5453 222.344C-27.6951 258.612 -40.446 291.669 -46.5059 320.863C-52.5683 350.056 -71.5418 377.255 -77.9123 397.506C-84.2802 417.758 -94.6171 428.9 -84.7284 442.376C-74.8372 455.853 -38.5954 499.1 -18.5702 478.365C1.4576 457.627 25.845 365.507 35.4282 317.956C45.0113 270.405 46.2008 235.457 38.9289 193.055C31.6595 150.653 21.9937 92.6369 -8.20071 63.5412C-38.3926 34.4455 -122.08 11.8289 -142.233 18.4858C-162.388 25.1453 -131.312 89.267 -129.124 103.49" stroke="#FFE599" stroke-width="4" stroke-linecap="round"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M417.003 222.546L461.253 210.025L475.408 206.617L497.137 201.446L515.343 198.569L526.014 197L537.244 197.169L546.7 197.153L566.683 198.72L575.547 199.872L592.782 202.876L608.642 206.59L615.566 208.728L622.805 211.717L635.835 216.959L647.435 224.222L659.97 232.556L671.781 242.687L677.376 248.365L682.831 253.944L687.169 259.627L691.496 265.608L698.86 277.662L702.709 284.158L705.44 291.135L708.103 297.393L709.25 304.682L709.737 311.284L707.92 334.973L707.38 344.384L704.764 353.359L703.419 357.385L701.109 362.146L698.993 365.978L695.745 370.163L691.514 373.332L687.014 377.27L681.79 380.505L675.752 383.285L668.883 385.391L659.835 387.745L640.417 392.024L628.794 394.704L605.226 397.894L592.403 398.756L567.201 401.449L542.223 402.511L530.284 402.715L507.828 402.918L498.475 402.478L488.46 400.935L479.246 400.104L461.07 395.556L444.006 390.438L427.556 384.606L412.289 378.124L392.799 369.186L377.02 361.041L370.076 357.446L366.596 354.186L364.371 350.799L363.281 348.44L363.935 342.01L364.029 338.783L363.473 336.469L354.055 312.898L350.031 300.603L347.825 290.885L347.471 284.009L347 281.417L348.546 276.17L349.657 273.954L353.611 268.08L361.069 260.363L370.404 251.668L384.959 240.086L389.629 236.778L397.77 231.374L405.45 227.524L416.881 222.049" fill="#FFDAD6"/>
<path d="M416.892 222.463C433.298 218.455 486.262 201.495 515.644 198.274C545.027 195.056 571.155 198.824 593.189 203.141C615.224 207.459 631.497 213.763 647.854 224.177C664.213 234.591 681.016 249.87 691.336 265.62C701.657 281.372 712.346 299.107 709.781 318.679C707.216 338.253 711.209 369.174 675.945 383.059C640.681 396.942 547.94 405.595 498.196 401.981C448.451 398.369 400.016 372.637 377.474 361.382C354.93 350.126 367.881 346.209 362.935 334.448C357.988 322.688 349.316 301.824 347.796 290.824C346.276 279.823 346.904 277.45 353.818 268.445C360.732 259.438 378.727 244.509 389.284 236.79C399.841 229.071 412.49 224.587 417.163 222.134M417.212 222.365C433.6 218.39 486.26 201.853 515.565 198.584C544.87 195.314 570.983 198.449 593.044 202.748C615.103 207.049 631.472 213.881 647.923 224.381C664.376 234.88 681.509 249.955 691.752 265.746C701.995 281.537 711.985 299.613 709.384 319.126C706.782 338.636 711.362 369.03 676.136 382.819C640.911 396.608 547.849 405.466 498.031 401.859C448.212 398.249 399.714 372.425 377.234 361.17C354.751 349.914 368.05 346.031 363.14 334.323C358.233 322.617 349.273 301.904 347.782 290.925C346.29 279.947 347.289 277.505 354.193 268.459C361.097 259.413 378.737 244.387 389.211 236.649C399.684 228.912 412.323 224.377 417.037 222.037" stroke="#FFDAD6" stroke-width="4" stroke-linecap="round"/>
<path d="M-21.6216 287.855C-15.7997 285.716 -7.78293 285.235 -0.518707 284.607C6.743 283.979 14.5189 283.904 21.9512 284.087C29.3835 284.27 36.896 284.785 44.075 285.701C51.2539 286.619 58.4604 287.945 65.0248 289.587C71.5892 291.231 77.7748 293.233 83.4612 295.56C89.1502 297.887 94.5532 300.632 99.1511 303.55C103.751 306.465 107.843 309.715 111.058 313.061C114.274 316.406 116.795 320.01 118.448 323.626C120.101 327.241 120.838 331.125 120.976 334.756C121.112 338.387 120.683 341.792 119.263 345.411C117.846 349.026 115.455 353.005 112.468 356.456C109.48 359.909 105.705 363.204 101.338 366.125C96.9738 369.047 91.8542 371.607 86.2706 373.979C80.687 376.354 74.3283 378.551 67.8342 380.368C61.34 382.184 54.3316 383.808 47.3132 384.884C40.2923 385.958 33.0507 386.528 25.7188 386.811C18.3843 387.091 10.6611 387.096 3.31406 386.576C-4.03543 386.058 -11.4828 385.007 -18.3757 383.693C-25.2662 382.377 -31.8381 380.713 -38.0388 378.689C-44.2395 376.664 -50.4075 374.224 -55.5848 371.545C-60.7595 368.867 -65.2219 365.784 -69.0948 362.621C-72.9702 359.461 -76.3164 356.048 -78.8273 352.575C-81.3406 349.101 -83.2069 345.421 -84.1625 341.782C-85.1207 338.146 -85.2562 334.375 -84.5714 330.752C-83.8891 327.129 -82.3064 323.556 -80.0639 320.042C-77.8239 316.529 -74.8615 312.921 -71.1241 309.668C-67.3891 306.415 -62.6082 303.252 -57.6416 300.522C-52.6776 297.792 -48.7796 295.665 -41.3323 293.285C-33.8849 290.908 -19.2737 287.452 -12.9552 286.256C-6.63911 285.058 -3.97272 285.27 -3.4259 286.104M34.8693 284.74C42.0482 284.45 49.8542 286.086 56.7221 287.482C63.59 288.879 70.0014 291.031 76.0791 293.12C82.1544 295.21 88.1017 297.424 93.1862 300.021C98.2731 302.616 102.778 305.547 106.596 308.702C110.414 311.855 113.795 315.411 116.098 318.946C118.4 322.485 119.742 326.24 120.417 329.919C121.089 333.597 120.976 337.336 120.133 341.017C119.291 344.7 117.65 348.446 115.358 352.007C113.062 355.57 110.133 359.263 106.37 362.381C102.61 365.501 97.9019 368.149 92.7848 370.726C87.6678 373.304 81.8107 375.781 75.6703 377.843C69.5273 379.907 62.8475 381.734 55.9345 383.105C49.0239 384.476 41.4964 385.492 34.1995 386.073C26.9002 386.653 19.488 386.786 12.146 386.593C4.80404 386.398 -2.72356 385.838 -9.85985 384.902C-16.9961 383.966 -24.1048 382.692 -30.6667 380.976C-37.2286 379.259 -43.6751 377.062 -49.2286 374.607C-54.7821 372.155 -59.6483 369.17 -63.9903 366.255C-68.3323 363.337 -72.2077 360.454 -75.2804 357.109C-78.3557 353.766 -80.8716 349.89 -82.4318 346.181C-83.992 342.475 -84.614 338.562 -84.6442 334.871C-84.6743 331.178 -84.2428 327.624 -82.6099 324.026C-80.9769 320.43 -77.9794 316.602 -74.8415 313.286C-71.7035 309.968 -68.1943 306.975 -63.7846 304.128C-59.3724 301.28 -53.9819 298.615 -48.3682 296.2C-42.757 293.786 -36.604 291.356 -30.1048 289.642C-23.6032 287.928 -16.5547 286.834 -9.3657 285.911C-2.17422 284.99 5.6318 284.292 13.0365 284.112C20.4412 283.932 31.4654 284.52 35.0624 284.828C38.6619 285.135 34.9019 285.155 34.626 285.961" fill="#D1ECFF"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M192.809 -83.8075L185.717 -70.5175L182.923 -65.1959L180.927 -60.394L181.111 -52.8758L180.186 -45.4368L184.554 -25.4591L190.424 -1.12006L198.8 24.3251L204.116 36.379L208.883 47.2189L220.807 67.7925L233.966 85.2916L247.23 102.626L263.516 118.103L272.145 125.973L291.08 141.367L301.521 148.359L321.377 160.822L331.844 166.306L341.569 170.54L352.105 174.321L361.555 177.786L381.747 180.781L401.21 183.183L421.918 183.114L445.424 183L471.628 182.141L494.757 179.031L505.601 176.29L514.113 174.454L522.526 170.99L529.391 167.973L534.938 163.339L540.279 159.944L544.708 155.554L548.072 150.632L550.632 144.683L550.343 138.952L550.575 132.768L548.297 127.513L546.342 120.448L542.088 112.471L537.425 105.748L531 97.5229L523.138 89.1585L507.71 76.7148L488.637 62.3535L455.431 40.4677L387.867 -1.25002L293.427 -66.6443L280.489 -74.9042L268.477 -81.3733L257.789 -86.5206L248.773 -89.4937L239.554 -92.565L225.305 -94.042L210.15 -94.0927L205.795 -94.4128L201.863 -92.6981L197.682 -90.2924L193.484 -84.0706" fill="#D1ECFF"/>
<path d="M193.406 -84.4794C191.296 -77.985 178.039 -67.1324 180.719 -45.1959C183.399 -23.2594 195.633 19.8339 209.489 47.146C223.349 74.4549 241.814 98.0967 263.875 118.661C285.936 139.228 315.391 159.684 341.861 170.537C368.332 181.393 393.909 183.25 422.705 183.786C451.498 184.325 493.326 181.228 514.633 173.76C535.937 166.29 550.804 154.42 550.535 138.968C550.269 123.52 540.116 104.502 513.027 81.054C485.939 57.6087 428.765 25.406 387.998 -1.71272C347.231 -28.8315 298.123 -66.1657 268.427 -81.6648C238.732 -97.164 222.367 -94.2955 209.835 -94.7076C197.299 -95.1196 196.001 -85.8613 193.226 -84.1403M192.972 -84.8439C190.802 -78.4858 177.643 -67.8424 180.37 -45.7981C183.098 -23.7538 195.396 19.948 209.34 47.4249C223.289 74.9018 242.026 98.5404 264.046 119.066C286.066 139.589 315.112 159.827 341.462 170.578C367.813 181.326 393.241 183.114 422.148 183.567C451.058 184.017 493.396 180.759 514.912 173.282C536.428 165.805 551.475 154.125 551.247 138.705C551.016 123.288 540.727 104.195 513.528 80.775C486.328 57.3552 428.886 25.2222 388.055 -1.81415C347.225 -28.8505 298.303 -65.9153 268.554 -81.443C238.802 -96.9738 222.094 -94.5142 209.543 -94.9833C196.989 -95.4492 196.01 -86.0166 193.235 -84.2544" stroke="#D1ECFF" stroke-width="4" stroke-linecap="round"/>
<path d="M-30.2679 302.585C-31.5074 294.51 -31.3958 284.704 -33.2161 273.05M-30.7743 303.52C-31.5499 294.963 -32.0545 287.18 -33.0868 273.052M-26.8807 310.626C-26.4787 292.979 -27.8244 275.961 -30.1475 257.525M-25.6164 310.661C-26.716 294.095 -27.6208 278.255 -29.5473 257.729M-22.2539 316.155C-22.8294 293.597 -24.8497 271.145 -27.0418 243.955M-21.6784 315.409C-24.3557 293.381 -25.4517 271.44 -27.0418 243.239M-17.0853 319.41C-18.0025 301.18 -20.3593 282.944 -23.7182 238.521M-17.1632 319.711C-18.8047 290.307 -21.2021 260.831 -22.801 238.581M-13.073 324.551C-15.5449 290.656 -17.7352 257.508 -18.8064 234.333M-12.8959 324.186C-13.8167 301.088 -15.6883 277.176 -19.3093 233.674M-8.78269 327.302C-11.0633 297.266 -13.3351 268.915 -15.4616 231.5M-8.55959 326.477C-11.6901 290.832 -14.1637 255.174 -15.474 231.332M-4.10106 329.099C-7.06161 295.126 -9.67865 260.108 -11.1448 227.716M-4.61455 329.439C-6.41886 295.227 -8.52595 262.197 -11.6158 228.202M-0.29236 331.421C-2.64734 295.879 -5.32104 260.932 -7.9611 224.846M-0.634098 331.586C-2.72702 299.828 -5.07669 266.991 -7.69019 225.099M3.50217 335.101C0.644321 298.195 -1.2857 262.638 -4.43925 221.673M4.00858 334.775C1.34196 303.509 -0.763355 271.463 -3.83369 221.659M7.93238 336.086C5.4021 299.263 3.19939 263.008 0.291957 219.739M8.08819 335.933C5.18253 297.303 2.48227 257.688 -0.147166 219.707M11.6844 337.154C9.27631 289.969 5.95454 242.677 3.31094 218.036M12.074 337.076C9.95978 300.567 7.03464 264.656 3.55175 218.217M16.1305 337.485C13.7472 306.681 11.3055 276.016 7.91113 216.573M16.3413 337.983C14.691 308.659 12.5361 279.252 7.67563 216.1M19.81 338.463C17.0017 301.568 14.1934 265.037 11.9606 214.778M20.2296 338.362C16.5343 296.774 13.8446 254.887 11.6012 214.939M24.5678 338.972C21.3221 291.59 18.2058 244.306 15.0133 214.271M24.2154 338.91C21.4567 294.58 18.2607 250.023 15.2665 214.273M28.403 339.68C25.809 295.941 22.8909 252.862 18.9583 213.513M28.2862 339.404C25.8975 297.057 23.022 254.606 19.4523 213.508M32.4897 340.322C29.2016 299.339 25.9808 257.8 23.1583 212.411M32.3782 340.465C30.4747 311.235 28.1126 281.408 23.2061 212.434M36.2754 339.326C33.4352 304.698 30.5721 269.229 27.3194 212.447M36.3179 339.549C34.6322 310.321 32.5074 281.55 27.5177 212.33M40.3709 338.75C36.8916 296.761 34.1559 255.849 31.2644 212.999M40.1585 338.485C36.8066 289.657 33.6637 241.457 31.4185 212.622M43.8344 337.344C42.478 305.38 39.9548 273.542 35.645 212.602M44.293 337.19C41.3537 296.014 38.5542 254.971 35.5335 212.803M48.2026 336.226C45.7927 305.139 43.7919 273.817 39.7105 212.425M48.1017 336.305C45.4563 295.835 42.5294 254.515 39.2767 212.551M52.3513 334.913C49.9626 306.016 48.045 278.487 43.6042 214.078M51.8838 334.676C48.9038 291.553 45.8635 248.526 43.7476 214.172M56.075 333.179C53.8315 288.653 50.8869 245.827 47.489 215.237M56.0148 333.062C52.3141 289.303 49.0596 245.363 47.6484 215.131M59.9881 330.755C56.1511 285.595 53.4632 240.21 52.0201 216.833M59.7137 331.359C56.5212 286.008 53.9572 240.399 51.7722 216.5M63.1187 330.22C61.4613 289.147 58.0723 247.762 55.4393 217.058M63.6994 329.954C60.2661 285.701 57.5127 241.009 55.7987 217.145M67.9384 326.868C64.4661 290.91 61.888 254.701 60.5459 219.29M67.3045 327.12C65.6631 290.888 63.0372 255.026 60.1616 219.292M71.3699 324.866C69.5214 290.355 67.2319 255.243 64.622 222.132M71.1114 324.384C69.123 296.069 67.3151 268.203 64.089 222.031M75.3203 321.105C72.6572 296.678 71.0866 273.096 68.8999 225.264M75.3929 320.625C72.7617 298.303 70.713 275.564 68.7016 224.906M79.1892 315.381C78.0312 282.188 75.0069 249.201 72.6537 229.059M78.5712 315.195C77.3831 290.826 75.6373 267.501 72.528 228.731M82.704 309.685C80.3331 283.8 78.2136 256.604 77.2645 232.471M82.4065 310.188C80.3136 282.059 78.3304 253.812 76.7563 232.434M86.1249 308.321C85.0625 290.789 83.9842 273.773 80.7456 235.033M85.962 307.637C85.707 289.84 83.8602 271.707 81.1777 234.866M90.2311 294.051C88.6941 280.852 87.0828 268.635 86.6012 249.704M89.1439 293.594C88.1771 277.869 87.3272 261.924 86.1284 249.287" stroke="#A2F1A6" stroke-linecap="round"/>
<path d="M380.315 30.153C378.789 21.5251 377.502 15.4163 378.141 7.46413M378.803 31.1094C378.969 24.2416 376.71 17.7214 376.93 7.94793M385.422 41.186C385.208 30.2892 384.947 21.4305 382.429 -6.69137M386.378 40.4964C385.217 28.2567 384.533 18.1245 382.21 -5.13707M391.708 47.1918C391.397 28.3123 388.674 12.5802 388.596 -6.73308M391.681 46.6079C391.144 30.9676 389.824 15.522 388.29 -8.00654M399.392 47.5672C398.77 30.4727 396.224 13.0557 393.912 -10.6619M398.364 46.9777C397.083 32.6721 396.208 19.2618 394.979 -9.71099M405.709 47.8035C404.57 33.6063 402.986 21.2943 401.877 -9.93899M404.528 48.2067C403.986 26.2825 401.013 1.93094 400.179 -10.6369M412.846 48.5487C408.532 26.9609 406.093 3.20441 407.813 -12.7473M411.77 47.5005C409.75 35.0077 409.338 20.5658 407.721 -12.1495M417.295 43.9359C416.725 28.6459 416.489 14.2458 412.871 -9.54416M417.867 45.7487C416.341 33.851 415.472 21.3193 413.582 -9.65538M423.3 39.2841C421.497 22.6818 421.113 8.07305 420.835 -8.8824M423.55 41.0136C421.724 21.881 420.171 4.05524 420.463 -8.14279M429.628 37.6353C427.961 27.1806 429.067 17.3599 426.207 -0.49365M429.286 36.5092C429.203 25.5596 428.105 15.6638 426.999 0.582404" stroke="#FFE599" stroke-linecap="round"/>
<path d="M124.665 0.0690471C131.819 -0.112195 140.416 2.58409 151.373 4.77361M123.486 -0.380819C131.081 1.52948 139.058 2.17419 151.421 4.87626M117.955 2.17215C133.532 5.88408 147.724 8.06193 156.088 10.3637M117.895 2.30822C128.289 4.20386 138.399 6.50944 155.314 9.63353M113.954 5.15504C125.186 8.68391 137.613 10.8456 157.799 13.4395M113.626 5.88526C128.267 8.48058 143.434 11.1161 157.388 14.8224M111.252 9.06209C128.406 13.8734 145.338 16.4666 159.05 17.8888M111.425 9.14707C128.53 12.9456 145.69 16.8249 159.809 18.8881M109.192 13.5411C123.478 15.3058 137.282 19.1884 161.897 23.7652M108.633 12.9091C125.474 16.114 144.468 19.6944 161.554 23.5703M106.689 17.0815C127.543 21.7398 149.536 25.5718 161.06 27.2053M106.76 16.8493C126.89 21.1045 146.156 24.3396 161.48 27.5673M104.839 20.9563C121.328 22.6771 138.218 26.8051 160.733 31.3343M105.449 20.3146C125.159 25.2572 144.835 28.9504 161.786 31.9466M104.799 24.3205C119.044 27.6792 134.628 30.0909 160.322 36.1709M103.644 24.5392C120.492 27.6673 136.82 30.3609 160.022 35.2798M104.456 28.4268C124.345 33.2778 143.922 36.2698 159.211 39.4827M103.9 28.2649C126.216 33.1024 148.293 37.5603 159.094 38.8679M103.664 32.0259C121.187 36.0191 136.631 38.4336 157.639 42.3958M104.348 32.6952C115.656 35.3934 127.832 38.0674 157.973 43.4353M103.337 37.1672C119.597 40.6001 134.57 42.8903 154.942 46.5921M103.407 36.8891C120.581 40.1009 137.335 43.0753 155.145 46.9548M107.82 41.8957C118.615 43.4788 131.158 45.2664 152.421 49.3995M108.715 41.6533C123.718 43.8687 138.951 46.9694 152.361 50.2988M112.788 45.5489C125.173 48.4606 137.181 51.8194 147.978 53.5628M112.451 46.8398C123.653 48.9135 134.581 50.4021 146.714 53.7432M113.568 50.9795C121.906 52.1356 129.527 54.5517 143.095 55.6951M114.145 50.8169C123.309 53.5789 131.653 55.2645 143.066 56.7531" stroke="#FFE599" stroke-linecap="round"/>
</g>
<defs>
<clipPath id="clip0_17344_6287">
<rect width="480" height="360" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 18 KiB

View File

@@ -0,0 +1,20 @@
<svg width="480" height="360" viewBox="0 0 480 360" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_17628_45023)">
<rect width="480" height="360" fill="#181010"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M-129.705 103.753L-85.7352 156.891L-65.1941 182.572L-53.3297 199.384L-49.0527 208.143L-45.0712 215.448L-42.194 222.952L-39.1565 229.336L-36.6975 242.805L-36.2167 248.48L-35.205 261.842L-37.306 274.041L-38.7784 286.182L-47.0794 320.426L-50.0168 331.305L-53.3647 342.023L-57.9547 352.351L-74.8924 390.396L-80.0534 404.852L-85.8779 417.314L-87.4179 422.31L-88.5122 427.494L-88.4947 432.693L-86.8846 437.483L-86.1308 439.823L-79.4699 448.703L-72.9418 456.457L-64.1924 465.141L-55.3029 473.689L-45.2815 479.532L-40.997 482.248L-36.4646 483.102L-31.817 483.739L-26.621 483.786L-23.0101 481.992L-18.7831 478.359L-15.325 474.225L-10.9128 467.621L-3.20515 451.624L0.182877 441.219L7.90302 420.073L18.7808 384.363L28.1161 348.776L35.4356 317.523L37.9422 300.172L41.0197 283.722L42.1465 269.025L43.6164 253.674L43.4136 238.14L43.0881 223.894L41.6332 208.516L39.3595 192.839L32.7411 159.292L29.3731 141.448L23.7089 122.832L17.8743 106.289L14.4337 97.3871L11.1558 89.6428L7.04662 82.4146L2.42154 75.3141L-2.20602 69.3211L-8.25842 62.9122L-14.5737 57.9139L-21.0318 52.8804L-29.413 47.4912L-38.9286 43.4249L-48.344 38.4792L-58.115 34.7009L-78.7212 27.147L-98.6188 22.3817L-116.861 18.1625L-131.69 17L-137.142 17.3533L-142.335 18.4381L-143.728 18.7162L-145.39 20.1093L-147.677 23.1333L-148.29 27.1896L-148.738 32.0853L-148.713 38.3814L-147.218 44.5047L-143.815 57.8011L-131.465 95.9164L-129.695 103.117" fill="#FFE79E"/>
<path d="M-129.294 103.455C-114.753 123.321 -55.8737 186.556 -42.0686 222.734C-28.261 258.915 -40.4685 291.321 -46.4533 320.539C-52.4406 349.758 -71.6646 377.749 -77.9849 398.043C-84.3077 418.337 -94.234 428.882 -84.3829 442.304C-74.5317 455.723 -38.8133 499.37 -18.8857 478.567C1.04442 457.765 25.527 365.064 35.1928 317.488C44.8611 269.909 46.2834 235.507 39.1117 193.098C31.94 150.69 22.2892 92.1358 -7.83511 63.0376C-37.9594 33.9394 -121.393 11.8063 -141.632 18.5134C-161.87 25.2204 -131.275 89.1819 -129.264 103.282M-129.612 103.245C-114.988 123.013 -55.3979 186.075 -41.5453 222.344C-27.6951 258.612 -40.446 291.669 -46.5059 320.863C-52.5683 350.056 -71.5418 377.255 -77.9123 397.506C-84.2802 417.758 -94.6171 428.9 -84.7284 442.376C-74.8372 455.853 -38.5954 499.1 -18.5702 478.365C1.4576 457.627 25.845 365.507 35.4282 317.956C45.0113 270.405 46.2008 235.457 38.9289 193.055C31.6595 150.653 21.9937 92.6369 -8.20071 63.5412C-38.3926 34.4455 -122.08 11.8289 -142.233 18.4858C-162.388 25.1453 -131.312 89.267 -129.124 103.49" stroke="#FFE79E" stroke-width="4" stroke-linecap="round"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M417.003 222.546L461.253 210.025L475.408 206.617L497.137 201.446L515.343 198.569L526.014 197L537.244 197.169L546.7 197.153L566.683 198.72L575.547 199.872L592.782 202.876L608.642 206.59L615.566 208.728L622.805 211.717L635.835 216.959L647.435 224.222L659.97 232.556L671.781 242.687L677.376 248.365L682.831 253.944L687.169 259.627L691.496 265.608L698.86 277.662L702.709 284.158L705.44 291.135L708.103 297.393L709.25 304.682L709.737 311.284L707.92 334.973L707.38 344.384L704.764 353.359L703.419 357.385L701.109 362.146L698.993 365.978L695.745 370.163L691.514 373.332L687.014 377.27L681.79 380.505L675.752 383.285L668.883 385.391L659.835 387.745L640.417 392.024L628.794 394.704L605.226 397.894L592.403 398.756L567.201 401.449L542.223 402.511L530.284 402.715L507.828 402.918L498.475 402.478L488.46 400.935L479.246 400.104L461.07 395.556L444.006 390.438L427.556 384.606L412.289 378.124L392.799 369.186L377.02 361.041L370.076 357.446L366.596 354.186L364.371 350.799L363.281 348.44L363.935 342.01L364.029 338.783L363.473 336.469L354.055 312.898L350.031 300.603L347.825 290.885L347.471 284.009L347 281.417L348.546 276.17L349.657 273.954L353.611 268.08L361.069 260.363L370.404 251.668L384.959 240.086L389.629 236.778L397.77 231.374L405.45 227.524L416.881 222.049" fill="#422424"/>
<path d="M416.892 222.463C433.298 218.455 486.262 201.495 515.644 198.274C545.027 195.056 571.155 198.824 593.189 203.141C615.224 207.459 631.497 213.763 647.854 224.177C664.213 234.591 681.016 249.87 691.336 265.62C701.657 281.372 712.346 299.107 709.781 318.679C707.216 338.253 711.209 369.174 675.945 383.059C640.681 396.942 547.94 405.595 498.196 401.981C448.451 398.369 400.016 372.637 377.474 361.382C354.93 350.126 367.881 346.209 362.935 334.448C357.988 322.688 349.316 301.824 347.796 290.824C346.276 279.823 346.904 277.45 353.818 268.445C360.732 259.438 378.727 244.509 389.284 236.79C399.841 229.071 412.49 224.587 417.163 222.134M417.212 222.365C433.6 218.39 486.26 201.853 515.565 198.584C544.87 195.314 570.983 198.449 593.044 202.748C615.103 207.049 631.472 213.881 647.923 224.381C664.376 234.88 681.509 249.955 691.752 265.746C701.995 281.537 711.985 299.613 709.384 319.126C706.782 338.636 711.362 369.03 676.136 382.819C640.911 396.608 547.849 405.466 498.031 401.859C448.212 398.249 399.714 372.425 377.234 361.17C354.751 349.914 368.05 346.031 363.14 334.323C358.233 322.617 349.273 301.904 347.782 290.925C346.29 279.947 347.289 277.505 354.193 268.459C361.097 259.413 378.737 244.387 389.211 236.649C399.684 228.912 412.323 224.377 417.037 222.037" stroke="#422424" stroke-width="4" stroke-linecap="round"/>
<path d="M-21.6216 287.855C-15.7997 285.716 -7.78293 285.235 -0.518707 284.607C6.743 283.979 14.5189 283.904 21.9512 284.087C29.3835 284.27 36.896 284.785 44.075 285.701C51.2539 286.619 58.4604 287.945 65.0248 289.587C71.5892 291.231 77.7748 293.233 83.4612 295.56C89.1502 297.887 94.5532 300.632 99.1511 303.55C103.751 306.465 107.843 309.715 111.058 313.061C114.274 316.406 116.795 320.01 118.448 323.626C120.101 327.241 120.838 331.125 120.976 334.756C121.112 338.387 120.683 341.792 119.263 345.411C117.846 349.026 115.455 353.005 112.468 356.456C109.48 359.909 105.705 363.204 101.338 366.125C96.9738 369.047 91.8542 371.607 86.2706 373.979C80.687 376.354 74.3283 378.551 67.8342 380.368C61.34 382.184 54.3316 383.808 47.3132 384.884C40.2923 385.958 33.0507 386.528 25.7188 386.811C18.3843 387.091 10.6611 387.096 3.31406 386.576C-4.03543 386.058 -11.4828 385.007 -18.3757 383.693C-25.2662 382.377 -31.8381 380.713 -38.0388 378.689C-44.2395 376.664 -50.4075 374.224 -55.5848 371.545C-60.7595 368.867 -65.2219 365.784 -69.0948 362.621C-72.9702 359.461 -76.3164 356.048 -78.8273 352.575C-81.3406 349.101 -83.2069 345.421 -84.1625 341.782C-85.1207 338.146 -85.2562 334.375 -84.5714 330.752C-83.8891 327.129 -82.3064 323.556 -80.0639 320.042C-77.8239 316.529 -74.8615 312.921 -71.1241 309.668C-67.3891 306.415 -62.6082 303.252 -57.6416 300.522C-52.6776 297.792 -48.7796 295.665 -41.3323 293.285C-33.8849 290.908 -19.2737 287.452 -12.9552 286.256C-6.63911 285.058 -3.97272 285.27 -3.4259 286.104M34.8693 284.74C42.0482 284.45 49.8542 286.086 56.7221 287.482C63.59 288.879 70.0014 291.031 76.0791 293.12C82.1544 295.21 88.1017 297.424 93.1862 300.021C98.2731 302.616 102.778 305.547 106.596 308.702C110.414 311.855 113.795 315.411 116.098 318.946C118.4 322.485 119.742 326.24 120.417 329.919C121.089 333.597 120.976 337.336 120.133 341.017C119.291 344.7 117.65 348.446 115.358 352.007C113.062 355.57 110.133 359.263 106.37 362.381C102.61 365.501 97.9019 368.149 92.7848 370.726C87.6678 373.304 81.8107 375.781 75.6703 377.843C69.5273 379.907 62.8475 381.734 55.9345 383.105C49.0239 384.476 41.4964 385.492 34.1995 386.073C26.9002 386.653 19.488 386.786 12.146 386.593C4.80404 386.398 -2.72356 385.838 -9.85985 384.902C-16.9961 383.966 -24.1048 382.692 -30.6667 380.976C-37.2286 379.259 -43.6751 377.062 -49.2286 374.607C-54.7821 372.155 -59.6483 369.17 -63.9903 366.255C-68.3323 363.337 -72.2077 360.454 -75.2804 357.109C-78.3557 353.766 -80.8716 349.89 -82.4318 346.181C-83.992 342.475 -84.614 338.562 -84.6442 334.871C-84.6743 331.178 -84.2428 327.624 -82.6099 324.026C-80.9769 320.43 -77.9794 316.602 -74.8415 313.286C-71.7035 309.968 -68.1943 306.975 -63.7846 304.128C-59.3724 301.28 -53.9819 298.615 -48.3682 296.2C-42.757 293.786 -36.604 291.356 -30.1048 289.642C-23.6032 287.928 -16.5547 286.834 -9.3657 285.911C-2.17422 284.99 5.6318 284.292 13.0365 284.112C20.4412 283.932 31.4654 284.52 35.0624 284.828C38.6619 285.135 34.9019 285.155 34.626 285.961" fill="#243642"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M192.809 -83.8075L185.717 -70.5175L182.923 -65.1959L180.927 -60.394L181.111 -52.8758L180.186 -45.4368L184.554 -25.4591L190.424 -1.12006L198.8 24.3251L204.116 36.379L208.883 47.2189L220.807 67.7925L233.966 85.2916L247.23 102.626L263.516 118.103L272.145 125.973L291.08 141.367L301.521 148.359L321.377 160.822L331.844 166.306L341.569 170.54L352.105 174.321L361.555 177.786L381.747 180.781L401.21 183.183L421.918 183.114L445.424 183L471.628 182.141L494.757 179.031L505.601 176.29L514.113 174.454L522.526 170.99L529.391 167.973L534.938 163.339L540.279 159.944L544.708 155.554L548.072 150.632L550.632 144.683L550.343 138.952L550.575 132.768L548.297 127.513L546.342 120.448L542.088 112.471L537.425 105.748L531 97.5229L523.138 89.1585L507.71 76.7148L488.637 62.3535L455.431 40.4677L387.867 -1.25002L293.427 -66.6443L280.489 -74.9042L268.477 -81.3733L257.789 -86.5206L248.773 -89.4937L239.554 -92.565L225.305 -94.042L210.15 -94.0927L205.795 -94.4128L201.863 -92.6981L197.682 -90.2924L193.484 -84.0706" fill="#243642"/>
<path d="M193.406 -84.4794C191.296 -77.985 178.039 -67.1324 180.719 -45.1959C183.399 -23.2594 195.633 19.8339 209.489 47.146C223.349 74.4549 241.814 98.0967 263.875 118.661C285.936 139.228 315.391 159.684 341.861 170.537C368.332 181.393 393.909 183.25 422.705 183.786C451.498 184.325 493.326 181.228 514.633 173.76C535.937 166.29 550.804 154.42 550.535 138.968C550.269 123.52 540.116 104.502 513.027 81.054C485.939 57.6087 428.765 25.406 387.998 -1.71272C347.231 -28.8315 298.123 -66.1657 268.427 -81.6648C238.732 -97.164 222.367 -94.2955 209.835 -94.7076C197.299 -95.1196 196.001 -85.8613 193.226 -84.1403M192.972 -84.8439C190.802 -78.4858 177.643 -67.8424 180.37 -45.7981C183.098 -23.7538 195.396 19.948 209.34 47.4249C223.289 74.9018 242.026 98.5404 264.046 119.066C286.066 139.589 315.112 159.827 341.462 170.578C367.813 181.326 393.241 183.114 422.148 183.567C451.058 184.017 493.396 180.759 514.912 173.282C536.428 165.805 551.475 154.125 551.247 138.705C551.016 123.288 540.727 104.195 513.528 80.775C486.328 57.3552 428.886 25.2222 388.055 -1.81415C347.225 -28.8505 298.303 -65.9153 268.554 -81.443C238.802 -96.9738 222.094 -94.5142 209.543 -94.9833C196.989 -95.4492 196.01 -86.0166 193.235 -84.2544" stroke="#243642" stroke-width="4" stroke-linecap="round"/>
<path d="M-30.2679 302.585C-31.5074 294.51 -31.3958 284.704 -33.2161 273.05M-30.7743 303.52C-31.5499 294.963 -32.0545 287.18 -33.0868 273.052M-26.8807 310.626C-26.4787 292.979 -27.8244 275.961 -30.1475 257.525M-25.6164 310.661C-26.716 294.095 -27.6208 278.255 -29.5473 257.729M-22.2539 316.155C-22.8294 293.597 -24.8497 271.145 -27.0418 243.955M-21.6784 315.409C-24.3557 293.381 -25.4517 271.44 -27.0418 243.239M-17.0853 319.41C-18.0025 301.18 -20.3593 282.944 -23.7182 238.521M-17.1632 319.711C-18.8047 290.307 -21.2021 260.831 -22.801 238.581M-13.073 324.551C-15.5449 290.656 -17.7352 257.508 -18.8064 234.333M-12.8959 324.186C-13.8167 301.088 -15.6883 277.176 -19.3093 233.674M-8.78269 327.302C-11.0633 297.266 -13.3351 268.915 -15.4616 231.5M-8.55959 326.477C-11.6901 290.832 -14.1637 255.174 -15.474 231.332M-4.10106 329.099C-7.06161 295.126 -9.67865 260.108 -11.1448 227.716M-4.61455 329.439C-6.41886 295.227 -8.52595 262.197 -11.6158 228.202M-0.29236 331.421C-2.64734 295.879 -5.32104 260.932 -7.9611 224.846M-0.634098 331.586C-2.72702 299.828 -5.07669 266.991 -7.69019 225.099M3.50217 335.101C0.644321 298.195 -1.2857 262.638 -4.43925 221.673M4.00858 334.775C1.34196 303.509 -0.763355 271.463 -3.83369 221.659M7.93238 336.086C5.4021 299.263 3.19939 263.008 0.291957 219.739M8.08819 335.933C5.18253 297.303 2.48227 257.688 -0.147166 219.707M11.6844 337.154C9.27631 289.969 5.95454 242.677 3.31094 218.036M12.074 337.076C9.95978 300.567 7.03464 264.656 3.55175 218.217M16.1305 337.485C13.7472 306.681 11.3055 276.016 7.91113 216.573M16.3413 337.983C14.691 308.659 12.5361 279.252 7.67563 216.1M19.81 338.463C17.0017 301.568 14.1934 265.037 11.9606 214.778M20.2296 338.362C16.5343 296.774 13.8446 254.887 11.6012 214.939M24.5678 338.972C21.3221 291.59 18.2058 244.306 15.0133 214.271M24.2154 338.91C21.4567 294.58 18.2607 250.023 15.2665 214.273M28.403 339.68C25.809 295.941 22.8909 252.862 18.9583 213.513M28.2862 339.404C25.8975 297.057 23.022 254.606 19.4523 213.508M32.4897 340.322C29.2016 299.339 25.9808 257.8 23.1583 212.411M32.3782 340.465C30.4747 311.235 28.1126 281.408 23.2061 212.434M36.2754 339.326C33.4352 304.698 30.5721 269.229 27.3194 212.447M36.3179 339.549C34.6322 310.321 32.5074 281.55 27.5177 212.33M40.3709 338.75C36.8916 296.761 34.1559 255.849 31.2644 212.999M40.1585 338.485C36.8066 289.657 33.6637 241.457 31.4185 212.622M43.8344 337.344C42.478 305.38 39.9548 273.542 35.645 212.602M44.293 337.19C41.3537 296.014 38.5542 254.971 35.5335 212.803M48.2026 336.226C45.7927 305.139 43.7919 273.817 39.7105 212.425M48.1017 336.305C45.4563 295.835 42.5294 254.515 39.2767 212.551M52.3513 334.913C49.9626 306.016 48.045 278.487 43.6042 214.078M51.8838 334.676C48.9038 291.553 45.8635 248.526 43.7476 214.172M56.075 333.179C53.8315 288.653 50.8869 245.827 47.489 215.237M56.0148 333.062C52.3141 289.303 49.0596 245.363 47.6484 215.131M59.9881 330.755C56.1511 285.595 53.4632 240.21 52.0201 216.833M59.7137 331.359C56.5212 286.008 53.9572 240.399 51.7722 216.5M63.1187 330.22C61.4613 289.147 58.0723 247.762 55.4393 217.058M63.6994 329.954C60.2661 285.701 57.5127 241.009 55.7987 217.145M67.9384 326.868C64.4661 290.91 61.888 254.701 60.5459 219.29M67.3045 327.12C65.6631 290.888 63.0372 255.026 60.1616 219.292M71.3699 324.866C69.5214 290.355 67.2319 255.243 64.622 222.132M71.1114 324.384C69.123 296.069 67.3151 268.203 64.089 222.031M75.3203 321.105C72.6572 296.678 71.0866 273.096 68.8999 225.264M75.3929 320.625C72.7617 298.303 70.713 275.564 68.7016 224.906M79.1892 315.381C78.0312 282.188 75.0069 249.201 72.6537 229.059M78.5712 315.195C77.3831 290.826 75.6373 267.501 72.528 228.731M82.704 309.685C80.3331 283.8 78.2136 256.604 77.2645 232.471M82.4065 310.188C80.3136 282.059 78.3304 253.812 76.7563 232.434M86.1249 308.321C85.0625 290.789 83.9842 273.773 80.7456 235.033M85.962 307.637C85.707 289.84 83.8602 271.707 81.1777 234.866M90.2311 294.051C88.6941 280.852 87.0828 268.635 86.6012 249.704M89.1439 293.594C88.1771 277.869 87.3272 261.924 86.1284 249.287" stroke="#A2F1A6" stroke-linecap="round"/>
<path d="M380.315 30.153C378.789 21.5251 377.502 15.4163 378.141 7.46413M378.803 31.1094C378.969 24.2416 376.71 17.7214 376.93 7.94793M385.422 41.186C385.208 30.2892 384.947 21.4305 382.429 -6.69137M386.378 40.4964C385.217 28.2567 384.533 18.1245 382.21 -5.13707M391.708 47.1918C391.397 28.3123 388.674 12.5802 388.596 -6.73308M391.681 46.6079C391.144 30.9676 389.824 15.522 388.29 -8.00654M399.392 47.5672C398.77 30.4727 396.224 13.0557 393.912 -10.6619M398.364 46.9777C397.083 32.6721 396.208 19.2618 394.979 -9.71099M405.709 47.8035C404.57 33.6063 402.986 21.2943 401.877 -9.93899M404.528 48.2067C403.986 26.2825 401.013 1.93094 400.179 -10.6369M412.846 48.5487C408.532 26.9609 406.093 3.20441 407.813 -12.7473M411.77 47.5005C409.75 35.0077 409.338 20.5658 407.721 -12.1495M417.295 43.9359C416.725 28.6459 416.489 14.2458 412.871 -9.54416M417.867 45.7487C416.341 33.851 415.472 21.3193 413.582 -9.65538M423.3 39.2841C421.497 22.6818 421.113 8.07305 420.835 -8.8824M423.55 41.0136C421.724 21.881 420.171 4.05524 420.463 -8.14279M429.628 37.6353C427.961 27.1806 429.067 17.3599 426.207 -0.49365M429.286 36.5092C429.203 25.5596 428.105 15.6638 426.999 0.582404" stroke="#FFE79E" stroke-linecap="round"/>
<path d="M124.665 0.0690471C131.819 -0.112195 140.416 2.58409 151.373 4.77361M123.486 -0.380819C131.081 1.52948 139.058 2.17419 151.421 4.87626M117.955 2.17215C133.532 5.88408 147.724 8.06193 156.088 10.3637M117.895 2.30822C128.289 4.20386 138.399 6.50944 155.314 9.63353M113.954 5.15504C125.186 8.68391 137.613 10.8456 157.799 13.4395M113.626 5.88526C128.267 8.48058 143.434 11.1161 157.388 14.8224M111.252 9.06209C128.406 13.8734 145.338 16.4666 159.05 17.8888M111.425 9.14707C128.53 12.9456 145.69 16.8249 159.809 18.8881M109.192 13.5411C123.478 15.3058 137.282 19.1884 161.897 23.7652M108.633 12.9091C125.474 16.114 144.468 19.6944 161.554 23.5703M106.689 17.0815C127.543 21.7398 149.536 25.5718 161.06 27.2053M106.76 16.8493C126.89 21.1045 146.156 24.3396 161.48 27.5673M104.839 20.9563C121.328 22.6771 138.218 26.8051 160.733 31.3343M105.449 20.3146C125.159 25.2572 144.835 28.9504 161.786 31.9466M104.799 24.3205C119.044 27.6792 134.628 30.0909 160.322 36.1709M103.644 24.5392C120.492 27.6673 136.82 30.3609 160.022 35.2798M104.456 28.4268C124.345 33.2778 143.922 36.2698 159.211 39.4827M103.9 28.2649C126.216 33.1024 148.293 37.5603 159.094 38.8679M103.664 32.0259C121.187 36.0191 136.631 38.4336 157.639 42.3958M104.348 32.6952C115.656 35.3934 127.832 38.0674 157.973 43.4353M103.337 37.1672C119.597 40.6001 134.57 42.8903 154.942 46.5921M103.407 36.8891C120.581 40.1009 137.335 43.0753 155.145 46.9548M107.82 41.8957C118.615 43.4788 131.158 45.2664 152.421 49.3995M108.715 41.6533C123.718 43.8687 138.951 46.9694 152.361 50.2988M112.788 45.5489C125.173 48.4606 137.181 51.8194 147.978 53.5628M112.451 46.8398C123.653 48.9135 134.581 50.4021 146.714 53.7432M113.568 50.9795C121.906 52.1356 129.527 54.5517 143.095 55.6951M114.145 50.8169C123.309 53.5789 131.653 55.2645 143.066 56.7531" stroke="#FFE79E" stroke-linecap="round"/>
</g>
<defs>
<clipPath id="clip0_17628_45023">
<rect width="480" height="360" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 18 KiB

View File

@@ -0,0 +1,25 @@
<svg width="480" height="360" viewBox="0 0 480 360" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_17628_43774)">
<rect width="480" height="360" fill="#181610"/>
<path d="M102.132 140.598C107.487 143.723 110.409 150.637 113.81 155.78C117.211 160.922 120.131 165.924 122.533 171.453C124.936 176.984 126.846 182.971 128.223 188.959C129.597 194.947 130.45 201.178 130.787 207.379C131.124 213.58 131.054 220.039 130.247 226.17C129.437 232.298 128.056 238.306 125.939 244.158C123.819 250.009 120.694 255.861 117.537 261.276C114.38 266.689 110.904 271.958 106.994 276.642C103.083 281.327 98.8593 285.431 94.0748 289.381C89.2926 293.33 83.683 297.329 78.2922 300.343C72.9037 303.354 67.6542 305.665 61.7368 307.458C55.8195 309.25 49.0087 310.316 42.7904 311.098C36.5699 311.877 30.5409 312.466 24.423 312.139C18.3073 311.814 12.0982 310.553 6.08973 309.144C0.0812149 307.732 -5.97289 306.226 -11.6281 303.681C-17.281 301.133 -22.7493 297.411 -27.8369 293.864C-32.9246 290.319 -37.8458 286.665 -42.1539 282.407C-46.4642 278.146 -50.2549 273.494 -53.6945 268.309C-57.1364 263.121 -60.3823 256.942 -62.8007 251.284C-65.2192 245.626 -66.9105 240.313 -68.2052 234.355C-69.5022 228.399 -70.3319 221.797 -70.5781 215.537C-70.822 209.277 -70.5803 202.823 -69.6754 196.792C-68.7728 190.761 -67.0564 185.191 -65.1531 179.354C-63.2521 173.518 -61.2599 167.158 -58.2647 161.774C-55.2719 156.391 -51.2008 151.78 -47.1868 147.056C-43.1751 142.334 -39.0197 137.389 -34.1919 133.435C-29.3641 129.479 -23.7295 126.243 -18.2224 123.332C-12.7154 120.419 -7.00774 117.892 -1.15195 115.961C4.70157 114.027 10.881 112.523 16.9078 111.741C22.9368 110.957 28.7903 110.996 35.0154 111.268C41.2382 111.541 48.1721 111.995 54.2513 113.382C60.3327 114.768 65.9127 116.915 71.4927 119.587C77.0727 122.258 81.7181 124.753 87.7357 129.406C93.7534 134.06 103.733 143.161 107.603 147.508C111.473 151.855 112.319 154.398 110.956 155.489M68.4657 118.69C74.7021 119.494 80.51 124.366 85.8233 127.698C91.1389 131.031 95.8983 134.567 100.352 138.685C104.806 142.805 109.046 147.324 112.552 152.41C116.057 157.496 118.774 163.533 121.391 169.198C124.006 174.866 126.597 180.597 128.243 186.407C129.889 192.218 130.855 197.849 131.261 204.064C131.669 210.279 131.573 217.421 130.684 223.695C129.795 229.969 127.789 235.802 125.929 241.701C124.072 247.603 122.394 253.568 119.531 259.096C116.668 264.625 112.615 270.127 108.754 274.871C104.891 279.616 101.009 283.681 96.3542 287.563C91.7019 291.444 86.1516 295.05 80.8314 298.154C75.5136 301.256 70.2185 303.994 64.4402 306.18C58.6619 308.369 52.4027 310.309 46.1617 311.275C39.9207 312.241 33.2922 312.189 26.9964 311.977C20.7007 311.766 14.4437 311.175 8.38965 310.007C2.33783 308.841 -3.63194 307.326 -9.31678 304.983C-15.0016 302.638 -20.7434 299.397 -25.7194 295.943C-30.6953 292.487 -34.7162 288.406 -39.1701 284.252C-43.6218 280.096 -48.6388 275.971 -52.4363 271.017C-56.2338 266.066 -59.4318 260.167 -61.9551 254.54C-64.4807 248.914 -66.0079 243.165 -67.5852 237.263C-69.1626 231.36 -71.0545 225.263 -71.4192 219.121C-71.7816 212.981 -70.5006 206.609 -69.762 200.416C-69.0235 194.222 -68.734 187.825 -66.9834 181.962C-65.2351 176.097 -62.1283 170.821 -59.2699 165.233C-56.4116 159.645 -53.5851 153.273 -49.8355 148.431C-46.0881 143.586 -41.5134 140.134 -36.7836 136.169C-32.0538 132.202 -26.8386 127.87 -21.4614 124.632C-16.0843 121.394 -10.42 118.719 -4.5209 116.733C1.37592 114.747 7.70811 113.784 13.9286 112.718C20.1491 111.65 26.5816 110.257 32.8066 110.332C39.0294 110.407 45.3092 111.795 51.2721 113.166C57.235 114.536 65.7874 117.336 68.5819 118.554C71.3765 119.772 68.5637 118.994 68.044 120.471" fill="#422424"/>
<path d="M25.7556 110.821C31.5909 108.85 38.698 110.932 44.9345 111.832C51.1709 112.734 57.2889 114.256 63.1743 116.227C69.0597 118.197 74.9155 120.549 80.247 123.653C85.5786 126.755 90.5158 130.806 95.1612 134.847C99.8066 138.885 104.174 143.102 108.117 147.888C112.063 152.673 115.895 158.091 118.824 163.558C121.755 169.026 123.895 174.816 125.703 180.69C127.511 186.564 128.853 192.733 129.671 198.803C130.49 204.87 130.825 211.019 130.615 217.1C130.405 223.181 129.824 229.224 128.415 235.286C127.007 241.347 124.732 247.791 122.161 253.47C119.587 259.146 116.588 264.334 112.979 269.352C109.373 274.369 104.903 279.287 100.518 283.579C96.1322 287.872 91.7193 291.733 86.6704 295.109C81.6215 298.486 75.9321 301.427 70.2222 303.84C64.5146 306.255 58.5562 308.23 52.4178 309.596C46.2816 310.961 39.6303 311.725 33.4007 312.03C27.1711 312.334 21.0441 312.302 15.0447 311.425C9.04526 310.546 3.29204 308.791 -2.59566 306.76C-8.48337 304.731 -14.8931 302.279 -20.2861 299.24C-25.6792 296.205 -30.2152 292.512 -34.9564 288.535C-39.6975 284.561 -44.7578 280.198 -48.7308 275.385C-52.7038 270.57 -55.8471 265.061 -58.7944 259.653C-61.7439 254.245 -64.4724 248.748 -66.419 242.935C-68.3656 237.125 -69.7128 230.905 -70.4695 224.781C-71.2263 218.657 -71.3676 212.376 -70.9596 206.197C-70.5493 200.016 -69.5464 193.72 -68.0146 187.702C-66.4851 181.685 -64.2467 175.659 -61.7736 170.094C-59.2981 164.529 -56.6176 159.413 -53.1688 154.316C-49.7224 149.217 -45.485 143.838 -41.088 139.507C-36.691 135.176 -31.9453 131.652 -26.787 128.322C-21.6264 124.993 -15.896 122.028 -10.1314 119.533C-4.36676 117.036 -1.36023 114.538 7.80298 113.343C16.9662 112.148 35.7075 111.414 44.8524 112.363C53.9951 113.313 62.7914 117.492 62.6683 119.042M22.6601 111.77C28.443 109.739 35.8989 111.175 42.2585 111.811C48.6157 112.445 54.9183 113.777 60.8083 115.581C66.696 117.385 72.276 119.831 77.5893 122.639C82.9048 125.448 87.8147 128.566 92.6949 132.429C97.5751 136.292 102.774 141.023 106.871 145.815C110.967 150.61 114.165 155.93 117.269 161.186C120.374 166.442 123.499 171.698 125.496 177.352C127.49 183.005 128.436 188.884 129.243 195.108C130.05 201.334 130.362 208.338 130.339 214.698C130.316 221.057 130.36 227.294 129.108 233.264C127.857 239.233 125.386 244.803 122.835 250.511C120.283 256.222 117.226 262.36 113.793 267.525C110.36 272.692 106.378 277.071 102.236 281.509C98.0971 285.947 93.9349 290.692 88.9475 294.157C83.9625 297.62 77.9768 299.827 72.3216 302.297C66.6663 304.767 60.9154 307.237 55.014 308.982C49.1104 310.725 43.1338 312.266 36.911 312.764C30.6905 313.259 23.9503 312.827 17.6842 311.959C11.4204 311.091 5.06998 309.441 -0.676401 307.557C-6.42506 305.674 -11.4375 303.597 -16.7941 300.654C-22.1507 297.711 -27.8811 293.823 -32.8183 289.896C-37.7578 285.97 -42.255 281.754 -46.4218 277.094C-50.5885 272.435 -54.81 267.309 -57.8234 261.935C-60.8367 256.558 -62.5395 250.641 -64.502 244.846C-66.4623 239.054 -68.4887 233.218 -69.5919 227.176C-70.6952 221.134 -71.2149 214.794 -71.1169 208.592C-71.0188 202.391 -70.2097 196.04 -69.0061 189.973C-67.8026 183.903 -66.3028 177.804 -63.898 172.182C-61.4932 166.558 -58.1858 161.252 -54.5752 156.232C-50.9646 151.21 -46.4491 146.422 -42.2322 142.057C-38.0131 137.692 -34.2019 133.749 -29.2624 130.036C-24.323 126.323 -18.3418 122.387 -12.5886 119.776C-6.83536 117.165 -0.644495 115.833 5.25233 114.37C11.1469 112.907 19.7129 111.136 22.7878 110.996C25.8627 110.855 23.597 111.82 23.6996 113.518" stroke="#422424" stroke-width="8" stroke-linecap="round"/>
<path d="M69.7808 -100.904C76.6919 -104.194 85.1234 -102.697 92.7435 -102.422C100.361 -102.149 107.968 -100.849 115.494 -99.2583C123.021 -97.6676 130.7 -95.3895 137.903 -92.8816C145.104 -90.3738 151.958 -87.859 158.7 -84.211C165.445 -80.5629 172.217 -75.6791 178.363 -70.9979C184.508 -66.3166 190.284 -61.5216 195.57 -56.1235C200.856 -50.7276 205.686 -44.9199 210.078 -38.6115C214.471 -32.3008 218.649 -25.098 221.924 -18.2684C225.2 -11.4388 227.488 -4.88007 229.731 2.37052C231.974 9.62339 234.197 17.716 235.382 25.242C236.567 32.7679 236.811 39.9571 236.845 47.5285C236.879 55.1023 236.677 63.0993 235.585 70.6822C234.495 78.2628 232.633 85.7682 230.299 93.0188C227.967 100.269 225.081 107.331 221.585 114.186C218.086 121.04 213.664 127.968 209.312 134.142C204.963 140.316 200.712 145.817 195.481 151.235C190.252 156.654 184.068 161.899 177.934 166.653C171.798 171.41 165.395 176.055 158.668 179.769C151.942 183.48 144.81 186.391 137.57 188.936C130.333 191.48 122.804 193.571 115.243 195.037C107.68 196.502 99.7572 197.529 92.1942 197.727C84.6311 197.927 77.3848 197.192 69.8628 196.232C62.3431 195.271 54.4472 193.874 47.0642 191.965C39.6812 190.057 32.4692 187.816 25.5603 184.782C18.6514 181.749 12.0411 177.921 5.60866 173.761C-0.821545 169.603 -7.23124 164.972 -13.0232 159.828C-18.8152 154.685 -24.3405 148.789 -29.1432 142.899C-33.9436 137.007 -37.9941 130.979 -41.8349 124.488C-45.678 117.995 -49.2407 111.031 -52.1971 103.949C-55.1535 96.8649 -57.8773 89.5278 -59.5709 81.9905C-61.2645 74.4531 -61.8754 66.3446 -62.3564 58.7276C-62.8373 51.1129 -63.0516 43.8737 -62.4544 36.2908C-61.8572 28.7102 -60.5716 20.6677 -58.7777 13.2373C-56.9815 5.80465 -54.4879 -1.24567 -51.6865 -8.30282C-48.8874 -15.3577 -45.7714 -22.565 -41.9762 -29.1033C-38.1787 -35.6416 -33.7635 -41.6792 -28.9129 -47.5279C-24.0646 -53.3766 -18.6465 -59.041 -12.8773 -64.1956C-7.11043 -69.3525 -0.705296 -74.2545 5.69071 -78.4669C12.0867 -82.6771 18.5716 -86.357 25.4965 -89.4703C32.4236 -92.5812 38.3341 -95.0231 47.2443 -97.1442C56.1567 -99.2629 72.2402 -101.939 78.9622 -102.19C85.6842 -102.442 87.494 -101.159 87.5761 -98.653M206.741 -42.4962C213.069 -38.1518 214.648 -29.736 218.343 -23.0202C222.038 -16.3044 226.321 -9.31326 228.908 -2.20149C231.495 4.908 232.514 12.1358 233.868 19.6481C235.22 27.1604 236.779 35.3873 237.025 42.8701C237.271 50.3528 236.335 56.9843 235.345 64.5422C234.358 72.1 233.077 80.7911 231.099 88.2169C229.12 95.6405 226.572 102.258 223.474 109.09C220.379 115.92 216.606 122.706 212.522 129.199C208.437 135.694 203.942 142.453 198.966 148.054C193.99 153.654 188.526 158.044 182.666 162.81C176.806 167.575 170.464 172.671 163.804 176.646C157.144 180.622 149.836 183.836 142.706 186.66C135.576 189.484 128.341 191.944 121.029 193.592C113.719 195.242 106.377 195.938 98.8386 196.555C91.3006 197.169 83.5461 197.793 75.8007 197.288C68.053 196.78 59.838 195.406 52.357 193.514C44.8783 191.625 37.9466 188.913 30.9215 185.941C23.8963 182.968 16.7116 179.493 10.2108 175.681C3.70991 171.872 -2.22338 167.944 -8.08601 163.074C-13.9509 158.206 -19.8455 152.111 -24.9719 146.47C-30.0982 140.83 -34.7072 135.482 -38.842 129.231C-42.9746 122.979 -46.5236 115.961 -49.7741 108.963C-53.0245 101.965 -56.357 94.6824 -58.3401 87.2384C-60.3231 79.7921 -60.8588 71.8451 -61.6726 64.2896C-62.484 56.734 -63.3958 49.3742 -63.2203 41.9074C-63.0425 34.4383 -62.1421 26.9829 -60.6103 19.4888C-59.0786 11.9947 -56.6259 4.15699 -54.0274 -3.05946C-51.4266 -10.2759 -48.5956 -17.1942 -45.0101 -23.8053C-41.4269 -30.4164 -37.1553 -36.6634 -32.5258 -42.7283C-27.894 -48.7932 -22.8315 -54.7444 -17.2242 -60.1948C-11.6168 -65.6453 -5.20484 -71.0684 1.11823 -75.4288C7.4413 -79.7892 13.949 -83.1118 20.7097 -86.357C27.4704 -89.6045 34.3725 -92.6313 41.6825 -94.9025C48.9926 -97.176 56.9477 -98.8965 64.5655 -99.9957C72.1832 -101.097 79.8785 -101.493 87.3892 -101.505C94.8998 -101.518 102.185 -101.058 109.627 -100.066C117.072 -99.074 124.685 -97.7472 132.047 -95.5511C139.41 -93.3573 146.87 -90.3783 153.806 -86.8964C160.743 -83.4122 167.433 -79.2248 173.662 -74.6505C179.894 -70.0762 185.7 -64.6917 191.193 -59.4507C196.684 -54.2073 204.407 -46.2899 206.616 -43.1949C208.824 -40.0975 206.363 -42.4393 204.443 -40.8736" fill="#FCEECA"/>
<path d="M203.455 -47.1637C210.07 -43.1151 212.796 -34.8791 216.696 -28.3454C220.596 -21.8117 224.093 -15.1027 226.858 -7.96139C229.625 -0.817764 231.677 7.01542 233.293 14.5072C234.911 21.9968 235.987 29.3725 236.561 36.9827C237.136 44.5928 237.398 52.5171 236.737 60.1682C236.076 67.817 234.487 75.4613 232.597 82.8826C230.708 90.3039 228.276 97.691 225.399 104.698C222.52 111.703 219.14 118.469 215.331 124.921C211.522 131.372 207.376 137.485 202.543 143.409C197.711 149.333 192.092 155.363 186.339 160.461C180.586 165.557 174.52 169.919 168.022 173.986C161.523 178.053 154.304 181.815 147.348 184.862C140.389 187.909 133.566 190.36 126.279 192.274C118.99 194.186 111.233 195.538 103.617 196.339C95.9995 197.142 88.3065 197.42 80.5771 197.09C72.8476 196.76 64.7694 195.777 57.236 194.354C49.7048 192.934 42.4267 191.154 35.3787 188.565C28.3285 185.973 21.6636 182.509 14.937 178.808C8.2128 175.11 1.0851 171.012 -4.97584 166.367C-11.0345 161.72 -16.1426 156.454 -21.4217 150.937C-26.6986 145.421 -32.2239 139.556 -36.6436 133.261C-41.0611 126.966 -44.5987 120.016 -47.9312 113.171C-51.2637 106.328 -54.3455 99.4252 -56.6386 92.1973C-58.9294 84.9695 -60.607 77.3525 -61.6852 69.8061C-62.761 62.2596 -63.2146 54.5584 -63.1007 46.9164C-62.9867 39.2721 -62.2732 31.4981 -61.0013 23.9448C-59.7294 16.3938 -57.7441 8.8019 -55.4738 1.60365C-53.2012 -5.59232 -50.7053 -12.3878 -47.3728 -19.2401C-44.038 -26.0901 -39.8827 -33.2838 -35.4697 -39.5012C-31.0568 -45.7186 -26.245 -51.1964 -20.8952 -56.5444C-15.5454 -61.8948 -9.54833 -66.9538 -3.36658 -71.5941C2.81516 -76.2344 9.51662 -80.7677 16.1953 -84.3861C22.8739 -88.0046 29.5936 -90.847 36.7031 -93.3003C43.8148 -95.7559 51.2183 -97.6015 58.8521 -99.1195C66.4858 -100.637 74.8147 -102.11 82.5077 -102.408C90.1984 -102.708 97.4789 -101.825 105.005 -100.917C112.532 -100.009 120.243 -99.0398 127.667 -96.962C135.089 -94.8843 142.595 -91.7482 149.543 -88.4484C156.49 -85.1463 163.037 -81.3321 169.355 -77.1629C175.676 -72.9937 180.041 -70.9022 187.461 -63.4332C194.878 -55.9641 208.502 -40.4866 213.865 -32.3485C219.231 -24.2126 221.752 -15.9744 219.648 -14.6089M142.258 -92.0555C149.743 -91.5229 156.028 -84.9574 162.741 -80.886C169.456 -76.8124 176.597 -72.3951 182.546 -67.6229C188.496 -62.8506 193.51 -57.944 198.441 -52.2478C203.369 -46.5493 207.991 -39.8358 212.122 -33.4386C216.25 -27.0414 219.926 -20.8013 223.215 -13.8625C226.502 -6.92137 229.76 0.977812 231.85 8.20109C233.942 15.4266 234.911 22.0446 235.759 29.4841C236.607 36.9235 237.124 45.0025 236.942 52.8334C236.762 60.6666 236.156 68.9003 234.674 76.4786C233.19 84.0569 230.735 91.2529 228.05 98.2986C225.367 105.342 222.044 112.081 218.57 118.746C215.096 125.412 211.718 132.271 207.212 138.298C202.705 144.321 197.118 149.679 191.532 154.897C185.943 160.118 180.034 165.206 173.679 169.614C167.324 174.02 160.128 177.991 153.397 181.344C146.668 184.698 140.452 187.399 133.297 189.734C126.145 192.069 118.146 194.117 110.478 195.349C102.808 196.58 94.9806 197.137 87.2785 197.121C79.5787 197.106 71.9131 196.436 64.2702 195.255C56.6274 194.072 48.6905 192.242 41.4215 190.028C34.1547 187.814 27.3028 185.199 20.6675 181.969C14.0344 178.74 7.93699 174.942 1.61392 170.652C-4.71143 166.362 -11.6727 161.633 -17.2823 156.233C-22.8897 150.835 -27.5374 144.31 -32.0369 138.25C-36.5388 132.192 -40.5254 126.498 -44.2865 119.877C-48.0498 113.255 -51.9931 105.684 -54.6099 98.5262C-57.2244 91.3712 -58.494 84.3983 -59.9756 76.9429C-61.4549 69.4875 -63.1098 61.5063 -63.4973 53.7915C-63.8825 46.0767 -63.3377 38.2708 -62.2938 30.6515C-61.2521 23.0345 -59.2234 15.3333 -57.238 8.0782C-55.255 0.823058 -53.3129 -5.99058 -50.3884 -12.877C-47.464 -19.7635 -43.9856 -26.7456 -39.6912 -33.2429C-35.3945 -39.7402 -29.7188 -46.0714 -24.6106 -51.8586C-19.5025 -57.6459 -14.7226 -63.1032 -9.0423 -67.9619C-3.35974 -72.823 2.96561 -77.2539 9.47787 -81.0203C15.9924 -84.7867 22.9036 -87.8362 30.0335 -90.5671C37.1658 -93.2958 44.7972 -95.4851 52.2669 -97.4058C59.7388 -99.3243 67.2198 -101.32 74.8558 -102.085C82.494 -102.849 90.4036 -102.67 98.0897 -101.991C105.774 -101.313 113.578 -99.7385 120.968 -98.0134C128.36 -96.2907 138.893 -93.3049 142.429 -91.6436C145.962 -89.98 143.026 -90.3009 142.173 -88.0388" stroke="#FCEECA" stroke-width="8" stroke-linecap="round"/>
<path d="M293.558 163.643C297.069 156.779 304.949 153.769 311.231 149.496C317.513 145.224 324.39 141.478 331.253 138.007C338.116 134.536 345.091 130.976 352.413 128.671C359.734 126.367 367.552 125.283 375.175 124.177C382.797 123.07 390.52 122.126 398.149 122.037C405.778 121.947 413.407 122.387 420.954 123.64C428.504 124.894 436.267 127.23 443.436 129.553C450.607 131.874 457.186 134.172 463.967 137.567C470.75 140.962 477.867 145.512 484.13 149.927C490.396 154.342 496.022 158.775 501.556 164.053C507.089 169.332 512.632 175.439 517.334 181.597C522.035 187.753 526.147 194.269 529.76 201C533.375 207.73 536.552 214.729 539.018 221.98C541.485 229.229 543.069 237.023 544.56 244.5C546.05 251.978 547.612 259.247 547.963 266.847C548.314 274.443 547.612 282.327 546.666 290.088C545.722 297.85 544.341 305.94 542.292 313.413C540.242 320.888 537.555 327.96 534.373 334.932C531.189 341.903 527.423 348.785 523.199 355.241C518.976 361.697 514.045 368.027 509.026 373.663C504.005 379.296 498.912 384.252 493.077 389.047C487.244 393.839 480.613 398.392 474.021 402.424C467.431 406.453 460.564 410.282 453.534 413.23C446.504 416.179 439.308 418.392 431.848 420.119C424.385 421.849 416.475 423.09 408.766 423.599C401.057 424.11 393.155 423.778 385.594 423.175C378.033 422.573 370.782 421.677 363.406 419.982C356.028 418.289 348.515 415.899 341.33 413.012C334.148 410.124 326.815 406.699 320.3 402.655C313.784 398.611 308.017 393.656 302.232 388.751C296.446 383.846 290.652 378.939 285.585 373.223C280.52 367.505 275.929 360.907 271.836 354.449C267.744 347.993 264.204 341.472 261.031 334.478C257.858 327.484 254.923 319.873 252.798 312.483C250.674 305.094 249.162 297.733 248.283 290.139C247.405 282.544 247.161 274.668 247.526 266.913C247.893 259.156 249.033 251.204 250.48 243.598C251.927 235.994 253.664 228.5 256.21 221.284C258.756 214.065 262.025 207.006 265.757 200.289C269.486 193.572 271.963 188.656 278.587 180.979C285.211 173.304 298.626 159.884 305.5 154.236C312.377 148.591 318.238 145.242 319.845 147.1M435.506 127.705C443.21 127.187 451.387 132.183 458.4 135.194C465.414 138.206 471.231 141.631 477.588 145.773C483.946 149.918 490.832 155.132 496.542 160.053C502.254 164.974 507.048 169.435 511.857 175.299C516.667 181.167 521.385 188.605 525.401 195.247C529.415 201.888 532.996 208.177 535.95 215.151C538.905 222.125 541.248 229.524 543.126 237.087C545.006 244.647 546.468 252.954 547.229 260.519C547.992 268.086 548.186 274.902 547.705 282.485C547.224 290.065 546.11 298.434 544.343 306.013C542.577 313.594 539.942 320.831 537.106 327.96C534.268 335.09 531.043 342.238 527.323 348.792C523.603 355.349 519.518 361.282 514.786 367.292C510.052 373.299 504.72 379.599 498.928 384.843C493.136 390.089 486.453 394.682 480.03 398.767C473.609 402.852 467.283 406.263 460.393 409.352C453.504 412.44 445.987 415.104 438.695 417.297C431.405 419.489 424.207 421.574 416.649 422.511C409.088 423.448 401.026 423.086 393.337 422.916C385.646 422.749 378.017 422.74 370.513 421.498C363.012 420.257 355.663 418.039 348.314 415.468C340.968 412.898 333.143 409.778 326.432 406.075C319.719 402.376 314.105 397.844 308.042 393.262C301.979 388.68 295.523 383.919 290.053 378.586C284.58 373.253 279.599 367.514 275.218 361.262C270.837 355.007 267.206 347.963 263.764 341.067C260.325 334.173 257.017 327.11 254.576 319.892C252.135 312.673 250.355 305.346 249.115 297.761C247.877 290.175 247.116 282.228 247.147 274.379C247.179 266.53 248.134 258.244 249.306 250.663C250.475 243.082 252.019 236.106 254.173 228.897C256.329 221.685 258.875 214.289 262.23 207.396C265.588 200.502 269.898 193.806 274.309 187.54C278.717 181.277 283.566 175.409 288.69 169.808C293.814 164.209 299.116 158.83 305.049 153.938C310.982 149.047 317.522 144.307 324.287 140.465C331.052 136.623 338.374 133.45 345.638 130.884C352.903 128.319 360.395 126.417 367.872 125.07C375.35 123.723 382.877 123.219 390.504 122.807C398.133 122.394 405.983 121.842 413.64 122.593C421.296 123.345 432.734 126.067 436.445 127.311C440.154 128.555 436.682 127.576 435.898 130.06" fill="#244236"/>
<path d="M335.765 135.377C341.381 130.057 350.125 129.246 357.426 127.23C364.729 125.214 372.08 124.14 379.579 123.278C387.076 122.417 394.753 121.801 402.417 122.06C410.078 122.319 418.083 123.361 425.553 124.836C433.02 126.309 440.139 128.337 447.228 130.903C454.319 133.466 461.353 136.639 468.096 140.22C474.836 143.801 481.457 147.851 487.682 152.39C493.908 156.93 500.064 161.888 505.446 167.46C510.828 173.029 515.573 179.501 519.973 185.81C524.374 192.12 528.491 198.498 531.846 205.313C535.204 212.131 537.745 219.442 540.116 226.713C542.484 233.985 544.772 241.433 546.063 248.943C547.355 256.455 547.845 264.132 547.859 271.777C547.872 279.419 547.371 287.211 546.145 294.803C544.916 302.398 542.805 309.935 540.496 317.335C538.185 324.735 535.509 332.288 532.281 339.207C529.051 346.128 525.514 352.579 521.117 358.856C516.72 365.136 511.174 371.312 505.897 376.879C500.618 382.446 495.51 387.569 489.449 392.259C483.386 396.946 476.279 401.345 469.529 405.012C462.782 408.678 456.113 411.617 448.96 414.256C441.805 416.893 434.121 419.287 426.606 420.841C419.088 422.396 411.443 423.253 403.864 423.583C396.283 423.911 388.638 423.668 381.12 422.809C373.603 421.947 366.067 420.44 358.759 418.421C351.449 416.403 344.324 413.739 337.269 410.696C330.212 407.652 322.948 404.334 316.424 400.158C309.903 395.984 303.876 390.726 298.134 385.645C292.394 380.563 286.839 375.447 281.978 369.667C277.113 363.89 272.807 357.599 268.955 350.971C265.103 344.343 261.802 337.016 258.862 329.901C255.922 322.785 253.18 315.66 251.308 308.281C249.439 300.899 248.14 293.376 247.645 285.621C247.15 277.864 247.736 269.444 248.34 261.742C248.947 254.038 249.626 246.883 251.274 239.394C252.92 231.905 255.334 223.921 258.222 216.805C261.11 209.691 264.738 203.178 268.602 196.706C272.468 190.234 276.651 183.925 281.412 177.968C286.172 172.014 291.519 166.207 297.163 160.972C302.809 155.735 308.141 151.086 315.28 146.557C322.419 142.025 334.826 135.819 340.002 133.787C345.176 131.757 345.297 132.057 346.334 134.374M309.706 150.58C314.311 144.513 323.479 142.264 330.342 138.745C337.203 135.224 343.786 131.81 350.879 129.459C357.975 127.107 365.415 125.853 372.912 124.632C380.411 123.411 388.088 122.206 395.87 122.138C403.65 122.071 411.999 123.237 419.601 124.227C427.203 125.219 434.235 125.957 441.483 128.083C448.734 130.209 456.14 133.416 463.101 136.983C470.06 140.55 477.013 145.029 483.242 149.487C489.472 153.943 495.063 158.582 500.484 163.723C505.904 168.864 510.93 174.305 515.762 180.33C520.595 186.358 525.673 193.217 529.478 199.879C533.284 206.544 536.061 213.187 538.595 220.308C541.13 227.428 543.298 235.073 544.688 242.601C546.079 250.129 546.48 257.857 546.933 265.474C547.389 273.092 548.114 280.666 547.417 288.311C546.721 295.955 544.845 303.88 542.753 311.344C540.66 318.806 537.993 326.098 534.859 333.09C531.723 340.08 528.137 346.852 523.943 353.285C519.747 359.72 514.709 365.86 509.692 371.695C504.675 377.53 499.476 383.232 493.841 388.295C488.204 393.361 482.476 398.027 475.875 402.08C469.276 406.133 461.39 409.821 454.237 412.614C447.084 415.409 440.239 417.049 432.963 418.845C425.685 420.644 418.281 422.683 410.577 423.397C402.873 424.112 394.368 423.645 386.734 423.129C379.103 422.612 372.242 421.968 364.786 420.3C357.33 418.634 349.181 416.043 342.003 413.129C334.826 410.217 328.126 406.742 321.721 402.827C315.316 398.914 309.517 394.38 303.57 389.645C297.623 384.911 291.341 380.029 286.037 374.419C280.733 368.808 275.782 362.474 271.745 355.979C267.708 349.482 264.95 342.499 261.816 335.438C258.682 328.38 255.217 320.991 252.942 313.614C250.665 306.235 249.134 298.64 248.158 291.172C247.185 283.701 246.804 276.329 247.096 268.796C247.385 261.266 248.466 253.689 249.902 245.98C251.338 238.271 253.161 229.948 255.712 222.544C258.263 215.139 261.538 208.211 265.206 201.558C268.871 194.903 273.177 188.752 277.71 182.619C282.242 176.488 286.874 170.076 292.399 164.768C297.924 159.46 307.564 152.889 310.864 150.77C314.167 148.651 310.944 150.142 312.212 152.058" stroke="#244236" stroke-width="8" stroke-linecap="round"/>
<path d="M386.373 19.5247C389.583 14.5303 396.268 10.9995 401.473 7.89729C406.675 4.79247 411.891 2.81929 417.596 0.903603C423.298 -1.00947 429.704 -2.8964 435.694 -3.58898C441.68 -4.27894 447.633 -4.05679 453.523 -3.24661C459.416 -2.43643 465.39 -0.648807 471.04 1.27472C476.691 3.19824 482.214 5.31517 487.426 8.29454C492.639 11.2765 497.91 14.8857 502.315 19.164C506.72 23.4449 510.573 28.9411 513.863 33.9694C517.151 38.9978 519.902 43.8797 522.046 49.3315C524.188 54.7832 525.766 60.7655 526.725 66.6824C527.684 72.5967 528.028 78.7724 527.798 84.8304C527.566 90.8885 526.858 97.1974 525.339 103.028C523.82 108.859 521.642 114.483 518.691 119.817C515.739 125.151 511.652 130.399 507.629 135.033C503.607 139.669 499.259 144.034 494.557 147.627C489.854 151.223 484.866 154.041 479.416 156.607C473.966 159.171 467.68 161.683 461.854 163.021C456.029 164.359 450.512 164.79 444.465 164.631C438.419 164.471 431.533 163.402 425.575 162.062C419.617 160.718 414.089 159.119 408.717 156.578C403.346 154.038 398.109 150.429 393.342 146.825C388.577 143.218 384.013 139.562 380.121 134.947C376.231 130.329 372.811 124.474 370.003 119.119C367.194 113.764 364.821 108.464 363.268 102.809C361.716 97.1556 360.973 91.291 360.687 85.1911C360.397 79.0912 360.507 72.1498 361.538 66.212C362.57 60.2715 364.555 55.0785 366.879 49.5536C369.205 44.0287 368.888 40.4273 375.489 33.0599C382.088 25.6951 397.51 10.861 406.48 5.35175C415.447 -0.157472 428.79 -1.23423 429.303 0.0097909M460.515 -1.35967C466.291 -1.41979 472.692 1.71117 478.267 4.11035C483.839 6.50953 489.143 9.65093 493.955 13.038C498.767 16.4251 503.133 19.8278 507.137 24.4354C511.138 29.043 515.171 35.2918 517.972 40.6861C520.77 46.0777 522.354 51.1217 523.93 56.793C525.508 62.4668 526.78 68.747 527.439 74.7267C528.098 80.7037 528.624 86.7932 527.879 92.6657C527.134 98.5355 525.146 104.437 522.966 109.951C520.785 115.466 518.06 120.601 514.801 125.752C511.545 130.904 507.866 136.543 503.422 140.858C498.98 145.176 493.374 148.508 488.14 151.652C482.907 154.796 477.477 157.624 472.02 159.73C466.559 161.839 461.195 163.598 455.389 164.299C449.584 164.999 443.186 164.662 437.186 163.941C431.189 163.219 425.242 161.711 419.404 159.966C413.566 158.222 407.368 156.401 402.163 153.471C396.961 150.541 392.495 146.642 388.181 142.385C383.864 138.13 379.738 132.79 376.271 127.932C372.803 123.071 369.885 118.612 367.379 113.221C364.876 107.829 362.33 101.504 361.236 95.5875C360.145 89.6706 360.564 83.6544 360.825 77.7217C361.085 71.7891 361.304 65.9166 362.797 59.9866C364.292 54.0593 367.043 47.7033 369.789 42.147C372.537 36.5933 375.447 31.3298 379.279 26.6569C383.114 21.984 388.022 17.724 392.792 14.1148C397.562 10.5055 402.645 7.64117 407.899 5.00155C413.157 2.35931 418.609 -0.269852 424.325 -1.73079C430.043 -3.19173 436.196 -3.80067 442.199 -3.76669C448.204 -3.73533 457.363 -2.10974 460.349 -1.53216C463.332 -0.951971 460.148 -1.57659 460.104 -0.301214" fill="#423324"/>
<path d="M409.327 3.74958C413.868 0.158652 420.287 -0.209849 426.055 -1.45125C431.822 -2.69266 437.895 -3.69624 443.936 -3.70408C449.978 -3.70931 456.472 -2.8364 462.3 -1.49568C468.128 -0.154966 473.575 1.8156 478.908 4.34284C484.238 6.86747 489.482 10.0821 494.288 13.6599C499.098 17.2378 503.703 21.3226 507.749 25.8126C511.795 30.3052 515.671 35.2107 518.566 40.6049C521.457 45.9992 523.515 52.316 525.107 58.1806C526.699 64.0479 527.853 69.8289 528.116 75.7955C528.379 81.7621 527.613 88.0737 526.686 93.9854C525.761 99.8971 524.675 105.733 522.562 111.26C520.452 116.785 517.406 122.18 514.017 127.14C510.63 132.1 506.697 136.867 502.231 141.025C497.766 145.181 492.413 148.887 487.223 152.088C482.034 155.29 476.639 158.267 471.092 160.235C465.543 162.203 459.953 163.251 453.94 163.893C447.93 164.536 441.006 164.714 435.019 164.089C429.032 163.465 423.731 162.046 418.02 160.143C412.307 158.24 405.972 155.799 400.748 152.669C395.525 149.535 391.034 145.471 386.683 141.347C382.333 137.223 378.06 132.837 374.645 127.919C371.23 123.003 368.372 117.447 366.189 111.846C364.003 106.248 362.445 100.294 361.539 94.3277C360.635 88.3638 360.371 82.0966 360.754 76.0516C361.137 70.0066 362.325 63.8022 363.834 58.0604C365.342 52.316 367.111 46.9662 369.805 41.5928C372.498 36.2195 376.135 30.4254 379.993 25.8152C383.854 21.205 385.816 18.3093 392.956 13.9317C400.097 9.55674 415.342 2.17888 422.837 -0.439836C430.335 -3.05593 437.635 -3.11082 437.934 -1.7701M379.17 26.6515C381.681 21.2861 388.298 17.8206 393.027 14.2506C397.753 10.6805 402.077 7.82139 407.53 5.23404C412.98 2.64669 419.643 0.195241 425.739 -1.27354C431.836 -2.74232 438.114 -3.46886 444.103 -3.57863C450.09 -3.6884 455.954 -3.06377 461.662 -1.93214C467.37 -0.797883 472.822 0.728392 478.348 3.21904C483.873 5.70969 489.938 9.26926 494.815 13.0092C499.691 16.7491 503.68 21.1894 507.603 25.6558C511.524 30.1223 515.572 34.6932 518.344 39.8078C521.114 44.9198 522.752 50.4003 524.227 56.3407C525.704 62.2812 526.649 69.2148 527.199 75.4479C527.749 81.6811 528.384 87.8567 527.53 93.7423C526.676 99.6253 524.422 105.108 522.07 110.751C519.717 116.391 516.779 122.561 513.418 127.595C510.057 132.626 506.058 136.765 501.911 140.947C497.766 145.126 493.593 149.65 488.536 152.671C483.48 155.692 477.298 157.242 471.574 159.074C465.853 160.909 460.06 162.707 454.203 163.669C448.344 164.63 442.464 165.326 436.434 164.842C430.403 164.359 423.869 162.785 418.02 160.768C412.172 158.748 406.336 155.826 401.34 152.731C396.343 149.634 392.316 146.344 388.033 142.191C383.753 138.038 379.191 132.861 375.653 127.82C372.115 122.778 369.229 117.504 366.806 111.94C364.386 106.376 362.044 100.42 361.127 94.4323C360.212 88.4474 360.911 82.0208 361.309 76.0203C361.708 70.0223 362.117 64.1995 363.516 58.4367C364.917 52.6714 367.025 46.8224 369.703 41.4308C372.384 36.0392 377.823 28.4758 379.597 26.0844C381.371 23.6957 379.256 26.121 380.35 27.0906" stroke="#423324" stroke-width="8" stroke-linecap="round"/>
<path d="M13.3778 276.18C18.8365 270.706 24.7351 262.829 31.6187 255.671M13.2266 276.218C18.4196 269.936 24.1601 263.89 31.0391 256.822M11.4627 283.931C20.4858 274.382 27.8619 266.386 43.0126 249.424M11.7743 283.712C18.5433 276.414 25.5804 269.044 41.9383 249.075M11.3322 289.121C24.9092 274.903 38.1334 259.457 53.0803 242.766M11.2543 289.74C27.1861 271.697 42.9119 253.792 52.6222 243.313M11 295.351C26.0591 278.543 39.7072 262.714 58.0603 243.169M11.6849 294.779C24.8817 280.235 37.9708 264.757 57.8267 242.59M11.2474 301.176C31.1147 276.806 52.3679 253.992 63.2602 242.502M11.1878 300.778C21.4594 288.738 31.6049 277.061 63.3175 242M12.8028 304.427C28.0406 287.33 42.0391 270.875 67.3995 242.246M13.2541 304.343C32.4479 283.104 51.4974 261.324 67.6217 242.863M14.4429 308.274C25.7522 294.32 38.3007 279.926 71.2891 242.984M13.9825 308.58C36.3765 284.235 58.3695 259.049 71.9466 243.383M15.1737 313.365C32.2898 293.509 50.2627 273.285 76.0836 244.246M15.4211 312.885C28.233 298.41 41.3519 283.956 76.1569 244.131M15.9594 317.081C30.0472 300.942 44.1695 285.555 80.8918 243.953M16.0189 317.372C39.1116 291.132 61.5101 265.983 80.6627 244.291M18.4219 320.298C39.2719 295.892 60.3006 271.839 83.8239 245.94M18.06 320.566C38.0991 297.674 58.074 275.108 83.9705 246.041M19.7253 324.157C38.7221 303.348 57.2792 282.332 87.2508 247.735M19.9406 323.853C41.2167 300.194 62.3439 276.443 87.2645 247.766M21.1112 328.09C45.844 300.293 70.6477 272.515 90.6136 249.42M21.6312 327.777C36.1474 312.187 50.4781 295.948 90.838 249.564M24.1349 330.331C42.2979 309.727 59.941 289.085 93.8366 251.084M23.7501 330.432C43.2577 309.035 61.9614 287.688 93.8137 251.319M26.3592 332.971C51.2913 303.99 77.1694 275.671 96.6152 253.384M26.3455 333.189C49.6351 307.785 72.281 282.154 96.8443 253.308M28.9225 335.669C47.7132 313.185 67.0101 292.292 99.868 256.042M28.8973 335.629C57.8244 303.697 86.0115 271.695 99.7168 255.567M31.8294 338.636C56.0605 311.087 80.4749 284.039 102.658 257.79M31.4469 338.156C46.4762 321.057 62.1103 303.204 102.397 257.849M34.8257 340.238C49.3442 324.497 63.6565 308.288 105.073 259.881M34.9494 340.044C54.1065 318.242 73.4218 296.525 105.35 260.387M38.3694 341.949C59.153 317.991 79.6159 295.203 107.693 263.633M38.0945 341.63C57.1142 320.393 75.7835 299.433 107.748 263.075M41.8306 343.202C67.3697 314.464 93.328 286.314 109.803 266.003M41.6428 343.278C58.4016 324.274 74.9634 305.817 109.723 266.467M45.143 344.995C62.7288 325.959 79.3593 307.121 111.995 269.85M45.5187 344.452C59.4164 328.626 73.2821 312.788 111.631 269.623M49.1655 346.094C69.0168 322.992 89.6927 300.352 113.727 273.502M49.335 345.984C65.1707 326.871 81.382 308.188 113.255 273.191M52.8054 347.579C68.6686 328.95 84.0209 312.385 114.886 276.847M52.6428 347.216C76.7616 319.89 100.993 292.554 114.941 276.646M56.4385 349.518C77.8199 324.627 99.6321 299.564 116.725 280.991M56.1476 348.993C71.2823 333.122 86.1031 316.329 116.407 280.94M60.5824 348.856C78.7454 328.833 96.1708 308.362 117.108 285.888M60.745 348.998C79.2104 328.414 97.9621 307.366 116.881 285.731M65.6609 350C79.2814 334.462 93.2983 318.028 117.284 290.281M65.5349 349.588C83.1069 329.502 100.548 310.333 117.44 290.524M70.5859 349.153C85.0655 331.806 101.398 313.619 118.647 294.664M70.1026 349.272C87.9517 330.869 105.029 311.256 119 294.304M75.5499 348.437C91.6352 328.68 108.88 310.506 118.004 300.178M75.9622 348.493C84.6554 337.212 93.6739 327.52 118.107 301.12M82.8847 346.63C95.3782 332.554 107.352 318.647 116.657 307.328M82.3235 346.851C93.4861 333.525 105.803 319.931 116.732 307.418M94.013 338.742C100.464 332.908 104.617 326.698 110.618 319.136M94.1664 339.143C100.821 331.662 107.379 324.132 111.289 320.066" stroke="#243642" stroke-linecap="round"/>
<path d="M440.735 401.702C439.549 392.172 440.242 383.477 439.641 367.783M441.338 400.76C440.965 392.853 440.284 384.713 438.438 367.859M445.546 416.786C444.582 404.264 443.797 389.715 441.343 352.488M445.474 415.872C445.064 402.095 443.899 389.06 441.491 352.255M449.576 421.906C448.259 405.212 447.496 388.812 445.209 345.523M449.202 421.33C448.444 402.837 447.572 385.869 444.685 345.224M453.755 426.871C451.581 394.863 450.539 362.69 447.791 337.717M453.576 426.801C451.561 397.454 449.553 366.844 448.159 338.446M457.667 428.67C455.185 395.428 452.815 361.373 451.787 334.221M456.891 428.584C455.301 396.615 453.639 366.038 451.529 333.381M461.016 431.722C458.502 400.777 456.754 367.329 455.339 329.394M460.931 431.606C459.785 408.686 458.326 385.579 455.209 329.171M465.203 438.464C462.965 406.712 461.24 372.878 458.315 324.831M464.899 438.824C462.45 394.688 460.022 351.616 458.126 325.653M469.028 440.465C466.304 395.373 463.116 349.426 462.178 322.849M468.836 440.535C466.345 402.334 464.033 365.116 461.925 323.134M472.506 443.204C470.156 410.931 468.338 377.891 465.149 320.585M472.705 442.645C471.144 414.153 469.333 385.68 465.5 320.49M476.222 444.393C473.873 405.876 471.269 367.335 469.057 318.229M476.359 444.311C473.565 412.081 471.87 379.854 468.775 318.403M479.75 445.325C477.653 404.077 474.992 364.084 472.916 316.726M479.811 445.15C477.554 402.954 474.756 361.57 472.469 316.785M483.623 445.995C482.287 416.284 480.784 386.819 476.526 315.143M483.605 445.901C482.071 410.859 480.149 376.423 476.131 315.087M487.44 446.88C485.291 409.287 482.951 371.146 480.04 313.525M487.262 447.021C485.114 411.309 483.375 375.925 479.593 313.737M491.538 447.664C489.158 406.229 486.561 363.958 482.732 311.064M491.229 447.931C488.289 398.738 485.236 350.719 483.057 310.873M494.973 448.143C492.048 415.162 490.376 380.926 486.892 311.337M495.084 448.309C492.322 411.519 490.363 375.402 486.564 311.098M498.509 447.662C496.148 405.079 493.513 361.789 490.046 310.667M498.517 447.576C495.202 403.772 492.473 359.117 490.475 310.797M502.237 447.004C499.881 409.268 497.877 371.327 493.75 310.477M501.991 447.475C499.844 404.325 497.404 360.652 493.933 310.595M505.848 446.935C503.375 415.807 501.562 384.314 497.678 310.971M505.754 446.737C503.011 397.681 500.084 347.53 497.479 310.633M509.305 446.178C506.697 410.594 504.976 374.09 501.776 311.068M509.469 446.441C507.874 418.468 506.257 390.611 501.578 311.196M512.725 445.171C509.871 410.607 508.436 376.354 505.121 312.172M512.88 445.007C510.541 411.191 508.581 376.884 504.977 311.648M516.573 443.383C514.282 402.181 511.347 359.811 508.583 312.584M516.494 443.549C513.757 403.295 511.462 364.082 508.659 311.987M519.836 441.214C516.974 390.938 514.163 338.94 512.814 312.609M520.085 441.363C517.164 395.188 514.592 349.066 512.482 312.888M523.45 438.719C521.279 395.006 518.142 351.345 515.981 314.317M523.663 438.78C521.027 395.617 518.415 351.088 516.228 314.681M526.912 436.022C524.828 403.568 523.115 370.03 519.706 316.382M527.067 436.114C525.397 410.418 523.658 384.145 519.959 316.102M530.548 434.385C529.167 401.637 527.881 369.719 523.8 319.961M530.601 434.036C528.925 397.925 526.519 361.476 523.755 319.236M534.425 432.3C532.552 395.853 530.208 359.243 527.515 323.454M534.207 432.489C531.733 390.741 529.428 349.701 527.475 323.01M537.901 428.418C534.992 402.217 533.677 375.705 531.738 326.693M537.324 428.54C534.666 396.613 532.895 364.376 531.884 326.844M540.923 425.254C539.808 404.823 537.664 384.393 535.5 330.241M540.749 424.41C539.249 389.999 537.218 356.547 535.319 329.253M543.649 420.49C544.303 401.387 542.857 381.73 540.037 335.069M544.685 420.561C543.33 397.248 541.863 373.262 539.287 335.499M547.474 414.189C545.731 387.119 545.348 360.355 542.99 341.132M547.495 413.955C546.07 393.707 545.201 373.092 543.148 340.544M550.931 406.702C548.624 382.603 547.867 358.213 547.032 342.101M550.899 405.996C549.928 386.527 548.892 367.567 547.438 341.826M552.888 390.354C552.483 381.062 552.322 373.603 551.935 358.728M553.374 389.495C552.253 382.514 552.443 375.463 551.695 358.203" stroke="#DAFBDD" stroke-linecap="round"/>
<path d="M413.642 208.557C418.893 208.154 423.301 207.61 433.991 206.015M414.639 209.537C418.161 208.695 422.983 208.146 433.886 207.725M410.319 213.589C417.163 212.925 423.616 212.868 442.57 210.274M409.835 214.124C421.457 212.734 432.896 211.691 442.055 210.972M406.517 217.906C416.737 217.012 428.463 216.151 445.206 215.354M406.77 217.991C421.469 217.294 436.287 215.662 446.221 215.099M400.21 223.997C411.183 221.933 420.761 222.717 449.941 219.593M401.026 223.367C418.829 221.464 437.222 220.087 449.052 219.088M400.187 227.87C414.578 225.74 431.87 224.667 451.633 222.977M400.155 227.724C416.272 225.676 432.368 224.745 451.151 222.987M398.822 233.053C413.312 230.702 428.087 228.587 452.927 228.15M398.994 232.506C414.214 230.631 430.722 229.665 452.71 227.559M398.079 236.438C416.141 235.046 434.779 233.359 454.28 230.763M398.364 236.291C414.958 235.618 429.714 234.155 453.784 231.545M398.761 241.945C417.533 239.312 435.547 237.952 455.499 235.924M398.722 240.629C411.025 239.651 422.512 239.126 454.924 235.877M398.621 245.236C418.26 244.052 438.02 241.779 455.294 240.365M399.093 244.964C415.584 244.155 432.834 242.178 454.927 240.562M398.822 250.015C417.56 247.509 437.102 246.268 455.847 245.208M398.642 249.621C417.501 247.892 436.257 246.253 455.318 244.735M401.116 254.149C415.142 252.153 428.247 250.697 453.92 248.495M400.618 253.937C413.254 252.43 425.414 251.701 454.52 249.293M403.041 257.474C412.956 256.545 424.746 255.883 453.083 253.687M403.22 257.797C416.626 256.386 430.328 255.69 452.398 254.043M407.576 261.572C416.756 260.505 429.111 259.51 449.794 258.533M406.675 261.224C418.212 261.597 429.296 259.956 449.219 257.775M410.107 266.31C423.335 264.71 435.34 264.168 445.72 262.286M410.135 265.728C420.271 264.937 430.052 264.551 446.137 262.487M417.529 270.113C422.471 268.522 428.028 267.573 439.95 268.428M417.071 269.099C422.216 269.132 428.19 268.426 440.186 267.341" stroke="#244236" stroke-linecap="round"/>
<path d="M465.252 79.806C465.563 74.7795 464.96 71.754 464.312 63.4445M465.6 78.5813C465.049 73.4575 464.812 67.7175 464.464 61.9489M470.149 84.5827C469.017 76.3952 468.877 69.4954 467.692 55.7511M469.52 86.0325C468.635 75.7676 467.839 65.5276 467.478 54.9899M473.611 88.1995C472.536 79.4913 472.894 70.598 470.974 52.863M473.445 87.2323C473.101 79.5351 472.65 72.3587 471.114 51.1404M477.047 88.6077C477.366 79.5886 475.908 72.2805 474.997 50.3144M476.743 88.995C476.132 75.3918 475.735 62.1874 474.941 49.2404M480.762 88.8538C480.166 80.2696 478.906 72.4408 478.868 48.2084M480.707 88.4685C480.35 79.4035 479.41 69.8788 477.882 48.0672M484.571 88.1194C483.999 80.0788 482.551 69.6633 482.115 45.8659M484.648 88.0316C483.751 74.8291 482.308 61.4167 482.308 46.4839M487.408 86.0515C486.681 78.0072 486.71 70.7353 485.071 47.1287M488.083 86.0687C486.536 76.1835 485.886 65.106 485.386 47.4454M491.458 84.6685C490.667 74.1748 489.87 62.7902 489.651 49.0821M491.645 84.4282C490.591 74.0927 489.389 62.9638 488.891 48.4068M495.334 79.2376C493.687 70.0009 494.559 60.1672 493.528 52.9335M494.767 80.2219C494.64 70.1669 494.137 60.0375 493.37 52.4185" stroke="#FCEECA" stroke-linecap="round"/>
<path d="M387.28 -4.29409C391.641 -4.96063 394.751 -3.39795 403.26 -2.28765M386.902 -4.86966C392.721 -3.38284 398.037 -2.86243 403.752 -1.0261M379.197 -2.84709C389.618 0.881663 399.563 0.763146 410.914 3.79168M378.746 -1.92503C385.972 -0.408072 392.827 1.07548 410.644 4.33949M375.969 1.16729C385.976 3.55612 395.48 5.77063 413.393 8.87933M375.653 1.80324C385.983 3.68377 396.966 5.42843 413.049 8.82146M372.352 4.27352C383.914 6.3008 394.954 10.1221 414.382 12.5591M372.076 5.86204C384.943 8.03768 398.647 10.2279 415.339 12.1785M369.608 9.30127C387.317 12.2953 403.017 13.8935 416.631 16.9309M370.273 9.289C381.069 10.0792 392.555 12.4663 415.584 16.9925M368.147 14.0185C381.819 14.1368 393.742 17.0199 417.046 20.3296M368.527 12.9841C383.51 15.7087 399.198 18.2813 417.179 20.8077M367.674 17.1708C382.298 18.9009 398.99 21.2995 415.882 25.5516M367.538 17.0605C380.906 19.1449 394.339 21.7143 416.468 24.8694M366.374 20.2147C381.503 23.0025 397.5 26.3978 415.657 28.7338M366.291 20.9081C377.582 22.1038 388.979 24.098 414.893 29.0023M365.94 24.9765C382.226 27.9659 400.479 31.2424 414.725 32.1378M365.674 24.7218C378.287 26.3017 391.382 29.0516 414.281 33.5316M365.575 29.402C376.079 30.1069 385.338 31.8207 412.54 37.874M366.099 28.6913C378.644 29.9464 390.526 32.6768 412.407 36.8686M366.664 32.9091C377.827 35.0124 389.235 37.2835 411.184 40.3503M367.046 33.3189C380.366 35.7653 394.778 37.6969 410.647 40.4156M366.711 37.2247C380.386 39.1892 391.508 41.1878 408.191 43.9561M366.951 37.0803C382.182 39.8237 398.835 42.9878 407.233 44.6675M370.995 42.4029C381.961 43.7731 394.113 46.6259 402.475 47.6821M371.314 42.0694C382.534 44.5056 394.078 45.7933 403.47 47.3908M377.031 47.8803C382.363 48.268 389.843 49.62 394.761 50.3983M377.184 47.1418C381.792 47.8727 386.658 49.0101 395.32 50.0667" stroke="#FCEECA" stroke-linecap="round"/>
<path d="M91.6715 60.8309C90.8483 54.2358 91.2097 49.9776 89.5428 37.3954M91.5019 60.0435C90.6437 52.1011 90.2158 43.7143 89.8621 35.9263M96.2397 70.1815C94.4514 59.6963 93.4387 49.2699 92.2901 28.463M95.1266 69.5188C94.1323 53.5843 93.5033 38.3888 92.6607 28.8866M98.2911 73.9266C97.4901 55.7643 96.064 36.4989 96.4989 25.9311M99.4951 73.9057C99.3048 59.7895 98.2322 47.2898 96.8855 25.3857M104.299 77.8955C101.402 61.9958 101.569 45.5157 99.1745 21.4748M103.387 78.0166C101.429 56.4934 100.776 35.9587 99.5325 21.9477M107.224 79.8777C105.615 64.3279 104.468 49.2496 103.004 16.4084M107.415 79.3732C106.169 61.1879 104.933 43.3161 103.201 17.175M110.512 81.816C108.761 55.0915 107.676 31.3893 106.701 14.425M110.501 80.7766C109.071 54.8269 107.529 29.1446 106.281 15.2344M114.314 80.8915C114.48 68.2609 112.692 53.1776 110.212 11.2115M114.408 82.1459C112.976 58.8316 111.054 36.5523 110.345 12.4053M118.26 81.3869C117.676 67.6033 117.077 53.6999 114.385 11.8619M118.02 82.1439C116.909 67.9075 116.013 52.9862 114.017 11.7443M121.474 83.8284C120.337 64.2699 119.289 43.5964 117.028 12.4159M121.629 83.5118C119.893 57.6158 118.249 32.8659 117.414 12.0358M125.304 81.2149C124.251 59.4394 123.049 38.3948 120.658 11.9846M125.563 81.9381C124.128 57.136 122.223 32.8599 120.579 11.5814M128.846 80.158C128.449 59.2901 126.686 40.2739 125.228 12.711M128.713 80.1859C127.427 58.5727 126.582 37.9896 124.905 12.5973M132.548 79.0734C131.295 63.0142 130.883 47.9394 128.968 13.6748M132.755 79.1257C130.689 55.6316 129.955 32.2389 128.381 13.4193M135.023 76.5447C134.805 58.1457 133.136 37.1388 131.57 12.9992M135.818 76.5542C134.494 57.2589 133.005 38.4378 131.892 13.2249M138.762 72.8934C138.233 53.4403 136.964 35.1371 135.582 15.8738M139.722 73.2C138.248 53.5677 136.959 34.5025 135.808 17.1745M142.258 66.5048C140.913 49.3945 140.985 31.1488 139.388 20.1554M142.557 67.4182C142.405 54.6645 141.089 42.331 139.312 20.6262M146.074 62.0615C144.652 49.9403 143.62 37.5757 143.42 28.9468M145.996 63.1651C146.008 56.3212 145.648 48.4458 144.276 29.2035" stroke="#422424" stroke-linecap="round"/>
<path d="M9.79487 105.338C16.0326 105.338 24.1639 103.743 32.4528 103.527M9.66678 105.252C16.3239 104.42 23.1395 104.185 31.2709 103.999M4.01235 110.024C15.1339 109.589 23.8693 109.144 42.9254 107.741M4.4138 110.104C12.6536 109.625 21.188 109.404 42.3877 106.468M1.31778 114.009C15.9787 113.872 31.3857 112.158 48.2039 110.8M0.778261 114.509C18.9031 113.014 36.5709 111.428 47.4331 110.891M-2.63939 118.795C15.3123 117.516 31.3586 115.827 52.0401 115.092M-1.66962 118.888C13.4601 117.963 29.1298 116.066 52.3143 114.344M-6.90571 123.83C17.9471 120.25 42.6644 119.237 55.1219 118.743M-6.63808 123.4C5.90518 122.114 18.0484 120.915 55.564 118.326M-8.25652 127.67C10.8583 126.157 28.593 124.131 60.1258 121.547M-7.84761 128C15.6905 126.345 39.5967 124.135 59.8176 122.317M-9.04267 132.062C5.40872 130.004 21.1691 128.503 61.3233 125.266M-9.64637 131.925C17.3401 130.443 44.7092 127.865 61.5199 126.253M-11.5388 136.801C9.5304 134.582 31.6169 132.82 62.802 130.34M-10.9471 136.568C4.57691 135.216 20.2348 134.246 62.9565 130.296M-11.5316 140.122C5.3223 138.613 21.5932 137.801 64.8012 133.998M-11.7327 140.481C15.7907 138.071 41.9469 136.045 64.3161 134.116M-11.4979 144.749C13.2012 141.983 37.682 139.665 64.8402 137.954M-12.0491 144.66C11.5836 142.539 34.9753 140.597 64.8785 138.211M-13.1023 148.875C8.89872 147.608 30.732 145.744 65.7453 142.195M-12.6404 148.777C11.9587 147.093 36.4901 145.176 65.7314 142.244M-12.7283 152.992C15.4095 150.779 43.3927 148.708 66.4127 146.275M-11.9594 153.21C3.90521 152.452 20.1937 151.053 66.4849 146.679M-11.3228 157.196C9.01383 155.504 28.9852 153.105 67.0541 150.175M-11.778 156.884C9.91249 155.663 30.9737 153.691 66.8099 150.413M-11.1137 160.968C16.7254 157.922 44.7218 156.58 66.4088 154.316M-11.341 161.201C14.0207 159.801 39.0373 157.674 66.7005 154.485M-9.24938 165.06C11.5519 162.124 31.3901 161.486 65.8535 159.424M-9.23385 164.983C21.353 163.065 51.4774 160.399 66.1833 158.683M-7.63917 169.93C17.5213 167.531 42.4939 166.077 65.8745 162.915M-7.53149 168.883C7.60786 167.61 23.8718 166.047 65.5489 162.672M-6.1788 173.386C8.03927 172.89 22.2241 171.673 63.9696 166.429M-5.84202 173.294C13.2236 171.544 32.5407 170.069 63.7184 167.413M-3.04816 177.549C16.6681 175.408 35.0273 174.297 60.4298 172.327M-2.99483 176.778C14.5506 175.582 31.7702 174.326 61.1069 171.668M0.0430368 181.039C21.5398 179.022 42.7274 178.758 57.6616 175.8M-0.256418 180.897C14.0041 179.657 27.9415 178.828 57.0449 176.319M0.676424 185.193C15.134 184.541 28.1234 183.414 54.0373 181.298M1.72222 184.952C12.6898 184.086 23.707 182.963 53.8868 180.505M6.02507 189.086C20.8285 187.119 36.0162 186.782 53.5338 185.637M6.34159 189.16C18.3404 187.19 30.3618 185.744 53.3558 184.584M10.8131 193.003C20.6029 191.544 27.7822 192.054 43.5529 189.541M11.0703 192.224C23.8555 191.371 36.2656 190.429 43.8744 189.325" stroke="#FF9494" stroke-linecap="round"/>
</g>
<defs>
<clipPath id="clip0_17628_43774">
<rect width="480" height="360" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 46 KiB

View File

@@ -0,0 +1,22 @@
<svg width="480" height="360" viewBox="0 0 480 360" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_17344_16823)">
<rect width="480" height="360" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M-67.4172 94.5377L-38.9725 93L-21.4872 93.0809L-9.2605 94.5971L-0.343468 98.5952L5.81093 101.363L11.4069 104.724L20.9371 112.17L29.3481 121.936L35.7669 131.071L38.4976 135.614L41.9851 146.621L43.6285 151.668L45.1352 157.361L45.8441 164.877L45.9285 175.592L44.6611 190.508L43.0131 199.964L34.3947 245.578L31.069 269.911L30.0775 276.405L28.8808 301.559L29.2295 305.382L30.0205 310.038L31.3266 313.057L34.3468 316.491L37.9916 320.451L43.086 322.863L48.919 325.647L55.4678 328.229L68.1982 332.551L79.5998 335.178L84.0629 336.039L87.5595 335.562L101.215 333.268L105.829 332.904L109.975 334.731L120.134 337.698L132.167 341.953L138.276 344.977L143.02 347.658L148.009 352.212L162.443 366.702L170.746 377.892L174.635 384.011L175.704 387.469L176.292 390.812L176.406 394.594L175.251 397.551L173.165 399.704L169.914 402.223L161.777 404.829L145.242 407.392L115.785 410.273L74.4256 412.71L46.0652 412.143L18.1721 411.35L5.25931 410.492L-11.6014 408.609L-21.6947 407.203L-33.445 403.235L-47.9375 396.876L-53.636 394.003L-59.5784 390.388L-64.6934 387.038L-69.512 381.923L-73.3118 377.407L-77.6518 372.548L-80.7951 367.29L-86.8469 356.402L-90.1839 350.486L-94.7017 336.538L-96.3497 329.33L-97.323 320.937L-98.0912 311.368L-98.9141 300.955L-98.5676 290.9L-96.9834 268.239L-94.3005 243.33L-80.1113 146.928L-75.712 124.915L-67.2622 94.8615" fill="#FFDAD6"/>
<path d="M-67.4011 95.0098C-57.219 95.2176 -23.0826 90.8849 -6.43609 96.0889C10.2104 101.296 23.7979 113.659 32.4756 126.236C41.1556 138.813 45.4249 151.021 45.6392 171.548C45.8557 192.075 36.4008 230.68 33.7749 249.4C31.149 268.123 29.8224 272.633 29.8885 283.87C29.9569 295.109 25.879 308.338 34.1761 316.823C42.4731 325.31 67.1158 331.906 79.6684 334.787C92.2211 337.671 97.3999 330.641 109.494 334.124C121.591 337.606 143.1 344.119 152.242 355.687C161.387 367.252 194.024 395.174 164.36 403.526C134.696 411.876 17.7097 418.262 -25.7381 405.787C-69.1858 393.313 -86.8512 369.599 -96.3267 328.685C-105.8 287.771 -87.4256 199.214 -82.5865 160.298C-77.7473 121.383 -69.8081 106.098 -67.2916 95.1906M-67.7521 94.7373C-57.4628 94.8695 -22.5811 90.3481 -5.89815 95.633C10.7871 100.918 23.7592 113.77 32.3548 126.447C40.9527 139.126 45.4888 151.191 45.6825 171.697C45.874 192.205 36.2253 230.837 33.515 249.489C30.8026 268.142 29.3984 272.296 29.4121 283.611C29.4281 294.925 25.2704 308.73 33.6062 317.381C41.9397 326.033 66.71 332.634 79.4245 335.518C92.1391 338.402 97.7168 331.364 109.887 334.687C122.059 338.008 143.38 343.941 152.448 355.452C161.515 366.963 194.04 395.36 164.294 403.75C134.547 412.14 17.4179 418.353 -26.0276 405.79C-69.473 393.226 -87.0427 369.273 -96.3791 328.372C-105.716 287.471 -86.915 199.257 -82.0462 160.387C-77.1797 121.515 -69.6326 106.022 -67.1754 95.1474" stroke="#FFDAD6" stroke-width="4" stroke-linecap="round"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M256.257 14.4479L265.664 27.8666L272.049 35.9572L278.8 42.3698L281.458 45.4128L285.88 47.6763L293.742 51.24L301.537 54.4396L316.215 59.5222L322.405 61.0869L329.114 61.4807L335.494 60.5203L339.348 60.2074L342.277 57.8873L364.315 45.545L381.46 38.7925L393.635 34.3412L404.71 31.7109L410.951 30.7316L417.069 30.9555L422.727 32.736L426.435 36.057L429.729 40.9696L435.113 51.5691L437.315 58.1382L443.747 80.6457L450.838 103.935L452.929 111.244L458.639 122.259L467.854 134.668L470.795 138.68L474.253 141.82L495.399 154.532L500.917 156.577L505.314 156.679L509.499 155.8L513.116 153.609L516.932 148.675L519.79 142.773L523.768 134.86L527.397 126.394L529.441 116.882L532.644 106.973L533.822 97.2612L534.919 87.0609L535.117 76.4318L535.4 64.0868L533.845 50.3956L532.288 37.1496L530.966 24.1841L527.167 5.79885L523.659 -3.82678L521.965 -7.895L517.26 -14.8849L513.588 -20.2184L509.187 -23.2939L504.218 -26.4125L498.163 -28.425L491.752 -30.273L466.124 -34.816L451.965 -36.2081L426.608 -38.8087L390.17 -40.5838L300.808 -44.0127L278.128 -43.5811L264.682 -42.8823L256.923 -41.1558L252.029 -38.6253L249.692 -36.7719L248.11 -34.6245L246.843 -30.4106L245.959 -27.8315L245.838 -21.7669L249.606 -6.63515L250.239 0.621838L251.167 3.55431L253.139 7.44988L256.337 13.9083" fill="#D3FFD2"/>
<path d="M256.65 13.6655C260.272 18.4864 269.679 35.4932 278.391 42.7043C287.105 49.9127 299.347 53.9621 308.932 56.9269C318.517 59.8918 326.668 62.3278 335.905 60.4961C345.143 58.6643 354.149 50.5305 364.356 45.9335C374.561 41.3365 387.412 35.102 397.138 32.9114C406.867 30.7208 416.363 29.5851 422.716 32.7927C429.068 36.003 431.79 44.1827 435.252 52.1627C438.713 60.1399 440.513 70.7988 443.479 80.6645C446.447 90.533 449.521 102.908 453.05 111.362C456.579 119.815 460.287 125.752 464.65 131.388C469.013 137.024 471.153 141.513 479.229 145.176C487.305 148.842 503.833 163.07 513.103 153.375C522.374 143.679 533.49 113.869 534.856 87.0016C536.221 60.1319 531.715 12.2843 521.295 -7.83566C510.876 -27.9556 502.488 -27.9961 472.345 -33.7153C442.2 -39.4373 376.751 -41.1234 340.429 -42.1647C304.107 -43.2061 269.478 -46.5297 254.409 -39.9634C239.34 -33.3997 249.659 -11.7987 250.021 -2.76925C250.381 6.26017 255.476 11.4102 256.579 14.2159M256.344 14.2348C259.923 19.1096 269.428 35.8681 278.163 43.0253C286.897 50.1825 299.106 54.2399 308.755 57.1805C318.403 60.1211 326.839 62.5221 336.055 60.6687C345.273 58.818 353.839 50.7463 364.057 46.0711C374.274 41.3959 387.679 34.8754 397.362 32.6173C407.042 30.362 415.857 29.2775 422.146 32.531C428.435 35.7872 431.485 44.0343 435.1 52.1519C438.715 60.2694 440.837 71.3815 443.834 81.2338C446.834 91.086 449.624 102.999 453.089 111.26C456.553 119.523 460.198 125.172 464.623 130.811C469.045 136.449 471.541 141.224 479.632 145.093C487.724 148.961 504.013 163.71 513.176 154.022C522.339 144.332 533.271 113.941 534.616 86.9584C535.963 59.9727 531.591 12.1926 521.25 -7.88152C510.908 -27.9583 502.629 -27.8261 472.571 -33.4941C442.515 -39.1621 377.296 -40.8239 340.906 -41.8949C304.515 -42.966 269.421 -46.465 254.227 -39.9202C239.03 -33.3781 249.324 -11.6017 249.732 -2.63437C250.14 6.33571 255.565 11.1458 256.679 13.8922" stroke="#D3FFD2" stroke-width="4" stroke-linecap="round"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M336.97 62.1901L337.33 68.1791L338.629 71.8508L340.908 76.3992L343.917 81.0151L358.911 97.4391L373.52 115.377L378.708 122.348L388.238 138.305L392.254 147.755L393.189 152.344L394.493 156.496L395.001 161.694L394.926 167.271L393.335 179.206L387.798 211.862L382.195 235.594L379.93 253.942L378.4 268.45L378.143 282.395L378.915 294.711L380.718 305.41L383.369 314.528L390.777 331.662L395.099 338.986L397.978 345.437L410.408 362.392L417.3 376.008L420.273 380.75L424.125 384.84L428.798 387.373L435.704 390.492L449.531 394.779L466.743 397.447L479.628 399.834L493.102 400.897L505.855 399.61L512.09 399.548L517.316 397.795L523.003 395.61L527.649 393.91L532.675 391.007L542.438 382.852L546.837 379.383L555.69 369.153L563.982 357.023L571.892 344.884L575.375 338.762L580.784 326.023L584.882 312.729L585.619 306.556L586.745 299.952L586.519 293.197L585.48 285.808L584.616 278.316L580.72 263.419L575.443 247.467L560.408 203.073L556.711 190.124L554.794 177.587L552.813 166.82L549.264 137.808L548.159 128.582L546.219 117.408L543.039 104.971L536.509 84.5896L528.032 59.2846L500.287 -15.1549L499.386 -17.6125L499.329 -22.2689L500.56 -23.4046L501.971 -24.5539L502.224 -24.1924L501.691 -23.41L501.155 -22.6789L497.948 -24.0602L471.844 -31.2174L438.615 -39.7747L418.793 -42.8636L403.1 -45.8285L387.582 -46.2925L374.094 -44.4391L362.795 -41.8007L350.3 -36.7316L344.726 -33.0896L343.439 -30.7426L341.451 -28.2741L339.837 -20.6421L337.672 -11.6532L336.967 -3.29819L336.254 13.3308L336.976 61.7342" fill="#FFF0C9"/>
<path d="M336.523 62.1739C337.205 64.5587 337.086 70.3319 340.779 76.1996C344.472 82.0672 352.39 89.5724 358.682 97.3744C364.97 105.176 372.59 113.078 378.521 123.011C384.455 132.944 392.36 143.943 394.274 156.976C396.189 170.009 392.189 187.124 390.01 201.209C387.833 215.291 383.128 225.882 381.209 241.481C379.29 257.077 376.864 279.781 378.499 294.791C380.131 309.805 386.199 320.998 391.006 331.546C395.815 342.094 399.838 348.304 407.347 358.084C414.853 367.863 415.915 384.29 436.049 390.222C456.185 396.152 503.184 407.617 528.153 393.665C553.122 379.712 581.079 340.494 585.865 306.505C590.652 272.516 564.042 223.276 556.876 189.73C549.709 156.186 552.119 138.739 542.867 105.23C533.617 71.724 509.334 10.366 501.363 -11.3106C493.394 -32.9844 511.354 -19.1449 495.047 -24.821C478.738 -30.4971 427.034 -43.1253 403.515 -45.3645C379.999 -47.6036 364.802 -43.3169 353.943 -38.2585C343.086 -33.2002 341.217 -31.6787 338.37 -15.0146C335.523 1.64681 337.157 48.9171 336.859 61.7153M336.984 62.0309C337.622 64.3159 336.865 69.8733 340.572 75.6789C344.28 81.4845 352.899 89.076 359.229 96.8645C365.559 104.653 372.638 112.374 378.547 122.412C384.455 132.451 392.836 143.862 394.676 157.095C396.515 170.327 391.808 187.644 389.588 201.802C387.37 215.96 383.258 226.576 381.359 242.045C379.463 257.514 376.536 279.754 378.202 294.619C379.866 309.481 386.481 320.666 391.355 331.222C396.228 341.778 400.098 348.11 407.44 357.96C414.782 367.809 415.318 384.39 435.406 390.319C455.495 396.246 502.877 407.507 527.971 393.527C553.062 379.547 581.161 340.405 585.968 306.44C590.777 272.473 564.008 223.139 556.821 189.724C549.636 156.307 552.075 139.546 542.853 105.945C533.63 72.3472 509.384 9.90737 501.491 -11.869C493.6 -33.6427 511.855 -19.1476 495.496 -24.7104C479.139 -30.2732 426.859 -42.8609 403.34 -45.2458C379.821 -47.6306 365.201 -43.9886 354.383 -39.0139C343.565 -34.0392 341.372 -32.283 338.434 -15.4004C335.493 1.48225 337.045 49.3271 336.745 62.2791" stroke="#FFF0C9" stroke-width="4" stroke-linecap="round"/>
<path d="M-15.2578 154.834C-4.14343 158.188 40.8247 156.405 51.3692 174.701C61.9137 192.994 47.77 239.261 48.0116 264.604C48.2533 289.949 43.9908 312.29 52.8143 326.769C61.6379 341.245 88.9999 342.146 100.953 351.472C112.906 360.798 120.545 377.557 124.536 382.728M-14.1888 156.259C-3.15189 159.804 40.4828 157.476 50.7469 175.669C61.0134 193.866 47.0497 240.486 47.4008 265.432C47.7518 290.378 44.0227 310.941 52.8554 325.339C61.6858 339.737 88.3275 342.022 100.386 351.82C112.446 361.621 121.046 378.838 125.206 384.131" stroke="#46464F" stroke-width="2" stroke-linecap="round"/>
<path d="M24.5274 280.87C31.0191 281.191 36.8886 283.967 42.6692 285.998C48.4497 288.029 54.3032 290.32 59.2085 293.058C64.1161 295.794 68.3558 299.079 72.1077 302.417C75.8618 305.754 79.2217 309.417 81.7268 313.078C84.2318 316.739 86.0303 320.457 87.1381 324.379C88.2458 328.302 88.6539 332.602 88.3781 336.613C88.1022 340.625 87.2156 344.602 85.4855 348.446C83.7554 352.29 81.1273 356.126 77.9931 359.677C74.8612 363.227 70.993 366.726 66.6918 369.745C62.3883 372.766 57.4944 375.445 52.1743 377.798C46.8564 380.153 40.8342 382.19 34.7778 383.87C28.7215 385.551 22.3369 386.997 15.8405 387.887C9.34196 388.777 2.52882 389.139 -4.20682 389.212C-10.9402 389.285 -17.979 389.161 -24.5665 388.33C-31.1539 387.499 -37.6685 385.91 -43.734 384.229C-49.7972 382.548 -55.596 380.56 -60.9503 378.243C-66.3047 375.923 -71.4812 373.333 -75.8599 370.322C-80.2387 367.314 -84.0612 363.745 -87.225 360.184C-90.3911 356.625 -93.0056 352.811 -94.8496 348.967C-96.6914 345.125 -97.863 341.119 -98.2824 337.123C-98.6996 333.131 -98.3622 328.952 -97.357 325.005C-96.3518 321.055 -94.706 317.063 -92.2511 313.432C-89.7962 309.8 -86.4204 306.528 -82.6298 303.215C-78.8414 299.902 -74.3738 296.357 -69.5186 293.56C-64.6658 290.765 -59.2203 288.493 -53.5081 286.44C-47.7959 284.387 -41.5868 282.548 -35.2455 281.239C-28.9042 279.931 -22.0933 278.995 -15.4557 278.587C-8.81577 278.18 -2.81866 278.169 4.59168 278.795C12.002 279.421 24.288 281.428 29.0018 282.348C33.7156 283.268 33.4193 283.459 32.8723 284.317M38.6756 284.884C45.042 285.882 50.6539 289.192 55.7347 291.682C60.8178 294.175 65.0803 296.676 69.165 299.827C73.2474 302.978 77.2956 306.946 80.2315 310.588C83.1651 314.233 85.3487 317.84 86.7757 321.689C88.2025 325.536 88.8431 329.656 88.7884 333.676C88.7337 337.698 87.8766 341.958 86.4542 345.813C85.0296 349.671 83.0465 353.251 80.2429 356.812C77.4415 360.373 73.6918 363.996 69.6345 367.179C65.5772 370.362 60.9317 373.303 55.9057 375.912C50.8796 378.523 45.3543 381.002 39.4734 382.837C33.5948 384.674 27.1646 385.826 20.6296 386.921C14.0945 388.017 7.05116 389.082 0.267647 389.411C-6.51358 389.741 -13.4361 389.589 -20.0601 388.896C-26.6863 388.203 -33.3148 386.811 -39.4852 385.249C-45.6555 383.689 -51.5751 381.696 -57.0822 379.532C-62.5869 377.369 -67.923 375.102 -72.516 372.264C-77.109 369.426 -81.1436 365.917 -84.6334 362.499C-88.1231 359.08 -91.2163 355.53 -93.4547 351.756C-95.693 347.982 -97.3205 343.808 -98.0636 339.851C-98.809 335.89 -98.6882 331.93 -97.9177 328.002C-97.1496 324.077 -95.5517 320.103 -93.4455 316.294C-91.3394 312.482 -88.7203 308.522 -85.2807 305.139C-81.8411 301.753 -77.4418 298.853 -72.8055 295.988C-68.1669 293.125 -62.9425 290.196 -57.456 287.954C-51.9672 285.715 -46.0385 284.091 -39.8818 282.548C-33.7228 281.007 -27.1399 279.407 -20.5091 278.703C-13.8783 278.002 -6.80078 278.026 -0.0993347 278.334C6.60212 278.644 13.2603 279.472 19.695 280.551C26.1298 281.63 35.5095 283.921 38.5092 284.808C41.5089 285.699 38.393 285.102 37.6886 285.882" fill="#D1ECFF"/>
<path d="M-28.4188 280.125C-22.62 278.318 -14.8974 278.639 -8.20964 278.474C-1.52187 278.309 5.12716 278.42 11.7055 279.146C18.2862 279.869 25.0811 281.258 31.2674 282.817C37.4537 284.374 43.314 286.249 48.8234 288.496C54.3304 290.741 59.7736 293.393 64.3165 296.285C68.857 299.179 72.7206 302.392 76.0714 305.854C79.4198 309.318 82.3489 313.208 84.414 317.055C86.4791 320.902 87.881 324.962 88.4577 328.936C89.0366 332.912 88.7335 337.016 87.881 340.911C87.0262 344.807 85.5537 348.538 83.3358 352.312C81.118 356.089 78.1707 360.2 74.5692 363.567C70.9678 366.934 66.4568 369.702 61.7225 372.507C56.9882 375.313 51.7638 378.227 46.1678 380.404C40.5696 382.581 34.4198 384.162 28.1378 385.57C21.8534 386.978 15.0745 388.216 8.46649 388.85C1.85849 389.487 -4.86119 389.63 -11.5079 389.382C-18.1547 389.134 -24.9792 388.508 -31.4163 387.359C-37.8556 386.209 -44.2402 384.437 -50.1347 382.492C-56.0316 380.544 -61.746 378.275 -66.7926 375.68C-71.8392 373.085 -76.4664 370.128 -80.4144 366.92C-84.3623 363.713 -87.7928 360.133 -90.4779 356.431C-93.1654 352.727 -95.2328 348.592 -96.5366 344.702C-97.8381 340.809 -98.3601 337.01 -98.2963 333.077C-98.2325 329.146 -97.7059 324.986 -96.1514 321.11C-94.5945 317.236 -91.9504 313.407 -88.9576 309.825C-85.9647 306.239 -82.2949 302.778 -78.1942 299.608C-74.0913 296.438 -69.4778 293.358 -64.3491 290.8C-59.2204 288.243 -54.7255 286.165 -47.4177 284.261C-40.1099 282.356 -26.3241 280.128 -20.507 279.37C-14.6877 278.614 -12.789 278.865 -12.5109 279.729M9.65862 279.097C16.18 278.733 23.2576 280.578 29.5533 281.984C35.8467 283.389 41.9076 285.307 47.4261 287.536C52.9468 289.761 58.0823 292.421 62.6685 295.34C67.2546 298.259 71.4487 301.559 74.9453 305.044C78.4419 308.533 81.4736 312.487 83.6481 316.259C85.8227 320.03 87.1835 323.815 87.9904 327.676C88.7973 331.536 89.2167 335.475 88.4941 339.419C87.7715 343.366 85.8204 347.558 83.6549 351.351C81.4918 355.147 78.8614 358.77 75.5084 362.183C72.1554 365.598 68.0957 368.911 63.5415 371.836C58.9872 374.757 53.7446 377.447 48.1851 379.729C42.6257 382.012 36.4393 384.113 30.1869 385.535C23.9345 386.954 17.2855 387.612 10.6661 388.257C4.049 388.902 -2.78694 389.579 -9.52714 389.403C-16.2651 389.228 -23.3153 388.27 -29.7705 387.207C-36.2235 386.142 -42.3209 384.828 -48.2542 383.015C-54.1852 381.2 -60.1504 378.839 -65.3657 376.317C-70.5787 373.797 -75.4407 371.069 -79.5345 367.886C-83.6283 364.7 -87.1181 360.918 -89.9286 357.214C-92.7368 353.507 -94.9273 349.544 -96.3862 345.646C-97.8472 341.747 -98.6747 337.703 -98.6883 333.824C-98.6997 329.942 -97.943 326.181 -96.4637 322.367C-94.9843 318.552 -92.575 314.573 -89.8146 310.936C-87.052 307.297 -83.8494 303.731 -79.8947 300.536C-75.9399 297.345 -71.185 294.41 -66.086 291.777C-60.987 289.141 -55.2292 286.616 -49.2982 284.727C-43.3672 282.842 -36.9507 281.501 -30.4954 280.449C-24.0401 279.397 -17.2817 278.679 -10.5688 278.415C-3.85369 278.15 6.41047 278.633 9.78855 278.857C13.1689 279.081 9.93443 278.79 9.71105 279.761" stroke="#D1ECFF" stroke-width="4" stroke-linecap="round"/>
<path d="M525.703 288.216C531.172 292.126 535.951 298.283 540.59 303.831C545.228 309.378 549.623 315.608 553.535 321.504C557.444 327.398 561.079 333.411 564.049 339.201C567.015 344.992 569.457 350.637 571.34 356.238C573.224 361.836 574.694 367.655 575.353 372.8C576.011 377.945 575.853 382.741 575.291 387.107C574.73 391.471 573.726 395.57 571.984 398.989C570.243 402.404 567.677 405.267 564.84 407.604C562.006 409.94 558.804 411.897 554.973 413.006C551.142 414.115 546.543 414.414 541.857 414.265C537.174 414.116 532.047 413.522 526.866 412.109C521.686 410.697 516.286 408.386 510.771 405.784C505.256 403.178 499.427 400.162 493.775 396.486C488.122 392.812 482.293 388.339 476.858 383.736C471.421 379.131 466.164 374.078 461.155 368.867C456.147 363.656 451.168 358.14 446.811 352.47C442.452 346.802 438.449 340.766 435.009 334.853C431.57 328.943 428.565 322.738 426.171 317.006C423.777 311.274 421.912 305.802 420.646 300.465C419.378 295.127 418.643 289.806 418.571 284.986C418.498 280.165 419.039 275.512 420.212 271.543C421.387 267.576 423.32 264.056 425.616 261.178C427.91 258.301 430.625 255.962 433.98 254.28C437.336 252.599 441.508 251.587 445.748 251.084C449.987 250.583 454.484 250.551 459.419 251.274C464.355 251.998 469.895 253.379 475.363 255.426C480.83 257.47 486.576 260.382 492.225 263.546C497.875 266.711 503.106 269.724 509.26 274.411C515.413 279.096 525.294 287.978 529.143 291.66C532.991 295.343 532.86 295.797 532.353 296.505M490.096 262.801C495.361 264.491 501.828 268.933 507.423 272.839C513.017 276.741 518.462 281.297 523.667 286.224C528.872 291.152 533.889 296.985 538.654 302.403C543.419 307.825 548.217 313.061 552.254 318.747C556.289 324.436 559.796 330.521 562.867 336.532C565.941 342.543 568.715 349.092 570.683 354.812C572.65 360.531 573.803 365.736 574.678 370.848C575.556 375.959 576.279 381.044 575.935 385.48C575.593 389.914 574.357 393.902 572.624 397.464C570.889 401.024 568.26 404.365 565.528 406.84C562.799 409.314 559.846 411.027 556.236 412.31C552.63 413.592 548.408 414.455 543.881 414.536C539.357 414.614 534.312 414.067 529.081 412.784C523.847 411.501 518.049 409.298 512.488 406.832C506.929 404.368 501.311 401.477 495.722 397.996C490.135 394.517 484.429 390.491 478.966 385.959C473.502 381.422 468.03 375.997 462.942 370.796C457.853 365.595 452.899 360.381 448.43 354.749C443.962 349.119 439.699 342.901 436.132 337.008C432.566 331.116 429.486 325.158 427.032 319.39C424.576 313.619 422.778 307.903 421.404 302.386C420.029 296.869 419.024 291.154 418.782 286.287C418.543 281.422 419.004 277.126 419.958 273.187C420.913 269.249 422.347 265.706 424.509 262.658C426.668 259.61 429.578 256.848 432.919 254.903C436.26 252.957 440.395 251.625 444.55 250.993C448.708 250.359 452.998 250.49 457.864 251.098C462.728 251.708 468.339 252.713 473.736 254.645C479.131 256.577 487.509 261.212 490.237 262.69C492.968 264.166 490.021 262.452 490.111 263.502" fill="#FFE3C7"/>
<path d="M529.62 292.151C535.001 296.356 539.755 303.044 544.229 308.665C548.702 314.287 552.786 320.042 556.46 325.886C560.137 331.731 563.613 337.894 566.288 343.731C568.961 349.564 570.952 355.375 572.504 360.895C574.059 366.414 575.222 371.944 575.606 376.843C575.992 381.743 575.699 386.221 574.816 390.298C573.931 394.376 572.31 398.121 570.302 401.299C568.295 404.477 565.889 407.289 562.774 409.367C559.661 411.443 555.759 412.945 551.622 413.759C547.485 414.575 542.78 414.776 537.961 414.258C533.143 413.737 527.97 412.373 522.713 410.639C517.455 408.906 511.975 406.743 506.42 403.857C500.865 400.971 495.005 397.2 489.385 393.322C483.766 389.445 478.062 385.334 472.701 380.591C467.341 375.848 462.05 370.308 457.229 364.86C452.409 359.413 447.956 353.662 443.777 347.905C439.599 342.146 435.356 336.204 432.157 330.312C428.961 324.42 426.668 318.261 424.588 312.559C422.507 306.857 420.645 301.359 419.676 296.102C418.709 290.843 418.488 285.624 418.776 281.007C419.063 276.392 419.955 272.07 421.403 268.406C422.85 264.744 424.867 261.627 427.46 259.033C430.057 256.439 433.381 254.238 436.977 252.842C440.573 251.449 444.587 250.737 449.04 250.666C453.493 250.599 458.574 251.367 463.697 252.426C468.818 253.483 474.287 254.765 479.773 257.018C485.259 259.272 491.016 262.505 496.618 265.946C502.221 269.388 507.239 272.624 513.383 277.666C519.526 282.703 529.627 292.255 533.484 296.188C537.338 300.119 537.103 300.644 536.515 301.261M523.885 286.613C529.381 290.504 534.632 297.081 539.367 302.62C544.102 308.16 548.278 314.062 552.293 319.846C556.308 325.629 560.408 331.501 563.457 337.321C566.507 343.143 568.683 349.211 570.59 354.772C572.497 360.333 574.098 365.588 574.897 370.69C575.695 375.794 575.8 380.787 575.381 385.387C574.961 389.986 574.04 394.671 572.378 398.283C570.716 401.896 568.153 404.689 565.413 407.063C562.672 409.44 559.682 411.28 555.936 412.536C552.188 413.79 547.478 414.573 542.929 414.592C538.381 414.614 533.757 413.915 528.644 412.661C523.531 411.407 517.798 409.644 512.247 407.066C506.697 404.486 501.004 400.805 495.339 397.187C489.675 393.568 483.764 389.752 478.258 385.351C472.75 380.949 467.334 375.945 462.293 370.78C457.255 365.617 452.335 360.036 448.025 354.372C443.716 348.707 439.965 342.735 436.44 336.789C432.914 330.842 429.39 324.512 426.872 318.692C424.353 312.872 422.761 307.228 421.331 301.866C419.899 296.502 418.507 291.298 418.283 286.517C418.062 281.735 418.871 277.283 419.995 273.184C421.118 269.087 422.818 264.939 425.027 261.925C427.235 258.912 429.972 256.894 433.245 255.103C436.517 253.314 440.459 251.84 444.66 251.188C448.863 250.535 453.643 250.534 458.454 251.191C463.266 251.851 468.195 253.172 473.528 255.139C478.859 257.104 484.815 260.034 490.444 262.984C496.069 265.934 501.775 268.861 507.285 272.835C512.797 276.811 520.851 284.42 523.51 286.831C526.17 289.241 523.614 286.559 523.248 287.301" stroke="#FFE3C7" stroke-width="4" stroke-linecap="round"/>
<path d="M491.674 335.082C478.44 314.562 436.77 244.536 412.565 211.872C388.362 179.205 360.772 160.687 346.453 139.086C332.132 117.488 329.184 107.989 326.64 82.2712C324.097 56.5534 330.511 0.971275 331.19 -15.218M492.773 334.572C479.734 314.158 438.324 245.27 413.837 212.8C389.349 180.332 360.36 161.44 345.84 139.755C331.32 118.068 329.248 108.469 326.722 82.6893C324.197 56.9095 329.891 1.41104 330.689 -14.9212" stroke="#46464F" stroke-width="2" stroke-linecap="round"/>
</g>
<defs>
<clipPath id="clip0_17344_16823">
<rect width="480" height="360" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 22 KiB

Some files were not shown because too many files have changed in this diff Show More