diff --git a/apps/cli/THIRD_PARTY_NOTICES b/apps/cli/THIRD_PARTY_NOTICES index 42b388d5..0d85a5e3 100644 --- a/apps/cli/THIRD_PARTY_NOTICES +++ b/apps/cli/THIRD_PARTY_NOTICES @@ -70,6 +70,7 @@ Excalifont ----------- Copyright (c) 2024 by Excalidraw. All rights reserved. +Trademark: Excalifont is a trademark of Excalidraw. Manufacturer and designer: Your Own Font Foundry (Virgil); Jan Filipek / DizajnDesign (Excalifont, modifications) diff --git a/apps/eval-harness/public/fonts/Excalifont/Excalifont-Regular-349fac6ca4700ffec595a7150a0d1e1d.woff2 b/apps/eval-harness/public/fonts/Excalifont/Excalifont-Regular-349fac6ca4700ffec595a7150a0d1e1d.woff2 new file mode 100644 index 00000000..3c81f0ba Binary files /dev/null and b/apps/eval-harness/public/fonts/Excalifont/Excalifont-Regular-349fac6ca4700ffec595a7150a0d1e1d.woff2 differ diff --git a/apps/eval-harness/public/fonts/Excalifont/Excalifont-Regular-3f2c5db56cc93c5a6873b1361d730c16.woff2 b/apps/eval-harness/public/fonts/Excalifont/Excalifont-Regular-3f2c5db56cc93c5a6873b1361d730c16.woff2 new file mode 100644 index 00000000..1e9c460b Binary files /dev/null and b/apps/eval-harness/public/fonts/Excalifont/Excalifont-Regular-3f2c5db56cc93c5a6873b1361d730c16.woff2 differ diff --git a/apps/eval-harness/public/fonts/Excalifont/Excalifont-Regular-41b173a47b57366892116a575a43e2b6.woff2 b/apps/eval-harness/public/fonts/Excalifont/Excalifont-Regular-41b173a47b57366892116a575a43e2b6.woff2 new file mode 100644 index 00000000..507c11df Binary files /dev/null and b/apps/eval-harness/public/fonts/Excalifont/Excalifont-Regular-41b173a47b57366892116a575a43e2b6.woff2 differ diff --git a/apps/eval-harness/public/fonts/Excalifont/Excalifont-Regular-623ccf21b21ef6b3a0d87738f77eb071.woff2 b/apps/eval-harness/public/fonts/Excalifont/Excalifont-Regular-623ccf21b21ef6b3a0d87738f77eb071.woff2 new file mode 100644 index 00000000..aa49c360 Binary files /dev/null and b/apps/eval-harness/public/fonts/Excalifont/Excalifont-Regular-623ccf21b21ef6b3a0d87738f77eb071.woff2 differ diff --git a/apps/eval-harness/public/fonts/Excalifont/Excalifont-Regular-a88b72a24fb54c9f94e3b5fdaa7481c9.woff2 b/apps/eval-harness/public/fonts/Excalifont/Excalifont-Regular-a88b72a24fb54c9f94e3b5fdaa7481c9.woff2 new file mode 100644 index 00000000..98b9616a Binary files /dev/null and b/apps/eval-harness/public/fonts/Excalifont/Excalifont-Regular-a88b72a24fb54c9f94e3b5fdaa7481c9.woff2 differ diff --git a/apps/eval-harness/public/fonts/Excalifont/Excalifont-Regular-b9dcf9d2e50a1eaf42fc664b50a3fd0d.woff2 b/apps/eval-harness/public/fonts/Excalifont/Excalifont-Regular-b9dcf9d2e50a1eaf42fc664b50a3fd0d.woff2 new file mode 100644 index 00000000..58e960cf Binary files /dev/null and b/apps/eval-harness/public/fonts/Excalifont/Excalifont-Regular-b9dcf9d2e50a1eaf42fc664b50a3fd0d.woff2 differ diff --git a/apps/eval-harness/public/fonts/Excalifont/Excalifont-Regular-be310b9bcd4f1a43f571c46df7809174.woff2 b/apps/eval-harness/public/fonts/Excalifont/Excalifont-Regular-be310b9bcd4f1a43f571c46df7809174.woff2 new file mode 100644 index 00000000..b413197a Binary files /dev/null and b/apps/eval-harness/public/fonts/Excalifont/Excalifont-Regular-be310b9bcd4f1a43f571c46df7809174.woff2 differ diff --git a/apps/eval-harness/public/fonts/Excalifont/LICENSE b/apps/eval-harness/public/fonts/Excalifont/LICENSE new file mode 100644 index 00000000..251ad8fd --- /dev/null +++ b/apps/eval-harness/public/fonts/Excalifont/LICENSE @@ -0,0 +1,100 @@ +Excalifont +========== + +Copyright (c) 2024 by Excalidraw. All rights reserved. + +Trademark: Excalifont is a trademark of Excalidraw. +Manufacturer and designer: Your Own Font Foundry (Virgil); +Jan Filipek / DizajnDesign (Excalifont, modifications) - https://dizajndesign.sk +Source: https://github.com/excalidraw/excalidraw/tree/master/packages/excalidraw/fonts/Excalifont + +The seven woff2 files beside this notice are cn-font-split subsets of +Excalifont Regular, redistributed byte-for-byte unmodified. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://openfontlicense.org + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership with +others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The fonts, +including any derivative works, can be bundled, embedded, redistributed +and/or sold with any software provided that any reserved names are not used +by derivative works. The fonts and derivatives, however, cannot be released +under any other type of license. The requirement for fonts to remain under +this license does not apply to any document created using the fonts or their +derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may include +source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, or +substituting -- in part or in whole -- any of the components of the Original +Version, by changing formats or by porting the Font Software to a new +environment. + +"Author" refers to any designer, engineer, programmer, technical writer or +other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining a copy +of the Font Software, to use, study, copy, merge, embed, modify, redistribute, +and sell modified and unmodified copies of the Font Software, subject to the +following conditions: + +1) Neither the Font Software nor any of its individual components, in +Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy contains +the above copyright notice and this license. These can be included either as +stand-alone text files, human-readable headers or in the appropriate +machine-readable metadata fields within text or binary files as long as those +fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font Name(s) +unless explicit written permission is granted by the corresponding Copyright +Holder. This restriction only applies to the primary font name as presented +to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any Modified +Version, except to acknowledge the contribution(s) of the Copyright Holder(s) +and the Author(s) or with their explicit written permission. + +5) The Font Software, modified or unmodified, in part or in whole, must be +distributed entirely under this license, and must not be distributed under +any other license. The requirement for fonts to remain under this license +does not apply to any document created using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are not +met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, +TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR +ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, +INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF +CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE +THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/apps/eval-harness/src/routes/__root.tsx b/apps/eval-harness/src/routes/__root.tsx index 62ade5bf..73c6930d 100644 --- a/apps/eval-harness/src/routes/__root.tsx +++ b/apps/eval-harness/src/routes/__root.tsx @@ -35,7 +35,7 @@ export const Route = createRootRoute({ }, { rel: "stylesheet", - href: "https://fonts.googleapis.com/css2?family=Bricolage+Grotesque:opsz,wght@12..96,600..800&family=Dancing+Script:wght@600;700&family=Hanken+Grotesk:wght@400..700&family=IBM+Plex+Mono:wght@400;500;600&display=swap", + href: "https://fonts.googleapis.com/css2?family=Bricolage+Grotesque:opsz,wght@12..96,600..800&family=Hanken+Grotesk:wght@400..700&family=IBM+Plex+Mono:wght@400;500;600&display=swap", }, { rel: "stylesheet", href: appStyles }, ], diff --git a/apps/excalidraw/public/fonts/Excalifont/Excalifont-Regular-349fac6ca4700ffec595a7150a0d1e1d.woff2 b/apps/excalidraw/public/fonts/Excalifont/Excalifont-Regular-349fac6ca4700ffec595a7150a0d1e1d.woff2 new file mode 100644 index 00000000..3c81f0ba Binary files /dev/null and b/apps/excalidraw/public/fonts/Excalifont/Excalifont-Regular-349fac6ca4700ffec595a7150a0d1e1d.woff2 differ diff --git a/apps/excalidraw/public/fonts/Excalifont/Excalifont-Regular-3f2c5db56cc93c5a6873b1361d730c16.woff2 b/apps/excalidraw/public/fonts/Excalifont/Excalifont-Regular-3f2c5db56cc93c5a6873b1361d730c16.woff2 new file mode 100644 index 00000000..1e9c460b Binary files /dev/null and b/apps/excalidraw/public/fonts/Excalifont/Excalifont-Regular-3f2c5db56cc93c5a6873b1361d730c16.woff2 differ diff --git a/apps/excalidraw/public/fonts/Excalifont/Excalifont-Regular-41b173a47b57366892116a575a43e2b6.woff2 b/apps/excalidraw/public/fonts/Excalifont/Excalifont-Regular-41b173a47b57366892116a575a43e2b6.woff2 new file mode 100644 index 00000000..507c11df Binary files /dev/null and b/apps/excalidraw/public/fonts/Excalifont/Excalifont-Regular-41b173a47b57366892116a575a43e2b6.woff2 differ diff --git a/apps/excalidraw/public/fonts/Excalifont/Excalifont-Regular-623ccf21b21ef6b3a0d87738f77eb071.woff2 b/apps/excalidraw/public/fonts/Excalifont/Excalifont-Regular-623ccf21b21ef6b3a0d87738f77eb071.woff2 new file mode 100644 index 00000000..aa49c360 Binary files /dev/null and b/apps/excalidraw/public/fonts/Excalifont/Excalifont-Regular-623ccf21b21ef6b3a0d87738f77eb071.woff2 differ diff --git a/apps/excalidraw/public/fonts/Excalifont/Excalifont-Regular-a88b72a24fb54c9f94e3b5fdaa7481c9.woff2 b/apps/excalidraw/public/fonts/Excalifont/Excalifont-Regular-a88b72a24fb54c9f94e3b5fdaa7481c9.woff2 new file mode 100644 index 00000000..98b9616a Binary files /dev/null and b/apps/excalidraw/public/fonts/Excalifont/Excalifont-Regular-a88b72a24fb54c9f94e3b5fdaa7481c9.woff2 differ diff --git a/apps/excalidraw/public/fonts/Excalifont/Excalifont-Regular-b9dcf9d2e50a1eaf42fc664b50a3fd0d.woff2 b/apps/excalidraw/public/fonts/Excalifont/Excalifont-Regular-b9dcf9d2e50a1eaf42fc664b50a3fd0d.woff2 new file mode 100644 index 00000000..58e960cf Binary files /dev/null and b/apps/excalidraw/public/fonts/Excalifont/Excalifont-Regular-b9dcf9d2e50a1eaf42fc664b50a3fd0d.woff2 differ diff --git a/apps/excalidraw/public/fonts/Excalifont/Excalifont-Regular-be310b9bcd4f1a43f571c46df7809174.woff2 b/apps/excalidraw/public/fonts/Excalifont/Excalifont-Regular-be310b9bcd4f1a43f571c46df7809174.woff2 new file mode 100644 index 00000000..b413197a Binary files /dev/null and b/apps/excalidraw/public/fonts/Excalifont/Excalifont-Regular-be310b9bcd4f1a43f571c46df7809174.woff2 differ diff --git a/apps/excalidraw/public/fonts/Excalifont/LICENSE b/apps/excalidraw/public/fonts/Excalifont/LICENSE new file mode 100644 index 00000000..251ad8fd --- /dev/null +++ b/apps/excalidraw/public/fonts/Excalifont/LICENSE @@ -0,0 +1,100 @@ +Excalifont +========== + +Copyright (c) 2024 by Excalidraw. All rights reserved. + +Trademark: Excalifont is a trademark of Excalidraw. +Manufacturer and designer: Your Own Font Foundry (Virgil); +Jan Filipek / DizajnDesign (Excalifont, modifications) - https://dizajndesign.sk +Source: https://github.com/excalidraw/excalidraw/tree/master/packages/excalidraw/fonts/Excalifont + +The seven woff2 files beside this notice are cn-font-split subsets of +Excalifont Regular, redistributed byte-for-byte unmodified. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://openfontlicense.org + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership with +others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The fonts, +including any derivative works, can be bundled, embedded, redistributed +and/or sold with any software provided that any reserved names are not used +by derivative works. The fonts and derivatives, however, cannot be released +under any other type of license. The requirement for fonts to remain under +this license does not apply to any document created using the fonts or their +derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may include +source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, or +substituting -- in part or in whole -- any of the components of the Original +Version, by changing formats or by porting the Font Software to a new +environment. + +"Author" refers to any designer, engineer, programmer, technical writer or +other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining a copy +of the Font Software, to use, study, copy, merge, embed, modify, redistribute, +and sell modified and unmodified copies of the Font Software, subject to the +following conditions: + +1) Neither the Font Software nor any of its individual components, in +Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy contains +the above copyright notice and this license. These can be included either as +stand-alone text files, human-readable headers or in the appropriate +machine-readable metadata fields within text or binary files as long as those +fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font Name(s) +unless explicit written permission is granted by the corresponding Copyright +Holder. This restriction only applies to the primary font name as presented +to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any Modified +Version, except to acknowledge the contribution(s) of the Copyright Holder(s) +and the Author(s) or with their explicit written permission. + +5) The Font Software, modified or unmodified, in part or in whole, must be +distributed entirely under this license, and must not be distributed under +any other license. The requirement for fonts to remain under this license +does not apply to any document created using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are not +met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, +TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR +ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, +INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF +CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE +THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/apps/icons/public/fonts/Excalifont/Excalifont-Regular-349fac6ca4700ffec595a7150a0d1e1d.woff2 b/apps/icons/public/fonts/Excalifont/Excalifont-Regular-349fac6ca4700ffec595a7150a0d1e1d.woff2 new file mode 100644 index 00000000..3c81f0ba Binary files /dev/null and b/apps/icons/public/fonts/Excalifont/Excalifont-Regular-349fac6ca4700ffec595a7150a0d1e1d.woff2 differ diff --git a/apps/icons/public/fonts/Excalifont/Excalifont-Regular-3f2c5db56cc93c5a6873b1361d730c16.woff2 b/apps/icons/public/fonts/Excalifont/Excalifont-Regular-3f2c5db56cc93c5a6873b1361d730c16.woff2 new file mode 100644 index 00000000..1e9c460b Binary files /dev/null and b/apps/icons/public/fonts/Excalifont/Excalifont-Regular-3f2c5db56cc93c5a6873b1361d730c16.woff2 differ diff --git a/apps/icons/public/fonts/Excalifont/Excalifont-Regular-41b173a47b57366892116a575a43e2b6.woff2 b/apps/icons/public/fonts/Excalifont/Excalifont-Regular-41b173a47b57366892116a575a43e2b6.woff2 new file mode 100644 index 00000000..507c11df Binary files /dev/null and b/apps/icons/public/fonts/Excalifont/Excalifont-Regular-41b173a47b57366892116a575a43e2b6.woff2 differ diff --git a/apps/icons/public/fonts/Excalifont/Excalifont-Regular-623ccf21b21ef6b3a0d87738f77eb071.woff2 b/apps/icons/public/fonts/Excalifont/Excalifont-Regular-623ccf21b21ef6b3a0d87738f77eb071.woff2 new file mode 100644 index 00000000..aa49c360 Binary files /dev/null and b/apps/icons/public/fonts/Excalifont/Excalifont-Regular-623ccf21b21ef6b3a0d87738f77eb071.woff2 differ diff --git a/apps/icons/public/fonts/Excalifont/Excalifont-Regular-a88b72a24fb54c9f94e3b5fdaa7481c9.woff2 b/apps/icons/public/fonts/Excalifont/Excalifont-Regular-a88b72a24fb54c9f94e3b5fdaa7481c9.woff2 new file mode 100644 index 00000000..98b9616a Binary files /dev/null and b/apps/icons/public/fonts/Excalifont/Excalifont-Regular-a88b72a24fb54c9f94e3b5fdaa7481c9.woff2 differ diff --git a/apps/icons/public/fonts/Excalifont/Excalifont-Regular-b9dcf9d2e50a1eaf42fc664b50a3fd0d.woff2 b/apps/icons/public/fonts/Excalifont/Excalifont-Regular-b9dcf9d2e50a1eaf42fc664b50a3fd0d.woff2 new file mode 100644 index 00000000..58e960cf Binary files /dev/null and b/apps/icons/public/fonts/Excalifont/Excalifont-Regular-b9dcf9d2e50a1eaf42fc664b50a3fd0d.woff2 differ diff --git a/apps/icons/public/fonts/Excalifont/Excalifont-Regular-be310b9bcd4f1a43f571c46df7809174.woff2 b/apps/icons/public/fonts/Excalifont/Excalifont-Regular-be310b9bcd4f1a43f571c46df7809174.woff2 new file mode 100644 index 00000000..b413197a Binary files /dev/null and b/apps/icons/public/fonts/Excalifont/Excalifont-Regular-be310b9bcd4f1a43f571c46df7809174.woff2 differ diff --git a/apps/icons/public/fonts/Excalifont/LICENSE b/apps/icons/public/fonts/Excalifont/LICENSE new file mode 100644 index 00000000..251ad8fd --- /dev/null +++ b/apps/icons/public/fonts/Excalifont/LICENSE @@ -0,0 +1,100 @@ +Excalifont +========== + +Copyright (c) 2024 by Excalidraw. All rights reserved. + +Trademark: Excalifont is a trademark of Excalidraw. +Manufacturer and designer: Your Own Font Foundry (Virgil); +Jan Filipek / DizajnDesign (Excalifont, modifications) - https://dizajndesign.sk +Source: https://github.com/excalidraw/excalidraw/tree/master/packages/excalidraw/fonts/Excalifont + +The seven woff2 files beside this notice are cn-font-split subsets of +Excalifont Regular, redistributed byte-for-byte unmodified. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://openfontlicense.org + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership with +others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The fonts, +including any derivative works, can be bundled, embedded, redistributed +and/or sold with any software provided that any reserved names are not used +by derivative works. The fonts and derivatives, however, cannot be released +under any other type of license. The requirement for fonts to remain under +this license does not apply to any document created using the fonts or their +derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may include +source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, or +substituting -- in part or in whole -- any of the components of the Original +Version, by changing formats or by porting the Font Software to a new +environment. + +"Author" refers to any designer, engineer, programmer, technical writer or +other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining a copy +of the Font Software, to use, study, copy, merge, embed, modify, redistribute, +and sell modified and unmodified copies of the Font Software, subject to the +following conditions: + +1) Neither the Font Software nor any of its individual components, in +Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy contains +the above copyright notice and this license. These can be included either as +stand-alone text files, human-readable headers or in the appropriate +machine-readable metadata fields within text or binary files as long as those +fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font Name(s) +unless explicit written permission is granted by the corresponding Copyright +Holder. This restriction only applies to the primary font name as presented +to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any Modified +Version, except to acknowledge the contribution(s) of the Copyright Holder(s) +and the Author(s) or with their explicit written permission. + +5) The Font Software, modified or unmodified, in part or in whole, must be +distributed entirely under this license, and must not be distributed under +any other license. The requirement for fonts to remain under this license +does not apply to any document created using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are not +met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, +TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR +ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, +INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF +CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE +THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/apps/icons/src/components/icon-library/icon-library.test.tsx b/apps/icons/src/components/icon-library/icon-library.test.tsx index 913876bc..d7d4549e 100644 --- a/apps/icons/src/components/icon-library/icon-library.test.tsx +++ b/apps/icons/src/components/icon-library/icon-library.test.tsx @@ -86,7 +86,14 @@ describe("IconLibrary", () => { expect(styles).toMatch( /\.icons-brand \.sk-wordmark\s*\{[^}]*font-family:\s*var\(--font-script\)/u, ); - expect(rootRoute).toContain("family=Dancing+Script"); + // The script font is Excalifont, self-hosted from this surface's own + // public/ rather than fetched from Google, so the wordmark renders in the + // same face the diagrams do. Preloading the Latin subset is what keeps it + // from painting the fallback first. + expect(rootRoute).not.toContain("family=Dancing+Script"); + expect(rootRoute).toContain( + "/fonts/Excalifont/Excalifont-Regular-a88b72a24fb54c9f94e3b5fdaa7481c9.woff2", + ); }); it("calls the agent entry point llms.txt everywhere it appears", () => { diff --git a/apps/icons/src/routes/__root.tsx b/apps/icons/src/routes/__root.tsx index dcdff1ce..a8c9933c 100644 --- a/apps/icons/src/routes/__root.tsx +++ b/apps/icons/src/routes/__root.tsx @@ -25,6 +25,16 @@ export const Route = createRootRoute({ ], links: [ { rel: "icon", href: "/icon.svg", type: "image/svg+xml" }, + // Excalifont's Latin subset backs the wordmark; preload it so the + // lockup paints in the product's own hand instead of reflowing + // through the sans fallback. + { + rel: "preload", + as: "font", + type: "font/woff2", + href: "/fonts/Excalifont/Excalifont-Regular-a88b72a24fb54c9f94e3b5fdaa7481c9.woff2", + crossOrigin: "anonymous", + }, { rel: "preconnect", href: "https://fonts.googleapis.com" }, { rel: "preconnect", @@ -33,7 +43,7 @@ export const Route = createRootRoute({ }, { rel: "stylesheet", - href: "https://fonts.googleapis.com/css2?family=Bricolage+Grotesque:opsz,wght@12..96,600..800&family=Dancing+Script:wght@600;700&family=Hanken+Grotesk:wght@400..700&family=IBM+Plex+Mono:wght@400;500;600&display=swap", + href: "https://fonts.googleapis.com/css2?family=Bricolage+Grotesque:opsz,wght@12..96,600..800&family=Hanken+Grotesk:wght@400..700&family=IBM+Plex+Mono:wght@400;500;600&display=swap", }, { rel: "stylesheet", href: appStyles }, ], diff --git a/apps/icons/src/styles/app.css b/apps/icons/src/styles/app.css index a5c4d88a..9908b4f9 100644 --- a/apps/icons/src/styles/app.css +++ b/apps/icons/src/styles/app.css @@ -872,7 +872,7 @@ select:focus-visible { display: inline-flex; font-family: var(--font-script); font-size: 26px; - font-weight: 700; + font-weight: 400; gap: 9px; text-decoration: none; } diff --git a/apps/playground/public/fonts/Excalifont/LICENSE b/apps/playground/public/fonts/Excalifont/LICENSE new file mode 100644 index 00000000..251ad8fd --- /dev/null +++ b/apps/playground/public/fonts/Excalifont/LICENSE @@ -0,0 +1,100 @@ +Excalifont +========== + +Copyright (c) 2024 by Excalidraw. All rights reserved. + +Trademark: Excalifont is a trademark of Excalidraw. +Manufacturer and designer: Your Own Font Foundry (Virgil); +Jan Filipek / DizajnDesign (Excalifont, modifications) - https://dizajndesign.sk +Source: https://github.com/excalidraw/excalidraw/tree/master/packages/excalidraw/fonts/Excalifont + +The seven woff2 files beside this notice are cn-font-split subsets of +Excalifont Regular, redistributed byte-for-byte unmodified. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://openfontlicense.org + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership with +others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The fonts, +including any derivative works, can be bundled, embedded, redistributed +and/or sold with any software provided that any reserved names are not used +by derivative works. The fonts and derivatives, however, cannot be released +under any other type of license. The requirement for fonts to remain under +this license does not apply to any document created using the fonts or their +derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may include +source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, or +substituting -- in part or in whole -- any of the components of the Original +Version, by changing formats or by porting the Font Software to a new +environment. + +"Author" refers to any designer, engineer, programmer, technical writer or +other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining a copy +of the Font Software, to use, study, copy, merge, embed, modify, redistribute, +and sell modified and unmodified copies of the Font Software, subject to the +following conditions: + +1) Neither the Font Software nor any of its individual components, in +Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy contains +the above copyright notice and this license. These can be included either as +stand-alone text files, human-readable headers or in the appropriate +machine-readable metadata fields within text or binary files as long as those +fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font Name(s) +unless explicit written permission is granted by the corresponding Copyright +Holder. This restriction only applies to the primary font name as presented +to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any Modified +Version, except to acknowledge the contribution(s) of the Copyright Holder(s) +and the Author(s) or with their explicit written permission. + +5) The Font Software, modified or unmodified, in part or in whole, must be +distributed entirely under this license, and must not be distributed under +any other license. The requirement for fonts to remain under this license +does not apply to any document created using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are not +met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, +TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR +ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, +INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF +CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE +THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/apps/playground/src/routes/__root.tsx b/apps/playground/src/routes/__root.tsx index 6089d09e..8d875da4 100644 --- a/apps/playground/src/routes/__root.tsx +++ b/apps/playground/src/routes/__root.tsx @@ -26,6 +26,16 @@ export const Route = createRootRoute({ ], links: [ { rel: "icon", href: "/icon.svg", type: "image/svg+xml" }, + // Excalifont's Latin subset backs the wordmark; preload it so the + // lockup paints in the product's own hand instead of reflowing + // through the sans fallback. + { + rel: "preload", + as: "font", + type: "font/woff2", + href: "/fonts/Excalifont/Excalifont-Regular-a88b72a24fb54c9f94e3b5fdaa7481c9.woff2", + crossOrigin: "anonymous", + }, { rel: "preconnect", href: "https://fonts.googleapis.com" }, { rel: "preconnect", @@ -34,7 +44,7 @@ export const Route = createRootRoute({ }, { rel: "stylesheet", - href: "https://fonts.googleapis.com/css2?family=Bricolage+Grotesque:opsz,wght@12..96,600..800&family=Dancing+Script:wght@600;700&family=Hanken+Grotesk:wght@400..700&family=IBM+Plex+Mono:wght@400;500;600&display=swap", + href: "https://fonts.googleapis.com/css2?family=Bricolage+Grotesque:opsz,wght@12..96,600..800&family=Hanken+Grotesk:wght@400..700&family=IBM+Plex+Mono:wght@400;500;600&display=swap", }, { rel: "stylesheet", href: appStyles }, ], diff --git a/apps/playground/src/styles/app.css b/apps/playground/src/styles/app.css index 74b5870b..7894e85f 100644 --- a/apps/playground/src/styles/app.css +++ b/apps/playground/src/styles/app.css @@ -63,7 +63,7 @@ --font-sans: "Hanken Grotesk", ui-sans-serif, system-ui, sans-serif; --font-mono: "IBM Plex Mono", ui-monospace, monospace; --font-display: "Bricolage Grotesque", ui-sans-serif, system-ui, sans-serif; - --font-script: "Dancing Script", cursive; + --font-script: "Excalifont", cursive; } @layer base { @@ -179,7 +179,7 @@ body { .studio-brand__wordmark { font-family: var(--font-script); font-size: 28px; - font-weight: 700; + font-weight: 400; line-height: 1; } diff --git a/apps/web/public/fonts/Excalifont/Excalifont-Regular-349fac6ca4700ffec595a7150a0d1e1d.woff2 b/apps/web/public/fonts/Excalifont/Excalifont-Regular-349fac6ca4700ffec595a7150a0d1e1d.woff2 new file mode 100644 index 00000000..3c81f0ba Binary files /dev/null and b/apps/web/public/fonts/Excalifont/Excalifont-Regular-349fac6ca4700ffec595a7150a0d1e1d.woff2 differ diff --git a/apps/web/public/fonts/Excalifont/Excalifont-Regular-3f2c5db56cc93c5a6873b1361d730c16.woff2 b/apps/web/public/fonts/Excalifont/Excalifont-Regular-3f2c5db56cc93c5a6873b1361d730c16.woff2 new file mode 100644 index 00000000..1e9c460b Binary files /dev/null and b/apps/web/public/fonts/Excalifont/Excalifont-Regular-3f2c5db56cc93c5a6873b1361d730c16.woff2 differ diff --git a/apps/web/public/fonts/Excalifont/Excalifont-Regular-41b173a47b57366892116a575a43e2b6.woff2 b/apps/web/public/fonts/Excalifont/Excalifont-Regular-41b173a47b57366892116a575a43e2b6.woff2 new file mode 100644 index 00000000..507c11df Binary files /dev/null and b/apps/web/public/fonts/Excalifont/Excalifont-Regular-41b173a47b57366892116a575a43e2b6.woff2 differ diff --git a/apps/web/public/fonts/Excalifont/Excalifont-Regular-623ccf21b21ef6b3a0d87738f77eb071.woff2 b/apps/web/public/fonts/Excalifont/Excalifont-Regular-623ccf21b21ef6b3a0d87738f77eb071.woff2 new file mode 100644 index 00000000..aa49c360 Binary files /dev/null and b/apps/web/public/fonts/Excalifont/Excalifont-Regular-623ccf21b21ef6b3a0d87738f77eb071.woff2 differ diff --git a/apps/web/public/fonts/Excalifont/Excalifont-Regular-a88b72a24fb54c9f94e3b5fdaa7481c9.woff2 b/apps/web/public/fonts/Excalifont/Excalifont-Regular-a88b72a24fb54c9f94e3b5fdaa7481c9.woff2 new file mode 100644 index 00000000..98b9616a Binary files /dev/null and b/apps/web/public/fonts/Excalifont/Excalifont-Regular-a88b72a24fb54c9f94e3b5fdaa7481c9.woff2 differ diff --git a/apps/web/public/fonts/Excalifont/Excalifont-Regular-b9dcf9d2e50a1eaf42fc664b50a3fd0d.woff2 b/apps/web/public/fonts/Excalifont/Excalifont-Regular-b9dcf9d2e50a1eaf42fc664b50a3fd0d.woff2 new file mode 100644 index 00000000..58e960cf Binary files /dev/null and b/apps/web/public/fonts/Excalifont/Excalifont-Regular-b9dcf9d2e50a1eaf42fc664b50a3fd0d.woff2 differ diff --git a/apps/web/public/fonts/Excalifont/Excalifont-Regular-be310b9bcd4f1a43f571c46df7809174.woff2 b/apps/web/public/fonts/Excalifont/Excalifont-Regular-be310b9bcd4f1a43f571c46df7809174.woff2 new file mode 100644 index 00000000..b413197a Binary files /dev/null and b/apps/web/public/fonts/Excalifont/Excalifont-Regular-be310b9bcd4f1a43f571c46df7809174.woff2 differ diff --git a/apps/web/public/fonts/Excalifont/LICENSE b/apps/web/public/fonts/Excalifont/LICENSE new file mode 100644 index 00000000..251ad8fd --- /dev/null +++ b/apps/web/public/fonts/Excalifont/LICENSE @@ -0,0 +1,100 @@ +Excalifont +========== + +Copyright (c) 2024 by Excalidraw. All rights reserved. + +Trademark: Excalifont is a trademark of Excalidraw. +Manufacturer and designer: Your Own Font Foundry (Virgil); +Jan Filipek / DizajnDesign (Excalifont, modifications) - https://dizajndesign.sk +Source: https://github.com/excalidraw/excalidraw/tree/master/packages/excalidraw/fonts/Excalifont + +The seven woff2 files beside this notice are cn-font-split subsets of +Excalifont Regular, redistributed byte-for-byte unmodified. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://openfontlicense.org + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership with +others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The fonts, +including any derivative works, can be bundled, embedded, redistributed +and/or sold with any software provided that any reserved names are not used +by derivative works. The fonts and derivatives, however, cannot be released +under any other type of license. The requirement for fonts to remain under +this license does not apply to any document created using the fonts or their +derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may include +source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, or +substituting -- in part or in whole -- any of the components of the Original +Version, by changing formats or by porting the Font Software to a new +environment. + +"Author" refers to any designer, engineer, programmer, technical writer or +other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining a copy +of the Font Software, to use, study, copy, merge, embed, modify, redistribute, +and sell modified and unmodified copies of the Font Software, subject to the +following conditions: + +1) Neither the Font Software nor any of its individual components, in +Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy contains +the above copyright notice and this license. These can be included either as +stand-alone text files, human-readable headers or in the appropriate +machine-readable metadata fields within text or binary files as long as those +fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font Name(s) +unless explicit written permission is granted by the corresponding Copyright +Holder. This restriction only applies to the primary font name as presented +to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any Modified +Version, except to acknowledge the contribution(s) of the Copyright Holder(s) +and the Author(s) or with their explicit written permission. + +5) The Font Software, modified or unmodified, in part or in whole, must be +distributed entirely under this license, and must not be distributed under +any other license. The requirement for fonts to remain under this license +does not apply to any document created using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are not +met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, +TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR +ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, +INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF +CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE +THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/apps/web/public/media/sketchi-og-card.png b/apps/web/public/media/sketchi-og-card.png index a7ca0637..596d35fa 100644 Binary files a/apps/web/public/media/sketchi-og-card.png and b/apps/web/public/media/sketchi-og-card.png differ diff --git a/apps/web/public/media/sketchi-og-card.svg b/apps/web/public/media/sketchi-og-card.svg index c2b0156e..09404499 100644 --- a/apps/web/public/media/sketchi-og-card.svg +++ b/apps/web/public/media/sketchi-og-card.svg @@ -30,7 +30,7 @@ - Sketchi + @@ -66,8 +66,8 @@ - yes - no + + @@ -93,4 +93,10 @@ ship + + diff --git a/apps/web/src/routes/__root.tsx b/apps/web/src/routes/__root.tsx index d737699a..71a9640c 100644 --- a/apps/web/src/routes/__root.tsx +++ b/apps/web/src/routes/__root.tsx @@ -30,6 +30,16 @@ export const Route = createRootRoute({ ], links: [ { rel: "icon", href: "/icon.svg", type: "image/svg+xml" }, + // Excalifont's Latin subset backs the wordmark; preload it so the + // lockup paints in the product's own hand instead of reflowing + // through the sans fallback. + { + rel: "preload", + as: "font", + type: "font/woff2", + href: "/fonts/Excalifont/Excalifont-Regular-a88b72a24fb54c9f94e3b5fdaa7481c9.woff2", + crossOrigin: "anonymous", + }, { rel: "preconnect", href: "https://fonts.googleapis.com" }, { rel: "preconnect", @@ -38,7 +48,7 @@ export const Route = createRootRoute({ }, { rel: "stylesheet", - href: "https://fonts.googleapis.com/css2?family=Bricolage+Grotesque:opsz,wght@12..96,600..800&family=Dancing+Script:wght@600;700&family=Hanken+Grotesk:wght@400..700&family=IBM+Plex+Mono:wght@400;500;600&display=swap", + href: "https://fonts.googleapis.com/css2?family=Bricolage+Grotesque:opsz,wght@12..96,600..800&family=Hanken+Grotesk:wght@400..700&family=IBM+Plex+Mono:wght@400;500;600&display=swap", }, { rel: "stylesheet", href: appStyles }, ], diff --git a/apps/web/src/styles/app.css b/apps/web/src/styles/app.css index c266c8f0..1fab3a99 100644 --- a/apps/web/src/styles/app.css +++ b/apps/web/src/styles/app.css @@ -1531,7 +1531,7 @@ display: inline-flex; font-family: var(--font-script); font-size: 26px; - font-weight: 700; + font-weight: 400; gap: 9px; } diff --git a/packages/diagram/ui/.storybook/main.ts b/packages/diagram/ui/.storybook/main.ts index 7f015557..b47f2ca7 100644 --- a/packages/diagram/ui/.storybook/main.ts +++ b/packages/diagram/ui/.storybook/main.ts @@ -3,6 +3,10 @@ import type { StorybookConfig } from "@storybook/react-vite"; const config: StorybookConfig = { stories: ["../src/**/*.stories.@(ts|tsx)"], addons: ["@storybook/addon-vitest", "@storybook/addon-mcp"], + // theme.css declares Excalifont at absolute /fonts/Excalifont/... — the face + // the scene canvas draws text in and the wordmark is written in. Without this + // the stories request it and get a 404, so every preview silently falls back. + staticDirs: ["../public"], framework: { name: "@storybook/react-vite", options: {}, diff --git a/packages/diagram/ui/public/fonts/Excalifont/Excalifont-Regular-349fac6ca4700ffec595a7150a0d1e1d.woff2 b/packages/diagram/ui/public/fonts/Excalifont/Excalifont-Regular-349fac6ca4700ffec595a7150a0d1e1d.woff2 new file mode 100644 index 00000000..3c81f0ba Binary files /dev/null and b/packages/diagram/ui/public/fonts/Excalifont/Excalifont-Regular-349fac6ca4700ffec595a7150a0d1e1d.woff2 differ diff --git a/packages/diagram/ui/public/fonts/Excalifont/Excalifont-Regular-3f2c5db56cc93c5a6873b1361d730c16.woff2 b/packages/diagram/ui/public/fonts/Excalifont/Excalifont-Regular-3f2c5db56cc93c5a6873b1361d730c16.woff2 new file mode 100644 index 00000000..1e9c460b Binary files /dev/null and b/packages/diagram/ui/public/fonts/Excalifont/Excalifont-Regular-3f2c5db56cc93c5a6873b1361d730c16.woff2 differ diff --git a/packages/diagram/ui/public/fonts/Excalifont/Excalifont-Regular-41b173a47b57366892116a575a43e2b6.woff2 b/packages/diagram/ui/public/fonts/Excalifont/Excalifont-Regular-41b173a47b57366892116a575a43e2b6.woff2 new file mode 100644 index 00000000..507c11df Binary files /dev/null and b/packages/diagram/ui/public/fonts/Excalifont/Excalifont-Regular-41b173a47b57366892116a575a43e2b6.woff2 differ diff --git a/packages/diagram/ui/public/fonts/Excalifont/Excalifont-Regular-623ccf21b21ef6b3a0d87738f77eb071.woff2 b/packages/diagram/ui/public/fonts/Excalifont/Excalifont-Regular-623ccf21b21ef6b3a0d87738f77eb071.woff2 new file mode 100644 index 00000000..aa49c360 Binary files /dev/null and b/packages/diagram/ui/public/fonts/Excalifont/Excalifont-Regular-623ccf21b21ef6b3a0d87738f77eb071.woff2 differ diff --git a/packages/diagram/ui/public/fonts/Excalifont/Excalifont-Regular-a88b72a24fb54c9f94e3b5fdaa7481c9.woff2 b/packages/diagram/ui/public/fonts/Excalifont/Excalifont-Regular-a88b72a24fb54c9f94e3b5fdaa7481c9.woff2 new file mode 100644 index 00000000..98b9616a Binary files /dev/null and b/packages/diagram/ui/public/fonts/Excalifont/Excalifont-Regular-a88b72a24fb54c9f94e3b5fdaa7481c9.woff2 differ diff --git a/packages/diagram/ui/public/fonts/Excalifont/Excalifont-Regular-b9dcf9d2e50a1eaf42fc664b50a3fd0d.woff2 b/packages/diagram/ui/public/fonts/Excalifont/Excalifont-Regular-b9dcf9d2e50a1eaf42fc664b50a3fd0d.woff2 new file mode 100644 index 00000000..58e960cf Binary files /dev/null and b/packages/diagram/ui/public/fonts/Excalifont/Excalifont-Regular-b9dcf9d2e50a1eaf42fc664b50a3fd0d.woff2 differ diff --git a/packages/diagram/ui/public/fonts/Excalifont/Excalifont-Regular-be310b9bcd4f1a43f571c46df7809174.woff2 b/packages/diagram/ui/public/fonts/Excalifont/Excalifont-Regular-be310b9bcd4f1a43f571c46df7809174.woff2 new file mode 100644 index 00000000..b413197a Binary files /dev/null and b/packages/diagram/ui/public/fonts/Excalifont/Excalifont-Regular-be310b9bcd4f1a43f571c46df7809174.woff2 differ diff --git a/packages/diagram/ui/public/fonts/Excalifont/LICENSE b/packages/diagram/ui/public/fonts/Excalifont/LICENSE new file mode 100644 index 00000000..251ad8fd --- /dev/null +++ b/packages/diagram/ui/public/fonts/Excalifont/LICENSE @@ -0,0 +1,100 @@ +Excalifont +========== + +Copyright (c) 2024 by Excalidraw. All rights reserved. + +Trademark: Excalifont is a trademark of Excalidraw. +Manufacturer and designer: Your Own Font Foundry (Virgil); +Jan Filipek / DizajnDesign (Excalifont, modifications) - https://dizajndesign.sk +Source: https://github.com/excalidraw/excalidraw/tree/master/packages/excalidraw/fonts/Excalifont + +The seven woff2 files beside this notice are cn-font-split subsets of +Excalifont Regular, redistributed byte-for-byte unmodified. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://openfontlicense.org + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership with +others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The fonts, +including any derivative works, can be bundled, embedded, redistributed +and/or sold with any software provided that any reserved names are not used +by derivative works. The fonts and derivatives, however, cannot be released +under any other type of license. The requirement for fonts to remain under +this license does not apply to any document created using the fonts or their +derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may include +source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, or +substituting -- in part or in whole -- any of the components of the Original +Version, by changing formats or by porting the Font Software to a new +environment. + +"Author" refers to any designer, engineer, programmer, technical writer or +other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining a copy +of the Font Software, to use, study, copy, merge, embed, modify, redistribute, +and sell modified and unmodified copies of the Font Software, subject to the +following conditions: + +1) Neither the Font Software nor any of its individual components, in +Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy contains +the above copyright notice and this license. These can be included either as +stand-alone text files, human-readable headers or in the appropriate +machine-readable metadata fields within text or binary files as long as those +fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font Name(s) +unless explicit written permission is granted by the corresponding Copyright +Holder. This restriction only applies to the primary font name as presented +to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any Modified +Version, except to acknowledge the contribution(s) of the Copyright Holder(s) +and the Author(s) or with their explicit written permission. + +5) The Font Software, modified or unmodified, in part or in whole, must be +distributed entirely under this license, and must not be distributed under +any other license. The requirement for fonts to remain under this license +does not apply to any document created using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are not +met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, +TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR +ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, +INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF +CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE +THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/packages/diagram/ui/src/theme.css b/packages/diagram/ui/src/theme.css index 623c00b3..79416f57 100644 --- a/packages/diagram/ui/src/theme.css +++ b/packages/diagram/ui/src/theme.css @@ -5,11 +5,108 @@ Imported by each app's app.css and by diagram-ui styles.css. ===================================================================== */ +/* --------------------------------------------------------------------- + Excalifont — the typeface every Sketchi diagram renders in, and now the + wordmark too, so the name is written in the same hand the product draws. + + Vendored (unmodified) from @excalidraw/excalidraw under the SIL Open Font + License 1.1; see the LICENSE beside the woff2 files in each surface's + public/fonts/Excalifont. "Excalifont is a trademark of Excalidraw" — we + use the letterforms, never the name, as Sketchi branding. + + These seven files are cn-font-split subsets of one face, not seven faces: + declaring only the Latin one leaves every other codepoint silently falling + back, so all seven ship with their upstream unicode-range. Only Regular + exists, so weights are pinned to 400 — any bolder wordmark would be a + synthetic smear of a hand-drawn face. Surfaces that render the wordmark + preload the U+20-7e subset so the lockup never reflows through a fallback. + --------------------------------------------------------------------- */ +@font-face { + font-family: "Excalifont"; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url("/fonts/Excalifont/Excalifont-Regular-a88b72a24fb54c9f94e3b5fdaa7481c9.woff2") + format("woff2"); + unicode-range: + U+20-7e, U+a0-a3, U+a5-a6, U+a8-ab, U+ad-b1, U+b4, U+b6-b8, U+ba-ff, U+131, + U+152-153, U+2bc, U+2c6, U+2da, U+2dc, U+304, U+308, U+2013-2014, + U+2018-201a, U+201c-201e, U+2020, U+2022, U+2024-2026, U+2030, U+2039-203a, + U+20ac, U+2122, U+2212; +} + +@font-face { + font-family: "Excalifont"; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url("/fonts/Excalifont/Excalifont-Regular-be310b9bcd4f1a43f571c46df7809174.woff2") + format("woff2"); + unicode-range: + U+100-130, U+132-137, U+139-149, U+14c-151, U+154-17e, U+192, U+1fc-1ff, + U+218-21b, U+237, U+1e80-1e85, U+1ef2-1ef3, U+2113; +} + +@font-face { + font-family: "Excalifont"; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url("/fonts/Excalifont/Excalifont-Regular-b9dcf9d2e50a1eaf42fc664b50a3fd0d.woff2") + format("woff2"); + unicode-range: U+400-45f, U+490-491, U+2116; +} + +@font-face { + font-family: "Excalifont"; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url("/fonts/Excalifont/Excalifont-Regular-41b173a47b57366892116a575a43e2b6.woff2") + format("woff2"); + unicode-range: + U+37e, U+384-38a, U+38c, U+38e-393, U+395-3a1, U+3a3-3a8, U+3aa-3cf, U+3d7; +} + +@font-face { + font-family: "Excalifont"; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url("/fonts/Excalifont/Excalifont-Regular-3f2c5db56cc93c5a6873b1361d730c16.woff2") + format("woff2"); + unicode-range: + U+2c7, U+2d8-2d9, U+2db, U+2dd, U+302, U+306-307, U+30a-30c, U+326-328, + U+212e, U+2211, U+fb01-fb02; +} + +@font-face { + font-family: "Excalifont"; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url("/fonts/Excalifont/Excalifont-Regular-349fac6ca4700ffec595a7150a0d1e1d.woff2") + format("woff2"); + unicode-range: + U+462-463, U+472-475, U+4d8-4d9, U+4e2-4e3, U+4e6-4e9, U+4ee-4ef; +} + +@font-face { + font-family: "Excalifont"; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url("/fonts/Excalifont/Excalifont-Regular-623ccf21b21ef6b3a0d87738f77eb071.woff2") + format("woff2"); + unicode-range: U+300-301, U+303; +} + :root { - --font-display: "Bricolage Grotesque", "Hanken Grotesk", system-ui, sans-serif; + --font-display: + "Bricolage Grotesque", "Hanken Grotesk", system-ui, sans-serif; --font-body: "Hanken Grotesk", ui-sans-serif, system-ui, sans-serif; --font-mono: "IBM Plex Mono", ui-monospace, "SFMono-Regular", monospace; - --font-script: "Dancing Script", "Bricolage Grotesque", cursive; + --font-script: "Excalifont", "Bricolage Grotesque", cursive; /* surfaces */ --paper: #f6f1e7; @@ -53,16 +150,20 @@ --grid-dot: rgba(26, 23, 18, 0.06); - --shadow-sm: 0 1px 2px rgba(40, 31, 12, 0.06), 0 2px 6px rgba(40, 31, 12, 0.05); - --shadow-md: 0 6px 18px rgba(40, 31, 12, 0.08), 0 2px 6px rgba(40, 31, 12, 0.05); - --shadow-lg: 0 24px 60px rgba(40, 31, 12, 0.16), 0 6px 18px rgba(40, 31, 12, 0.08); + --shadow-sm: + 0 1px 2px rgba(40, 31, 12, 0.06), 0 2px 6px rgba(40, 31, 12, 0.05); + --shadow-md: + 0 6px 18px rgba(40, 31, 12, 0.08), 0 2px 6px rgba(40, 31, 12, 0.05); + --shadow-lg: + 0 24px 60px rgba(40, 31, 12, 0.16), 0 6px 18px rgba(40, 31, 12, 0.08); --r-sm: 8px; --r-md: 12px; --r-lg: 18px; --shell: 1180px; --ease: cubic-bezier(0.2, 0.7, 0.2, 1); - --checker: linear-gradient(45deg, var(--line) 25%, transparent 25%), + --checker: + linear-gradient(45deg, var(--line) 25%, transparent 25%), linear-gradient(-45deg, var(--line) 25%, transparent 25%), linear-gradient(45deg, transparent 75%, var(--line) 75%), linear-gradient(-45deg, transparent 75%, var(--line) 75%); @@ -83,10 +184,18 @@ body { body { background-color: var(--paper); background-image: - radial-gradient(52rem 28rem at 85% -12%, rgba(143, 112, 127, 0.1), transparent 60%), + radial-gradient( + 52rem 28rem at 85% -12%, + rgba(143, 112, 127, 0.1), + transparent 60% + ), radial-gradient(var(--grid-dot) 1px, transparent 1px); - background-size: auto, 24px 24px; - background-position: 0 0, -1px -1px; + background-size: + auto, + 24px 24px; + background-position: + 0 0, + -1px -1px; color: var(--ink); font-family: var(--font-body); font-size: 16px; @@ -164,10 +273,13 @@ img { display: block; } +/* 400, not 700: Excalifont has a single Regular, so anything bolder is a + synthetic smear that thickens the strokes without widening the letters and + closes up the counters in "e" and "c". Regular is the real hand. */ .sk-wordmark { font-family: var(--font-script); font-size: 28px; - font-weight: 700; + font-weight: 400; line-height: 1; } diff --git a/tools/vendored-excalifont.test.ts b/tools/vendored-excalifont.test.ts new file mode 100644 index 00000000..0130d4c7 --- /dev/null +++ b/tools/vendored-excalifont.test.ts @@ -0,0 +1,173 @@ +import { createHash } from "node:crypto"; +import { readdirSync, readFileSync } from "node:fs"; +import { join } from "node:path"; +import { fileURLToPath } from "node:url"; + +import { describe, expect, it } from "vitest"; + +/** + * Excalifont is the typeface Sketchi diagrams render in and, since the wordmark + * moved off Dancing Script, the brand mark too. Each Worker serves assets from + * its own `public/`, so the vendored subsets exist once per surface. Copies of a + * binary drift silently: one surface gets re-vendored, the others keep an older + * face, and the wordmark stops matching the diagrams it is supposed to be an + * instance of. These tests pin the copies together. + * + * The @font-face declarations live in the shared theme, so the obligation is + * every theme consumer, not just the ones that draw a wordmark today. A surface + * that imports the theme without shipping the files requests them and gets a + * 404, which leaves an errored face in a family the diagram canvas also uses. + * `themeConsumers()` therefore derives the list from the imports rather than + * hardcoding it, so a new surface fails here instead of in production. + * + * diagram-ui declares the face, so it holds the reference copy and serves it to + * Storybook through `staticDirs`; every surface must match that copy byte for + * byte. + * + * The files are also redistributed under the SIL Open Font License 1.1, whose + * clause 2 requires the copyright notice and licence to travel with every copy. + * That obligation is a per-copy fact, not a repo-root one, so it is asserted + * per copy here. + */ +const THEME_PACKAGE = "packages/diagram/ui"; + +const THEME_CSS = `${THEME_PACKAGE}/src/theme.css`; + +const FONT_DIRECTORY = "public/fonts/Excalifont"; + +/** cn-font-split emits one file per unicode subset, not one file per face. */ +const EXPECTED_SUBSET_COUNT = 7; + +const repoRoot = fileURLToPath(new URL("../", import.meta.url)); + +const themeCss = readFileSync(join(repoRoot, THEME_CSS), "utf8"); + +/** Every app whose stylesheet pulls in the theme that declares the font. */ +function themeConsumers(): string[] { + return readdirSync(join(repoRoot, "apps"), { withFileTypes: true }) + .filter((entry) => entry.isDirectory()) + .map((entry) => entry.name) + .filter((app) => { + let appCss: string; + + try { + appCss = readFileSync( + join(repoRoot, "apps", app, "src/styles/app.css"), + "utf8", + ); + } catch { + return false; + } + + return appCss.includes("diagram/ui/src/theme.css"); + }) + .map((app) => `apps/${app}`) + .sort(); +} + +const SURFACES = themeConsumers(); + +/** The reference copy plus every copy that must match it. */ +const COPIES = [THEME_PACKAGE, ...SURFACES]; + +function fontDirectory(surface: string): string { + return join(repoRoot, surface, FONT_DIRECTORY); +} + +function subsetDigests(surface: string): Record { + const directory = fontDirectory(surface); + const files = readdirSync(directory) + .filter((name) => name.endsWith(".woff2")) + .sort(); + + return Object.fromEntries( + files.map((name) => [ + name, + createHash("sha256") + .update(readFileSync(join(directory, name))) + .digest("hex"), + ]), + ); +} + +describe("vendored Excalifont", () => { + const referenceDigests = subsetDigests(THEME_PACKAGE); + + it("vendors every subset, because one alone silently falls back", () => { + expect(Object.keys(referenceDigests)).toHaveLength(EXPECTED_SUBSET_COUNT); + }); + + it("knows every surface that inherits the font declarations", () => { + // Listed as well as derived: a new theme consumer should fail here with + // "vendor the font too", not ship a surface that 404s its own brand face. + expect(SURFACES).toEqual([ + "apps/eval-harness", + "apps/excalidraw", + "apps/icons", + "apps/playground", + "apps/web", + ]); + }); + + it.each(SURFACES)("serves byte-identical subsets from %s", (surface) => { + expect(subsetDigests(surface)).toEqual(referenceDigests); + }); + + it.each(COPIES)("ships the OFL notice beside the fonts in %s", (surface) => { + const licence = readFileSync( + join(fontDirectory(surface), "LICENSE"), + "utf8", + ); + + expect(licence).toContain("Copyright (c) 2024 by Excalidraw"); + expect(licence).toContain("SIL Open Font License, Version 1.1"); + expect(licence).toContain("Excalifont is a trademark of Excalidraw"); + }); + + it("serves the reference copy to Storybook", () => { + const storybookConfig = readFileSync( + join(repoRoot, THEME_PACKAGE, ".storybook/main.ts"), + "utf8", + ); + + expect(storybookConfig).toMatch(/staticDirs:\s*\["\.\.\/public"\]/u); + }); + + it("keeps the social card wordmark off the retired face", () => { + // The card is a static PNG, so a token swap cannot reach it. Its wordmark + // is Excalifont outlines; the one thing that must never come back is a + // element naming a font the renderer may not have. + const card = readFileSync( + join(repoRoot, "apps/web/public/media/sketchi-og-card.svg"), + "utf8", + ); + + expect(card).not.toContain("Dancing Script"); + expect(card).not.toContain("NaN"); + }); + + it("declares an @font-face for every vendored subset", () => { + for (const name of Object.keys(referenceDigests)) { + expect(themeCss).toContain(`/fonts/Excalifont/${name}`); + } + }); + + it("never asks the browser to synthesise a weight the face lacks", () => { + // Excalifont ships Regular only. A bolder wordmark is a faux-bold smear, + // so no @font-face may claim a weight the file cannot deliver. + const declaredWeights = [...themeCss.matchAll(/font-weight:\s*(\d+)/gu)] + .map((match) => match[1]) + .filter((weight, index, all) => all.indexOf(weight) === index); + + expect(declaredWeights).toContain("400"); + + const scriptRule = /\.sk-wordmark\s*\{[^}]*\}/u.exec(themeCss)?.[0] ?? ""; + expect(scriptRule).toContain("var(--font-script)"); + expect(scriptRule).toMatch(/font-weight:\s*400/u); + }); + + it("keeps the script token on Excalifont rather than a Google default", () => { + expect(themeCss).toMatch(/--font-script:\s*"Excalifont"/u); + expect(themeCss).not.toContain("Dancing Script"); + }); +});