* 'master' of github.com:excalidraw/excalidraw: (194 commits)
fix: Make help toggle tabbable (#3310)
chore: Update translations from Crowdin (#3270)
chore(deps): bump @types/jest from 26.0.20 to 26.0.21 (#3298)
chore(deps): bump @types/react-dom from 17.0.1 to 17.0.2 (#3296)
chore(deps): bump @types/react from 17.0.2 to 17.0.3 (#3297)
fix: Show Windows share icon for Windows users (#3306)
fix: Update browser-fs-access to use new supported export (#3303)
feat: replaces fontSize and fontFamily text with icons (#2857)
fix: use random IV for link-sharing encryption (#2829) (#2833)
fix: Don't scroll to content on INIT websocket message (#3291)
docs: Release @excalidraw/excalidraw@0.5.0 🎉 (#3289)
feat: set window.name in excalidraw app & also support target for excalidraw libraries (#3299)
chore(deps-dev): bump css-loader in /src/packages/utils (#3292)
chore(deps-dev): bump css-loader in /src/packages/excalidraw (#3293)
chore(deps-dev): bump webpack in /src/packages/utils (#3294)
chore(deps-dev): bump webpack in /src/packages/excalidraw (#3295)
feat: support pasting file contents & always prefer system clip (#3257)
fix: Don't show export and delete when library is empty (#3288)
feat: Add label for name field and use input when editable in export dialog (#3286)
fix: overflow in textinput in export dialog (#3284)
...
<imgwidth="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>
<h3>Virtual whiteboard for sketching hand-drawn like diagrams.<br>Collaborative and end-to-end encrypted.</h3>
<p>
<ahref="https://twitter.com/Excalidraw">
<imgalt="Follow Excalidraw on Twitter"src="https://img.shields.io/twitter/follow/excalidraw.svg?label=follow+excalidraw&style=social&logo=twitter">
@ -20,14 +20,18 @@ Go to [excalidraw.com](https://excalidraw.com) to start sketching.
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/).
## We accept donations
## Supporting Excalidraw
If you like the project, you can become a sponsor at [Open Collective](https://opencollective.com/excalidraw).
@ -70,18 +74,28 @@ The second set of digits is the encryption key. The Excalidraw server doesn’t
Find a growing list of libraries containing assets for your drawings at [libraries.excalidraw.com](https://libraries.excalidraw.com).
## Developement
## 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/s/github/excalidraw/excalidraw
- You may need to sign in with Github and reload the page
- 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.
| `yarn test:code` | Test for formatting with Prettier |
#### Docker Compose
You can use docker-compose to work on excalidraw locally if you don't want to setup a Node.js env.
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
```
### Selfhosting
### 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 selfhost your own client under your own domain, on Kubernetes, AWS ECS, etc.
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 .
@ -120,7 +134,7 @@ 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 selfhosting your own Excalidraw.
We are working towards providing a full-fledged solution for self-hosting your own Excalidraw.
this.workbox=this.workbox||{},this.workbox.routing=function(t,e,r){"use strict";try{self["workbox:routing:4.3.1"]&&_()}catch(t){}consts="GET",n=t=>t&&"object"==typeoft?t:{handle:t};classo{constructor(t,e,r){this.handler=n(e),this.match=t,this.method=r||s}}classiextendso{constructor(t,{whitelist:e=[/./],blacklist:r=[]}={}){super(t=>this.t(t),t),this.s=e,this.o=r}t({url:t,request:e}){if("navigate"!==e.mode)return!1;constr=t.pathname+t.search;for(consttofthis.o)if(t.test(r))return!1;return!!this.s.some(t=>t.test(r))}}classuextendso{constructor(t,e,r){super(({url:e})=>{constr=t.exec(e.href);returnr?e.origin!==location.origin&&0!==r.index?null:r.slice(1):null},e,r)}}classc{constructor(){this.i=newMap}getroutes(){returnthis.i}addFetchListener(){self.addEventListener("fetch",t=>{const{request:e}=t,r=this.handleRequest({request:e,event:t});r&&t.respondWith(r)})}addCacheListener(){self.addEventListener("message",asynct=>{if(t.data&&"CACHE_URLS"===t.data.type){const{payload:e}=t.data,r=Promise.all(e.urlsToCache.map(t=>{"string"==typeoft&&(t=[t]);conste=newRequest(...t);returnthis.handleRequest({request:e})}));t.waitUntil(r),t.ports&&t.ports[0]&&(awaitr,t.ports[0].postMessage(!0))}})}handleRequest({request:t,event:e}){constr=newURL(t.url,location);if(!r.protocol.startsWith("http"))return;lets,{params:n,route:o}=this.findMatchingRoute({url:r,request:t,event:e}),i=o&&o.handler;if(!i&&this.u&&(i=this.u),i){try{s=i.handle({url:r,request:t,event:e,params:n})}catch(t){s=Promise.reject(t)}returns&&this.h&&(s=s.catch(t=>this.h.handle({url:r,event:e,err:t}))),s}}findMatchingRoute({url:t,request:e,event:r}){consts=this.i.get(e.method)||[];for(constnofs){lets,o=n.match({url:t,request:e,event:r});if(o)returnArray.isArray(o)&&o.length>0?s=o:o.constructor===Object&&Object.keys(o).length>0&&(s=o),{route:n,params:s}}return{}}setDefaultHandler(t){this.u=n(t)}setCatchHandler(t){this.h=n(t)}registerRoute(t){this.i.has(t.method)||this.i.set(t.method,[]),this.i.get(t.method).push(t)}unregisterRoute(t){if(!this.i.has(t.method))thrownewr.WorkboxError("unregister-route-but-not-found-with-method",{method:t.method});conste=this.i.get(t.method).indexOf(t);if(!(e>-1))thrownewr.WorkboxError("unregister-route-route-not-registered");this.i.get(t.method).splice(e,1)}}leta;consth=()=>(a||((a=newc).addFetchListener(),a.addCacheListener()),a);returnt.NavigationRoute=i,t.RegExpRoute=u,t.registerNavigationRoute=((t,r={})=>{consts=e.cacheNames.getPrecacheName(r.cacheName),n=newi(async()=>{try{conste=awaitcaches.match(t,{cacheName:s});if(e)returne;thrownewError(`The cache ${s} did not have an entry for `+`${t}.`)}catch(e){returnfetch(t)}},{whitelist:r.whitelist,blacklist:r.blacklist});returnh().registerRoute(n),n}),t.registerRoute=((t,e,s="GET")=>{letn;if("string"==typeoft){constr=newURL(t,location);n=newo(({url:t})=>t.href===r.href,e,s)}elseif(tinstanceofRegExp)n=newu(t,e,s);elseif("function"==typeoft)n=newo(t,e,s);else{if(!(tinstanceofo))thrownewr.WorkboxError("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});n=t}returnh().registerRoute(n),n}),t.Route=o,t.Router=c,t.setCatchHandler=(t=>{h().setCatchHandler(t)}),t.setDefaultHandler=(t=>{h().setDefaultHandler(t)}),t}({},workbox.core._private,workbox.core._private);
!function(){"use strict";try{self["workbox:sw:4.3.1"]&&_()}catch(t){}constt="https://storage.googleapis.com/workbox-cdn/releases/4.3.1",e={backgroundSync:"background-sync",broadcastUpdate:"broadcast-update",cacheableResponse:"cacheable-response",core:"core",expiration:"expiration",googleAnalytics:"offline-ga",navigationPreload:"navigation-preload",precaching:"precaching",rangeRequests:"range-requests",routing:"routing",strategies:"strategies",streams:"streams"};self.workbox=newclass{constructor(){returnthis.v={},this.t={debug:"localhost"===self.location.hostname,modulePathPrefix:null,modulePathCb:null},this.s=this.t.debug?"dev":"prod",this.o=!1,newProxy(this,{get(t,s){if(t[s])returnt[s];consto=e[s];returno&&t.loadModule(`workbox-${o}`),t[s]}})}setConfig(t={}){if(this.o)thrownewError("Config must be set before accessing workbox.* modules");Object.assign(this.t,t),this.s=this.t.debug?"dev":"prod"}loadModule(t){conste=this.i(t);try{importScripts(e),this.o=!0}catch(s){throwconsole.error(`Unable to import module '${t}' from '${e}'.`),s}}i(e){if(this.t.modulePathCb)returnthis.t.modulePathCb(e,this.t.debug);lets=[t];consto=`${e}.${this.s}.js`,r=this.t.modulePathPrefix;returnr&&""===(s=r.split("/"))[s.length-1]&&s.splice(s.length-1,1),s.push(o),s.join("/")}}}();
try{self["workbox:window:4.3.1"]&&_()}catch(n){}varn=function(n,t){returnnewPromise(function(i){vare=newMessageChannel;e.port1.onmessage=function(n){returni(n.data)},n.postMessage(t,[e.port2])})};functiont(n,t){for(vari=0;i<t.length;i++){vare=t[i];e.enumerable=e.enumerable||!1,e.configurable=!0,"value"ine&&(e.writable=!0),Object.defineProperty(n,e.key,e)}}functioni(n){if(void0===n)thrownewReferenceError("this hasn't been initialised - super() hasn't been called");returnn}try{self["workbox:core:4.3.1"]&&_()}catch(n){}vare=function(){varn=this;this.promise=newPromise(function(t,i){n.resolve=t,n.reject=i})},r=function(n,t){returnnewURL(n,location).href===newURL(t,location).href},o=function(n,t){Object.assign(this,t,{type:n})};functionu(n){returnfunction(){for(vart=[],i=0;i<arguments.length;i++)t[i]=arguments[i];try{returnPromise.resolve(n.apply(this,t))}catch(n){returnPromise.reject(n)}}}functiona(n,t,i){returni?t?t(n):n:(n&&n.then||(n=Promise.resolve(n)),t?n.then(t):n)}functions(){}varc=function(c){varf,h;functionv(n,t){varr;returnvoid0===t&&(t={}),(r=c.call(this)||this).t=n,r.i=t,r.o=0,r.u=newe,r.s=newe,r.h=newe,r.v=r.v.bind(i(i(r))),r.l=r.l.bind(i(i(r))),r.g=r.g.bind(i(i(r))),r.m=r.m.bind(i(i(r))),r}h=c,(f=v).prototype=Object.create(h.prototype),f.prototype.constructor=f,f.__proto__=h;varl,w,g,d=v.prototype;returnd.register=u(function(n){vart,i,e=this,u=(void0===n?{}:n).immediate,c=void0!==u&&u;returnt=function(){returne.p=Boolean(navigator.serviceWorker.controller),e.P=e.R(),a(e.k(),function(n){e.B=n,e.P&&(e.O=e.P,e.s.resolve(e.P),e.h.resolve(e.P),e.j(e.P),e.P.addEventListener("statechange",e.l,{once:!0}));vart=e.B.waiting;returnt&&r(t.scriptURL,e.t)&&(e.O=t,Promise.resolve().then(function(){e.dispatchEvent(newo("waiting",{sw:t,wasWaitingBeforeRegister:!0}))})),e.O&&e.u.resolve(e.O),e.B.addEventListener("updatefound",e.g),navigator.serviceWorker.addEventListener("controllerchange",e.m,{once:!0}),"BroadcastChannel"inself&&(e.C=newBroadcastChannel("workbox"),e.C.addEventListener("message",e.v)),navigator.serviceWorker.addEventListener("message",e.v),e.B})},(i=function(){if(!c&&"complete"!==document.readyState)returnfunction(n,t){if(!t)returnn&&n.then?n.then(s):Promise.resolve()}(newPromise(function(n){returnaddEventListener("load",n)}))}())&&i.then?i.then(t):t(i)}),d.getSW=u(function(){returnthis.O||this.u.promise}),d.messageSW=u(function(t){returna(this.getSW(),function(i){returnn(i,t)})}),d.R=function(){varn=navigator.serviceWorker.controller;if(n&&r(n.scriptURL,this.t))returnn},d.k=u(function(){varn=this;returnfunction(n,t){try{vari=n()}catch(n){returnt(n)}returni&&i.then?i.then(void0,t):i}(function(){returna(navigator.serviceWorker.register(n.t,n.i),function(t){returnn.L=performance.now(),t})},function(n){thrown})}),d.j=function(t){n(t,{type:"WINDOW_READY",meta:"workbox-window"})},d.g=function(){varn=this.B.installing;this.o>0||!r(n.scriptURL,this.t)||performance.now()>this.L+6e4?(this.W=n,this.B.removeEventListener("updatefound",this.g)):(this.O=n,this.u.resolve(n)),++this.o,n.addEventListener("statechange",this.l)},d.l=function(n){vart=this,i=n.target,e=i.state,r=i===this.W,u=r?"external":"",a={sw:i,originalEvent:n};!r&&this.p&&(a.isUpdate=!0),this.dispatchEvent(newo(u+e,a)),"installed"===e?this._=setTimeout(function(){"installed"===e&&t.B.waiting===i&&t.dispatchEvent(newo(u+"waiting",a))},200):"activating"===e&&(clearTimeout(this._),r||this.s.resolve(i))},d.m=function(n){vart=this.O;t===navigator.serviceWorker.controller&&(this.dispatchEvent(newo("controlling",{sw:t,originalEvent:n})),this.h.resolve(t))},d.v=function(n){vart=n.data;this.dispatchEvent(newo("message",{data:t,originalEvent:n}))},l=v,(w=[{key:"active",get:function(){returnthis.s.promise}},{key:"controlling",get:function(){returnthis.h.promise}}])&&t(l.prototype,w),g&&t(l,g),v}(function(){functionn(){this.D={}}vart=n.prototype;returnt.addEventListener=function(n,t){this.T(n).add(t)},t.removeEventListener=function(n,t){this.T(n).delete(t)},t.dispatchEvent=function(n){n.target=this,this.T(n.type).forEach(function(t){returnt(n)})},t.T=function(n){returnthis.D[n]=this.D[n]||newSet},n}());export{casWorkbox,nasmessageSW};
!function(n,t){"object"==typeofexports&&"undefined"!=typeofmodule?t(exports):"function"==typeofdefine&&define.amd?define(["exports"],t):t((n=n||self).workbox={})}(this,function(n){"use strict";try{self["workbox:window:4.3.1"]&&_()}catch(n){}vart=function(n,t){returnnewPromise(function(i){vare=newMessageChannel;e.port1.onmessage=function(n){returni(n.data)},n.postMessage(t,[e.port2])})};functioni(n,t){for(vari=0;i<t.length;i++){vare=t[i];e.enumerable=e.enumerable||!1,e.configurable=!0,"value"ine&&(e.writable=!0),Object.defineProperty(n,e.key,e)}}functione(n){if(void0===n)thrownewReferenceError("this hasn't been initialised - super() hasn't been called");returnn}try{self["workbox:core:4.3.1"]&&_()}catch(n){}varr=function(){varn=this;this.promise=newPromise(function(t,i){n.resolve=t,n.reject=i})},o=function(n,t){returnnewURL(n,location).href===newURL(t,location).href},u=function(n,t){Object.assign(this,t,{type:n})};functions(n){returnfunction(){for(vart=[],i=0;i<arguments.length;i++)t[i]=arguments[i];try{returnPromise.resolve(n.apply(this,t))}catch(n){returnPromise.reject(n)}}}functiona(n,t,i){returni?t?t(n):n:(n&&n.then||(n=Promise.resolve(n)),t?n.then(t):n)}functionc(){}varf=function(n){varf,h;functionv(t,i){varo;returnvoid0===i&&(i={}),(o=n.call(this)||this).t=t,o.i=i,o.o=0,o.u=newr,o.s=newr,o.h=newr,o.v=o.v.bind(e(e(o))),o.l=o.l.bind(e(e(o))),o.g=o.g.bind(e(e(o))),o.m=o.m.bind(e(e(o))),o}h=n,(f=v).prototype=Object.create(h.prototype),f.prototype.constructor=f,f.__proto__=h;varl,w,d,g=v.prototype;returng.register=s(function(n){vart,i,e=this,r=(void0===n?{}:n).immediate,s=void0!==r&&r;returnt=function(){returne.p=Boolean(navigator.serviceWorker.controller),e.P=e.j(),a(e.O(),function(n){e.R=n,e.P&&(e._=e.P,e.s.resolve(e.P),e.h.resolve(e.P),e.k(e.P),e.P.addEventListener("statechange",e.l,{once:!0}));vart=e.R.waiting;returnt&&o(t.scriptURL,e.t)&&(e._=t,Promise.resolve().then(function(){e.dispatchEvent(newu("waiting",{sw:t,wasWaitingBeforeRegister:!0}))})),e._&&e.u.resolve(e._),e.R.addEventListener("updatefound",e.g),navigator.serviceWorker.addEventListener("controllerchange",e.m,{once:!0}),"BroadcastChannel"inself&&(e.B=newBroadcastChannel("workbox"),e.B.addEventListener("message",e.v)),navigator.serviceWorker.addEventListener("message",e.v),e.R})},(i=function(){if(!s&&"complete"!==document.readyState)returnfunction(n,t){if(!t)returnn&&n.then?n.then(c):Promise.resolve()}(newPromise(function(n){returnaddEventListener("load",n)}))}())&&i.then?i.then(t):t(i)}),g.getSW=s(function(){returnthis._||this.u.promise}),g.messageSW=s(function(n){returna(this.getSW(),function(i){returnt(i,n)})}),g.j=function(){varn=navigator.serviceWorker.controller;if(n&&o(n.scriptURL,this.t))returnn},g.O=s(function(){varn=this;returnfunction(n,t){try{vari=n()}catch(n){returnt(n)}returni&&i.then?i.then(void0,t):i}(function(){returna(navigator.serviceWorker.register(n.t,n.i),function(t){returnn.C=performance.now(),t})},function(n){thrown})}),g.k=function(n){t(n,{type:"WINDOW_READY",meta:"workbox-window"})},g.g=function(){varn=this.R.installing;this.o>0||!o(n.scriptURL,this.t)||performance.now()>this.C+6e4?(this.L=n,this.R.removeEventListener("updatefound",this.g)):(this._=n,this.u.resolve(n)),++this.o,n.addEventListener("statechange",this.l)},g.l=function(n){vart=this,i=n.target,e=i.state,r=i===this.L,o=r?"external":"",s={sw:i,originalEvent:n};!r&&this.p&&(s.isUpdate=!0),this.dispatchEvent(newu(o+e,s)),"installed"===e?this.W=setTimeout(function(){"installed"===e&&t.R.waiting===i&&t.dispatchEvent(newu(o+"waiting",s))},200):"activating"===e&&(clearTimeout(this.W),r||this.s.resolve(i))},g.m=function(n){vart=this._;t===navigator.serviceWorker.controller&&(this.dispatchEvent(newu("controlling",{sw:t,originalEvent:n})),this.h.resolve(t))},g.v=function(n){vart=n.data;this.dispatchEvent(newu("message",{data:t,originalEvent:n}))},l=v,(w=[{key:"active",get:function(){returnthis.s.promise}},{key:"controlling",get:function(){returnthis.h.promise}}])&&i(l.prototype,w),d&&i(l,d),v}(function(){functionn(){this.D={}}vart=n.prototype;returnt.addEventListener=function(n,t){this.M(n).add(t)},t.removeEventListener=function(n,t){this.M(n).delete(t)},t.dispatchEvent=function(n){n.target=this,this.M(n.type).forEach(function(t){returnt(n)})},t.M=function(n){returnthis.D[n]=this.D[n]||newSet},n}());n.Workbox=f,n.messageSW=t,Object.defineProperty(n,"__esModule",{value:!0})});
d="M 6,7 C 5.446,7 5,7.446 5,8 v 9.999992 c 0,0.554 0.446,1 1,1 h 3.0000001 c 0.554,0 0.9999999,-0.446 0.9999999,-1 V 8 C 10,7.446 9.5540001,7 9.0000001,7 Z m 9,0 c -0.554,0 -1,0.446 -1,1 v 5.999992 c 0,0.554 0.446,1 1,1 h 3 c 0.554,0 1,-0.446 1,-1 V 8 C 19,7.446 18.554,7 18,7 Z"
d="m 6,16.999992 c -0.554,0 -1,-0.446 -1,-1 V 6 C 5,5.446 5.446,5 6,5 H 9.0000001 C 9.5540001,5 10,5.446 10,6 v 9.999992 c 0,0.554 -0.4459999,1 -0.9999999,1 z m 9,0 c -0.554,0 -1,-0.446 -1,-1 V 10 c 0,-0.554 0.446,-1 1,-1 h 3 c 0.554,0 1,0.446 1,1 v 5.999992 c 0,0.554 -0.446,1 -1,1 z"
d="m 7.000004,5.999996 c 0,-0.554 0.446,-1 1,-1 h 9.999992 c 0.554,0 1,0.446 1,1 v 3.0000001 c 0,0.554 -0.446,0.9999999 -1,0.9999999 H 8.000004 c -0.554,0 -1,-0.4459999 -1,-0.9999999 z m 0,9 c 0,-0.554 0.446,-1 1,-1 h 5.999992 c 0.554,0 1,0.446 1,1 v 3 c 0,0.554 -0.446,1 -1,1 H 8.000004 c -0.554,0 -1,-0.446 -1,-1 z"
d="m 16.999996,5.999996 c 0,-0.554 -0.446,-1 -1,-1 H 6.000004 c -0.554,0 -1,0.446 -1,1 v 3.0000001 c 0,0.554 0.446,0.9999999 1,0.9999999 h 9.999992 c 0.554,0 1,-0.4459999 1,-0.9999999 z m 0,9 c 0,-0.554 -0.446,-1 -1,-1 h -5.999992 c -0.554,0 -1,0.446 -1,1 v 3 c 0,0.554 0.446,1 1,1 h 5.999992 c 0.554,0 1,-0.446 1,-1 z"
d="m 5.000004,16.999996 c 0,0.554 0.446,1 1,1 h 3 c 0.554,0 1,-0.446 1,-1 v -10 c 0,-0.554 -0.446,-1 -1,-1 h -3 c -0.554,0 -1,0.446 -1,1 z m 9,-2 c 0,0.554 0.446,1 1,1 h 3 c 0.554,0 1,-0.446 1,-1 v -6 c 0,-0.554 -0.446,-1 -1,-1 h -3 c -0.554,0 -1,0.446 -1,1 z"
d="M 7 5 C 6.446 5 6 5.446 6 6 L 6 9 C 6 9.554 6.446 10 7 10 L 17 10 C 17.554 10 18 9.554 18 9 L 18 6 C 18 5.446 17.554 5 17 5 L 7 5 z M 9 14 C 8.446 14 8 14.446 8 15 L 8 18 C 8 18.554 8.446 19 9 19 L 15 19 C 15.554 19 16 18.554 16 18 L 16 15 C 16 14.446 15.554 14 15 14 L 9 14 z "
d="M 44.092 71.387 L 30.225 71.387 L 13.037 15.381 L 12.598 15.381 A 1505.093 1505.093 0 0 1 12.959 22.313 Q 13.426 31.715 13.508 36.4 A 102.991 102.991 0 0 1 13.525 38.184 L 13.525 71.387 L 0 71.387 L 0 0 L 20.605 0 L 37.5 54.59 L 37.793 54.59 L 55.713 0 L 76.318 0 L 76.318 71.387 L 62.207 71.387 L 62.207 37.598 Q 62.207 35.205 62.28 32.08 A 160.703 160.703 0 0 1 62.326 30.544 Q 62.452 26.754 62.866 17.168 A 5390.536 5390.536 0 0 1 62.939 15.479 L 62.5 15.479 L 44.092 71.387 Z"
/>,
{width: 77,height: 75},
),
);
exportconstFontSizeLargeIcon=React.memo(
({theme}:{theme:"light"|"dark"})=>
createIcon(
<path
fill={iconFillColor(theme)}
d="M 44.092 71.387 L 0 71.387 L 0 0 L 15.137 0 L 15.137 58.887 L 44.092 58.887 L 44.092 71.387 Z"
/>,
{width: 45,height: 75},
),
);
exportconstFontSizeExtraLargeIcon=React.memo(
({theme}:{theme:"light"|"dark"})=>
createIcon(
<path
fill={iconFillColor(theme)}
d="M 42.578 35.4 L 66.699 71.387 L 49.414 71.387 L 32.813 44.385 L 16.211 71.387 L 0 71.387 L 23.682 34.57 L 1.514 0 L 18.213 0 L 33.594 25.684 L 48.682 0 L 64.99 0 L 42.578 35.4 Z M 119.775 71.387 L 75.684 71.387 L 75.684 0 L 90.82 0 L 90.82 58.887 L 119.775 58.887 L 119.775 71.387 Z"
d="M 63.818 71.68 L 54.492 71.68 L 45.898 49.561 L 17.578 49.561 L 9.082 71.68 L 0 71.68 L 27.881 0 L 35.986 0 L 63.818 71.68 Z M 20.605 41.602 L 43.213 41.602 L 35.205 19.971 L 31.787 9.277 Q 30.322 15.137 28.711 19.971 L 20.605 41.602 Z"
/>
<path
fill={iconFillColor(theme)}
d="M 68.994 71.68 L 52.686 71.68 L 47.51 54.688 L 21.484 54.688 L 16.309 71.68 L 0 71.68 L 25.195 0 L 43.701 0 L 68.994 71.68 Z M 25.293 41.992 L 43.896 41.992 A 27590.463 27590.463 0 0 1 42.2 36.532 Q 36.965 19.676 35.937 16.273 A 120.932 120.932 0 0 1 35.815 15.869 A 131.65 131.65 0 0 1 35.396 14.435 Q 34.951 12.879 34.675 11.741 A 34.866 34.866 0 0 1 34.521 11.084 A 141.762 141.762 0 0 1 33.706 14.075 Q 31.482 21.957 25.293 41.992 Z"