diff --git a/backup/doodle-footer-backup.png b/backup/doodle-footer-backup.png new file mode 100644 index 0000000..f82274a Binary files /dev/null and b/backup/doodle-footer-backup.png differ diff --git a/backup/doodle-footer.jpeg b/backup/doodle-footer.jpeg new file mode 100644 index 0000000..bb972bc Binary files /dev/null and b/backup/doodle-footer.jpeg differ diff --git a/backup/fonts/Codystar-Light.ttf b/backup/fonts/Codystar-Light.ttf new file mode 100644 index 0000000..d649060 Binary files /dev/null and b/backup/fonts/Codystar-Light.ttf differ diff --git a/backup/fonts/Codystar-OFL.txt b/backup/fonts/Codystar-OFL.txt new file mode 100644 index 0000000..2f4b386 --- /dev/null +++ b/backup/fonts/Codystar-OFL.txt @@ -0,0 +1,94 @@ +Copyright (c) 2012, Font Diner (www.fontdiner.com), +with Reserved Font Name "Codystar". + +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: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +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/backup/fonts/Codystar-Regular.ttf b/backup/fonts/Codystar-Regular.ttf new file mode 100644 index 0000000..234830b Binary files /dev/null and b/backup/fonts/Codystar-Regular.ttf differ diff --git a/backup/fonts/Raleway-Italic.ttf b/backup/fonts/Raleway-Italic.ttf new file mode 100644 index 0000000..62d9e84 Binary files /dev/null and b/backup/fonts/Raleway-Italic.ttf differ diff --git a/backup/fonts/Raleway-OFL.txt b/backup/fonts/Raleway-OFL.txt new file mode 100644 index 0000000..fcfb505 --- /dev/null +++ b/backup/fonts/Raleway-OFL.txt @@ -0,0 +1,93 @@ +Copyright 2010 The Raleway Project Authors (impallari@gmail.com), with Reserved Font Name "Raleway". + +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: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +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/backup/fonts/Raleway-Regular.ttf b/backup/fonts/Raleway-Regular.ttf new file mode 100644 index 0000000..d81d42f Binary files /dev/null and b/backup/fonts/Raleway-Regular.ttf differ diff --git a/backup/fonts/RalewayDots-OFL.txt b/backup/fonts/RalewayDots-OFL.txt new file mode 100644 index 0000000..470636d --- /dev/null +++ b/backup/fonts/RalewayDots-OFL.txt @@ -0,0 +1,93 @@ +Copyright (c) 2010, Matt McInerney (matt@pixelspread.com), Copyright (c) 2012, Pablo Impallari (www.impallari.com|impallari@gmail.com), Copyright (c) 2012, Brenda Gallo. (gbrenda1987@gmail.com), Copyright (c) 2012, Rodrigo Fuenzalida (www.rfuenzalida.com|hello@rfuenzalida.com), with Reserved Font Name "Raleway" + +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: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +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/backup/fonts/RalewayDots-Regular.ttf b/backup/fonts/RalewayDots-Regular.ttf new file mode 100644 index 0000000..adeda37 Binary files /dev/null and b/backup/fonts/RalewayDots-Regular.ttf differ diff --git a/design/英语字母描红.jpg b/design/英语字母描红.jpg new file mode 100644 index 0000000..31f9a15 Binary files /dev/null and b/design/英语字母描红.jpg differ diff --git a/docs/英语字体选择.md b/docs/英语字体选择.md new file mode 100644 index 0000000..c613568 --- /dev/null +++ b/docs/英语字体选择.md @@ -0,0 +1,22 @@ +## 核心推荐字体(最接近衡水体风格) + +### 1、Print Clearly(最匹配) + +风格:干净的手写印刷体,字母形态简单、间距均匀,模仿小学生练字本效果,提供 Regular/Bold/Dashed 三种样式 +授权:100% 免费商用,无需署名 +下载:Fontesk 官网 https://fontesk.com/print-clearly-font/ + +### 2、ZhiyongWrite(智勇手书英文体)(中文教学适配) + +风格:专为中文用户设计的手写英文,笔画圆润、无连笔,可与中文手书体搭配使用 +授权:免费商用(个人 / 企业),不可修改 / 转售 / 嵌入商标 +下载:100font https://www.100font.com/thread-101.htm; +站酷 https://www.zcool.com.cn/work/ZMjkyMDMwODQ=.html + +## 选择字体的网站 + +- https://fontesk.com/font/handwritten/page/2/?license=free-for-commercial-use +- https://fonts.google.com/?preview.lang=en_Latn&lang=en_Latn&categoryFilters=Feeling:%2FExpressive%2FChildlike +- https://www.100font.com/forum-1-1.htm?tagids=3_0_0_0 + +- https://www.nqez.com/ (可模仿的汉字字帖) diff --git a/miniprogram/app.json b/miniprogram/app.json index 67d3d3a..da66ad7 100644 --- a/miniprogram/app.json +++ b/miniprogram/app.json @@ -3,14 +3,20 @@ "pages/home/home", "pages/age/age", "pages/favorites/favorites", - "pages/profile/profile", - "pages/index/index" + "pages/profile/profile" ], "subPackages": [ { "root": "supportPages", "name": "supportPages", - "pages": ["guide/guide", "debug/debug"], + "pages": [ + "guide/guide", + "debug/debug", + "index/index", + "mathIndex/mathIndex", + "focusIndex/focusIndex", + "copyBook/copyBook" + ], "independent": false }, { diff --git a/miniprogram/assets/fonts/Handlee-Regular.ttf b/miniprogram/assets/fonts/Handlee-Regular.ttf new file mode 100644 index 0000000..02a94e1 Binary files /dev/null and b/miniprogram/assets/fonts/Handlee-Regular.ttf differ diff --git a/miniprogram/assets/fonts/iconfontV1.less b/miniprogram/assets/fonts/iconfontV1.less deleted file mode 100644 index 5444ec5..0000000 --- a/miniprogram/assets/fonts/iconfontV1.less +++ /dev/null @@ -1,51 +0,0 @@ -@font-face { - font-family: 'j-icon'; - /* Project id 4942823 */ - src: - url('data:application/x-font-woff;charset=utf-8;base64,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') format('woff'), - url('iconfont.ttf?t=1749287800675') format('truetype'); -} - -.j-icon { - font-family: 'j-icon' !important; - font-size: 16px; - font-style: normal; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -.j-icon-editor:before { - content: '\e72a'; -} - -.j-icon-close:before { - content: '\e704'; -} - -.j-icon-download:before { - content: '\e716'; -} - -.j-icon-error:before { - content: '\e73b'; -} - -.j-icon-close-bold:before { - content: '\e70d'; -} - -.j-icon-translate:before { - content: '\e73c'; -} - -.j-icon-share:before { - content: '\e729'; -} - -.j-icon-share-fill:before { - content: '\e728'; -} - -.j-icon-wechat:before { - content: '\e727'; -} \ No newline at end of file diff --git a/miniprogram/assets/fonts/iconfontV2.less b/miniprogram/assets/fonts/iconfontV2.less deleted file mode 100644 index a498232..0000000 --- a/miniprogram/assets/fonts/iconfontV2.less +++ /dev/null @@ -1,55 +0,0 @@ -@font-face { - font-family: "toy-icon"; - /* Project id 4942823 */ - src: - url('data:application/x-font-woff;charset=utf-8;base64,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') format('woff'), - url('iconfont.ttf?t=1749610446637') format('truetype'); -} - -.toy-icon { - font-family: "toy-icon" !important; - font-size: 16px; - font-style: normal; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -.toy-icon-dustbin-o:before { - content: "\e71d"; -} - -.toy-icon-editor-o:before { - content: "\e72a"; -} - -.toy-icon-close:before { - content: "\e704"; -} - -.toy-icon-download:before { - content: "\e716"; -} - -.toy-icon-error-o:before { - content: "\e73b"; -} - -.toy-icon-close-bold:before { - content: "\e70d"; -} - -.toy-icon-translate:before { - content: "\e73c"; -} - -.toy-icon-share-o:before { - content: "\e729"; -} - -.toy-icon-share:before { - content: "\e728"; -} - -.toy-icon-wechat-o:before { - content: "\e727"; -} \ No newline at end of file diff --git a/miniprogram/assets/fonts/iconfontV3.less b/miniprogram/assets/fonts/iconfontV3.less deleted file mode 100644 index 87ea63a..0000000 --- a/miniprogram/assets/fonts/iconfontV3.less +++ /dev/null @@ -1,75 +0,0 @@ -@font-face { - font-family: "toy-icon"; - /* Project id 4942823 */ - src: - url('data:application/x-font-woff;charset=utf-8;base64,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') format('woff'), - url('iconfont.ttf?t=1750151221902') format('truetype'); -} - -.toy-icon { - font-family: "toy-icon" !important; - font-size: 16px; - font-style: normal; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -.toy-icon-guide-5:before { - content: "\e670"; -} - -.toy-icon-guide-4:before { - content: "\e693"; -} - -.toy-icon-guide-3:before { - content: "\e622"; -} - -.toy-icon-guide-2:before { - content: "\e6c4"; -} - -.toy-icon-guide:before { - content: "\e600"; -} - -.toy-icon-dustbin-o:before { - content: "\e71d"; -} - -.toy-icon-editor-o:before { - content: "\e72a"; -} - -.toy-icon-close:before { - content: "\e704"; -} - -.toy-icon-download:before { - content: "\e716"; -} - -.toy-icon-error-o:before { - content: "\e73b"; -} - -.toy-icon-close-bold:before { - content: "\e70d"; -} - -.toy-icon-translate:before { - content: "\e73c"; -} - -.toy-icon-share-o:before { - content: "\e729"; -} - -.toy-icon-share:before { - content: "\e728"; -} - -.toy-icon-wechat-o:before { - content: "\e727"; -} \ No newline at end of file diff --git a/miniprogram/assets/fonts/iconfontV4.less b/miniprogram/assets/fonts/iconfontV4.less deleted file mode 100644 index 3c35161..0000000 --- a/miniprogram/assets/fonts/iconfontV4.less +++ /dev/null @@ -1,83 +0,0 @@ -@font-face { - font-family: "toy-icon"; - /* Project id 4942823 */ - src: - url('data:application/x-font-woff;charset=utf-8;base64,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') format('woff'), - url('iconfont.ttf?t=1750916098134') format('truetype'); -} - -.toy-icon { - font-family: "toy-icon" !important; - font-size: 16px; - font-style: normal; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -.toy-icon-moon:before { - content: "\e92b"; -} - -.toy-icon-evernote:before { - content: "\e6ea"; -} - -.toy-icon-refresh2:before { - content: "\e6e3"; -} - -.toy-icon-sun:before { - content: "\e712"; -} - -.toy-icon-refresh:before { - content: "\e6c2"; -} - -.toy-icon-clear:before { - content: "\e63b"; -} - -.toy-icon-guide:before { - content: "\e600"; -} - -.toy-icon-dustbin-o:before { - content: "\e71d"; -} - -.toy-icon-editor-o:before { - content: "\e72a"; -} - -.toy-icon-close:before { - content: "\e704"; -} - -.toy-icon-download:before { - content: "\e716"; -} - -.toy-icon-error-o:before { - content: "\e73b"; -} - -.toy-icon-close-bold:before { - content: "\e70d"; -} - -.toy-icon-translate:before { - content: "\e73c"; -} - -.toy-icon-share-o:before { - content: "\e729"; -} - -.toy-icon-share:before { - content: "\e728"; -} - -.toy-icon-wechat-o:before { - content: "\e727"; -} \ No newline at end of file diff --git a/miniprogram/assets/fonts/iconfontV5.less b/miniprogram/assets/fonts/iconfontV5.less deleted file mode 100644 index 1bba16a..0000000 --- a/miniprogram/assets/fonts/iconfontV5.less +++ /dev/null @@ -1,91 +0,0 @@ -@font-face { - font-family: "toy-icon"; - /* Project id 4942823 */ - src: - url('data:application/x-font-woff;charset=utf-8;base64,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') format('woff'), - url('iconfont.ttf?t=1750927958113') format('truetype'); -} - -.toy-icon { - font-family: "toy-icon" !important; - font-size: 16px; - font-style: normal; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -.toy-icon-success:before { - content: "\e650"; -} - -.toy-icon-moon:before { - content: "\e92b"; -} - -.toy-icon-evernote:before { - content: "\e6ea"; -} - -.toy-icon-refresh2:before { - content: "\e6e3"; -} - -.toy-icon-sun:before { - content: "\e712"; -} - -.toy-icon-refresh:before { - content: "\e6c2"; -} - -.toy-icon-clear:before { - content: "\e63b"; -} - -.toy-icon-guide:before { - content: "\e600"; -} - -.toy-icon-dustbin-o:before { - content: "\e71d"; -} - -.toy-icon-editor-o:before { - content: "\e72a"; -} - -.toy-icon-close:before { - content: "\e704"; -} - -.toy-icon-download:before { - content: "\e716"; -} - -.toy-icon-error-o:before { - content: "\e73b"; -} - -.toy-icon-close-bold:before { - content: "\e70d"; -} - -.toy-icon-translate:before { - content: "\e73c"; -} - -.toy-icon-share-o:before { - content: "\e729"; -} - -.toy-icon-share:before { - content: "\e728"; -} - -.toy-icon-wechat-o:before { - content: "\e727"; -} - -.toy-icon-wechat:before { - content: "\e727"; -} \ No newline at end of file diff --git a/miniprogram/assets/fonts/iconfontV6.less b/miniprogram/assets/fonts/iconfontV6.less deleted file mode 100644 index e5c0d31..0000000 --- a/miniprogram/assets/fonts/iconfontV6.less +++ /dev/null @@ -1,191 +0,0 @@ -@font-face { - font-family: "toy-icon"; - /* Project id 4942823 */ - src: - url('data:application/x-font-woff;charset=utf-8;base64,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') format('woff'), - url('iconfont.ttf?t=1775537744095') format('truetype'); -} - -.toy-icon { - font-family: "toy-icon" !important; - font-size: 16px; - font-style: normal; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -.toy-icon-setting:before { - content: "\e61e"; -} - -.toy-icon-round-star-o:before { - content: "\e620"; -} - -.toy-icon-plus:before { - content: "\e61f"; -} - -.toy-icon-star:before { - content: "\e60d"; -} - -.toy-icon-minus:before { - content: "\e60e"; -} - -.toy-icon-round-star:before { - content: "\e60f"; -} - -.toy-icon-star-o:before { - content: "\e610"; -} - -.toy-icon-about-o:before { - content: "\e611"; -} - -.toy-icon-feedback-o:before { - content: "\e612"; -} - -.toy-icon-feedback:before { - content: "\e613"; -} - -.toy-icon-about:before { - content: "\e614"; -} - -.toy-icon-heart-o:before { - content: "\e615"; -} - -.toy-icon-heart:before { - content: "\e616"; -} - -.toy-icon-print:before { - content: "\e617"; -} - -.toy-icon-family:before { - content: "\e618"; -} - -.toy-icon-search-plus:before { - content: "\e619"; -} - -.toy-icon-search:before { - content: "\e61a"; -} - -.toy-icon-clock-o:before { - content: "\e61b"; -} - -.toy-icon-clock:before { - content: "\e61c"; -} - -.toy-icon-search-minus:before { - content: "\e61d"; -} - -.toy-icon-setting-o:before { - content: "\e60c"; -} - -.toy-icon-line-share:before { - content: "\e60b"; -} - -.toy-icon-arrow-up:before { - content: "\e602"; -} - -.toy-icon-arrow-right:before { - content: "\e603"; -} - -.toy-icon-arrow-down:before { - content: "\e604"; -} - -.toy-icon-arrow-left:before { - content: "\e605"; -} - -.toy-icon-success:before { - content: "\e650"; -} - -.toy-icon-moon:before { - content: "\e92b"; -} - -.toy-icon-evernote:before { - content: "\e6ea"; -} - -.toy-icon-refresh2:before { - content: "\e6e3"; -} - -.toy-icon-sun:before { - content: "\e712"; -} - -.toy-icon-refresh:before { - content: "\e6c2"; -} - -.toy-icon-clear:before { - content: "\e63b"; -} - -.toy-icon-guide:before { - content: "\e600"; -} - -.toy-icon-dustbin-o:before { - content: "\e71d"; -} - -.toy-icon-editor-o:before { - content: "\e72a"; -} - -.toy-icon-close:before { - content: "\e704"; -} - -.toy-icon-download:before { - content: "\e716"; -} - -.toy-icon-error-o:before { - content: "\e73b"; -} - -.toy-icon-close-bold:before { - content: "\e70d"; -} - -.toy-icon-translate:before { - content: "\e73c"; -} - -.toy-icon-share-o:before { - content: "\e729"; -} - -.toy-icon-share:before { - content: "\e728"; -} - -.toy-icon-wechat-o:before { - content: "\e727"; -} \ No newline at end of file diff --git a/miniprogram/assets/fonts/print_clearly_bold_tt.ttf b/miniprogram/assets/fonts/print_clearly_bold_tt.ttf new file mode 100644 index 0000000..5c66f6b Binary files /dev/null and b/miniprogram/assets/fonts/print_clearly_bold_tt.ttf differ diff --git a/miniprogram/assets/fonts/print_clearly_dashed_tt.ttf b/miniprogram/assets/fonts/print_clearly_dashed_tt.ttf new file mode 100644 index 0000000..b01519a Binary files /dev/null and b/miniprogram/assets/fonts/print_clearly_dashed_tt.ttf differ diff --git a/miniprogram/assets/fonts/print_clearly_regular_tt.ttf b/miniprogram/assets/fonts/print_clearly_regular_tt.ttf new file mode 100644 index 0000000..66c7f2d Binary files /dev/null and b/miniprogram/assets/fonts/print_clearly_regular_tt.ttf differ diff --git a/miniprogram/assets/fonts/demo.css b/miniprogram/assets/iconFont/demo.css similarity index 100% rename from miniprogram/assets/fonts/demo.css rename to miniprogram/assets/iconFont/demo.css diff --git a/miniprogram/assets/fonts/demo_index.html b/miniprogram/assets/iconFont/demo_index.html similarity index 100% rename from miniprogram/assets/fonts/demo_index.html rename to miniprogram/assets/iconFont/demo_index.html diff --git a/miniprogram/assets/fonts/iconfont.js b/miniprogram/assets/iconFont/iconfont.js similarity index 100% rename from miniprogram/assets/fonts/iconfont.js rename to miniprogram/assets/iconFont/iconfont.js diff --git a/miniprogram/assets/fonts/iconfont.json b/miniprogram/assets/iconFont/iconfont.json similarity index 100% rename from miniprogram/assets/fonts/iconfont.json rename to miniprogram/assets/iconFont/iconfont.json diff --git a/miniprogram/assets/fonts/iconfont.less b/miniprogram/assets/iconFont/iconfont.less similarity index 100% rename from miniprogram/assets/fonts/iconfont.less rename to miniprogram/assets/iconFont/iconfont.less diff --git a/miniprogram/assets/fonts/iconfont.ttf b/miniprogram/assets/iconFont/iconfont.ttf similarity index 100% rename from miniprogram/assets/fonts/iconfont.ttf rename to miniprogram/assets/iconFont/iconfont.ttf diff --git a/miniprogram/assets/fonts/iconfont.woff b/miniprogram/assets/iconFont/iconfont.woff similarity index 100% rename from miniprogram/assets/fonts/iconfont.woff rename to miniprogram/assets/iconFont/iconfont.woff diff --git a/miniprogram/assets/imgs/doodle-footer.png b/miniprogram/assets/imgs/doodle-footer.png index f82274a..71d8680 100644 Binary files a/miniprogram/assets/imgs/doodle-footer.png and b/miniprogram/assets/imgs/doodle-footer.png differ diff --git a/miniprogram/core/draw/baseDraw.ts b/miniprogram/core/draw/baseDraw.ts index 296725b..7fbff1e 100644 --- a/miniprogram/core/draw/baseDraw.ts +++ b/miniprogram/core/draw/baseDraw.ts @@ -14,7 +14,7 @@ import drawHeader from './drawHeader'; * - 打印配置管理 */ const LINE_COLOR = 'rgba(50, 46, 37, 0.4)'; -const LINE_WIDTH = 2; +const LINE_WIDTH = 3; export class BaseDrawService { canvas: WechatMiniprogram.Canvas; diff --git a/miniprogram/core/draw/drawHeader.ts b/miniprogram/core/draw/drawHeader.ts index 00a92b7..0d6f01e 100644 --- a/miniprogram/core/draw/drawHeader.ts +++ b/miniprogram/core/draw/drawHeader.ts @@ -24,7 +24,7 @@ const META_FONT_PX = 12; const META_UNDERLINE_GAP = 3; const TITLE_COLOR = '#322E25'; const LINE_COLOR = 'rgba(50, 46, 37, 0.4)'; -const LINE_WIDTH = 2; +const LINE_WIDTH = 3; const META_COLOR = '#7C766A'; const META_ROW_MARGIN_X = 130; diff --git a/miniprogram/englishPages/letterTracing/letterTracing.ts b/miniprogram/englishPages/letterTracing/letterTracing.ts index dbf286d..fc4e5d0 100644 --- a/miniprogram/englishPages/letterTracing/letterTracing.ts +++ b/miniprogram/englishPages/letterTracing/letterTracing.ts @@ -9,7 +9,7 @@ import { type LetterTracingGeneratorConfig, type LetterTracingMode, } from '../shared/generators/letter-tracing-generator'; -import { LETTERS_UPPER } from '../../core/data/alphabet'; +import { LETTERS_UPPER } from '../shared/data/alphabet'; /** 各 worksheetId 对应的页面标题和描述 */ const PAGE_META: Record = { @@ -99,7 +99,7 @@ createPage( }); }, - /** 页面就绪:初始化 Canvas 和绘制服务,完成后触发首次绘制 */ + /** 页面就绪:初始化 Canvas → 首次绘制(标题行前缀使用系统 emoji,无需 loadFontFace) */ onReady() { this.initCanvas({ createDrawService: ( diff --git a/miniprogram/englishPages/shared/assets/letterImgs/Apple.png b/miniprogram/englishPages/shared/assets/letterImgs/Apple.png new file mode 100644 index 0000000..8266b0a Binary files /dev/null and b/miniprogram/englishPages/shared/assets/letterImgs/Apple.png differ diff --git a/miniprogram/core/data/alphabet.ts b/miniprogram/englishPages/shared/data/alphabet.ts similarity index 100% rename from miniprogram/core/data/alphabet.ts rename to miniprogram/englishPages/shared/data/alphabet.ts diff --git a/miniprogram/englishPages/shared/draw/casePairingDraw.ts b/miniprogram/englishPages/shared/draw/casePairingDraw.ts new file mode 100644 index 0000000..613a9f3 --- /dev/null +++ b/miniprogram/englishPages/shared/draw/casePairingDraw.ts @@ -0,0 +1,124 @@ +import { BaseDrawService } from '../../../core/draw/baseDraw'; +import type { + LetterTracingData, + TracingRow, +} from '../generators/letter-tracing-generator'; +import { drawFourLineGrid } from './drawTools'; + +const LETTER_FACE = + 'Helvetica, Arial, "Segoe UI", Roboto, sans-serif'; + +type CasePairingData = Extract; + +export default class CasePairingDraw extends BaseDrawService { + async draw(data: CasePairingData) { + this.prepareDraw(); + await this.drawHeaderAndDivider(); + this.drawContent(data.leftVisualRows, data.rightVisualRows); + this.drawPrintFooter(); + } + + private drawContent( + leftVisualRows: TracingRow[][], + rightVisualRows: TracingRow[][], + ) { + const M = 24; + const y0 = this.currentY + 6; + const bottom = this.canvasHeight - M; + const gapCol = 18; + const colW = (this.canvasWidth - M * 2 - gapCol) / 2; + const maxVisual = Math.max( + leftVisualRows.length, + rightVisualRows.length, + ); + const rowSlotH = Math.max(40, (bottom - y0) / maxVisual - 6); + + const drawSide = ( + blocks: TracingRow[][], + startX: number, + width: number, + ) => { + let y = y0; + for (const visualRow of blocks) { + const nSeg = visualRow.length; + const segGap = 6; + const segW = (width - (nSeg - 1) * segGap) / nSeg; + for (let s = 0; s < nSeg; s++) { + this.drawTracingRow( + visualRow[s], + startX + s * (segW + segGap), + y, + rowSlotH, + segW, + ); + } + y += rowSlotH + 8; + } + }; + + drawSide(leftVisualRows, M, colW); + drawSide(rightVisualRows, M + colW + gapCol, colW); + } + + private drawTracingRow( + row: TracingRow, + startX: number, + y: number, + rowH: number, + totalWidth: number, + ) { + const gap = 4; + const n = row.cells.length; + const cellW = n > 0 ? (totalWidth - gap * (n - 1)) / n : totalWidth; + for (let i = 0; i < n; i++) { + const cx = startX + i * (cellW + gap); + drawFourLineGrid(this.ctx, cx, y, cellW, rowH); + const cell = row.cells[i]; + this.drawCharInCell( + cell.char, + cx, + y, + cellW, + rowH, + cell.opacity, + cell.isGuide, + cell.pairChar, + ); + } + } + + private drawCharInCell( + ch: string, + x: number, + y: number, + w: number, + h: number, + opacity: number, + bold: boolean, + pairChar?: string, + ) { + const ctx = this.ctx; + if (opacity <= 0) return; + ctx.save(); + ctx.globalAlpha = opacity; + ctx.fillStyle = bold ? '#1a1a1a' : '#4a4a4a'; + ctx.textAlign = 'center'; + ctx.textBaseline = 'alphabetic'; + const baselineY = y + h * 0.72; + + if (pairChar) { + const fs = Math.min(h * 0.5, w * 0.22); + ctx.font = `${bold ? 'bold ' : ''}${fs}px ${LETTER_FACE}`; + const gap = fs * 0.2; + const totalW = fs * 2 + gap; + const x0 = x + w / 2 - totalW / 2; + ctx.fillText(ch, x0 + fs * 0.5, baselineY); + ctx.fillText(pairChar, x0 + fs * 1.5 + gap, baselineY); + } else { + const fontSize = Math.min(h * 0.72, w * 0.85); + ctx.font = `${bold ? 'bold ' : ''}${fontSize}px ${LETTER_FACE}`; + ctx.fillText(ch, x + w / 2, baselineY); + } + ctx.restore(); + } +} diff --git a/miniprogram/englishPages/shared/draw/columnCompareDraw.ts b/miniprogram/englishPages/shared/draw/columnCompareDraw.ts new file mode 100644 index 0000000..d7cf43a --- /dev/null +++ b/miniprogram/englishPages/shared/draw/columnCompareDraw.ts @@ -0,0 +1,105 @@ +import { BaseDrawService } from '../../../core/draw/baseDraw'; +import type { + LetterTracingData, + TracingRow, +} from '../generators/letter-tracing-generator'; +import { drawFourLineGrid } from './drawTools'; + +const LETTER_FACE = + 'Helvetica, Arial, "Segoe UI", Roboto, sans-serif'; + +type ColumnCompareData = Extract< + LetterTracingData, + { mode: 'column-compare' } +>; + +export default class ColumnCompareDraw extends BaseDrawService { + async draw(data: ColumnCompareData) { + this.prepareDraw(); + await this.drawHeaderAndDivider(); + this.drawContent(data.leftRows, data.rightRows); + this.drawPrintFooter(); + } + + private drawContent(leftRows: TracingRow[], rightRows: TracingRow[]) { + const M = 24; + const y0 = this.currentY + 6; + const bottom = this.canvasHeight - M; + const maxR = Math.max(leftRows.length, rightRows.length); + const rowH = Math.max(36, (bottom - y0) / maxR - 6); + const gapCol = 16; + const colW = (this.canvasWidth - M * 2 - gapCol) / 2; + + for (let i = 0; i < leftRows.length; i++) { + const y = y0 + i * (rowH + 6); + this.drawTracingRow(leftRows[i], M, y, rowH, colW); + } + const xR = M + colW + gapCol; + for (let i = 0; i < rightRows.length; i++) { + const y = y0 + i * (rowH + 6); + this.drawTracingRow(rightRows[i], xR, y, rowH, colW); + } + } + + private drawTracingRow( + row: TracingRow, + startX: number, + y: number, + rowH: number, + totalWidth: number, + ) { + const gap = 4; + const n = row.cells.length; + const cellW = n > 0 ? (totalWidth - gap * (n - 1)) / n : totalWidth; + for (let i = 0; i < n; i++) { + const cx = startX + i * (cellW + gap); + drawFourLineGrid(this.ctx, cx, y, cellW, rowH); + const cell = row.cells[i]; + this.drawCharInCell( + cell.char, + cx, + y, + cellW, + rowH, + cell.opacity, + cell.isGuide, + cell.pairChar, + ); + } + } + + private drawCharInCell( + ch: string, + x: number, + y: number, + w: number, + h: number, + opacity: number, + bold: boolean, + pairChar?: string, + ) { + const ctx = this.ctx; + if (opacity <= 0) return; + ctx.save(); + ctx.globalAlpha = opacity; + ctx.fillStyle = bold ? '#1a1a1a' : '#4a4a4a'; + ctx.textAlign = 'center'; + ctx.textBaseline = 'alphabetic'; + const baselineY = y + h * 0.72; + + if (pairChar) { + const fs = Math.min(h * 0.5, w * 0.22); + ctx.font = `${bold ? 'bold ' : ''}${fs}px ${LETTER_FACE}`; + const gap = fs * 0.2; + const totalW = fs * 2 + gap; + const x0 = x + w / 2 - totalW / 2; + ctx.fillText(ch, x0 + fs * 0.5, baselineY); + ctx.fillText(pairChar, x0 + fs * 1.5 + gap, baselineY); + } else { + const fontSize = Math.min(h * 0.72, w * 0.85); + ctx.font = `${bold ? 'bold ' : ''}${fontSize}px ${LETTER_FACE}`; + ctx.fillText(ch, x + w / 2, baselineY); + } + ctx.restore(); + } +} diff --git a/miniprogram/englishPages/shared/draw/drawTools.ts b/miniprogram/englishPages/shared/draw/drawTools.ts new file mode 100644 index 0000000..cabd47d --- /dev/null +++ b/miniprogram/englishPages/shared/draw/drawTools.ts @@ -0,0 +1,65 @@ +/** + * 绘制工具集合(后续可继续扩展其他通用绘制方法) + */ + +export type FourLineGridStyle = { + /** 顶线/底线颜色 */ + ink?: string; + /** 中间两条虚线颜色 */ + middleInk?: string; + /** 线宽 */ + lineWidth?: number; + /** 虚线样式 */ + dash?: number[]; +}; + +/** + * 四线三格(通用) + * - 顶/底:实线 + * - 中间两条:虚线 + */ +export function drawFourLineGrid( + ctx: RenderingContext, + x: number, + y: number, + w: number, + h: number, + style?: FourLineGridStyle, +) { + const ink = style?.ink ?? '#322E25'; + const middleInk = style?.middleInk ?? 'rgba(50, 46, 37, 0.3)'; + const lineWidth = style?.lineWidth ?? 1; + const dash = style?.dash ?? [4, 4]; + + const yTop = y; + const y1 = y + h / 3; + const y2 = y + (h * 2) / 3; + const yBot = y + h; + + ctx.strokeStyle = ink; + ctx.lineWidth = lineWidth; + ctx.setLineDash([]); + ctx.beginPath(); + ctx.moveTo(x, yTop); + ctx.lineTo(x + w, yTop); + ctx.stroke(); + + ctx.strokeStyle = middleInk; + ctx.setLineDash(dash); + ctx.beginPath(); + ctx.moveTo(x, y1); + ctx.lineTo(x + w, y1); + ctx.stroke(); + ctx.beginPath(); + ctx.moveTo(x, y2); + ctx.lineTo(x + w, y2); + ctx.stroke(); + + ctx.strokeStyle = ink; + ctx.setLineDash([]); + ctx.beginPath(); + ctx.moveTo(x, yBot); + ctx.lineTo(x + w, yBot); + ctx.stroke(); +} + diff --git a/miniprogram/englishPages/shared/draw/letterTracingDraw.ts b/miniprogram/englishPages/shared/draw/letterTracingDraw.ts index 2da623a..204327e 100644 --- a/miniprogram/englishPages/shared/draw/letterTracingDraw.ts +++ b/miniprogram/englishPages/shared/draw/letterTracingDraw.ts @@ -1,330 +1,24 @@ import { BaseDrawService } from '../../../core/draw/baseDraw'; -import type { - LetterTracingData, - TracingRow, -} from '../generators/letter-tracing-generator'; - -const M = 24; -/** 四线三格线色:偏黑,实线与虚线统一色相,仅以线型区分 */ -const LINE_INK = '#2a2a2a'; +import type { LetterTracingData } from '../generators/letter-tracing-generator'; +import PictureTracingDraw from './pictureTracingDraw'; +import CasePairingDraw from './casePairingDraw'; +import ColumnCompareDraw from './columnCompareDraw'; +import OverviewDraw from './overviewDraw'; /** - * 字母描红绘制 - * 四线三格:顶线、上中线、下中线为格内三线间距;最上最下为实线,中间两虚线(产品文档) + * 字母描红绘制分发层。 + * 根据 data.mode 委托给对应的独立 DrawService 完成实际绘制。 */ export default class LetterTracingDraw extends BaseDrawService { - constructor( - canvas: Canvas, - ctx: RenderingContext, - options?: Record, - ) { - super(canvas, ctx, options); - } - async draw(data: LetterTracingData) { - this.prepareDraw(); - await this.drawHeaderAndDivider(); + const DrawClass = { + 'picture-tracing': PictureTracingDraw, + 'case-pairing': CasePairingDraw, + 'column-compare': ColumnCompareDraw, + overview: OverviewDraw, + }[data.mode]; - switch (data.mode) { - case 'picture-tracing': - this.drawPictureTracing(data); - this.drawPrintFooter(); - break; - case 'case-pairing': - this.drawCasePairing(data.leftVisualRows, data.rightVisualRows); - this.drawPrintFooter(); - break; - case 'column-compare': - this.drawColumnCompare(data.leftRows, data.rightRows); - this.drawPrintFooter(); - break; - case 'overview': - this.drawOverview(data.upperRows, data.lowerRows); - this.drawPrintFooter(); - break; - } - } - - /** - * 四线三格:y 顶 → y+h 底,中间两条虚线 - */ - private drawFourLines(x: number, y: number, w: number, h: number) { - const ctx = this.ctx; - const yTop = y; - const yMid1 = y + h * 0.28; - const yMid2 = y + h * 0.58; - const yBot = y + h; - - const strokeSolid = () => { - ctx.strokeStyle = LINE_INK; - ctx.lineWidth = 1; - ctx.setLineDash([]); - }; - const strokeDash = () => { - ctx.strokeStyle = LINE_INK; - ctx.lineWidth = 1; - ctx.setLineDash([5, 5]); - }; - - strokeSolid(); - ctx.beginPath(); - ctx.moveTo(x, yTop); - ctx.lineTo(x + w, yTop); - ctx.stroke(); - - strokeDash(); - ctx.beginPath(); - ctx.moveTo(x, yMid1); - ctx.lineTo(x + w, yMid1); - ctx.stroke(); - - ctx.beginPath(); - ctx.moveTo(x, yMid2); - ctx.lineTo(x + w, yMid2); - ctx.stroke(); - - strokeSolid(); - ctx.setLineDash([]); - ctx.beginPath(); - ctx.moveTo(x, yBot); - ctx.lineTo(x + w, yBot); - ctx.stroke(); - } - - private drawCharInCell( - ch: string, - x: number, - y: number, - w: number, - h: number, - opacity: number, - bold: boolean, - pairChar?: string, - ) { - const ctx = this.ctx; - if (opacity <= 0) return; - ctx.save(); - ctx.globalAlpha = opacity; - ctx.fillStyle = bold ? '#1a1a1a' : '#4a4a4a'; - ctx.textAlign = 'center'; - ctx.textBaseline = 'alphabetic'; - const baselineY = y + h * 0.72; - - if (pairChar) { - const fs = Math.min(h * 0.5, w * 0.22); - ctx.font = `${bold ? 'bold ' : ''}${fs}px sans-serif`; - const gap = fs * 0.2; - const totalW = fs * 2 + gap; - const x0 = x + w / 2 - totalW / 2; - ctx.fillText(ch, x0 + fs * 0.5, baselineY); - ctx.fillText(pairChar, x0 + fs * 1.5 + gap, baselineY); - } else { - const fontSize = Math.min(h * 0.72, w * 0.85); - ctx.font = `${bold ? 'bold ' : ''}${fontSize}px sans-serif`; - ctx.fillText(ch, x + w / 2, baselineY); - } - ctx.restore(); - } - - private drawTracingRow( - row: TracingRow, - startX: number, - y: number, - rowH: number, - totalWidth: number, - ) { - const gap = 4; - const n = row.cells.length; - const cellW = n > 0 ? (totalWidth - gap * (n - 1)) / n : totalWidth; - - for (let i = 0; i < n; i++) { - const cx = startX + i * (cellW + gap); - this.drawFourLines(cx, y, cellW, rowH); - const cell = row.cells[i]; - this.drawCharInCell( - cell.char, - cx, - y, - cellW, - rowH, - cell.opacity, - cell.isGuide, - cell.pairChar, - ); - } - } - - /** - * 看图描红:上左超大字母+例句,上右「配图」大 emoji;下 6 行四线三格 - */ - private drawPictureTracing( - data: Extract, - ) { - const ctx = this.ctx; - const { teaching, rows } = data; - const cw = this.canvasWidth; - let y = this.currentY + 8; - const teachH = Math.min(240, (this.canvasHeight - y) * 0.38); - const innerW = cw - M * 2; - const splitX = M + innerW * 0.52; - - ctx.fillStyle = '#f8fafc'; - ctx.fillRect(M, y, innerW, teachH); - - // 左侧:大小写 + 例句(短句在字母下方) - const leftPad = M + 20; - ctx.textAlign = 'left'; - ctx.textBaseline = 'top'; - ctx.fillStyle = '#111'; - const bigFs = Math.min(56, teachH * 0.26); - ctx.font = `bold ${bigFs}px sans-serif`; - ctx.fillText( - `${teaching.upper} ${teaching.lower}`, - leftPad, - y + teachH * 0.12, - ); - ctx.font = `${Math.min(22, teachH * 0.1)}px sans-serif`; - ctx.fillStyle = '#333'; - ctx.fillText(teaching.sentence, leftPad, y + teachH * 0.48); - - // 右侧:配图区(以 emoji 作为插图占位) - ctx.font = `${Math.min(120, teachH * 0.55)}px sans-serif`; - ctx.textAlign = 'center'; - ctx.textBaseline = 'middle'; - ctx.fillText( - teaching.emoji, - splitX + (cw - M - splitX) / 2, - y + teachH / 2, - ); - - y += teachH + 12; - this.drawDashedDivider(y, M, '#ccc'); - y += 14; - - const rest = this.canvasHeight - y - M; - const rowH = Math.max(34, (rest - 10) / rows.length); - const rowWidth = innerW; - for (let r = 0; r < rows.length; r++) { - this.drawTracingRow( - rows[r], - M, - y + r * (rowH + 8), - rowH, - rowWidth, - ); - } - } - - /** - * 大小写配对:左右两栏,每行最多 4 组子行并排 - */ - private drawCasePairing( - leftVisualRows: TracingRow[][], - rightVisualRows: TracingRow[][], - ) { - const y0 = this.currentY + 6; - const bottom = this.canvasHeight - M; - const gapCol = 18; - const colW = (this.canvasWidth - M * 2 - gapCol) / 2; - const maxVisual = Math.max( - leftVisualRows.length, - rightVisualRows.length, - ); - const rowSlotH = Math.max(40, (bottom - y0) / maxVisual - 6); - - const drawSide = ( - blocks: TracingRow[][], - startX: number, - width: number, - ) => { - let y = y0; - for (const visualRow of blocks) { - const nSeg = visualRow.length; - const segGap = 6; - const segW = (width - (nSeg - 1) * segGap) / nSeg; - for (let s = 0; s < nSeg; s++) { - this.drawTracingRow( - visualRow[s], - startX + s * (segW + segGap), - y, - rowSlotH, - segW, - ); - } - y += rowSlotH + 8; - } - }; - - drawSide(leftVisualRows, M, colW); - drawSide(rightVisualRows, M + colW + gapCol, colW); - } - - /** 分栏对照:左大写、右小写,逐行对齐 */ - private drawColumnCompare(leftRows: TracingRow[], rightRows: TracingRow[]) { - const y0 = this.currentY + 6; - const bottom = this.canvasHeight - M; - const maxR = Math.max(leftRows.length, rightRows.length); - const rowH = Math.max(36, (bottom - y0) / maxR - 6); - const gapCol = 16; - const colW = (this.canvasWidth - M * 2 - gapCol) / 2; - - for (let i = 0; i < leftRows.length; i++) { - const y = y0 + i * (rowH + 6); - this.drawTracingRow(leftRows[i], M, y, rowH, colW); - } - const xR = M + colW + gapCol; - for (let i = 0; i < rightRows.length; i++) { - const y = y0 + i * (rowH + 6); - this.drawTracingRow(rightRows[i], xR, y, rowH, colW); - } - } - - /** - * 字母总览:Uppercase Letters / lowercase Letters,各行 9+9+8,四线三格 - */ - private drawOverview(upperRows: string[][], lowerRows: string[][]) { - const ctx = this.ctx; - let y = this.currentY + 6; - const innerW = this.canvasWidth - M * 2; - - const title = (t: string) => { - ctx.fillStyle = '#111'; - ctx.font = 'bold 17px sans-serif'; - ctx.textAlign = 'left'; - ctx.textBaseline = 'top'; - ctx.fillText(t, M, y); - y += 24; - }; - - const drawBand = (rows: string[][]) => { - for (const line of rows) { - const n = line.length; - const gap = 4; - const cellW = (innerW - (n - 1) * gap) / n; - const cellH = 30; - for (let i = 0; i < n; i++) { - const cx = M + i * (cellW + gap); - this.drawFourLines(cx, y, cellW, cellH); - this.drawCharInCell( - line[i], - cx, - y, - cellW, - cellH, - 0.9, - true, - ); - } - y += cellH + 8; - } - }; - - title('Uppercase Letters'); - drawBand(upperRows); - y += 6; - this.drawDashedDivider(y, M, '#bbb'); - y += 12; - title('lowercase Letters'); - drawBand(lowerRows); + const delegate = new DrawClass(this.canvas, this.ctx, this.options); + await delegate.draw(data as any); } } diff --git a/miniprogram/englishPages/shared/draw/overviewDraw.ts b/miniprogram/englishPages/shared/draw/overviewDraw.ts new file mode 100644 index 0000000..3a2a196 --- /dev/null +++ b/miniprogram/englishPages/shared/draw/overviewDraw.ts @@ -0,0 +1,87 @@ +import { BaseDrawService } from '../../../core/draw/baseDraw'; +import type { LetterTracingData } from '../generators/letter-tracing-generator'; +import { drawFourLineGrid } from './drawTools'; + +const LETTER_FACE = + 'Helvetica, Arial, "Segoe UI", Roboto, sans-serif'; + +type OverviewData = Extract; + +export default class OverviewDraw extends BaseDrawService { + async draw(data: OverviewData) { + this.prepareDraw(); + await this.drawHeaderAndDivider(); + this.drawContent(data.upperRows, data.lowerRows); + this.drawPrintFooter(); + } + + private drawContent(upperRows: string[][], lowerRows: string[][]) { + const ctx = this.ctx; + const M = 24; + let y = this.currentY + 6; + const innerW = this.canvasWidth - M * 2; + + const drawTitle = (t: string) => { + ctx.fillStyle = '#111'; + ctx.font = 'bold 17px sans-serif'; + ctx.textAlign = 'left'; + ctx.textBaseline = 'top'; + ctx.fillText(t, M, y); + y += 24; + }; + + const drawBand = (rows: string[][]) => { + for (const line of rows) { + const n = line.length; + const gap = 4; + const cellW = (innerW - (n - 1) * gap) / n; + const cellH = 30; + for (let i = 0; i < n; i++) { + const cx = M + i * (cellW + gap); + drawFourLineGrid(ctx, cx, y, cellW, cellH); + this.drawCharInCell( + line[i], + cx, + y, + cellW, + cellH, + 0.9, + true, + ); + } + y += cellH + 8; + } + }; + + drawTitle('Uppercase Letters'); + drawBand(upperRows); + y += 6; + this.drawDashedDivider(y, M, '#bbb'); + y += 12; + drawTitle('lowercase Letters'); + drawBand(lowerRows); + } + + private drawCharInCell( + ch: string, + x: number, + y: number, + w: number, + h: number, + opacity: number, + bold: boolean, + ) { + const ctx = this.ctx; + if (opacity <= 0) return; + ctx.save(); + ctx.globalAlpha = opacity; + ctx.fillStyle = bold ? '#1a1a1a' : '#4a4a4a'; + ctx.textAlign = 'center'; + ctx.textBaseline = 'alphabetic'; + const baselineY = y + h * 0.72; + const fontSize = Math.min(h * 0.72, w * 0.85); + ctx.font = `${bold ? 'bold ' : ''}${fontSize}px ${LETTER_FACE}`; + ctx.fillText(ch, x + w / 2, baselineY); + ctx.restore(); + } +} diff --git a/miniprogram/englishPages/shared/draw/pictureTracingDraw.ts b/miniprogram/englishPages/shared/draw/pictureTracingDraw.ts new file mode 100644 index 0000000..8dc667d --- /dev/null +++ b/miniprogram/englishPages/shared/draw/pictureTracingDraw.ts @@ -0,0 +1,386 @@ +import { BaseDrawService } from '../../../core/draw/baseDraw'; +import { getImage } from '../../../utils/index'; +import type { + LetterTracingData, + HighlightGrid, +} from '../generators/letter-tracing-generator'; +import { drawFourLineGrid } from './drawTools'; + +const LINE_INK_ALPHA = 'rgba(50, 46, 37, 1)'; +const ACCENT_RED = 'rgba(252, 46, 0, 1)'; +//'Helvetica, Arial, "Segoe UI", Roboto, sans-serif'; +const LETTER_FACE = 'Roboto, sans-serif'; +const TITLE_EMOJI_FONT = + "16px 'Apple Color Emoji','Segoe UI Emoji','Noto Color Emoji',sans-serif"; +const TITLE_TEXT_FONT = '14px sans-serif'; +const TITLE_ICON_GAP = 4; + +type PictureData = Extract; + +export default class PictureTracingDraw extends BaseDrawService { + async draw(data: PictureData) { + this.prepareDraw(); + await this.drawHeaderAndDivider(); + await this.drawContent(data); + this.drawPrintFooter(); + } + + private async drawContent(data: PictureData) { + const { teaching, highlightGrid, traceImgPath } = data; + const ctx = this.ctx; + + // ── 上区:left:78 top:120 w:451 h:180 ── + const TOP_X = 78; + const TOP_Y = 120; + + const letterImgX = TOP_X + 15; + const letterImgY = TOP_Y + 9; + const letterImgW = 180; + const letterImgH = 103.5; + + try { + const letterImg = (await getImage( + this.canvas, + teaching.letterImgPath, + )) as WechatMiniprogram.Image; + const aspect = (letterImg.width || 1) / (letterImg.height || 1); + let dw = letterImgW; + let dh = dw / aspect; + if (dh > letterImgH) { + dh = letterImgH; + dw = dh * aspect; + } + ctx.drawImage( + letterImg, + letterImgX + (letterImgW - dw) / 2, + letterImgY + (letterImgH - dh) / 2, + dw, + dh, + ); + } catch { + ctx.font = `bold 60px ${LETTER_FACE}`; + ctx.fillStyle = '#111'; + ctx.textAlign = 'center'; + ctx.textBaseline = 'middle'; + ctx.fillText( + `${teaching.upper} ${teaching.lower}`, + letterImgX + letterImgW / 2, + letterImgY + letterImgH / 2, + ); + } + + this.drawSentence( + teaching.sentence, + teaching.upper, + TOP_X, + TOP_Y + 9 + 120, + ); + + // 右侧配图 + const appleX = TOP_X + 271; + const appleY = TOP_Y; + const appleW = 180; + const appleH = 180; + + try { + const wordImg = (await getImage( + this.canvas, + teaching.wordImgPath, + )) as WechatMiniprogram.Image; + const aspect = (wordImg.width || 1) / (wordImg.height || 1); + let dw = appleW; + let dh = dw / aspect; + if (dh > appleH) { + dh = appleH; + dw = dh * aspect; + } + ctx.drawImage( + wordImg, + appleX + (appleW - dw) / 2, + appleY + (appleH - dh) / 2, + dw, + dh, + ); + } catch { + ctx.font = `${Math.min(80, appleH * 0.5)}px sans-serif`; + ctx.textAlign = 'center'; + ctx.textBaseline = 'middle'; + ctx.fillText( + teaching.emoji, + appleX + appleW / 2, + appleY + appleH / 2, + ); + } + + // ── 中区 ── + const HL_X = 26, + HL_Y = 320, + HL_W = 272, + HL_H = 181; + const TR_X = 298, + TR_Y = 320, + TR_W = 272, + TR_H = 181; + + ctx.strokeStyle = LINE_INK_ALPHA; + ctx.lineWidth = 1; + ctx.setLineDash([]); + ctx.strokeRect(HL_X, HL_Y, HL_W, HL_H); + ctx.strokeRect(TR_X, TR_Y, TR_W, TR_H); + + this.drawHighlightSection(highlightGrid, HL_X, HL_Y); + await this.drawTraceItSection( + traceImgPath, + teaching.upper, + teaching.lower, + TR_X, + TR_Y, + ); + + // ── 下区:4 行四线三格 + 字母临摹(倒置直角三角形)── + // 每行:left:24 w:547 h:43,top 分别 524.5 / 590.5 / 656.5 / 722.5 + const lineX = 24; + const lineW = 547; + const lineH = 43; + const lineTops = [524.5, 590.5, 656.5, 722.5]; + + // 8 → 6 → 3 → 1 组(每组为 Upper+Lower),左对齐,形成倒置直角三角形 + const groupsPerLine = [8, 6, 3, 1]; + const slotW = lineW / groupsPerLine[0]; // 以第一行的 8 组为基准 + + for (let r = 0; r < lineTops.length; r++) { + const y = lineTops[r]; + drawFourLineGrid(ctx, lineX, y, lineW, lineH); + + const n = groupsPerLine[r] ?? 0; + for (let i = 0; i < n; i++) { + // 第一组不透明,后面逐次更透明 + const alpha = n <= 1 ? 1 : 1 - (i / (n - 1)) * 0.7; // 1 → 0.3 + this.drawUpperLowerPairInFourLines( + teaching.upper, + teaching.lower, + lineX + i * slotW, + y, + slotW, + lineH, + alpha, + ); + } + } + } + + /** + * 在四线三格中绘制 Upper+Lower(遵循书写基线规范) + * + * 四线三格的 4 条线(从上到下): + * Top = y ── 顶线 + * Midline = y + h/3 ── 中线(虚线) + * Baseline = y + 2h/3 ── 基线(虚线) + * Bottom = y + h ── 底线 + * + * 大写字母:高度占满 Top → Baseline(即第一格 + 第二格),字号 ≈ h * 2/3 + * 小写字母:高度占满 Midline → Baseline(即第二格),字号 ≈ h * 1/3 + * 两个字母共享 Baseline,间距远小于组间距 + */ + private drawUpperLowerPairInFourLines( + upper: string, + lower: string, + x: number, + y: number, + w: number, + h: number, + alpha: number, + ) { + const ctx = this.ctx; + ctx.save(); + ctx.globalAlpha = Math.max(0, Math.min(1, alpha)); + ctx.fillStyle = 'rgba(26, 26, 26, 1)'; + ctx.textBaseline = 'alphabetic'; + + const baselineY = y + (h * 2) / 3; + + // 大写占满 Top→Baseline(2 格高),小写占满 Midline→Baseline(1 格高) + const upperFs = h * (2 / 3); + const lowerFs = h * (1 / 3); + + // 字母间距:固定 3px,远小于组间距(slotW ≈ 68) + const pairGap = 3; + + ctx.font = `${upperFs}px ${LETTER_FACE}`; + const upperW = ctx.measureText(upper).width; + + ctx.font = `${lowerFs}px ${LETTER_FACE}`; + const lowerW = ctx.measureText(lower).width; + + const totalPairW = upperW + pairGap + lowerW; + const pairStartX = x + (w - totalPairW) / 2; + + ctx.font = `${upperFs}px ${LETTER_FACE}`; + ctx.textAlign = 'left'; + ctx.fillText(upper, pairStartX, baselineY); + + ctx.font = `${lowerFs}px ${LETTER_FACE}`; + ctx.textAlign = 'left'; + ctx.fillText(lower, pairStartX + upperW + pairGap, baselineY); + + ctx.restore(); + } + + private drawSentence( + sentence: string, + letter: string, + x: number, + y: number, + ) { + const ctx = this.ctx; + ctx.font = `36px ${LETTER_FACE}`; + ctx.textAlign = 'left'; + ctx.textBaseline = 'top'; + + let cx = x; + for (let i = 0; i < sentence.length; i++) { + const ch = sentence[i]; + ctx.fillStyle = + ch.toUpperCase() === letter ? ACCENT_RED : 'rgba(0, 0, 0, 1)'; + ctx.fillText(ch, cx, y); + cx += ctx.measureText(ch).width; + } + } + + private drawHighlightSection(grid: HighlightGrid, sx: number, sy: number) { + const ctx = this.ctx; + const titleX = sx + 16; + const titleY = sy + 12; + + ctx.fillStyle = '#000'; + ctx.textAlign = 'left'; + ctx.textBaseline = 'top'; + + const hlIcon = '\u{1F50D}'; + ctx.font = TITLE_EMOJI_FONT; + ctx.fillText(hlIcon, titleX, titleY + 1); + const hlIconW = ctx.measureText(hlIcon).width; + + ctx.font = TITLE_TEXT_FONT; + ctx.fillText( + 'Highlight it !', + titleX + hlIconW + TITLE_ICON_GAP, + titleY, + ); + + const gridX = sx + 16; + const gridY = sy + 45; + const cellSize = 40; + const cols = grid.rows[0]?.length ?? 6; + const rows = grid.rows.length; + + for (let r = 0; r < rows; r++) { + for (let c = 0; c < cols; c++) { + const cx = gridX + c * cellSize; + const cy = gridY + r * cellSize; + ctx.strokeStyle = 'rgba(0, 0, 0, 1)'; + ctx.lineWidth = 1; + ctx.setLineDash([]); + ctx.strokeRect(cx, cy, cellSize, cellSize); + + ctx.font = `18px ${LETTER_FACE}`; + ctx.fillStyle = '#000'; + ctx.textAlign = 'center'; + ctx.textBaseline = 'middle'; + ctx.fillText( + grid.rows[r][c], + cx + cellSize / 2, + cy + cellSize / 2 + 1, + ); + } + } + } + + private async drawTraceItSection( + traceImgPath: string, + upper: string, + lower: string, + sx: number, + sy: number, + ) { + const ctx = this.ctx; + const titleX = sx + 25; + const titleY = sy + 12; + + ctx.fillStyle = '#000'; + ctx.textAlign = 'left'; + ctx.textBaseline = 'top'; + + const traceIcon = '\u{1F58A}\u{FE0F}'; + ctx.font = TITLE_EMOJI_FONT; + ctx.fillText(traceIcon, titleX, titleY); + const traceIconW = ctx.measureText(traceIcon).width; + + ctx.font = TITLE_TEXT_FONT; + ctx.fillText( + 'Trace It !', + titleX + traceIconW + TITLE_ICON_GAP, + titleY, + ); + + // 四线三格(设计稿绝对坐标) + const lx = 316, + lw = 236; + const lines = [364.5, 404.5, 444.5, 484.5]; + + ctx.strokeStyle = LINE_INK_ALPHA; + ctx.lineWidth = 1; + ctx.setLineDash([]); + ctx.beginPath(); + ctx.moveTo(lx, lines[0]); + ctx.lineTo(lx + lw, lines[0]); + ctx.stroke(); + + ctx.setLineDash([4, 4]); + for (const ly of [lines[1], lines[2]]) { + ctx.beginPath(); + ctx.moveTo(lx, ly); + ctx.lineTo(lx + lw, ly); + ctx.stroke(); + } + + ctx.setLineDash([]); + ctx.beginPath(); + ctx.moveTo(lx, lines[3]); + ctx.lineTo(lx + lw, lines[3]); + ctx.stroke(); + + // 笔顺图 + const imgX = 337, + imgY = 365, + imgW = 159, + imgH = 80; + try { + const img = (await getImage( + this.canvas, + traceImgPath, + )) as WechatMiniprogram.Image; + const aspect = (img.width || 1) / (img.height || 1); + let dw = imgW; + let dh = dw / aspect; + if (dh > imgH) { + dh = imgH; + dw = dh * aspect; + } + ctx.drawImage( + img, + imgX + (imgW - dw) / 2, + imgY + (imgH - dh) / 2, + dw, + dh, + ); + } catch { + const fs = Math.min(imgH * 0.6, imgW * 0.18); + ctx.font = `bold ${fs}px ${LETTER_FACE}`; + ctx.fillStyle = '#222'; + ctx.textAlign = 'center'; + ctx.textBaseline = 'middle'; + ctx.fillText(`${upper} ${lower}`, imgX + imgW / 2, imgY + imgH / 2); + } + } +} diff --git a/miniprogram/englishPages/shared/generators/letter-tracing-generator.ts b/miniprogram/englishPages/shared/generators/letter-tracing-generator.ts index 53d80ee..d2176a9 100644 --- a/miniprogram/englishPages/shared/generators/letter-tracing-generator.ts +++ b/miniprogram/englishPages/shared/generators/letter-tracing-generator.ts @@ -1,4 +1,4 @@ -import { ALPHABET_BY_LETTER, LETTERS_UPPER } from '../../../core/data/alphabet'; +import { ALPHABET_BY_LETTER, LETTERS_UPPER } from '../data/alphabet'; /** 字母描红的布局模式(与产品文档四类练习一致) */ export type LetterTracingMode = @@ -43,6 +43,12 @@ export interface TracingRow { cells: TracingCell[]; } +/** Highlight It 格子数据(3×6 网格,混入目标字母) */ +export interface HighlightGrid { + rows: string[][]; + targetLetter: string; +} + /** 看图描红教学区 */ export interface TeachingBlock { upper: string; @@ -50,13 +56,21 @@ export interface TeachingBlock { word: string; sentence: string; emoji: string; + /** 字母笔顺图路径(/englishPages/shared/assets/letter/X.png) */ + letterImgPath: string; + /** 配图路径(/englishPages/shared/assets/letterImgs/Word.png) */ + wordImgPath: string; } export type LetterTracingData = | { mode: 'picture-tracing'; teaching: TeachingBlock; - rows: TracingRow[]; + highlightGrid: HighlightGrid; + /** Trace It 区域使用的字母笔顺图路径(同 teaching.letterImgPath) */ + traceImgPath: string; + /** 下部 4 行四线三格(无字符填充,纯空行) */ + tracingLineCount: number; } | { mode: 'case-pairing'; @@ -80,6 +94,33 @@ export function normalizeLetter(c: string): string { return u.length ? u[0] : 'A'; } +/** 构建 Highlight It 的 3×6 随机字母网格,保证混入 2~5 个目标字母 */ +function buildHighlightGrid( + target: string, + gridRows: number, + gridCols: number, +): HighlightGrid { + const total = gridRows * gridCols; + const targetCount = 2 + Math.floor(Math.random() * 4); // 2~5 + const others = LETTERS_UPPER.filter((l) => l !== target); + + const chars: string[] = []; + for (let i = 0; i < targetCount; i++) chars.push(target); + for (let i = targetCount; i < total; i++) { + chars.push(others[Math.floor(Math.random() * others.length)]); + } + for (let i = chars.length - 1; i > 0; i--) { + const j = Math.floor(Math.random() * (i + 1)); + [chars[i], chars[j]] = [chars[j], chars[i]]; + } + + const rows: string[][] = []; + for (let r = 0; r < gridRows; r++) { + rows.push(chars.slice(r * gridCols, (r + 1) * gridCols)); + } + return { rows, targetLetter: target }; +} + function buildCells( char: string, count: number, @@ -165,22 +206,32 @@ export function generateLetterTracing( const meta = ALPHABET_BY_LETTER[key] ?? ALPHABET_BY_LETTER.A; const upper = key; const lower = key.toLowerCase(); + + const hasLetterAsset = key === 'A' || key === 'B'; + const letterFile = hasLetterAsset ? key : 'A'; + const letterImgPath = `/englishPages/shared/assets/letter/${letterFile}.png`; + + const wordImgPath = `/englishPages/shared/assets/letterImgs/Apple.png`; + const teaching: TeachingBlock = { upper, lower, word: meta.word, sentence: `${upper} is for ${meta.word}`, emoji: meta.emoji, + letterImgPath, + wordImgPath, + }; + + const highlightGrid = buildHighlightGrid(upper, 3, 6); + + return { + mode: 'picture-tracing', + teaching, + highlightGrid, + traceImgPath: letterImgPath, + tracingLineCount: 8, }; - const rows: TracingRow[] = [ - rowForChar(upper, repetitions, fadePattern), - rowForChar(upper, repetitions, fadePattern), - rowForChar(upper, repetitions, fadePattern), - rowForChar(lower, repetitions, fadePattern), - rowForChar(lower, repetitions, fadePattern), - rowForChar(lower, repetitions, fadePattern), - ]; - return { mode: 'picture-tracing', teaching, rows }; } if (mode === 'case-pairing') { @@ -189,12 +240,7 @@ export function generateLetterTracing( const pack = (letters: string[]) => chunk(letters, 4).map((group) => group.map((L) => - rowForChar( - L, - repetitions, - fadePattern, - L.toLowerCase(), - ), + rowForChar(L, repetitions, fadePattern, L.toLowerCase()), ), ); return { @@ -227,9 +273,7 @@ export function generateLetterTracing( return { mode: 'overview', upperRows: overviewRowsFrom([...LETTERS_UPPER]), - lowerRows: overviewRowsFrom( - LETTERS_UPPER.map((L) => L.toLowerCase()), - ), + lowerRows: overviewRowsFrom(LETTERS_UPPER.map((L) => L.toLowerCase())), }; } diff --git a/miniprogram/pages/copyBook/copyBook.json b/miniprogram/supportPages/copyBook/copyBook.json similarity index 100% rename from miniprogram/pages/copyBook/copyBook.json rename to miniprogram/supportPages/copyBook/copyBook.json diff --git a/miniprogram/pages/copyBook/copyBook.less b/miniprogram/supportPages/copyBook/copyBook.less similarity index 100% rename from miniprogram/pages/copyBook/copyBook.less rename to miniprogram/supportPages/copyBook/copyBook.less diff --git a/miniprogram/pages/copyBook/copyBook.ts b/miniprogram/supportPages/copyBook/copyBook.ts similarity index 100% rename from miniprogram/pages/copyBook/copyBook.ts rename to miniprogram/supportPages/copyBook/copyBook.ts diff --git a/miniprogram/pages/copyBook/copyBook.wxml b/miniprogram/supportPages/copyBook/copyBook.wxml similarity index 100% rename from miniprogram/pages/copyBook/copyBook.wxml rename to miniprogram/supportPages/copyBook/copyBook.wxml diff --git a/miniprogram/pages/focusIndex/focusIndex.json b/miniprogram/supportPages/focusIndex/focusIndex.json similarity index 100% rename from miniprogram/pages/focusIndex/focusIndex.json rename to miniprogram/supportPages/focusIndex/focusIndex.json diff --git a/miniprogram/pages/focusIndex/focusIndex.less b/miniprogram/supportPages/focusIndex/focusIndex.less similarity index 100% rename from miniprogram/pages/focusIndex/focusIndex.less rename to miniprogram/supportPages/focusIndex/focusIndex.less diff --git a/miniprogram/pages/focusIndex/focusIndex.ts b/miniprogram/supportPages/focusIndex/focusIndex.ts similarity index 100% rename from miniprogram/pages/focusIndex/focusIndex.ts rename to miniprogram/supportPages/focusIndex/focusIndex.ts diff --git a/miniprogram/pages/focusIndex/focusIndex.wxml b/miniprogram/supportPages/focusIndex/focusIndex.wxml similarity index 100% rename from miniprogram/pages/focusIndex/focusIndex.wxml rename to miniprogram/supportPages/focusIndex/focusIndex.wxml diff --git a/miniprogram/pages/index/index.json b/miniprogram/supportPages/index/index.json similarity index 100% rename from miniprogram/pages/index/index.json rename to miniprogram/supportPages/index/index.json diff --git a/miniprogram/pages/index/index.less b/miniprogram/supportPages/index/index.less similarity index 100% rename from miniprogram/pages/index/index.less rename to miniprogram/supportPages/index/index.less diff --git a/miniprogram/pages/index/index.ts b/miniprogram/supportPages/index/index.ts similarity index 100% rename from miniprogram/pages/index/index.ts rename to miniprogram/supportPages/index/index.ts diff --git a/miniprogram/pages/index/index.wxml b/miniprogram/supportPages/index/index.wxml similarity index 100% rename from miniprogram/pages/index/index.wxml rename to miniprogram/supportPages/index/index.wxml diff --git a/miniprogram/pages/mathIndex/mathIndex.json b/miniprogram/supportPages/mathIndex/mathIndex.json similarity index 100% rename from miniprogram/pages/mathIndex/mathIndex.json rename to miniprogram/supportPages/mathIndex/mathIndex.json diff --git a/miniprogram/pages/mathIndex/mathIndex.less b/miniprogram/supportPages/mathIndex/mathIndex.less similarity index 100% rename from miniprogram/pages/mathIndex/mathIndex.less rename to miniprogram/supportPages/mathIndex/mathIndex.less diff --git a/miniprogram/pages/mathIndex/mathIndex.ts b/miniprogram/supportPages/mathIndex/mathIndex.ts similarity index 100% rename from miniprogram/pages/mathIndex/mathIndex.ts rename to miniprogram/supportPages/mathIndex/mathIndex.ts diff --git a/miniprogram/pages/mathIndex/mathIndex.wxml b/miniprogram/supportPages/mathIndex/mathIndex.wxml similarity index 100% rename from miniprogram/pages/mathIndex/mathIndex.wxml rename to miniprogram/supportPages/mathIndex/mathIndex.wxml diff --git a/stitch-ui/printLetterTrace/英语字母描红.html b/stitch-ui/printLetterTrace/英语字母描红.html new file mode 100644 index 0000000..9c1dcbe --- /dev/null +++ b/stitch-ui/printLetterTrace/英语字母描红.html @@ -0,0 +1,2962 @@ + + + + + + + + + 英语字母描红 + + + + +
+ + + + +
+ 当前页面未通过审核,此地址仅用于效果预览,不可分享 +
+ + + + +
\ No newline at end of file diff --git a/stitch-ui/printLetterTrace/英语字母描红_files/jsframe.js b/stitch-ui/printLetterTrace/英语字母描红_files/jsframe.js new file mode 100644 index 0000000..06624f7 --- /dev/null +++ b/stitch-ui/printLetterTrace/英语字母描红_files/jsframe.js @@ -0,0 +1,6 @@ +/*! + * jsFrame 1.4.2 + * Copyright (c) 2023 jsDesign + * Date: Wed Aug 30 2023 14:24:31 GMT+0800 (China Standard Time) + * + */(()=>{var r={5251:(t,e,r)=>{"use strict";r(6394),r(3080),r(4649);var n=r(8135),o=(Object.defineProperty(e,"__esModule",{value:!0}),e.xComponentUndefinedHandler=e.nullXComponent=e.isUndefined=e.isFunction=e.isDev=e.getCompIdBySrc=e.XComponentType=void 0,n(r(7296))),i=n(r(2e3)),u=n(r(4626)),s=n(r(1803)),a=n(r(6368)),c=(r(5551),r(8921));function l(r){var n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}();return function(){var t,e=(0,a.default)(r);return t=n?(t=(0,a.default)(this).constructor,Reflect.construct(e,arguments,t)):e.apply(this,arguments),(0,s.default)(this,t)}}e.isDev=!1;e.nullXComponent=function(t,r){return function(){(0,u.default)(e,r);var t=l(e);function e(){return(0,o.default)(this,e),t.apply(this,arguments)}return(0,i.default)(e,[{key:"render",value:function(){return null}}]),e}()};var f=function(t){return void 0===t};e.isUndefined=f;e.isFunction=function(t){return"function"==typeof t};e.getCompIdBySrc=function(t){return t=null==(t=null==(t=null==(t=null==t||null==(t=t.split("#"))?void 0:t[0])||null==(t=t.split("?"))?void 0:t[0])?void 0:t.split("/"))?void 0:t[t.length-1],f(t)&&console.warn(c.errorMsg.compIdParseErr),t},e.xComponentUndefinedHandler=function(){console.warn("[jsFrame]: XComponent is undefined.")};e.XComponentType={func:{desc:"<= V1.4.1"},map:{desc:"define in V1.4.2"},normal:{desc:"null XComponent"}}},5551:(t,e,r)=>{"use strict";r(2076),r(7723);r=r(8921);r.LogType.normal},8257:(t,e,r)=>{"use strict";var n=r(9212),o=r(5637),i=TypeError;t.exports=function(t){if(n(t))return t;throw i(o(t)+" is not a function")}},1186:(t,e,r)=>{"use strict";var n=r(2097),o=r(5637),i=TypeError;t.exports=function(t){if(n(t))return t;throw i(o(t)+" is not a constructor")}},9882:(t,e,r)=>{"use strict";var n=r(9212),o=String,i=TypeError;t.exports=function(t){if("object"==typeof t||n(t))return t;throw i("Can't set "+o(t)+" as a prototype")}},6288:(t,e,r)=>{"use strict";var n=r(3649),o=r(3590),r=r(4615).f,i=n("unscopables"),u=Array.prototype;null==u[i]&&r(u,i,{configurable:!0,value:o(null)}),t.exports=function(t){u[i][t]=!0}},4761:(t,e,r)=>{"use strict";var n=r(2447),o=TypeError;t.exports=function(t,e){if(n(e,t))return t;throw o("Incorrect invocation")}},2569:(t,e,r)=>{"use strict";var n=r(794),o=String,i=TypeError;t.exports=function(t){if(n(t))return t;throw i(o(t)+" is not an object")}},1537:(t,e,r)=>{"use strict";r=r(6544);t.exports=r(function(){var t;"function"==typeof ArrayBuffer&&(t=new ArrayBuffer(8),Object.isExtensible(t))&&Object.defineProperty(t,"a",{value:8})})},3200:(t,e,r)=>{"use strict";var n=r(4805).forEach,r=r(906)("forEach");t.exports=r?[].forEach:function(t){return n(this,t,1{"use strict";var p=r(2938),d=r(8262),h=r(1324),_=r(5294),v=r(114),y=r(2097),b=r(1825),g=r(5999),m=r(6307),x=r(8272),w=Array;t.exports=function(t){var e,r,n,o,i,u,s=h(t),t=y(this),a=arguments.length,c=1{"use strict";function n(s){return function(t,e,r){var n,o=a(t),i=l(o),u=c(r,i);if(s&&e!=e){for(;u{"use strict";function n(p){var d=1==p,h=2==p,_=3==p,v=4==p,y=6==p,b=7==p,g=5==p||y;return function(t,e,r,n){for(var o,i,u=w(t),s=x(u),a=m(e,r),c=S(s),l=0,e=n||O,f=d?e(t,c):h||b?e(t,0):void 0;l{"use strict";var n=r(6544),o=r(3649),i=r(4061),u=o("species");t.exports=function(e){return 51<=i||!n(function(){var t=[];return(t.constructor={})[u]=function(){return{foo:1}},1!==t[e](Boolean).foo})}},906:(t,e,r)=>{"use strict";var n=r(6544);t.exports=function(t,e){var r=[][t];return!!r&&n(function(){r.call(null,e||function(){return 1},1)})}},8173:(t,e,r)=>{"use strict";var n=r(8494),o=r(4521),i=TypeError,u=Object.getOwnPropertyDescriptor,r=n&&!function(){if(void 0!==this)return 1;try{Object.defineProperty([],"length",{writable:!1}).length=1}catch(t){return t instanceof TypeError}}();t.exports=r?function(t,e){if(o(t)&&!u(t,"length").writable)throw i("Cannot set read only .length");return t.length=e}:function(t,e){return t.length=e}},4546:(t,e,r)=>{"use strict";var a=r(6782),c=r(1825),l=r(5999),f=Array,p=Math.max;t.exports=function(t,e,r){for(var n=c(t),o=a(e,n),i=a(void 0===r?n:r,n),u=f(p(i-o,0)),s=0;o{"use strict";r=r(7386);t.exports=r([].slice)},5289:(t,e,r)=>{"use strict";var n=r(4521),o=r(2097),i=r(794),u=r(3649)("species"),s=Array;t.exports=function(t){var e;return void 0===(e=n(t)&&(e=t.constructor,o(e)&&(e===s||n(e.prototype))||i(e)&&null===(e=e[u]))?void 0:e)?s:e}},4822:(t,e,r)=>{"use strict";var n=r(5289);t.exports=function(t,e){return new(n(t))(0===e?0:e)}},5294:(t,e,r)=>{"use strict";var o=r(2569),i=r(7093);t.exports=function(e,t,r,n){try{return n?t(o(r)[0],r[1]):t(r)}catch(t){i(e,"throw",t)}}},3616:(t,e,r)=>{"use strict";var o=r(3649)("iterator"),i=!1;try{var n=0,u={next:function(){return{done:!!n++}},return:function(){i=!0}};u[o]=function(){return this},Array.from(u,function(){throw 2})}catch(t){}t.exports=function(t,e){if(!e&&!i)return!1;var r=!1;try{var n={};n[o]=function(){return{next:function(){return{done:r=!0}}}},t(n)}catch(t){}return r}},9624:(t,e,r)=>{"use strict";var r=r(7386),n=r({}.toString),o=r("".slice);t.exports=function(t){return o(n(t),8,-1)}},3058:(t,e,r)=>{"use strict";var n=r(8191),o=r(9212),i=r(9624),u=r(3649)("toStringTag"),s=Object,a="Arguments"==i(function(){return arguments}());t.exports=n?i:function(t){var e;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(e=function(t,e){try{return t[e]}catch(t){}}(t=s(t),u))?e:a?i(t):"Object"==(e=i(t))&&o(t.callee)?"Arguments":e}},7012:(t,e,r)=>{"use strict";function a(t){return t.frozen||(t.frozen=new n)}function n(){this.entries=[]}function o(t,e){return s(t.entries,function(t){return t[0]===e})}var i=r(7386),c=r(3705),l=r(1909).getWeakData,f=r(4761),p=r(2569),d=r(8505),h=r(794),_=r(4026),u=r(4805),v=r(2870),r=r(2743),y=r.set,b=r.getterFor,s=u.find,g=u.findIndex,m=i([].splice),x=0;n.prototype={get:function(t){t=o(this,t);if(t)return t[1]},has:function(t){return!!o(this,t)},set:function(t,e){var r=o(this,t);r?r[1]=e:this.entries.push([t,e])},delete:function(e){var t=g(this.entries,function(t){return t[0]===e});return~t&&m(this.entries,t,1),!!~t}},t.exports={getConstructor:function(t,r,n,o){function i(t,e,r){var n=s(t),o=l(p(e),!0);return!0===o?a(n).set(e,r):o[n.id]=r,t}var t=t(function(t,e){f(t,u),y(t,{type:r,id:x++,frozen:void 0}),d(e)||_(e,t[o],{that:t,AS_ENTRIES:n})}),u=t.prototype,s=b(r);return c(u,{delete:function(t){var e,r=s(this);return!!h(t)&&(!0===(e=l(t))?a(r).delete(t):e&&v(e,r.id)&&delete e[r.id])},has:function(t){var e,r=s(this);return!!h(t)&&(!0===(e=l(t))?a(r).has(t):e&&v(e,r.id))}}),c(u,n?{get:function(t){var e,r=s(this);if(h(t))return!0===(e=l(t))?a(r).get(t):e?e[r.id]:void 0},set:function(t,e){return i(this,t,e)}}:{add:function(t){return i(this,t,!0)}}),t}}},4802:(t,e,r)=>{"use strict";var v=r(7263),y=r(7583),b=r(7386),g=r(4451),m=r(3746),x=r(1909),w=r(4026),S=r(4761),O=r(9212),E=r(8505),k=r(794),j=r(6544),T=r(3616),M=r(8821),A=r(434);t.exports=function(t,e,r){function n(t){var r=b(d[t]);m(d,t,"add"==t?function(t){return r(this,0===t?0:t),this}:"delete"==t?function(t){return!(l&&!k(t))&&r(this,0===t?0:t)}:"get"==t?function(t){return l&&!k(t)?void 0:r(this,0===t?0:t)}:"has"==t?function(t){return!(l&&!k(t))&&r(this,0===t?0:t)}:function(t,e){return r(this,0===t?0:t,e),this})}var o,i,u,s,a,c=-1!==t.indexOf("Map"),l=-1!==t.indexOf("Weak"),f=c?"set":"add",p=y[t],d=p&&p.prototype,h=p,_={};return g(t,!O(p)||!(l||d.forEach&&!j(function(){(new p).entries().next()})))?(h=r.getConstructor(e,t,c,f),x.enable()):g(t,!0)&&(i=(o=new h)[f](l?{}:-0,1)!=o,u=j(function(){o.has(1)}),s=T(function(t){new p(t)}),a=!l&&j(function(){for(var t=new p,e=5;e--;)t[f](e,e);return!t.has(-0)}),s||(((h=e(function(t,e){S(t,d);t=A(new p,t,h);return E(e)||w(e,t[f],{that:t,AS_ENTRIES:c}),t})).prototype=d).constructor=h),(u||a)&&(n("delete"),n("has"),c)&&n("get"),(a||i)&&n(f),l)&&d.clear&&delete d.clear,v({global:!0,constructor:!0,forced:(_[t]=h)!=p},_),M(h,t),l||r.setStrong(h,t,c),h}},3478:(t,e,r)=>{"use strict";var a=r(2870),c=r(929),l=r(6683),f=r(4615);t.exports=function(t,e,r){for(var n=c(e),o=f.f,i=l.f,u=0;u{"use strict";var n=r(3649)("match");t.exports=function(e){var r=/./;try{"/./"[e](r)}catch(t){try{return r[n]=!1,"/./"[e](r)}catch(t){}}return!1}},926:(t,e,r)=>{"use strict";r=r(6544);t.exports=!r(function(){function t(){}return t.prototype.constructor=null,Object.getPrototypeOf(new t)!==t.prototype})},1002:t=>{"use strict";t.exports=function(t,e){return{value:t,done:e}}},57:(t,e,r)=>{"use strict";var n=r(8494),o=r(4615),i=r(4677);t.exports=n?function(t,e,r){return o.f(t,e,i(1,r))}:function(t,e,r){return t[e]=r,t}},4677:t=>{"use strict";t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},5999:(t,e,r)=>{"use strict";var n=r(8734),o=r(4615),i=r(4677);t.exports=function(t,e,r){e=n(e);e in t?o.f(t,e,i(0,r)):t[e]=r}},2499:(t,e,r)=>{"use strict";var n=r(9594),o=r(4615);t.exports=function(t,e,r){return r.get&&n(r.get,e,{getter:!0}),r.set&&n(r.set,e,{setter:!0}),o.f(t,e,r)}},3746:(t,e,r)=>{"use strict";var u=r(9212),s=r(4615),a=r(9594),c=r(2296);t.exports=function(t,e,r,n){var o=(n=n||{}).enumerable,i=void 0!==n.name?n.name:e;if(u(r)&&a(r,i,n),n.global)o?t[e]=r:c(e,r);else{try{n.unsafe?t[e]&&(o=!0):delete t[e]}catch(t){}o?t[e]=r:s.f(t,e,{value:r,enumerable:!1,configurable:!n.nonConfigurable,writable:!n.nonWritable})}return t}},3705:(t,e,r)=>{"use strict";var o=r(3746);t.exports=function(t,e,r){for(var n in e)o(t,n,e[n],r);return t}},2296:(t,e,r)=>{"use strict";var n=r(7583),o=Object.defineProperty;t.exports=function(e,r){try{o(n,e,{value:r,configurable:!0,writable:!0})}catch(t){n[e]=r}return r}},7774:(t,e,r)=>{"use strict";var n=r(5637),o=TypeError;t.exports=function(t,e){if(!delete t[e])throw o("Cannot delete property "+n(e)+" of "+n(t))}},8494:(t,e,r)=>{"use strict";r=r(6544);t.exports=!r(function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]})},2952:t=>{"use strict";var e="object"==typeof document&&document.all;t.exports={all:e,IS_HTMLDDA:void 0===e&&void 0!==e}},6668:(t,e,r)=>{"use strict";var n=r(7583),r=r(794),o=n.document,i=r(o)&&r(o.createElement);t.exports=function(t){return i?o.createElement(t):{}}},6768:t=>{"use strict";var e=TypeError;t.exports=function(t){if(9007199254740991{"use strict";t.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},9307:(t,e,r)=>{"use strict";r=r(6668)("span").classList,r=r&&r.constructor&&r.constructor.prototype;t.exports=r===Object.prototype?void 0:r},6918:t=>{"use strict";t.exports="undefined"!=typeof navigator&&String(navigator.userAgent)||""},4061:(t,e,r)=>{"use strict";var n,o,i=r(7583),r=r(6918),u=i.process,i=i.Deno,u=u&&u.versions||i&&i.version,i=u&&u.v8;!(o=i?0<(n=i.split("."))[0]&&n[0]<4?1:+(n[0]+n[1]):o)&&r&&(!(n=r.match(/Edge\/(\d+)/))||74<=n[1])&&(n=r.match(/Chrome\/(\d+)/))&&(o=+n[1]),t.exports=o},5690:t=>{"use strict";t.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},7263:(t,e,r)=>{"use strict";var c=r(7583),l=r(6683).f,f=r(57),p=r(3746),d=r(2296),h=r(3478),_=r(4451);t.exports=function(t,e){var r,n,o,i=t.target,u=t.global,s=t.stat,a=u?c:s?c[i]||d(i,{}):(c[i]||{}).prototype;if(a)for(r in e){if(n=e[r],o=t.dontCallGetSet?(o=l(a,r))&&o.value:a[r],!_(u?r:i+(s?".":"#")+r,t.forced)&&void 0!==o){if(typeof n==typeof o)continue;h(n,o)}(t.sham||o&&o.sham)&&f(n,"sham",!0),p(a,r,n,t)}}},6544:t=>{"use strict";t.exports=function(t){try{return!!t()}catch(t){return!0}}},9974:(t,e,r)=>{"use strict";r=r(6544);t.exports=!r(function(){return Object.isExtensible(Object.preventExtensions({}))})},1611:(t,e,r)=>{"use strict";var r=r(8987),n=Function.prototype,o=n.apply,i=n.call;t.exports="object"==typeof Reflect&&Reflect.apply||(r?i.bind(o):function(){return i.apply(o,arguments)})},2938:(t,e,r)=>{"use strict";var n=r(6887),o=r(8257),i=r(8987),u=n(n.bind);t.exports=function(t,e){return o(t),void 0===e?t:i?u(t,e):function(){return t.apply(e,arguments)}}},8987:(t,e,r)=>{"use strict";r=r(6544);t.exports=!r(function(){var t=function(){}.bind();return"function"!=typeof t||t.hasOwnProperty("prototype")})},1335:(t,e,r)=>{"use strict";var n=r(7386),o=r(8257),i=r(794),l=r(2870),f=r(6917),r=r(8987),p=Function,d=n([].concat),h=n([].join),_={};t.exports=r?p.bind:function(u){var s=o(this),t=s.prototype,a=f(arguments,1),c=function(){var t=d(a,f(arguments));if(this instanceof c){var e=s,r=t.length,n=t;if(!l(_,r)){for(var o=[],i=0;i{"use strict";var r=r(8987),n=Function.prototype.call;t.exports=r?n.bind(n):function(){return n.apply(n,arguments)}},4340:(t,e,r)=>{"use strict";var n=r(8494),r=r(2870),o=Function.prototype,i=n&&Object.getOwnPropertyDescriptor,r=r(o,"name"),u=r&&"something"===function(){}.name,n=r&&(!n||i(o,"name").configurable);t.exports={EXISTS:r,PROPER:u,CONFIGURABLE:n}},4523:(t,e,r)=>{"use strict";var n=r(7386),o=r(8257);t.exports=function(t,e,r){try{return n(o(Object.getOwnPropertyDescriptor(t,e)[r]))}catch(t){}}},6887:(t,e,r)=>{"use strict";var n=r(9624),o=r(7386);t.exports=function(t){if("Function"===n(t))return o(t)}},7386:(t,e,r)=>{"use strict";var r=r(8987),n=Function.prototype,o=n.call,n=r&&n.bind.bind(o,o);t.exports=r?n:function(t){return function(){return o.apply(t,arguments)}}},5897:(t,e,r)=>{"use strict";var n=r(7583),o=r(9212);t.exports=function(t,e){return arguments.length<2?(r=n[t],o(r)?r:void 0):n[t]&&n[t][e];var r}},8272:(t,e,r)=>{"use strict";var n=r(3058),o=r(911),i=r(8505),u=r(339),s=r(3649)("iterator");t.exports=function(t){if(!i(t))return o(t,s)||o(t,"@@iterator")||u[n(t)]}},6307:(t,e,r)=>{"use strict";var n=r(8262),o=r(8257),i=r(2569),u=r(5637),s=r(8272),a=TypeError;t.exports=function(t,e){e=arguments.length<2?s(t):e;if(o(e))return i(n(e,t));throw a(u(t)+" is not iterable")}},2627:(t,e,r)=>{"use strict";var n=r(7386),s=r(4521),a=r(9212),c=r(9624),l=r(8320),f=n([].push);t.exports=function(t){if(a(t))return t;if(s(t)){for(var e=t.length,n=[],r=0;r{"use strict";var n=r(8257),o=r(8505);t.exports=function(t,e){t=t[e];return o(t)?void 0:n(t)}},7583:function(t,e,r){"use strict";function n(t){return t&&t.Math==Math&&t}t.exports=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof r.g&&r.g)||function(){return this}()||this||Function("return this")()},2870:(t,e,r)=>{"use strict";var n=r(7386),o=r(1324),i=n({}.hasOwnProperty);t.exports=Object.hasOwn||function(t,e){return i(o(t),e)}},4639:t=>{"use strict";t.exports={}},482:(t,e,r)=>{"use strict";r=r(5897);t.exports=r("document","documentElement")},275:(t,e,r)=>{"use strict";var n=r(8494),o=r(6544),i=r(6668);t.exports=!n&&!o(function(){return 7!=Object.defineProperty(i("div"),"a",{get:function(){return 7}}).a})},5044:(t,e,r)=>{"use strict";var n=r(7386),o=r(6544),i=r(9624),u=Object,s=n("".split);t.exports=o(function(){return!u("z").propertyIsEnumerable(0)})?function(t){return"String"==i(t)?s(t,""):u(t)}:u},434:(t,e,r)=>{"use strict";var n=r(9212),o=r(794),i=r(7496);t.exports=function(t,e,r){return i&&n(e=e.constructor)&&e!==r&&o(e=e.prototype)&&e!==r.prototype&&i(t,e),t}},9734:(t,e,r)=>{"use strict";var n=r(7386),o=r(9212),r=r(1314),i=n(Function.toString);o(r.inspectSource)||(r.inspectSource=function(t){return i(t)}),t.exports=r.inspectSource},1909:(t,e,r)=>{"use strict";function n(t){c(t,v,{value:{objectID:"O"+y++,weakData:{}}})}var u=r(7263),s=r(7386),o=r(4639),i=r(794),a=r(2870),c=r(4615).f,l=r(9275),f=r(3130),p=r(4766),d=r(8284),h=r(9974),_=!1,v=d("meta"),y=0,b=t.exports={enable:function(){b.enable=function(){},_=!0;var o=l.f,i=s([].splice),t={};t[v]=1,o(t).length&&(l.f=function(t){for(var e=o(t),r=0,n=e.length;r{"use strict";var n,o,i,u,s=r(5307),a=r(7583),c=r(794),l=r(57),f=r(2870),p=r(1314),d=r(9137),r=r(4639),h="Object already initialized",_=a.TypeError,a=a.WeakMap,v=s||p.state?((i=p.state||(p.state=new a)).get=i.get,i.has=i.has,i.set=i.set,n=function(t,e){if(i.has(t))throw _(h);return e.facade=t,i.set(t,e),e},o=function(t){return i.get(t)||{}},function(t){return i.has(t)}):(r[u=d("state")]=!0,n=function(t,e){if(f(t,u))throw _(h);return e.facade=t,l(t,u,e),e},o=function(t){return f(t,u)?t[u]:{}},function(t){return f(t,u)});t.exports={set:n,get:o,has:v,enforce:function(t){return v(t)?o(t):n(t,{})},getterFor:function(e){return function(t){if(c(t)&&(t=o(t)).type===e)return t;throw _("Incompatible receiver, "+e+" required")}}}},114:(t,e,r)=>{"use strict";var n=r(3649),o=r(339),i=n("iterator"),u=Array.prototype;t.exports=function(t){return void 0!==t&&(o.Array===t||u[i]===t)}},4521:(t,e,r)=>{"use strict";var n=r(9624);t.exports=Array.isArray||function(t){return"Array"==n(t)}},9212:(t,e,r)=>{"use strict";var r=r(2952),n=r.all;t.exports=r.IS_HTMLDDA?function(t){return"function"==typeof t||t===n}:function(t){return"function"==typeof t}},2097:(t,e,r)=>{"use strict";function n(){}function o(t){if(!a(t))return!1;try{return d(n,p,t),!0}catch(t){return!1}}function i(t){if(!a(t))return!1;switch(c(t)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return v||!!_(h,f(t))}catch(t){return!0}}var u=r(7386),s=r(6544),a=r(9212),c=r(3058),l=r(5897),f=r(9734),p=[],d=l("Reflect","construct"),h=/^\s*(?:class|function)\b/,_=u(h.exec),v=!h.exec(n);i.sham=!0,t.exports=!d||s(function(){var t;return o(o.call)||!o(Object)||!o(function(){t=!0})||t})?i:o},4451:(t,e,r)=>{"use strict";function n(t,e){return(t=a[s(t)])==l||t!=c&&(i(e)?o(e):!!e)}var o=r(6544),i=r(9212),u=/#|\.prototype\./,s=n.normalize=function(t){return String(t).replace(u,".").toLowerCase()},a=n.data={},c=n.NATIVE="N",l=n.POLYFILL="P";t.exports=n},8505:t=>{"use strict";t.exports=function(t){return null==t}},794:(t,e,r)=>{"use strict";var n=r(9212),r=r(2952),o=r.all;t.exports=r.IS_HTMLDDA?function(t){return"object"==typeof t?null!==t:n(t)||t===o}:function(t){return"object"==typeof t?null!==t:n(t)}},6268:t=>{"use strict";t.exports=!1},7574:(t,e,r)=>{"use strict";var n=r(794),o=r(9624),i=r(3649)("match");t.exports=function(t){var e;return n(t)&&(void 0!==(e=t[i])?!!e:"RegExp"==o(t))}},5871:(t,e,r)=>{"use strict";var n=r(5897),o=r(9212),i=r(2447),r=r(7786),u=Object;t.exports=r?function(t){return"symbol"==typeof t}:function(t){var e=n("Symbol");return o(e)&&i(e.prototype,u(t))}},4026:(t,e,r)=>{"use strict";function y(t,e){this.stopped=t,this.result=e}var b=r(2938),g=r(8262),m=r(2569),x=r(5637),w=r(114),S=r(1825),O=r(2447),E=r(6307),k=r(8272),j=r(7093),T=TypeError,M=y.prototype;t.exports=function(t,e,r){function n(t){return i&&j(i,"normal",t),new y(!0,t)}function o(t){return p?(m(t),_?v(t[0],t[1],n):v(t[0],t[1])):_?v(t,n):v(t)}var i,u,s,a,c,l,f=r&&r.that,p=!(!r||!r.AS_ENTRIES),d=!(!r||!r.IS_RECORD),h=!(!r||!r.IS_ITERATOR),_=!(!r||!r.INTERRUPTED),v=b(e,f);if(d)i=t.iterator;else if(h)i=t;else{if(!(r=k(t)))throw T(x(t)+" is not iterable");if(w(r)){for(u=0,s=S(t);u{"use strict";var i=r(8262),u=r(2569),s=r(911);t.exports=function(t,e,r){var n,o;u(t);try{if(!(n=s(t,"return"))){if("throw"===e)throw r;return r}n=i(n,t)}catch(t){o=!0,n=t}if("throw"===e)throw r;if(o)throw n;return u(n),r}},3098:(t,e,r)=>{"use strict";function o(){return this}var i=r(2365).IteratorPrototype,u=r(3590),s=r(4677),a=r(8821),c=r(339);t.exports=function(t,e,r,n){e+=" Iterator";return t.prototype=u(i,{next:s(+!n,r)}),a(t,e,!1,!0),c[e]=o,t}},59:(t,e,r)=>{"use strict";function _(){return this}var v=r(7263),y=r(8262),b=r(6268),n=r(4340),g=r(9212),m=r(3098),x=r(729),w=r(7496),S=r(8821),O=r(57),E=r(3746),o=r(3649),k=r(339),r=r(2365),j=n.PROPER,T=n.CONFIGURABLE,M=r.IteratorPrototype,A=r.BUGGY_SAFARI_ITERATORS,C=o("iterator"),P="values",R="entries";t.exports=function(t,e,r,n,o,i,u){m(r,e,n);function s(t){if(t===o&&d)return d;if(!A&&t in f)return f[t];switch(t){case"keys":case P:case R:return function(){return new r(this,t)}}return function(){return new r(this)}}var a,c,n=e+" Iterator",l=!1,f=t.prototype,p=f[C]||f["@@iterator"]||o&&f[o],d=!A&&p||s(o),h="Array"==e&&f.entries||p;if(h&&(h=x(h.call(new t)))!==Object.prototype&&h.next&&(b||x(h)===M||(w?w(h,M):g(h[C])||E(h,C,_)),S(h,n,!0,!0),b)&&(k[n]=_),j&&o==P&&p&&p.name!==P&&(!b&&T?O(f,"name",P):(l=!0,d=function(){return y(p,this)})),o)if(a={values:s(P),keys:i?d:s("keys"),entries:s(R)},u)for(c in a)!A&&!l&&c in f||E(f,c,a[c]);else v({target:e,proto:!0,forced:A||l},a);return b&&!u||f[C]===d||E(f,C,d,{name:o}),k[e]=d,a}},2365:(t,e,r)=>{"use strict";var n,o,i=r(6544),u=r(9212),s=r(794),a=r(3590),c=r(729),l=r(3746),f=r(3649),r=r(6268),p=f("iterator"),f=!1;[].keys&&("next"in(o=[].keys())?(c=c(c(o)))!==Object.prototype&&(n=c):f=!0),!s(n)||i(function(){var t={};return n[p].call(t)!==t})?n={}:r&&(n=a(n)),u(n[p])||l(n,p,function(){return this}),t.exports={IteratorPrototype:n,BUGGY_SAFARI_ITERATORS:f}},339:t=>{"use strict";t.exports={}},1825:(t,e,r)=>{"use strict";var n=r(97);t.exports=function(t){return n(t.length)}},9594:(t,e,r)=>{"use strict";var n=r(7386),o=r(6544),i=r(9212),u=r(2870),s=r(8494),a=r(4340).CONFIGURABLE,c=r(9734),r=r(2743),l=r.enforce,f=r.get,p=String,d=Object.defineProperty,h=n("".slice),_=n("".replace),v=n([].join),y=s&&!o(function(){return 8!==d(function(){},"length",{value:8}).length}),b=String(String).split("String"),r=t.exports=function(t,e,r){"Symbol("===h(p(e),0,7)&&(e="["+_(p(e),/^Symbol\(([^)]*)\)/,"$1")+"]"),r&&r.getter&&(e="get "+e),r&&r.setter&&(e="set "+e),(!u(t,"name")||a&&t.name!==e)&&(s?d(t,"name",{value:e,configurable:!0}):t.name=e),y&&r&&u(r,"arity")&&t.length!==r.arity&&d(t,"length",{value:r.arity});try{r&&u(r,"constructor")&&r.constructor?s&&d(t,"prototype",{writable:!1}):t.prototype&&(t.prototype=void 0)}catch(t){}r=l(t);return u(r,"source")||(r.source=v(b,"string"==typeof e?e:"")),t};Function.prototype.toString=r(function(){return i(this)&&f(this).source||c(this)},"toString")},9021:t=>{"use strict";var e=Math.ceil,r=Math.floor;t.exports=Math.trunc||function(t){t=+t;return(0{"use strict";var n=r(7574),o=TypeError;t.exports=function(t){if(n(t))throw o("The method doesn't accept regular expressions");return t}},9304:(t,e,r)=>{"use strict";var p=r(8494),n=r(7386),d=r(8262),o=r(6544),h=r(5432),_=r(4012),v=r(112),y=r(1324),b=r(5044),i=Object.assign,u=Object.defineProperty,g=n([].concat);t.exports=!i||o(function(){var t,e,r,n;return!(!p||1===i({b:1},i(u({},"a",{enumerable:!0,get:function(){u(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)||(e={},n="abcdefghijklmnopqrst",(t={})[r=Symbol()]=7,n.split("").forEach(function(t){e[t]=t}),7!=i({},t)[r])||h(i({},e)).join("")!=n})?function(t,e){for(var r=y(t),n=arguments.length,o=1,i=_.f,u=v.f;o{"use strict";function n(){}function o(t){t.write(_("")),t.close();var e=t.parentWindow.Object;return t=null,e}var i,u=r(2569),s=r(8728),a=r(5690),c=r(4639),l=r(482),f=r(6668),r=r(9137),p="prototype",d="script",h=r("IE_PROTO"),_=function(t){return"<"+d+">"+t+""},v=function(){try{i=new ActiveXObject("htmlfile")}catch(t){}v="undefined"==typeof document||document.domain&&i?o(i):(t=f("iframe"),e="java"+d+":",t.style.display="none",l.appendChild(t),t.src=String(e),(e=t.contentWindow.document).open(),e.write(_("document.F=Object")),e.close(),e.F);for(var t,e,r=a.length;r--;)delete v[p][a[r]];return v()};c[h]=!0,t.exports=Object.create||function(t,e){var r;return null!==t?(n[p]=u(t),r=new n,n[p]=null,r[h]=t):r=v(),void 0===e?r:s.f(r,e)}},8728:(t,e,r)=>{"use strict";var n=r(8494),o=r(7670),s=r(4615),a=r(2569),c=r(2977),l=r(5432);e.f=n&&!o?Object.defineProperties:function(t,e){a(t);for(var r,n=c(e),o=l(e),i=o.length,u=0;u{"use strict";var n=r(8494),o=r(275),i=r(7670),u=r(2569),s=r(8734),a=TypeError,c=Object.defineProperty,l=Object.getOwnPropertyDescriptor,f="enumerable",p="configurable",d="writable";e.f=n?i?function(t,e,r){var n;return u(t),e=s(e),u(r),"function"==typeof t&&"prototype"===e&&"value"in r&&d in r&&!r[d]&&(n=l(t,e))&&n[d]&&(t[e]=r.value,r={configurable:(p in r?r:n)[p],enumerable:(f in r?r:n)[f],writable:!1}),c(t,e,r)}:c:function(t,e,r){if(u(t),e=s(e),u(r),o)try{return c(t,e,r)}catch(t){}if("get"in r||"set"in r)throw a("Accessors not supported");return"value"in r&&(t[e]=r.value),t}},6683:(t,e,r)=>{"use strict";var n=r(8494),o=r(8262),i=r(112),u=r(4677),s=r(2977),a=r(8734),c=r(2870),l=r(275),f=Object.getOwnPropertyDescriptor;e.f=n?f:function(t,e){if(t=s(t),e=a(e),l)try{return f(t,e)}catch(t){}if(c(t,e))return u(!o(i.f,t,e),t[e])}},3130:(t,e,r)=>{"use strict";var n=r(9624),o=r(2977),i=r(9275).f,u=r(4546),s="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];t.exports.f=function(t){if(!s||"Window"!=n(t))return i(o(t));try{return i(t)}catch(t){return u(s)}}},9275:(t,e,r)=>{"use strict";var n=r(8356),o=r(5690).concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return n(t,o)}},4012:(t,e)=>{"use strict";e.f=Object.getOwnPropertySymbols},729:(t,e,r)=>{"use strict";var n=r(2870),o=r(9212),i=r(1324),u=r(9137),r=r(926),s=u("IE_PROTO"),a=Object,c=a.prototype;t.exports=r?a.getPrototypeOf:function(t){var e,t=i(t);return n(t,s)?t[s]:(e=t.constructor,o(e)&&t instanceof e?e.prototype:t instanceof a?c:null)}},4766:(t,e,r)=>{"use strict";var n=r(6544),o=r(794),i=r(9624),u=r(1537),s=Object.isExtensible,r=n(function(){s(1)});t.exports=r||u?function(t){return!(!o(t)||u&&"ArrayBuffer"==i(t))&&(!s||s(t))}:s},2447:(t,e,r)=>{"use strict";r=r(7386);t.exports=r({}.isPrototypeOf)},8356:(t,e,r)=>{"use strict";var n=r(7386),u=r(2870),s=r(2977),a=r(5766).indexOf,c=r(4639),l=n([].push);t.exports=function(t,e){var r,n=s(t),o=0,i=[];for(r in n)!u(c,r)&&u(n,r)&&l(i,r);for(;e.length>o;)!u(n,r=e[o++])||~a(i,r)||l(i,r);return i}},5432:(t,e,r)=>{"use strict";var n=r(8356),o=r(5690);t.exports=Object.keys||function(t){return n(t,o)}},112:(t,e)=>{"use strict";var r={}.propertyIsEnumerable,n=Object.getOwnPropertyDescriptor,o=n&&!r.call({1:2},1);e.f=o?function(t){t=n(this,t);return!!t&&t.enumerable}:r},7496:(t,e,r)=>{"use strict";var o=r(4523),i=r(2569),u=r(9882);t.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var r,n=!1,t={};try{(r=o(Object.prototype,"__proto__","set"))(t,[]),n=t instanceof Array}catch(t){}return function(t,e){return i(t),u(e),n?r(t,e):t.__proto__=e,t}}():void 0)},3060:(t,e,r)=>{"use strict";var n=r(8191),o=r(3058);t.exports=n?{}.toString:function(){return"[object "+o(this)+"]"}},6252:(t,e,r)=>{"use strict";var o=r(8262),i=r(9212),u=r(794),s=TypeError;t.exports=function(t,e){var r,n;if("string"===e&&i(r=t.toString)&&!u(n=o(r,t)))return n;if(i(r=t.valueOf)&&!u(n=o(r,t)))return n;if("string"!==e&&i(r=t.toString)&&!u(n=o(r,t)))return n;throw s("Can't convert object to primitive value")}},929:(t,e,r)=>{"use strict";var n=r(5897),o=r(7386),i=r(9275),u=r(4012),s=r(2569),a=o([].concat);t.exports=n("Reflect","ownKeys")||function(t){var e=i.f(s(t)),r=u.f;return r?a(e,r(t)):e}},1287:(t,e,r)=>{"use strict";r=r(7583);t.exports=r},8445:(t,e,r)=>{"use strict";var h=r(8262),n=r(7386),_=r(8320),v=r(1118),o=r(5230),i=r(7836),y=r(3590),b=r(2743).get,u=r(4121),r=r(1712),g=i("native-string-replace",String.prototype.replace),m=RegExp.prototype.exec,x=m,w=n("".charAt),S=n("".indexOf),O=n("".replace),E=n("".slice),k=(i=/b*/g,h(m,n=/a/,"a"),h(m,i,"a"),0!==n.lastIndex||0!==i.lastIndex),j=o.BROKEN_CARET,T=void 0!==/()??/.exec("")[1];(k||T||j||u||r)&&(x=function(t){var e,r,n,o,i,u,s=this,a=b(s),t=_(t),c=a.raw;if(c)return c.lastIndex=s.lastIndex,f=h(x,c,t),s.lastIndex=c.lastIndex,f;var l=a.groups,c=j&&s.sticky,f=h(v,s),a=s.source,p=0,d=t;if(c&&(f=O(f,"y",""),-1===S(f,"g")&&(f+="g"),d=E(t,s.lastIndex),0{"use strict";var n=r(2569);t.exports=function(){var t=n(this),e="";return t.hasIndices&&(e+="d"),t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.dotAll&&(e+="s"),t.unicode&&(e+="u"),t.unicodeSets&&(e+="v"),t.sticky&&(e+="y"),e}},640:(t,e,r)=>{"use strict";var n=r(8262),o=r(2870),i=r(2447),u=r(1118),s=RegExp.prototype;t.exports=function(t){var e=t.flags;return void 0!==e||"flags"in s||o(t,"flags")||!i(s,t)?e:n(u,t)}},5230:(t,e,r)=>{"use strict";var n=r(6544),o=r(7583).RegExp,r=n(function(){var t=o("a","y");return t.lastIndex=2,null!=t.exec("abcd")}),i=r||n(function(){return!o("a","y").sticky}),n=r||n(function(){var t=o("^r","gy");return t.lastIndex=2,null!=t.exec("str")});t.exports={BROKEN_CARET:n,MISSED_STICKY:i,UNSUPPORTED_Y:r}},4121:(t,e,r)=>{"use strict";var n=r(6544),o=r(7583).RegExp;t.exports=n(function(){var t=o(".","s");return!(t.dotAll&&t.exec("\n")&&"s"===t.flags)})},1712:(t,e,r)=>{"use strict";var n=r(6544),o=r(7583).RegExp;t.exports=n(function(){var t=o("(?b)","g");return"b"!==t.exec("b").groups.a||"bc"!=="b".replace(t,"$c")})},3955:(t,e,r)=>{"use strict";var n=r(8505),o=TypeError;t.exports=function(t){if(n(t))throw o("Can't call method on "+t);return t}},8821:(t,e,r)=>{"use strict";var n=r(4615).f,o=r(2870),i=r(3649)("toStringTag");t.exports=function(t,e,r){(t=t&&!r?t.prototype:t)&&!o(t,i)&&n(t,i,{configurable:!0,value:e})}},9137:(t,e,r)=>{"use strict";var n=r(7836),o=r(8284),i=n("keys");t.exports=function(t){return i[t]||(i[t]=o(t))}},1314:(t,e,r)=>{"use strict";var n=r(7583),r=r(2296),o="__core-js_shared__",n=n[o]||r(o,{});t.exports=n},7836:(t,e,r)=>{"use strict";var n=r(6268),o=r(1314);(t.exports=function(t,e){return o[t]||(o[t]=void 0!==e?e:{})})("versions",[]).push({version:"3.32.0",mode:n?"pure":"global",copyright:"© 2014-2023 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.32.0/LICENSE",source:"https://github.com/zloirock/core-js"})},6389:(t,e,r)=>{"use strict";function n(o){return function(t,e){var r,t=u(s(t)),e=i(e),n=t.length;return e<0||n<=e?o?"":void 0:(r=c(t,e))<55296||56319{"use strict";var n=r(4061),o=r(6544),i=r(7583).String;t.exports=!!Object.getOwnPropertySymbols&&!o(function(){var t=Symbol();return!i(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&n&&n<41})},8369:(t,e,r)=>{"use strict";var n=r(8262),o=r(5897),i=r(3649),u=r(3746);t.exports=function(){var t=o("Symbol"),t=t&&t.prototype,e=t&&t.valueOf,r=i("toPrimitive");t&&!t[r]&&u(t,r,function(t){return n(e,this)},{arity:1})}},2471:(t,e,r)=>{"use strict";r=r(4193);t.exports=r&&!!Symbol.for&&!!Symbol.keyFor},6782:(t,e,r)=>{"use strict";var n=r(7486),o=Math.max,i=Math.min;t.exports=function(t,e){t=n(t);return t<0?o(t+e,0):i(t,e)}},2977:(t,e,r)=>{"use strict";var n=r(5044),o=r(3955);t.exports=function(t){return n(o(t))}},7486:(t,e,r)=>{"use strict";var n=r(9021);t.exports=function(t){t=+t;return t!=t||0==t?0:n(t)}},97:(t,e,r)=>{"use strict";var n=r(7486),o=Math.min;t.exports=function(t){return 0{"use strict";var n=r(3955),o=Object;t.exports=function(t){return o(n(t))}},2670:(t,e,r)=>{"use strict";var n=r(8262),o=r(794),i=r(5871),u=r(911),s=r(6252),r=r(3649),a=TypeError,c=r("toPrimitive");t.exports=function(t,e){if(!o(t)||i(t))return t;var r=u(t,c);if(r){if(r=n(r,t,e=void 0===e?"default":e),!o(r)||i(r))return r;throw a("Can't convert object to primitive value")}return s(t,e=void 0===e?"number":e)}},8734:(t,e,r)=>{"use strict";var n=r(2670),o=r(5871);t.exports=function(t){t=n(t,"string");return o(t)?t:t+""}},8191:(t,e,r)=>{"use strict";var n={};n[r(3649)("toStringTag")]="z",t.exports="[object z]"===String(n)},8320:(t,e,r)=>{"use strict";var n=r(3058),o=String;t.exports=function(t){if("Symbol"===n(t))throw TypeError("Cannot convert a Symbol value to a string");return o(t)}},5637:t=>{"use strict";var e=String;t.exports=function(t){try{return e(t)}catch(t){return"Object"}}},8284:(t,e,r)=>{"use strict";var r=r(7386),n=0,o=Math.random(),i=r(1..toString);t.exports=function(t){return"Symbol("+(void 0===t?"":t)+")_"+i(++n+o,36)}},7786:(t,e,r)=>{"use strict";r=r(4193);t.exports=r&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},7670:(t,e,r)=>{"use strict";var n=r(8494),r=r(6544);t.exports=n&&r(function(){return 42!=Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype})},5307:(t,e,r)=>{"use strict";var n=r(7583),r=r(9212),n=n.WeakMap;t.exports=r(n)&&/native code/.test(String(n))},1513:(t,e,r)=>{"use strict";var n=r(1287),o=r(2870),i=r(491),u=r(4615).f;t.exports=function(t){var e=n.Symbol||(n.Symbol={});o(e,t)||u(e,t,{value:i.f(t)})}},491:(t,e,r)=>{"use strict";r=r(3649);e.f=r},3649:(t,e,r)=>{"use strict";var n=r(7583),o=r(7836),i=r(2870),u=r(8284),s=r(4193),r=r(7786),a=n.Symbol,c=o("wks"),l=r?a.for||a:a&&a.withoutSetter||u;t.exports=function(t){return i(c,t)||(c[t]=s&&i(a,t)?a[t]:l("Symbol."+t)),c[t]}},5680:(t,e,r)=>{"use strict";var n=r(7263),r=r(3200);n({target:"Array",proto:!0,forced:[].forEach!=r},{forEach:r})},3675:(t,e,r)=>{"use strict";var n=r(7263),o=r(5513);n({target:"Array",stat:!0,forced:!r(3616)(function(t){Array.from(t)})},{from:o})},2076:(t,e,r)=>{"use strict";var n=r(7263),o=r(5766).includes,i=r(6544),r=r(6288);n({target:"Array",proto:!0,forced:i(function(){return!Array(1).includes()})},{includes:function(t){return o(this,t,1{"use strict";var n=r(7263),o=r(6887),i=r(5766).indexOf,r=r(906),u=o([].indexOf),s=!!u&&1/u([1],1,-0)<0;n({target:"Array",proto:!0,forced:s||!r("indexOf")},{indexOf:function(t){var e=1{"use strict";r(7263)({target:"Array",stat:!0},{isArray:r(4521)})},5677:(t,e,r)=>{"use strict";var n=r(2977),o=r(6288),i=r(339),u=r(2743),s=r(4615).f,a=r(59),c=r(1002),l=r(6268),r=r(8494),f="Array Iterator",p=u.set,d=u.getterFor(f),u=(t.exports=a(Array,"Array",function(t,e){p(this,{type:f,target:n(t),index:0,kind:e})},function(){var t=d(this),e=t.target,r=t.kind,n=t.index++;return!e||n>=e.length?(t.target=void 0,c(void 0,!0)):c("keys"==r?n:"values"==r?e[n]:[n,e[n]],!1)},"values"),i.Arguments=i.Array);if(o("keys"),o("values"),o("entries"),!l&&r&&"values"!==u.name)try{s(u,"name",{value:"values"})}catch(t){}},2070:(t,e,r)=>{"use strict";var n=r(7263),o=r(4805).map;n({target:"Array",proto:!0,forced:!r(9269)("map")},{map:function(t){return o(this,t,1{"use strict";var n=r(7263),c=r(4521),l=r(2097),f=r(794),p=r(6782),d=r(1825),h=r(2977),_=r(5999),o=r(3649),i=r(9269),v=r(6917),r=i("slice"),y=o("species"),b=Array,g=Math.max;n({target:"Array",proto:!0,forced:!r},{slice:function(t,e){var r,n,o,i=h(this),u=d(i),s=p(t,u),a=p(void 0===e?u:e,u);if(c(i)&&(r=i.constructor,(r=l(r)&&(r===b||c(r.prototype))||f(r)&&null===(r=r[y])?void 0:r)===b||void 0===r))return v(i,s,a);for(n=new(void 0===r?b:r)(g(a-s,0)),o=0;s{"use strict";var n=r(7263),f=r(1324),p=r(6782),d=r(7486),h=r(1825),_=r(8173),v=r(6768),y=r(4822),b=r(5999),g=r(7774),r=r(9269)("splice"),m=Math.max,x=Math.min;n({target:"Array",proto:!0,forced:!r},{splice:function(t,e){var r,n,o,i,u,s,a=f(this),c=h(a),l=p(t,c),t=arguments.length;for(0===t?r=n=0:n=1===t?(r=0,c-l):(r=t-2,x(m(d(e),0),c-l)),v(c+r-n),o=y(a,n),i=0;i{"use strict";var n=r(7386),r=r(3746),o=Date.prototype,i="Invalid Date",u="toString",s=n(o[u]),a=n(o.getTime);String(new Date(NaN))!=i&&r(o,u,function(){var t=a(this);return t==t?s(this):i})},7469:(t,e,r)=>{"use strict";var n=r(7263),r=r(1335);n({target:"Function",proto:!0,forced:Function.bind!==r},{bind:r})},4458:(t,e,r)=>{"use strict";var n=r(8494),o=r(4340).EXISTS,i=r(7386),r=r(2499),u=Function.prototype,s=i(u.toString),a=/function\b(?:\s|\/\*[\S\s]*?\*\/|\/\/[^\n\r]*[\n\r]+)*([^\s(/]*)/,c=i(a.exec);n&&!o&&r(u,"name",{configurable:!0,get:function(){try{return c(a,s(this))[1]}catch(t){return""}}})},4415:(t,e,r)=>{"use strict";function o(t,e){var r=d(arguments),n=h(e);if(f(n)||void 0!==t&&!p(t))return r[1]=function(t,e){if(f(n)&&(e=a(n,this,_(t),e)),!p(e))return e},s(v,null,r)}function i(t,e,r){var n=b(r,e-1),r=b(r,e+1);return y(S,t)&&!y(O,r)||y(O,t)&&!y(S,n)?"\\u"+x(g(t,0),16):t}var n=r(7263),u=r(5897),s=r(1611),a=r(8262),c=r(7386),l=r(6544),f=r(9212),p=r(5871),d=r(6917),h=r(2627),r=r(4193),_=String,v=u("JSON","stringify"),y=c(/./.exec),b=c("".charAt),g=c("".charCodeAt),m=c("".replace),x=c(1..toString),w=/[\uD800-\uDFFF]/g,S=/^[\uD800-\uDBFF]$/,O=/^[\uDC00-\uDFFF]$/,E=!r||l(function(){var t=u("Symbol")();return"[null]"!=v([t])||"{}"!=v({a:t})||"{}"!=v(Object(t))}),k=l(function(){return'"\\udf06\\ud834"'!==v("\udf06\ud834")||'"\\udead"'!==v("\udead")});v&&n({target:"JSON",stat:!0,arity:3,forced:E||k},{stringify:function(t,e,r){var n=d(arguments),n=s(E?o:v,null,n);return k&&"string"==typeof n?m(n,w,i):n}})},4517:(t,e,r)=>{"use strict";var n=r(7263),r=r(9304);n({target:"Object",stat:!0,arity:2,forced:Object.assign!==r},{assign:r})},4649:(t,e,r)=>{"use strict";var n=r(7263),o=r(8494),r=r(4615).f;n({target:"Object",stat:!0,forced:Object.defineProperty!==r,sham:!o},{defineProperty:r})},1626:(t,e,r)=>{"use strict";var n=r(7263),o=r(4193),i=r(6544),u=r(4012),s=r(1324);n({target:"Object",stat:!0,forced:!o||i(function(){u.f(1)})},{getOwnPropertySymbols:function(t){var e=u.f;return e?e(s(t)):[]}})},6394:(t,e,r)=>{"use strict";var n=r(8191),o=r(3746),r=r(3060);n||o(Object.prototype,"toString",r,{unsafe:!0})},3080:(t,e,r)=>{"use strict";var n=r(7263),o=r(5897),i=r(1611),u=r(1335),s=r(1186),a=r(2569),c=r(794),l=r(3590),r=r(6544),f=o("Reflect","construct"),p=Object.prototype,d=[].push,h=r(function(){function t(){}return!(f(function(){},[],t)instanceof t)}),_=!r(function(){f(function(){})}),o=h||_;n({target:"Reflect",stat:!0,forced:o,sham:o},{construct:function(t,e){s(t),a(e);var r=arguments.length<3?t:s(arguments[2]);if(_&&!h)return f(t,e,r);if(t==r){switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3])}var n=[null];return i(d,n,e),new(i(u,t,n))}n=r.prototype,r=l(c(n)?n:p),n=i(t,r,e);return c(n)?n:r}})},2322:(t,e,r)=>{"use strict";var n=r(7263),r=r(8445);n({target:"RegExp",proto:!0,forced:/./.exec!==r},{exec:r})},4669:(t,e,r)=>{"use strict";var n=r(4340).PROPER,o=r(3746),i=r(2569),u=r(8320),s=r(6544),a=r(640),r="toString",c=RegExp.prototype[r],s=s(function(){return"/a/b"!=c.call({source:"a",flags:"b"})}),n=n&&c.name!=r;(s||n)&&o(RegExp.prototype,r,function(){var t=i(this);return"/"+u(t.source)+"/"+u(a(t))},{unsafe:!0})},7723:(t,e,r)=>{"use strict";var n=r(7263),o=r(7386),i=r(9041),u=r(3955),s=r(8320),r=r(3989),a=o("".indexOf);n({target:"String",proto:!0,forced:!r("includes")},{includes:function(t){return!!~a(s(u(this)),s(i(t)),1{"use strict";var n=r(6389).charAt,o=r(8320),i=r(2743),u=r(59),s=r(1002),a="String Iterator",c=i.set,l=i.getterFor(a);u(String,"String",function(t){c(this,{type:a,string:o(t),index:0})},function(){var t=l(this),e=t.string,r=t.index;return r>=e.length?s(void 0,!0):(e=n(e,r),t.index+=e.length,s(e,!1))})},7802:(D,F,t)=>{"use strict";function n(t,e){var r=P[t]=b(A);return rt(r,{type:T,tag:t,description:e}),f||(r.description=e),r}function o(t,e,r){return t===M&&o(R,e,r),h(t),e=v(e),h(r),(d(P,e)?(r.enumerable?(d(t,j)&&t[j][e]&&(t[j][e]=!1),r=b(r,{enumerable:y(0,!1)})):(d(t,j)||C(t,j,y(1,{})),t[j][e]=!0),N):C)(t,e,r)}function r(e,t){h(e);var r=_(t),t=g(r).concat(s(r));return k(t,function(t){f&&!l(i,r,t)||o(e,t,r[t])}),e}function i(t){var t=v(t),e=l(st,this,t);return!(this===M&&d(P,t)&&!d(R,t))&&(!(e||!d(this,t)||!d(P,t)||d(this,j)&&this[j][t])||e)}function e(t,e){var r,t=_(t),e=v(e);if(t!==M||!d(P,e)||d(R,e))return!(r=it(t,e))||!d(P,e)||d(t,j)&&t[j][e]||(r.enumerable=!0),r}function u(t){var t=ut(_(t)),e=[];return k(t,function(t){d(P,t)||d(J,t)||at(e,t)}),e}function s(t){var e=t===M,t=ut(e?R:_(t)),r=[];return k(t,function(t){!d(P,t)||e&&!d(M,t)||at(r,P[t])}),r}var a=t(7263),c=t(7583),l=t(8262),L=t(7386),W=t(6268),f=t(8494),p=t(4193),H=t(6544),d=t(2870),V=t(2447),h=t(2569),_=t(2977),v=t(8734),U=t(8320),y=t(4677),b=t(3590),g=t(5432),z=t(9275),m=t(3130),B=t(4012),x=t(6683),G=t(4615),X=t(8728),q=t(112),w=t(3746),$=t(2499),S=t(7836),O=t(9137),J=t(4639),K=t(8284),Y=t(3649),Q=t(491),Z=t(1513),tt=t(8369),et=t(8821),E=t(2743),k=t(4805).forEach,j=O("hidden"),T="Symbol",t="prototype",rt=E.set,nt=E.getterFor(T),M=Object[t],O=c.Symbol,A=O&&O[t],ot=c.TypeError,E=c.QObject,it=x.f,C=G.f,ut=m.f,st=q.f,at=L([].push),P=S("symbols"),R=S("op-symbols"),c=S("wks"),I=!E||!E[t]||!E[t].findChild,N=f&&H(function(){return 7!=b(C({},"a",{get:function(){return C(this,"a",{value:7}).a}})).a})?function(t,e,r){var n=it(M,e);n&&delete M[e],C(t,e,r),n&&t!==M&&C(M,e,n)}:C;p||(w(A=(O=function(){if(V(A,this))throw ot("Symbol is not a constructor");var t=arguments.length&&void 0!==arguments[0]?U(arguments[0]):void 0,e=K(t),r=function(t){this===M&&l(r,R,t),d(this,j)&&d(this[j],e)&&(this[j][e]=!1),N(this,e,y(1,t))};return f&&I&&N(M,e,{configurable:!0,set:r}),n(e,t)})[t],"toString",function(){return nt(this).tag}),w(O,"withoutSetter",function(t){return n(K(t),t)}),q.f=i,G.f=o,X.f=r,x.f=e,z.f=m.f=u,B.f=s,Q.f=function(t){return n(Y(t),t)},f&&($(A,"description",{configurable:!0,get:function(){return nt(this).description}}),W||w(M,"propertyIsEnumerable",i,{unsafe:!0}))),a({global:!0,constructor:!0,wrap:!0,forced:!p,sham:!p},{Symbol:O}),k(g(c),function(t){Z(t)}),a({target:T,stat:!0,forced:!p},{useSetter:function(){I=!0},useSimple:function(){I=!1}}),a({target:"Object",stat:!0,forced:!p,sham:!f},{create:function(t,e){return void 0===e?b(t):r(b(t),e)},defineProperty:o,defineProperties:r,getOwnPropertyDescriptor:e}),a({target:"Object",stat:!0,forced:!p},{getOwnPropertyNames:u}),tt(),et(O,T),J[j]=!0},8407:(t,e,r)=>{"use strict";var n,o,i,u,s,a,c,l=r(7263),f=r(8494),p=r(7583),d=r(7386),h=r(2870),_=r(9212),v=r(2447),y=r(8320),b=r(2499),r=r(3478),g=p.Symbol,m=g&&g.prototype;!f||!_(g)||"description"in m&&void 0===g().description||(n={},r(p=function(){var t=arguments.length<1||void 0===arguments[0]?void 0:y(arguments[0]),e=v(m,this)?new g(t):void 0===t?g():g(t);return""===t&&(n[e]=!0),e},g),(p.prototype=m).constructor=p,o="Symbol(test)"==String(g("test")),i=d(m.valueOf),u=d(m.toString),s=/^Symbol\((.*)\)[^)]+$/,a=d("".replace),c=d("".slice),b(m,"description",{configurable:!0,get:function(){var t=i(this);return h(n,t)?"":(t=u(t),""===(t=o?c(t,7,-1):a(t,s,"$1"))?void 0:t)}}),l({global:!0,constructor:!0,forced:!0},{Symbol:p}))},113:(t,e,r)=>{"use strict";var n=r(7263),o=r(5897),i=r(2870),u=r(8320),s=r(7836),r=r(2471),a=s("string-to-symbol-registry"),c=s("symbol-to-string-registry");n({target:"Symbol",stat:!0,forced:!r},{for:function(t){var e,t=u(t);return i(a,t)?a[t]:(e=o("Symbol")(t),a[t]=e,c[e]=t,e)}})},8288:(t,e,r)=>{"use strict";r(1513)("iterator")},2004:(t,e,r)=>{"use strict";r(7802),r(113),r(3385),r(4415),r(1626)},3385:(t,e,r)=>{"use strict";var n=r(7263),o=r(2870),i=r(5871),u=r(5637),s=r(7836),r=r(2471),a=s("symbol-to-string-registry");n({target:"Symbol",stat:!0,forced:!r},{keyFor:function(t){if(!i(t))throw TypeError(u(t)+" is not a symbol");if(o(a,t))return a[t]}})},4543:(t,e,r)=>{"use strict";function n(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}var o,i,u,s,a=r(9974),c=r(7583),l=r(7386),f=r(3705),p=r(1909),d=r(4802),h=r(7012),_=r(794),v=r(2743).enforce,y=r(6544),r=r(5307),b=Object,g=Array.isArray,m=b.isExtensible,x=b.isFrozen,w=b.isSealed,S=b.freeze,O=b.seal,E={},k={},b=!c.ActiveXObject&&"ActiveXObject"in c,j=d("WeakMap",n,h),c=j.prototype,T=l(c.set);r&&(b?(o=h.getConstructor(n,"WeakMap",!0),p.enable(),i=l(c.delete),u=l(c.has),s=l(c.get),f(c,{delete:function(t){var e;return _(t)&&!m(t)?((e=v(this)).frozen||(e.frozen=new o),i(this,t)||e.frozen.delete(t)):i(this,t)},has:function(t){var e;return _(t)&&!m(t)?((e=v(this)).frozen||(e.frozen=new o),u(this,t)||e.frozen.has(t)):u(this,t)},get:function(t){var e;return!_(t)||m(t)||((e=v(this)).frozen||(e.frozen=new o),u(this,t))?s(this,t):e.frozen.get(t)},set:function(t,e){var r;return!_(t)||m(t)||((r=v(this)).frozen||(r.frozen=new o),u(this,t))?T(this,t,e):r.frozen.set(t,e),this}})):a&&y(function(){var t=S([]);return T(new j,t,1),!x(t)})&&f(c,{set:function(t,e){var r;return g(t)&&(x(t)?r=E:w(t)&&(r=k)),T(this,t,e),r==E&&S(t),r==k&&O(t),this}}))},1770:(t,e,r)=>{"use strict";r(4543)},3896:(t,e,r)=>{"use strict";r(4802)("WeakSet",function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}},r(7012))},435:(t,e,r)=>{"use strict";r(3896)},5090:(t,e,r)=>{"use strict";function n(e){if(e&&e.forEach!==a)try{c(e,"forEach",a)}catch(t){e.forEach=a}}var o,i=r(7583),u=r(6778),s=r(9307),a=r(3200),c=r(57);for(o in u)u[o]&&n(i[o]&&i[o].prototype);n(s)},4655:(t,e,r)=>{"use strict";function n(e,t){if(e){if(e[l]!==p)try{c(e,l,p)}catch(t){e[l]=p}if(e[f]||c(e,f,t),u[t])for(var r in a)if(e[r]!==a[r])try{c(e,r,a[r])}catch(t){e[r]=a[r]}}}var o,i=r(7583),u=r(6778),s=r(9307),a=r(5677),c=r(57),r=r(3649),l=r("iterator"),f=r("toStringTag"),p=a.values;for(o in u)n(i[o]&&i[o].prototype,o);n(s,"DOMTokenList")},2542:()=>{function u(t){this.i=[],this.m=t}function g(t){var e,r={type:null,target:null,addedNodes:[],removedNodes:[],previousSibling:null,nextSibling:null,attributeName:null,attributeNamespace:null,oldValue:null};for(e in t)r[e]!==S&&t[e]!==S&&(r[e]=t[e]);return r}function s(n,o){var i=a(n,o);return function(t){var e,h,_,v,r=t.length;function y(t,e,r,n,o){var i,u,s,a=t.length-1;for(o=-~((a-o)/2);s=t.pop();)i=r[s.j],u=n[s.l],_.c&&o&&Math.abs(s.j-s.l)>=a&&(h.push(g({type:"childList",target:e,addedNodes:[i],removedNodes:[i],nextSibling:i.nextSibling,previousSibling:i.previousSibling})),o--),_.b&&u.b&&m(h,i,u.b,_.f),_.a&&3===i.nodeType&&i.nodeValue!==u.a&&h.push(g({type:"characterData",target:i,oldValue:u.a})),_.g&&b(i,u)}function b(t,e){for(var r,n,o,i,u,s=t.childNodes,a=e.c,c=s.length,l=a?a.length:0,f=0,p=0,d=0;p{"use strict";e.r(t),e.d(t,{Component:()=>R,Fragment:()=>P,cloneElement:()=>function(t,e,r){var n,o,i,u,s=A({},t.props);for(i in t.type&&t.type.defaultProps&&(u=t.type.defaultProps),e)"key"==i?n=e[i]:"ref"==i?o=e[i]:s[i]=(void 0===e[i]&&void 0!==u?u:e)[i];return 2function(t,n){t={__c:n="__cC"+u++,__:t,Consumer:function(t,e){return t.children(e)},Provider:function(t){var r,e;return this.getChildContext||(r=[],((e={})[n]=this).getChildContext=function(){return e},this.shouldComponentUpdate=function(t){this.props.value!==t.value&&r.some(function(t){t.__e=!0,f(t)})},this.sub=function(t){r.push(t);var e=t.componentWillUnmount;t.componentWillUnmount=function(){r.splice(r.indexOf(t),1),e&&e.call(t)}}),t.children}};return t.Provider.__=t.Consumer.contextType=t},createElement:()=>l,createRef:()=>function(){return{current:null}},h:()=>l,hydrate:()=>b,isValidElement:()=>r,options:()=>j,render:()=>y,toChildArray:()=>function e(t,r){return r=r||[],null!=t&&"boolean"!=typeof t&&(M(t)?t.some(function(t){e(t,r)}):r.push(t)),r}});var k,j,i,r,a,n,o,c,u,T={},O=[],s=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,M=Array.isArray;function A(t,e){for(var r in e)t[r]=e[r];return t}function C(t){var e=t.parentNode;e&&e.removeChild(t)}function l(t,e,r){var n,o,i,u={};for(i in e)"key"==i?n=e[i]:"ref"==i?o=e[i]:u[i]=e[i];if(2t)&&a.sort(c);p.__r=0}function N(t,e,r,n,o,i,u,s,a,c,l){var f,p,d,h,_,v,y,b,g,m=0,x=n&&n.__k||O,n=x.length,w=n,S=e.length;for(r.__k=[],f=0;f{"use strict";r.r(e),r.d(e,{useCallback:()=>function(t,e){return u=8,m(function(){return t},e)},useContext:()=>function(t){var e=c.context[t.__c],r=v(a++,9);return r.c=t,e?(null==r.__&&(r.__=!0,e.sub(c)),e.props.value):t.__},useDebugValue:()=>function(t,e){i.options.useDebugValue&&i.options.useDebugValue(e?e(t):t)},useEffect:()=>function(t,e){var r=v(a++,3);!i.options.__s&&E(r.__H,e)&&(r.__=t,r.i=e,c.__H.__h.push(r))},useErrorBoundary:()=>function(t){var r=v(a++,10),n=y();return r.__=t,c.componentDidCatch||(c.componentDidCatch=function(t,e){r.__&&r.__(t,e),n[1](t)}),[n[0],function(){n[1](void 0)}]},useId:()=>function(){var t=v(a++,11);if(!t.__){for(var e=c.__v;null!==e&&!e.__m&&null!==e.__;)e=e.__;var r=e.__m||(e.__m=[0,0]);t.__="P"+r[0]+"-"+r[1]++}return t.__},useImperativeHandle:()=>function(t,e,r){u=6,g(function(){return"function"==typeof t?(t(e()),function(){return t(null)}):t?(t.current=e(),function(){return t.current=null}):void 0},null==r?r:r.concat(t))},useLayoutEffect:()=>g,useMemo:()=>m,useReducer:()=>b,useRef:()=>function(t){return u=5,m(function(){return{current:t}},[])},useState:()=>y});var a,c,n,o,i=r(2315),u=0,s=[],l=[],f=i.options.__b,p=i.options.__r,d=i.options.diffed,h=i.options.__c,_=i.options.unmount;function v(t,e){i.options.__h&&i.options.__h(c,t,u||e),u=0;e=c.__H||(c.__H={__:[],__h:[]});return t>=e.__.length&&e.__.push({__V:l}),e.__[t]}function y(t){return u=1,b(k,t)}function b(t,e,r){var o,i,u,s=v(a++,2);return s.t=t,s.__c||(s.__=[r?r(e):k(void 0,e),function(t){var e=(s.__N||s.__)[0],t=s.t(e,t);e!==t&&(s.__N=[t,s.__[1]],s.__c.setState({}))}],(s.__c=c).u)||(o=function(t,e,r){var n,o;return!s.__c.__H||((n=s.__c.__H.__.filter(function(t){return t.__c})).every(function(t){return!t.__N})||(o=!1,n.forEach(function(t){var e;t.__N&&(e=t.__[0],t.__=t.__N,t.__N=void 0,e!==t.__[0])&&(o=!0)}),!(!o&&s.__c.props===t)))&&(!i||i.call(this,t,e,r))},c.u=!0,i=c.shouldComponentUpdate,u=c.componentWillUpdate,c.componentWillUpdate=function(t,e,r){var n;this.__e&&(n=i,i=void 0,o(t,e,r),i=n),u&&u.call(this,t,e,r)},c.shouldComponentUpdate=o),s.__N||s.__}function g(t,e){var r=v(a++,4);!i.options.__s&&E(r.__H,e)&&(r.__=t,r.i=e,c.__h.push(r))}function m(t,e){var r=v(a++,7);return E(r.__H,e)?(r.__V=t(),r.i=e,r.__h=t,r.__V):r.__}function x(){for(var e;e=s.shift();)if(e.__P&&e.__H)try{e.__H.__h.forEach(S),e.__H.__h.forEach(O),e.__H.__h=[]}catch(t){e.__H.__h=[],i.options.__e(t,e.__v)}}i.options.__b=function(t){c=null,f&&f(t)},i.options.__r=function(t){p&&p(t),a=0;t=(c=t.__c).__H;t&&(n===c?(t.__h=[],c.__h=[],t.__.forEach(function(t){t.__N&&(t.__=t.__N),t.__V=l,t.__N=t.i=void 0})):(t.__h.forEach(S),t.__h.forEach(O),t.__h=[],a=0)),n=c},i.options.diffed=function(t){d&&d(t);t=t.__c;t&&t.__H&&(!t.__H.__h.length||1!==s.push(t)&&o===i.options.requestAnimationFrame||((o=i.options.requestAnimationFrame)||function(t){function e(){clearTimeout(n),w&&cancelAnimationFrame(r),setTimeout(t)}var r,n=setTimeout(e,100);w&&(r=requestAnimationFrame(e))})(x),t.__H.__.forEach(function(t){t.i&&(t.__H=t.i),t.__V!==l&&(t.__=t.__V),t.i=void 0,t.__V=l})),n=c=null},i.options.__c=function(t,r){r.some(function(e){try{e.__h.forEach(S),e.__h=e.__h.filter(function(t){return!t.__||O(t)})}catch(t){r.some(function(t){t.__h&&(t.__h=[])}),r=[],i.options.__e(t,e.__v)}}),h&&h(t,r)},i.options.unmount=function(t){_&&_(t);var e,t=t.__c;t&&t.__H&&(t.__H.__.forEach(function(t){try{S(t)}catch(t){e=t}}),t.__H=void 0,e)&&i.options.__e(e,t.__v)};var w="function"==typeof requestAnimationFrame;function S(t){var e=c,r=t.__c;"function"==typeof r&&(t.__c=void 0,r()),c=e}function O(t){var e=c;t.__c=t.__(),c=e}function E(r,t){return!r||r.length!==t.length||t.some(function(t,e){return t!==r[e]})}function k(t,e){return"function"==typeof e?e(t):e}},4158:(t,e,r)=>{"use strict";r.r(e),r.d(e,{default:()=>A});var n="undefined"!=typeof Map?Map:(Object.defineProperty(o.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),o.prototype.get=function(t){t=i(this.__entries__,t),t=this.__entries__[t];return t&&t[1]},o.prototype.set=function(t,e){var r=i(this.__entries__,t);~r?this.__entries__[r][1]=e:this.__entries__.push([t,e])},o.prototype.delete=function(t){var e=this.__entries__,t=i(e,t);~t&&e.splice(t,1)},o.prototype.has=function(t){return!!~i(this.__entries__,t)},o.prototype.clear=function(){this.__entries__.splice(0)},o.prototype.forEach=function(t,e){void 0===e&&(e=null);for(var r=0,n=this.__entries__;r{"use strict";r(4649),Object.defineProperty(e,"__esModule",{value:!0}),e.errorMsg=e.Status=e.LogType=void 0;e.errorMsg={compIdParseErr:"[jsFrame]: parse compId is error"},e.Status={inited:{valueOf:function(){return 0},label:"inited",msg:"instance node initiated"},connected:{valueOf:function(){return 1},label:"connected",msg:"instance node connected to document"},loaded:{valueOf:function(){return 2},label:"loaded",msg:"component loaded"},rendered:{valueOf:function(){return 3},label:"rendered",msg:"component rendered"}};e.LogType={normal:{desc:"normal log",prefix:"normal"},readyState:{desc:"readyState log",prefix:"readyState"},stage:{desc:"flow of execution",prefix:"stage"},init:{desc:"init log",isLog:!0,prefix:"init"},observeInit:{desc:"observe initialization",pType:"init",prefix:"observeInit"},eventInit:{desc:"custom event initialization",pType:"init",prefix:"eventInit"},error:{desc:"error tips",isLog:!0,prefix:"error"},xComponent:{desc:"about xComponent",prefix:"xComponent"}}},2143:t=>{t.exports=function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t},t.exports.__esModule=!0,t.exports.default=t.exports},660:t=>{t.exports=function(t,e){return e.get?e.get.call(t):e.value},t.exports.__esModule=!0,t.exports.default=t.exports},8093:t=>{t.exports=function(t,e,r){if(e.set)e.set.call(t,r);else{if(!e.writable)throw new TypeError("attempted to set read only private field");e.value=r}},t.exports.__esModule=!0,t.exports.default=t.exports},7296:t=>{t.exports=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},t.exports.__esModule=!0,t.exports.default=t.exports},4434:t=>{t.exports=function(t,e,r){if(e.has(t))return e.get(t);throw new TypeError("attempted to "+r+" private field on non-instance")},t.exports.__esModule=!0,t.exports.default=t.exports},6383:(t,e,r)=>{var n=r(660),o=r(4434);t.exports=function(t,e){return e=o(t,e,"get"),n(t,e)},t.exports.__esModule=!0,t.exports.default=t.exports},2508:(t,e,r)=>{var n=r(8093),o=r(4434);t.exports=function(t,e,r){return e=o(t,e,"set"),n(t,e,r),r},t.exports.__esModule=!0,t.exports.default=t.exports},924:(n,t,e)=>{var o=e(1595),i=e(9195);function u(t,e,r){return i()?n.exports=u=Reflect.construct.bind():n.exports=u=function(t,e,r){var n=[null];n.push.apply(n,e);e=new(Function.bind.apply(t,n));return r&&o(e,r.prototype),e},n.exports.__esModule=!0,n.exports.default=n.exports,u.apply(null,arguments)}n.exports=u,n.exports.__esModule=!0,n.exports.default=n.exports},2e3:(t,e,r)=>{var o=r(7616);function n(t,e){for(var r=0;r{function r(t){return e.exports=r=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},e.exports.__esModule=!0,e.exports.default=e.exports,r(t)}e.exports=r,e.exports.__esModule=!0,e.exports.default=e.exports},4626:(t,e,r)=>{var n=r(1595);t.exports=function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&n(t,e)},t.exports.__esModule=!0,t.exports.default=t.exports},8135:t=>{t.exports=function(t){return t&&t.__esModule?t:{default:t}},t.exports.__esModule=!0,t.exports.default=t.exports},1381:t=>{t.exports=function(t){return-1!==Function.toString.call(t).indexOf("[native code]")},t.exports.__esModule=!0,t.exports.default=t.exports},9195:t=>{t.exports=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}},t.exports.__esModule=!0,t.exports.default=t.exports},1803:(t,e,r)=>{var n=r(5486).default,o=r(2143);t.exports=function(t,e){if(e&&("object"===n(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return o(t)},t.exports.__esModule=!0,t.exports.default=t.exports},1595:r=>{function n(t,e){return r.exports=n=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},r.exports.__esModule=!0,r.exports.default=r.exports,n(t,e)}r.exports=n,r.exports.__esModule=!0,r.exports.default=r.exports},9772:(t,e,r)=>{var n=r(5486).default;t.exports=function(t,e){if("object"!==n(t)||null===t)return t;var r=t[Symbol.toPrimitive];if(void 0===r)return("string"===e?String:Number)(t);if(r=r.call(t,e||"default"),"object"!==n(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")},t.exports.__esModule=!0,t.exports.default=t.exports},7616:(t,e,r)=>{var n=r(5486).default,o=r(9772);t.exports=function(t){return t=o(t,"string"),"symbol"===n(t)?t:String(t)},t.exports.__esModule=!0,t.exports.default=t.exports},5486:e=>{function r(t){return e.exports=r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},e.exports.__esModule=!0,e.exports.default=e.exports,r(t)}e.exports=r,e.exports.__esModule=!0,e.exports.default=e.exports},7921:(e,t,r)=>{var n=r(6368),o=r(1595),i=r(1381),u=r(924);function s(t){var r="function"==typeof Map?new Map:void 0;return e.exports=s=function(t){if(null===t||!i(t))return t;if("function"!=typeof t)throw new TypeError("Super expression must either be null or a function");if(void 0!==r){if(r.has(t))return r.get(t);r.set(t,e)}function e(){return u(t,arguments,n(this).constructor)}return e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),o(e,t)},e.exports.__esModule=!0,e.exports.default=e.exports,s(t)}e.exports=s,e.exports.__esModule=!0,e.exports.default=e.exports},4147:t=>{"use strict";t.exports=JSON.parse('{"title":"jsFrame","version":"1.4.2","main":"index.js","author":{"name":"jsDesign","url":"https://js.design"},"scripts":{"build":"cross-env BABEL_ENV=publish npx webpack --mode production","dev":"npx webpack-dev-server --mode development","pro":"npx webpack-dev-server --mode production","build:test":"npm run build && npx jest","build:test:w":"npm run build && npx jest --watch","test":"cross-env BABEL_ENV=test npm run build:test:w","coverage":"cross-env BABEL_ENV=test npm run build && npx jest --coverage","prepare":"husky install"},"devDependencies":{"@babel/core":"^7.21.3","@babel/plugin-transform-runtime":"^7.21.0","@babel/preset-env":"^7.20.2","@commitlint/cli":"^17.6.7","@commitlint/config-conventional":"^17.6.7","babel-core":"^7.0.0-bridge.0","babel-loader":"^7.1.5","babel-plugin-no-debugging":"^1.3.1","clean-webpack-plugin":"^4.0.0","husky":"^8.0.0","jest-environment-jsdom":"^29.6.2","playwright":"^1.36.2","uglifyjs-webpack-plugin":"^2.2.0","webpack":"^5.74.0","webpack-cli":"^4.10.0","webpack-dev-server":"^4.13.1"},"dependencies":{"core-js":"^3.29.1","mutationobserver-shim":"^0.3.7","preact":"^10.10.6","resize-observer-polyfill":"^1.5.1"}}')}},n={};function mt(t){var e=n[t];return void 0!==e||(e=n[t]={exports:{}},r[t].call(e.exports,e,e.exports,mt)),e.exports}mt.d=(t,e)=>{for(var r in e)mt.o(e,r)&&!mt.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},mt.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),mt.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),mt.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};(()=>{"use strict";mt(3080),mt(288),mt(5298),mt(4669),mt(3675),mt(2322),mt(2004),mt(8407),mt(8288),mt(1301);var t=mt(8135),L=(mt(7228),mt(6429),mt(5677),mt(6394),mt(2129),mt(1770),mt(4655),mt(435),mt(4458),mt(5680),mt(5090),mt(4517),mt(2070),mt(7469),t(mt(7296))),W=t(mt(2e3)),n=t(mt(2143)),H=t(mt(4626)),V=t(mt(1803)),o=t(mt(6368)),e=t(mt(7921)),i=t(mt(6383)),u=t(mt(2508)),s=mt(2315),U=mt(705),z=t(mt(4147)),a=mt(5251),r=t(mt(4158)),c=mt(8921);mt(2542),mt(5551);function B(t,e){var r,n,o,i,u="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(u)return n=!(r=!0),{s:function(){u=u.call(t)},n:function(){var t=u.next();return r=t.done,t},e:function(t){n=!0,o=t},f:function(){try{r||null==u.return||u.return()}finally{if(n)throw o}}};if(Array.isArray(t)||(u=function(t,e){var r;if(t)return"string"==typeof t?l(t,e):"Map"===(r="Object"===(r=Object.prototype.toString.call(t).slice(8,-1))&&t.constructor?t.constructor.name:r)||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?l(t,e):void 0}(t))||e&&t&&"number"==typeof t.length)return u&&(t=u),i=0,{s:e=function(){},n:function(){return i>=t.length?{done:!0}:{done:!1,value:t[i++]}},e:function(t){throw t},f:e};throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function l(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r=c.Status.connected&&((0,u.default)(this,N,c.Status.connected),a.isDev&&h(this,Z,vt).call(this),this.src)&&((n=document.createElement("script")).src=this.src,n.onload=function(){var t=(0,i.default)(this,_),e=this.xComponent,r=e.component;e.type;this.shadowRoot.removeChild(n),(0,u.default)(this,v,r(s.h,s.Component,U.useEffect,t)),(0,u.default)(this,N,c.Status.loaded),this.hasAttribute("defer")&&!(0,i.default)(this,b)||this.update(),h(this,et,bt).call(this)}.bind(this),n.onerror=function(t){throw this.shadowRoot.removeChild(n),new URIError("The script ".concat(t.target.src," didn't load correctly."))}.bind(this),this.shadowRoot.appendChild(n))}customElements.define("js-frame",t)})()})(); \ No newline at end of file diff --git a/stitch-ui/printLetterTrace/英语字母描红_files/tip.svg b/stitch-ui/printLetterTrace/英语字母描红_files/tip.svg new file mode 100644 index 0000000..9753064 --- /dev/null +++ b/stitch-ui/printLetterTrace/英语字母描红_files/tip.svg @@ -0,0 +1,6 @@ + + + + + +