wip(new-design): Started work on standalon development environment
This commit is contained in:
parent
e908d419d5
commit
98ae9cc5ac
46 changed files with 1927 additions and 18 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -77,6 +77,7 @@ sites/strapi/.cache
|
|||
# Sites prebuild artifacts
|
||||
sites/*/public/locales/*/*.json
|
||||
sites/*/public/feeds/*
|
||||
packages/new-design/shared/public/locales/*/*.json
|
||||
|
||||
# Lab auto-generated pages
|
||||
sites/lab/lib
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
"i18n": "Translations for the FreeSewing project",
|
||||
"models": "Body measurements data for a range of default sizes",
|
||||
"mui-theme": "A Material-UI theme for FreeSewing web UIs",
|
||||
"new-design": "Initializer package for a new FreeSewing design: npx @freesewing/new-design",
|
||||
"pattern-info": "Information about available freesewing patterns",
|
||||
"prettier-config": "FreeSewing's shared configuration for prettier",
|
||||
"remark-jargon": "A Remark plugin for jargon terms",
|
||||
|
|
|
@ -9,3 +9,5 @@ requiredMeasurements: Required measurements
|
|||
showcase: Showcase
|
||||
sloganCome: Come for the sewing patterns
|
||||
sloganStay: Stay for the community
|
||||
support: Support
|
||||
|
||||
|
|
|
@ -1,2 +1,5 @@
|
|||
becomeAPatron: Become a patron
|
||||
supportFreesewing: Support FreeSewing
|
||||
patronLead: FreeSewing is fuelled by a voluntary subscription model
|
||||
patronPitch: If you think what we do is worthwhile, and if you can spare a few coins each month without hardship, please support our work
|
||||
|
||||
|
|
|
@ -13,7 +13,8 @@ const common = {
|
|||
"requiredMeasurements": "Required measurements",
|
||||
"showcase": "Showcase",
|
||||
"sloganCome": "Come for the sewing patterns",
|
||||
"sloganStay": "Stay for the community"
|
||||
"sloganStay": "Stay for the community",
|
||||
"support": "Support"
|
||||
}
|
||||
|
||||
export default common
|
||||
|
|
|
@ -4,7 +4,9 @@
|
|||
*/
|
||||
const patrons = {
|
||||
"becomeAPatron": "Become a patron",
|
||||
"supportFreesewing": "Support FreeSewing"
|
||||
"supportFreesewing": "Support FreeSewing",
|
||||
"patronLead": "FreeSewing is fuelled by a voluntary subscription model",
|
||||
"patronPitch": "If you think what we do is worthwhile, and if you can spare a few coins each month without hardship, please support our work"
|
||||
}
|
||||
|
||||
export default patrons
|
||||
|
|
9
packages/new-design/CHANGELOG.md
Normal file
9
packages/new-design/CHANGELOG.md
Normal file
|
@ -0,0 +1,9 @@
|
|||
# Change log for: @freesewing/new-design
|
||||
|
||||
|
||||
|
||||
This is the **initial release**, and the start of this change log.
|
||||
|
||||
> Prior to version 2, FreeSewing was not a JavaScript project.
|
||||
> As such, that history is out of scope for this change log.
|
||||
|
260
packages/new-design/README.md
Normal file
260
packages/new-design/README.md
Normal file
|
@ -0,0 +1,260 @@
|
|||

|
||||
<p align='center'><a
|
||||
href="https://www.npmjs.com/package/@freesewing/new-design"
|
||||
title="@freesewing/new-design on NPM"
|
||||
><img src="https://img.shields.io/npm/v/@freesewing/new-design.svg"
|
||||
alt="@freesewing/new-design on NPM"/>
|
||||
</a><a
|
||||
href="https://opensource.org/licenses/MIT"
|
||||
title="License: MIT"
|
||||
><img src="https://img.shields.io/npm/l/@freesewing/new-design.svg?label=License"
|
||||
alt="License: MIT"/>
|
||||
</a><a
|
||||
href="https://deepscan.io/dashboard#view=project&tid=2114&pid=2993&bid=23256"
|
||||
title="Code quality on DeepScan"
|
||||
><img src="https://deepscan.io/api/teams/2114/projects/2993/branches/23256/badge/grade.svg"
|
||||
alt="Code quality on DeepScan"/>
|
||||
</a><a
|
||||
href="https://github.com/freesewing/freesewing/issues?q=is%3Aissue+is%3Aopen+label%3Apkg%3Anew-design"
|
||||
title="Open issues tagged pkg:new-design"
|
||||
><img src="https://img.shields.io/github/issues/freesewing/freesewing/pkg:new-design.svg?label=Issues"
|
||||
alt="Open issues tagged pkg:new-design"/>
|
||||
</a><a
|
||||
href="#contributors-"
|
||||
title="All Contributors"
|
||||
><img src="https://img.shields.io/badge/all_contributors-90-pink.svg"
|
||||
alt="All Contributors"/>
|
||||
</a></p><p align='center'><a
|
||||
href="https://twitter.com/freesewing_org"
|
||||
title="Follow @freesewing_org on Twitter"
|
||||
><img src="https://img.shields.io/badge/%F3%A0%80%A0-Follow%20us-blue.svg?logo=twitter&logoColor=white&logoWidth=15"
|
||||
alt="Follow @freesewing_org on Twitter"/>
|
||||
</a><a
|
||||
href="https://chat.freesewing.org"
|
||||
title="Chat with us on Discord"
|
||||
><img src="https://img.shields.io/discord/698854858052075530?label=Chat%20on%20Discord"
|
||||
alt="Chat with us on Discord"/>
|
||||
</a><a
|
||||
href="https://freesewing.org/patrons/join"
|
||||
title="Become a FreeSewing Patron"
|
||||
><img src="https://img.shields.io/badge/%F3%A0%80%A0-Support%20us-blueviolet.svg?logo=cash-app&logoColor=white&logoWidth=15"
|
||||
alt="Become a FreeSewing Patron"/>
|
||||
</a><a
|
||||
href="https://instagram.com/freesewing_org"
|
||||
title="Follow @freesewing_org on Twitter"
|
||||
><img src="https://img.shields.io/badge/%F3%A0%80%A0-Follow%20us-E4405F.svg?logo=instagram&logoColor=white&logoWidth=15"
|
||||
alt="Follow @freesewing_org on Twitter"/>
|
||||
</a></p>
|
||||
|
||||
# @freesewing/new-design
|
||||
|
||||
Initializer package for a new FreeSewing design: npx @freesewing/new-design
|
||||
|
||||
|
||||
|
||||
## What am I looking at? 🤔
|
||||
|
||||
This repository is our *monorepo*
|
||||
holding [all our NPM packages](https://freesewing.dev/reference/packages/).
|
||||
|
||||
This folder holds: @freesewing/new-design
|
||||
|
||||
If you're not entirely sure what to do or how to start, type this command:
|
||||
|
||||
```
|
||||
npm run tips
|
||||
```
|
||||
|
||||
## About FreeSewing 💀
|
||||
|
||||
Where the world of makers and developers collide, that's where you'll find FreeSewing.
|
||||
|
||||
If you're a maker, checkout [freesewing.org](https://freesewing.org/) where you can generate
|
||||
our sewing patterns adapted to your measurements.
|
||||
|
||||
If you're a developer, our documentation is on [freesewing.dev](https://freesewing.dev/).
|
||||
Our [core library](https://freesewing.dev/reference/api/) is a *batteries-included* toolbox
|
||||
for parametric design of sewing patterns. But we also provide a range
|
||||
of [plugins](https://freesewing.dev/reference/plugins/) that further extend the
|
||||
functionality of the platform.
|
||||
|
||||
If you have NodeJS installed, you can try it right now by running:
|
||||
|
||||
```bash
|
||||
npx create-freesewing-pattern
|
||||
```
|
||||
|
||||
Or, consult our getting started guides
|
||||
for [Linux](https://freesewing.dev/tutorials/getting-started-linux/),
|
||||
[MacOS](https://freesewing.dev/tutorials/getting-started-mac/),
|
||||
or [Windows](https://freesewing.dev/tutorials/getting-started-windows/).
|
||||
|
||||
We also have a [pattern design tutorial](https://freesewing.dev/tutorials/pattern-design/) that
|
||||
walks you through your first parametric design,
|
||||
and [a friendly community](https://freesewing.org/community/where/) with
|
||||
people who can help you when you get stuck.
|
||||
|
||||
## Support FreeSewing: Become a patron 🥰
|
||||
|
||||
FreeSewing is an open source project run by a community,
|
||||
and financially supported by our patrons.
|
||||
|
||||
If you feel what we do is worthwhile, and you can spend a few coind without
|
||||
hardship, then you should [join us and become a patron](https://freesewing.org/community/join).
|
||||
|
||||
## Links 👩💻
|
||||
|
||||
- 💻 Makers website: [freesewing.org](https://freesewing.org)
|
||||
- 💻 Developers website: [freesewing.dev](https://freesewing.dev)
|
||||
- 💬 Chat: On Discord via [discord.freesewing.org](https://discord.freesewing.org/)
|
||||
- ✅ Todo list/Kanban board: On Github via [todo.freesewing.org](https://todo.freesewing.org/)
|
||||
- 🐦 Twitter: [@freesewing_org](https://twitter.com/freesewing_org)
|
||||
- 📷 Instagram: [@freesewing_org](https://instagram.com/freesewing_org)
|
||||
|
||||
## License: MIT 🤓
|
||||
|
||||
© [Joost De Cock](https://github.com/joostdecock).
|
||||
See [the license file](https://github.com/freesewing/freesewing/blob/develop/LICENSE) for details.
|
||||
|
||||
## Where to get help 🤯
|
||||
|
||||
Our [chatrooms on Discord](https://chat.freesewing.org/) are the best place to ask questions,
|
||||
share your feedback, or just hang out.
|
||||
|
||||
If you want to report a problem, please [create an issue](https://github.com/freesewing/freesewing/issues/new).
|
||||
|
||||
|
||||
|
||||
## Contributors ✨
|
||||
|
||||
Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
|
||||
|
||||
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
|
||||
<!-- prettier-ignore-start -->
|
||||
<!-- markdownlint-disable -->
|
||||
<table>
|
||||
<tr>
|
||||
<td align="center"><a href="http://adamrtomkins.github.io/"><img src="https://avatars.githubusercontent.com/u/5709603?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Adam Tomkins</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=AdamRTomkins" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="http://polymerisation-des-concepts.fr/"><img src="https://avatars.githubusercontent.com/u/365999?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Alexandre Ignjatovic</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=bankair" title="Code">💻</a></td>
|
||||
<td align="center"><a href="https://github.com/AlfaLyr"><img src="https://avatars.githubusercontent.com/u/39273729?v=4?s=100" width="100px;" alt=""/><br /><sub><b>AlfaLyr</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=AlfaLyr" title="Code">💻</a> <a href="#plugin-AlfaLyr" title="Plugin/utility libraries">🔌</a> <a href="#design-AlfaLyr" title="Design">🎨</a></td>
|
||||
<td align="center"><a href="http://thelettereph.com"><img src="https://avatars.githubusercontent.com/u/357684?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Andrew James</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=ephphatha" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://github.com/annekecaramin"><img src="https://avatars.githubusercontent.com/u/38046191?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Anneke</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=annekecaramin" title="Documentation">📖</a> <a href="#translation-annekecaramin" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/anniekao"><img src="https://avatars.githubusercontent.com/u/1550506?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Annie Kao</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=anniekao" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://github.com/Anternative"><img src="https://avatars.githubusercontent.com/u/81079850?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Anternative</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=Anternative" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><a href="https://github.com/Quiltmaster"><img src="https://avatars.githubusercontent.com/u/71795777?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Anthony</b></sub></a><br /><a href="#question-Quiltmaster" title="Answering Questions">💬</a></td>
|
||||
<td align="center"><a href="https://github.com/camerondubas"><img src="https://avatars.githubusercontent.com/u/6216460?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Cameron Dubas</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=camerondubas" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://github.com/cabi"><img src="https://avatars.githubusercontent.com/u/2596253?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Carsten Biebricher</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=cabi" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://github.com/cathyzoller"><img src="https://avatars.githubusercontent.com/u/2120275?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Cathy Zoller</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=cathyzoller" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://github.com/Chantalbijoux"><img src="https://avatars.githubusercontent.com/u/39673694?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Chantal Lapointe</b></sub></a><br /><a href="#translation-Chantalbijoux" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/dpiquet"><img src="https://avatars.githubusercontent.com/u/4688628?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Damien PIQUET</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=dpiquet" title="Code">💻</a></td>
|
||||
<td align="center"><a href="https://www.darigovresearch.com/"><img src="https://avatars.githubusercontent.com/u/30328618?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Darigov Research</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=darigovresearch" title="Documentation">📖</a> <a href="#ideas-darigovresearch" title="Ideas, Planning, & Feedback">🤔</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><a href="https://github.com/ElenaFdR"><img src="https://avatars.githubusercontent.com/u/5113815?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Elena FdR</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=ElenaFdR" title="Documentation">📖</a> <a href="#blog-ElenaFdR" title="Blogposts">📝</a></td>
|
||||
<td align="center"><a href="https://emmanuelnyachoke.com/"><img src="https://avatars.githubusercontent.com/u/1908926?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Emmanuel Nyachoke</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=enyachoke" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=enyachoke" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="http://enochriese.com"><img src="https://avatars.githubusercontent.com/u/5298929?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Enoch Riese</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=eriese" title="Code">💻</a></td>
|
||||
<td align="center"><a href="https://github.com/EvEkSwed"><img src="https://avatars.githubusercontent.com/u/39723451?v=4?s=100" width="100px;" alt=""/><br /><sub><b>EvEkSwed</b></sub></a><br /><a href="#translation-EvEkSwed" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/Fantastik-Maman"><img src="https://avatars.githubusercontent.com/u/39785382?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Fantastik-Maman</b></sub></a><br /><a href="#translation-Fantastik-Maman" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://www.forresto.com/"><img src="https://avatars.githubusercontent.com/u/395307?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Forrest O.</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=forresto" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://github.com/fmatray"><img src="https://avatars.githubusercontent.com/u/8267716?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Frédéric</b></sub></a><br /><a href="#translation-fmatray" title="Translation">🌍</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><a href="https://www.linkedin.com/in/glennfmatthews/"><img src="https://avatars.githubusercontent.com/u/5603551?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Glenn Matthews</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=glennmatthews" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://kirby.zone"><img src="https://avatars.githubusercontent.com/u/75245963?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Igor Couto</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/issues?q=author%3Aiocouto" title="Bug reports">🐛</a></td>
|
||||
<td align="center"><a href="https://bandism.net/"><img src="https://avatars.githubusercontent.com/u/22633385?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Ikko Ashimine</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=eltociear" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://github.com/Irapeke"><img src="https://avatars.githubusercontent.com/u/39604334?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Irapeke</b></sub></a><br /><a href="#translation-Irapeke" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/jsawo"><img src="https://avatars.githubusercontent.com/u/1294706?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Jacek Sawoszczuk</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jsawo" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://github.com/jgfichte"><img src="https://avatars.githubusercontent.com/u/1787162?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Jason Williams</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jgfichte" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://github.com/jejacks0n"><img src="https://avatars.githubusercontent.com/u/13765?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Jeremy Jackson</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jejacks0n" title="Code">💻</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><a href="https://github.com/Joebidido"><img src="https://avatars.githubusercontent.com/u/39796210?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Joebidido</b></sub></a><br /><a href="#translation-Joebidido" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://joost.at/"><img src="https://avatars.githubusercontent.com/u/1708494?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Joost De Cock</b></sub></a><br /><a href="#maintenance-joostdecock" title="Maintenance">🚧</a></td>
|
||||
<td align="center"><a href="https://github.com/joshessman"><img src="https://avatars.githubusercontent.com/u/9941074?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Josh Essman</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=joshessman" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="http://www.earth.li/~kake/"><img src="https://avatars.githubusercontent.com/u/1956810?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Kake</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=KakeLP" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://twitter.com/kapunahele"><img src="https://avatars.githubusercontent.com/u/4116963?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Kapunahele Wong</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=kapunahelewong" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://github.com/tangerineshark"><img src="https://avatars.githubusercontent.com/u/70777269?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Karen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=tangerineshark" title="Documentation">📖</a> <a href="#eventOrganizing-tangerineshark" title="Event Organizing">📋</a></td>
|
||||
<td align="center"><a href="https://github.com/mcgnly"><img src="https://avatars.githubusercontent.com/u/5653631?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Katie McGinley</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=mcgnly" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><a href="http://www.kieranklaassen.com/"><img src="https://avatars.githubusercontent.com/u/209089?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Kieran Klaassen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=kieranklaassen" title="Code">💻</a></td>
|
||||
<td align="center"><a href="https://github.com/Kittycatou"><img src="https://avatars.githubusercontent.com/u/48165583?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Kittycatou</b></sub></a><br /><a href="#translation-Kittycatou" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://www.krishoward.org/"><img src="https://avatars.githubusercontent.com/u/5946286?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Kris</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=web-goddess" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://github.com/kristinruben"><img src="https://avatars.githubusercontent.com/u/17237479?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Kristin Ruben</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=kristinruben" title="Code">💻</a></td>
|
||||
<td align="center"><a href="https://github.com/Loudepeuter"><img src="https://avatars.githubusercontent.com/u/38081954?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Loudepeuter</b></sub></a><br /><a href="#translation-Loudepeuter" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/lucibytes"><img src="https://avatars.githubusercontent.com/u/77203781?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Lucian</b></sub></a><br /><a href="#eventOrganizing-lucibytes" title="Event Organizing">📋</a></td>
|
||||
<td align="center"><a href="https://github.com/manufakturedelweiss"><img src="https://avatars.githubusercontent.com/u/38063391?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Marcus</b></sub></a><br /><a href="#translation-manufakturedelweiss" title="Translation">🌍</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><a href="https://github.com/martintribo"><img src="https://avatars.githubusercontent.com/u/1613442?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Martin Tribo</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=martintribo" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://github.com/nadege"><img src="https://avatars.githubusercontent.com/u/3792171?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Nadege Michel</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nadege" title="Tests">⚠️</a> <a href="https://github.com/freesewing/freesewing/commits?author=nadege" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://github.com/nataliasayang"><img src="https://avatars.githubusercontent.com/u/48160791?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Natalia</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nataliasayang" title="Code">💻</a> <a href="#design-nataliasayang" title="Design">🎨</a> <a href="#blog-nataliasayang" title="Blogposts">📝</a></td>
|
||||
<td align="center"><a href="http://yergler.net/"><img src="https://avatars.githubusercontent.com/u/510875?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Nathan Yergler</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nyergler" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://github.com/nicholasdower"><img src="https://avatars.githubusercontent.com/u/9117775?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Nick Dower</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nicholasdower" title="Documentation">📖</a> <a href="https://github.com/freesewing/freesewing/commits?author=nicholasdower" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/issues?q=author%3Anicholasdower" title="Bug reports">🐛</a></td>
|
||||
<td align="center"><a href="https://pat.forringer.com/"><img src="https://avatars.githubusercontent.com/u/136456?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Patrick Forringer</b></sub></a><br /><a href="#plugin-destos" title="Plugin/utility libraries">🔌</a></td>
|
||||
<td align="center"><a href="http://pd75.github.io/"><img src="https://avatars.githubusercontent.com/u/10294795?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Paul</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=PD75" title="Documentation">📖</a> <a href="#blog-PD75" title="Blogposts">📝</a> <a href="#translation-PD75" title="Translation">🌍</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><a href="https://github.com/phillipthelen"><img src="https://avatars.githubusercontent.com/u/298062?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Phillip Thelen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=phillipthelen" title="Code">💻</a></td>
|
||||
<td align="center"><a href="https://github.com/Pixieish"><img src="https://avatars.githubusercontent.com/u/32991415?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Pixieish</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=Pixieish" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://www.uza.be/persoon/prof-dr-sorcha-ni-dhubhghaill"><img src="https://avatars.githubusercontent.com/u/30624634?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Prof. dr. Sorcha Ní Dhubhghaill</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=sorchanidhubhghaill" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://github.com/QuentinFelix"><img src="https://avatars.githubusercontent.com/u/5288091?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Quentin FELIX</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=QuentinFelix" title="Code">💻</a> <a href="#design-QuentinFelix" title="Design">🎨</a></td>
|
||||
<td align="center"><a href="https://github.com/RikHekker"><img src="https://avatars.githubusercontent.com/u/31843274?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Rik Hekker</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/issues?q=author%3ARikHekker" title="Bug reports">🐛</a></td>
|
||||
<td align="center"><a href="http://resume.livingston-gray.com/faq.html"><img src="https://avatars.githubusercontent.com/u/6462?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Sam Livingston-Gray</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=geeksam" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://github.com/sannek"><img src="https://avatars.githubusercontent.com/u/17491062?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Sanne</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=sannek" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=sannek" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><a href="https://github.com/Tyrannogina"><img src="https://avatars.githubusercontent.com/u/19556565?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Sara Latorre</b></sub></a><br /><a href="#translation-Tyrannogina" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/SeaZeeZee"><img src="https://avatars.githubusercontent.com/u/86711383?v=4?s=100" width="100px;" alt=""/><br /><sub><b>SeaZeeZee</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=SeaZeeZee" title="Documentation">📖</a> <a href="https://github.com/freesewing/freesewing/commits?author=SeaZeeZee" title="Code">💻</a></td>
|
||||
<td align="center"><a href="https://www.instagram.com/celine_mge/"><img src="https://avatars.githubusercontent.com/u/57619777?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Slylele</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=Slylele" title="Documentation">📖</a> <a href="#translation-Slylele" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/Soazillon"><img src="https://avatars.githubusercontent.com/u/40845940?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Soazillon</b></sub></a><br /><a href="#translation-Soazillon" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/SoneaTheBest"><img src="https://avatars.githubusercontent.com/u/64635425?v=4?s=100" width="100px;" alt=""/><br /><sub><b>SoneaTheBest</b></sub></a><br /><a href="#translation-SoneaTheBest" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="http://metafly.info/"><img src="https://avatars.githubusercontent.com/u/961256?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Stefan Sydow</b></sub></a><br /><a href="#translation-stsydow" title="Translation">🌍</a> <a href="https://github.com/freesewing/freesewing/commits?author=stsydow" title="Documentation">📖</a> <a href="https://github.com/freesewing/freesewing/commits?author=stsydow" title="Code">💻</a></td>
|
||||
<td align="center"><a href="https://github.com/TriploidTree"><img src="https://avatars.githubusercontent.com/u/4170521?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Tríona</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=TriploidTree" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><a href="https://github.com/theUnmutual"><img src="https://avatars.githubusercontent.com/u/22374635?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Unmutual</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=theUnmutual" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://github.com/woutervdub"><img src="https://avatars.githubusercontent.com/u/24414629?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Wouter van Wageningen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=woutervdub" title="Code">💻</a> <a href="#design-woutervdub" title="Design">🎨</a> <a href="#tool-woutervdub" title="Tools">🔧</a></td>
|
||||
<td align="center"><a href="https://github.com/amysews"><img src="https://avatars.githubusercontent.com/u/25280778?v=4?s=100" width="100px;" alt=""/><br /><sub><b>amysews</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=amysews" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://github.com/beautifulsummermoon"><img src="https://avatars.githubusercontent.com/u/40396388?v=4?s=100" width="100px;" alt=""/><br /><sub><b>beautifulsummermoon</b></sub></a><br /><a href="#translation-beautifulsummermoon" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/berce"><img src="https://avatars.githubusercontent.com/u/10439709?v=4?s=100" width="100px;" alt=""/><br /><sub><b>berce</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=berce" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://github.com/biou"><img src="https://avatars.githubusercontent.com/u/1340376?v=4?s=100" width="100px;" alt=""/><br /><sub><b>biou</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=biou" title="Code">💻</a></td>
|
||||
<td align="center"><a href="https://github.com/bobgeorgethe3rd"><img src="https://avatars.githubusercontent.com/u/16866285?v=4?s=100" width="100px;" alt=""/><br /><sub><b>bobgeorgethe3rd</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=bobgeorgethe3rd" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=bobgeorgethe3rd" title="Documentation">📖</a> <a href="#design-bobgeorgethe3rd" title="Design">🎨</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><a href="https://github.com/brmlyklr"><img src="https://avatars.githubusercontent.com/u/22308713?v=4?s=100" width="100px;" alt=""/><br /><sub><b>brmlyklr</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=brmlyklr" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="http://www.chrisbarrett.fr"><img src="https://avatars.githubusercontent.com/u/2373249?v=4?s=100" width="100px;" alt=""/><br /><sub><b>chri5b</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=chri5b" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=chri5b" title="Tests">⚠️</a></td>
|
||||
<td align="center"><a href="https://github.com/dingcycle"><img src="https://avatars.githubusercontent.com/u/1681985?v=4?s=100" width="100px;" alt=""/><br /><sub><b>dingcycle</b></sub></a><br /><a href="#translation-dingcycle" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/drowned-in-books"><img src="https://avatars.githubusercontent.com/u/100040772?v=4?s=100" width="100px;" alt=""/><br /><sub><b>drowned-in-books</b></sub></a><br /><a href="#question-drowned-in-books" title="Answering Questions">💬</a></td>
|
||||
<td align="center"><a href="https://github.com/econo202"><img src="https://avatars.githubusercontent.com/u/34138153?v=4?s=100" width="100px;" alt=""/><br /><sub><b>econo202</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=econo202" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://github.com/ericamattos"><img src="https://avatars.githubusercontent.com/u/4341417?v=4?s=100" width="100px;" alt=""/><br /><sub><b>ericamattos</b></sub></a><br /><a href="#translation-ericamattos" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/fightingrabbit"><img src="https://avatars.githubusercontent.com/u/25751445?v=4?s=100" width="100px;" alt=""/><br /><sub><b>fightingrabbit</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=fightingrabbit" title="Code">💻</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><a href="https://github.com/DocSpencer77"><img src="https://avatars.githubusercontent.com/u/43393580?v=4?s=100" width="100px;" alt=""/><br /><sub><b>gaylyndie</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=DocSpencer77" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://github.com/grimlokason"><img src="https://avatars.githubusercontent.com/u/5112238?v=4?s=100" width="100px;" alt=""/><br /><sub><b>grimlokason</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=grimlokason" title="Code">💻</a></td>
|
||||
<td align="center"><a href="https://weblog.redisdead.net"><img src="https://avatars.githubusercontent.com/u/6494414?v=4?s=100" width="100px;" alt=""/><br /><sub><b>hellgy</b></sub></a><br /><a href="#design-hellgy" title="Design">🎨</a></td>
|
||||
<td align="center"><a href="https://github.com/jackseye"><img src="https://avatars.githubusercontent.com/u/27834526?v=4?s=100" width="100px;" alt=""/><br /><sub><b>jackseye</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jackseye" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://github.com/marckiesel"><img src="https://avatars.githubusercontent.com/u/39653780?v=4?s=100" width="100px;" alt=""/><br /><sub><b>marckiesel</b></sub></a><br /><a href="#translation-marckiesel" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/Mesil"><img src="https://avatars.githubusercontent.com/u/14284175?v=4?s=100" width="100px;" alt=""/><br /><sub><b>mesil</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/issues?q=author%3Amesil" title="Bug reports">🐛</a></td>
|
||||
<td align="center"><a href="https://github.com/starfetch"><img src="https://avatars.githubusercontent.com/u/80041179?v=4?s=100" width="100px;" alt=""/><br /><sub><b>starfetch</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=starfetch" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=starfetch" title="Documentation">📖</a> <a href="#translation-starfetch" title="Translation">🌍</a> <a href="#design-starfetch" title="Design">🎨</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><a href="https://github.com/ttimearl"><img src="https://avatars.githubusercontent.com/u/77916590?v=4?s=100" width="100px;" alt=""/><br /><sub><b>ttimearl</b></sub></a><br /><a href="#content-ttimearl" title="Content">🖋</a></td>
|
||||
<td align="center"><a href="https://github.com/chrisgloom"><img src="https://avatars.githubusercontent.com/u/15905991?v=4?s=100" width="100px;" alt=""/><br /><sub><b>tuesgloomsday</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=chrisgloom" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://github.com/valadaptive"><img src="https://avatars.githubusercontent.com/u/79560998?v=4?s=100" width="100px;" alt=""/><br /><sub><b>valadaptive</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=valadaptive" title="Code">💻</a></td>
|
||||
<td align="center"><a href="https://github.com/viocky"><img src="https://avatars.githubusercontent.com/u/39279173?v=4?s=100" width="100px;" alt=""/><br /><sub><b>viocky</b></sub></a><br /><a href="#translation-viocky" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/woolishboy"><img src="https://avatars.githubusercontent.com/u/57816321?v=4?s=100" width="100px;" alt=""/><br /><sub><b>woolishboy</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=woolishboy" title="Code">💻</a></td>
|
||||
<td align="center"><a href="https://github.com/cloutiy"><img src="https://avatars.githubusercontent.com/u/8433147?v=4?s=100" width="100px;" alt=""/><br /><sub><b>yc</b></sub></a><br /><a href="#translation-cloutiy" title="Translation">🌍</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<!-- markdownlint-restore -->
|
||||
<!-- prettier-ignore-end -->
|
||||
|
||||
<!-- ALL-CONTRIBUTORS-LIST:END -->
|
||||
|
||||
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!
|
||||
|
55
packages/new-design/build.js
Normal file
55
packages/new-design/build.js
Normal file
|
@ -0,0 +1,55 @@
|
|||
/* This script will build the package with esbuild */
|
||||
const esbuild = require('esbuild')
|
||||
const pkg = require('./package.json')
|
||||
|
||||
// Create banner based on package info
|
||||
const banner = `/**
|
||||
* ${pkg.name} | v${pkg.version}
|
||||
* ${pkg.description}
|
||||
* (c) ${new Date().getFullYear()} ${pkg.author}
|
||||
* @license ${pkg.license}
|
||||
*/`
|
||||
|
||||
// Shared esbuild options
|
||||
const options = {
|
||||
banner: { js: banner },
|
||||
bundle: true,
|
||||
entryPoints: ['index.mjs'],
|
||||
external: ["@freesewing"],
|
||||
metafile: process.env.VERBOSE ? true : false,
|
||||
minify: process.env.NO_MINIFY ? false : true,
|
||||
sourcemap: true,
|
||||
}
|
||||
|
||||
// Different formats
|
||||
const formats = {
|
||||
cjs: "dist/index.js",
|
||||
esm: "dist/index.mjs",
|
||||
}
|
||||
|
||||
// Let esbuild generate different formats
|
||||
let result
|
||||
(async () => {
|
||||
for (const [format, outfile] of Object.entries(formats)) {
|
||||
result = await esbuild
|
||||
.build({ ...options, outfile, format })
|
||||
.catch(() => process.exit(1))
|
||||
}
|
||||
|
||||
if (process.env.VERBOSE) {
|
||||
const info = await esbuild.analyzeMetafile(result.metafile)
|
||||
console.log(info)
|
||||
}
|
||||
|
||||
// Also build a version that has all dependencies bundled
|
||||
// This makes it easy to run tests
|
||||
await esbuild
|
||||
.build({
|
||||
...options,
|
||||
outfile: 'tests/dist/index.mjs',
|
||||
format: 'esm',
|
||||
external: [],
|
||||
})
|
||||
.catch(() => process.exit(1))
|
||||
|
||||
})()
|
18
packages/new-design/index.mjs
Normal file
18
packages/new-design/index.mjs
Normal file
|
@ -0,0 +1,18 @@
|
|||
#!/usr/bin/env node
|
||||
import { cli } from './lib/cli.mjs'
|
||||
|
||||
cli()
|
||||
|
||||
/*
|
||||
|
||||
___ ___ _
|
||||
| __| _ ___ ___/ __| _____ __ _(_)_ _ __ _
|
||||
| _| '_/ -_) -_)__ \/ -_) V V / | ' \/ _` |
|
||||
|_||_| \___\___|___/\___|\_/\_/|_|_||_\__, |
|
||||
≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡|___/
|
||||
Come for the sewing patterns
|
||||
Stay for the community
|
||||
|
||||
|
||||
*/
|
||||
|
54
packages/new-design/lib/cli.mjs
Normal file
54
packages/new-design/lib/cli.mjs
Normal file
|
@ -0,0 +1,54 @@
|
|||
import path from 'path'
|
||||
import chalk from 'chalk'
|
||||
import commander from 'commander'
|
||||
import { banner } from '../../../scripts/banner.mjs'
|
||||
import {
|
||||
checkNodeVersion,
|
||||
getChoices,
|
||||
createEnvironment,
|
||||
} from './utils.mjs'
|
||||
|
||||
|
||||
export const cli = async () => {
|
||||
|
||||
// Make it pretty
|
||||
console.log(banner+"\n")
|
||||
|
||||
// Make sure we have a valid NodeJS version
|
||||
checkNodeVersion()
|
||||
|
||||
// Get user input
|
||||
const choices = await getChoices()
|
||||
|
||||
// Create environment from template
|
||||
const result = createEnvironment(choices)
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
|
||||
const dest = await createLibrary(params)
|
||||
|
||||
console.log(`
|
||||
🎉 ${strings[params.language]['cfp.patternCreated']} ${chalk.bold(dest)}
|
||||
|
||||
${strings[params.language]['cfp.runTheseCommands']}:
|
||||
|
||||
👉 ${chalk.cyan(`cd ${path.join(params.shortName, 'example')} && ${params.manager} start`)}
|
||||
|
||||
${strings[params.language]['cfp.startWebpack']}
|
||||
|
||||
${strings[params.language]['cfp.devDocsAvailableAt']}
|
||||
${chalk.bold('https://freesewing.dev/')}
|
||||
|
||||
${strings[params.language]['cfp.talkToUs']}
|
||||
${chalk.bold('https://discord.freesewing.org/')}
|
||||
|
||||
`
|
||||
)
|
||||
|
||||
return dest
|
||||
}
|
||||
|
||||
|
||||
*/
|
191
packages/new-design/lib/config.mjs
Normal file
191
packages/new-design/lib/config.mjs
Normal file
|
@ -0,0 +1,191 @@
|
|||
export const config = {
|
||||
node: 14, // Minimum node version
|
||||
repo: 'freesewing/freesewing', // Repository to download from
|
||||
branch: 'develop', // Branch to download from
|
||||
i18n: [
|
||||
'account',
|
||||
'common',
|
||||
'patrons',
|
||||
'themes',
|
||||
'workbench',
|
||||
'errors',
|
||||
'i18n',
|
||||
'lab',
|
||||
'measurements',
|
||||
'optiongroups',
|
||||
'o_bella',
|
||||
'o_bent',
|
||||
'o_breanna',
|
||||
'o_brian',
|
||||
'o_titan',
|
||||
'parts',
|
||||
'plugin',
|
||||
'settings',
|
||||
'welcome',
|
||||
],
|
||||
fetch: {
|
||||
sites: [
|
||||
"shared/utils.mjs",
|
||||
"shared/config/freesewing.mjs",
|
||||
"shared/config/i18n.config.mjs",
|
||||
"shared/config/next.mjs",
|
||||
"shared/config/postcss.config.js",
|
||||
"shared/config/tailwind.config.js",
|
||||
"shared/prebuild/contributors.mjs",
|
||||
"shared/hooks/useLocalStorage.js",
|
||||
"shared/hooks/useTheme.js",
|
||||
"shared/styles/code.css",
|
||||
"shared/styles/globals.css",
|
||||
"shared/styles/svg-freesewing-draft.css",
|
||||
"shared/themes/dark.js",
|
||||
"shared/themes/hax0r.js",
|
||||
"shared/themes/index.js",
|
||||
"shared/themes/lgbtq.js",
|
||||
"shared/themes/light.js",
|
||||
"shared/themes/runtime.js",
|
||||
"shared/themes/trans.js",
|
||||
"shared/components/copy-to-clipboard.js",
|
||||
"shared/components/json.js",
|
||||
"shared/components/lightbox.js",
|
||||
"shared/components/locale-picker.js",
|
||||
"shared/components/modal.js",
|
||||
"shared/components/page-link.js",
|
||||
"shared/components/pinked-ribbon.js",
|
||||
"shared/components/popout.js",
|
||||
"shared/components/theme-picker.js",
|
||||
"shared/components/web-link.js",
|
||||
"shared/components/yaml.js",
|
||||
"shared/components/layouts/default.js",
|
||||
"shared/components/icons/box.js",
|
||||
"shared/components/icons/camera.js",
|
||||
"shared/components/icons/clear.js",
|
||||
"shared/components/icons/close.js",
|
||||
"shared/components/icons/cog.js",
|
||||
"shared/components/icons/community.js",
|
||||
"shared/components/icons/copy.js",
|
||||
"shared/components/icons/design.js",
|
||||
"shared/components/icons/discord.js",
|
||||
"shared/components/icons/docs.js",
|
||||
"shared/components/icons/down.js",
|
||||
"shared/components/icons/edit.js",
|
||||
"shared/components/icons/export.js",
|
||||
"shared/components/icons/facebook.js",
|
||||
"shared/components/icons/filter.js",
|
||||
"shared/components/icons/freesewing.js",
|
||||
"shared/components/icons/github.js",
|
||||
"shared/components/icons/google.js",
|
||||
"shared/components/icons/guide.js",
|
||||
"shared/components/icons/heart.js",
|
||||
"shared/components/icons/help.js",
|
||||
"shared/components/icons/i18n.js",
|
||||
"shared/components/icons/instagram.js",
|
||||
"shared/components/icons/left.js",
|
||||
"shared/components/icons/menu.js",
|
||||
"shared/components/icons/note.js",
|
||||
"shared/components/icons/options.js",
|
||||
"shared/components/icons/page-size.js",
|
||||
"shared/components/icons/page.js",
|
||||
"shared/components/icons/print.js",
|
||||
"shared/components/icons/reddit.js",
|
||||
"shared/components/icons/right.js",
|
||||
"shared/components/icons/rss.js",
|
||||
"shared/components/icons/search.js",
|
||||
"shared/components/icons/settings.js",
|
||||
"shared/components/icons/theme.js",
|
||||
"shared/components/icons/tip.js",
|
||||
"shared/components/icons/tutorial.js",
|
||||
"shared/components/icons/twitter.js",
|
||||
"shared/components/icons/user.js",
|
||||
"shared/components/icons/versions.js",
|
||||
"shared/components/icons/with-breasts.js",
|
||||
"shared/components/icons/without-breasts.js",
|
||||
"shared/components/icons/xray.js",
|
||||
"shared/components/logos/cc-by.js",
|
||||
"shared/components/logos/cc.js",
|
||||
"shared/components/logos/freesewing.js",
|
||||
"shared/components/logos/osi.js",
|
||||
"shared/components/navigation/aside.js",
|
||||
"shared/components/navigation/primary.js",
|
||||
"shared/components/robot/index.js",
|
||||
"shared/components/robot/poses.js",
|
||||
"shared/components/wrappers/img.js",
|
||||
"shared/components/wrappers/mdx.js",
|
||||
"shared/components/wrappers/page.js",
|
||||
"shared/components/wrappers/toc.js",
|
||||
"shared/components/wrappers/workbench.js",
|
||||
"shared/components/mdx/index.js",
|
||||
"shared/components/workbench/default-settings.js",
|
||||
"shared/components/workbench/events.js",
|
||||
"shared/components/workbench/export.js",
|
||||
"shared/components/workbench/json.js",
|
||||
"shared/components/workbench/preload.js",
|
||||
"shared/components/workbench/sample.js",
|
||||
"shared/components/workbench/yaml.js",
|
||||
"shared/components/workbench/inputs/design-option-count.js",
|
||||
"shared/components/workbench/inputs/design-option-list.js",
|
||||
"shared/components/workbench/inputs/design-option-pct-deg.js",
|
||||
"shared/components/workbench/inputs/measurement.js",
|
||||
"shared/components/workbench/measurements/index.js",
|
||||
"shared/components/workbench/measurements/non-human.js",
|
||||
"shared/components/workbench/draft/error.js",
|
||||
"shared/components/workbench/draft/index.js",
|
||||
"shared/components/workbench/draft/svg-wrapper.js",
|
||||
"shared/components/workbench/draft/utils.js",
|
||||
"shared/components/workbench/draft/circle/index.js",
|
||||
"shared/components/workbench/draft/defs/index.js",
|
||||
"shared/components/workbench/draft/part/index.js",
|
||||
"shared/components/workbench/draft/path/index.js",
|
||||
"shared/components/workbench/draft/point/index.js",
|
||||
"shared/components/workbench/draft/snippet/index.js",
|
||||
"shared/components/workbench/draft/svg/index.js",
|
||||
"shared/components/workbench/draft/text/index.js",
|
||||
"shared/components/workbench/draft/text-on-path/index.js",
|
||||
"shared/components/workbench/layout/draft.js",
|
||||
"shared/components/workbench/layout/cut/index.js",
|
||||
"shared/components/workbench/layout/cut/settings.js",
|
||||
"shared/components/workbench/layout/print/index.js",
|
||||
"shared/components/workbench/layout/print/orientation-picker.js",
|
||||
"shared/components/workbench/layout/print/pagesize-picker.js",
|
||||
"shared/components/workbench/layout/print/plugin.js",
|
||||
"shared/components/workbench/layout/print/settings.js",
|
||||
"shared/components/workbench/menu/index.js",
|
||||
"shared/components/workbench/menu/view.js",
|
||||
"shared/components/workbench/menu/core-settings/core-setting-bool.js",
|
||||
"shared/components/workbench/menu/core-settings/core-setting-list.js",
|
||||
"shared/components/workbench/menu/core-settings/core-setting-mm.js",
|
||||
"shared/components/workbench/menu/core-settings/core-setting-nr.js",
|
||||
"shared/components/workbench/menu/core-settings/core-setting-only.js",
|
||||
"shared/components/workbench/menu/core-settings/core-setting-sa-bool.js",
|
||||
"shared/components/workbench/menu/core-settings/core-setting-sa-mm.js",
|
||||
"shared/components/workbench/menu/core-settings/index.js",
|
||||
"shared/components/workbench/menu/core-settings/setting.js",
|
||||
"shared/components/workbench/menu/design-options/index.js",
|
||||
"shared/components/workbench/menu/design-options/option-group.js",
|
||||
"shared/components/workbench/menu/design-options/option-input.js",
|
||||
"shared/components/workbench/menu/design-options/option-value.js",
|
||||
"shared/components/workbench/menu/design-options/option.js",
|
||||
"shared/components/workbench/menu/test-design-options/index.js",
|
||||
"shared/components/workbench/menu/test-design-options/option-group.js",
|
||||
"shared/components/workbench/menu/test-design-options/option-sub-group.js",
|
||||
"shared/components/workbench/menu/test-design-options/option.js",
|
||||
"shared/components/workbench/menu/xray/attributes.js",
|
||||
"shared/components/workbench/menu/xray/disable.js",
|
||||
"shared/components/workbench/menu/xray/index.js",
|
||||
"shared/components/workbench/menu/xray/list.js",
|
||||
"shared/components/workbench/menu/xray/log.js",
|
||||
"shared/components/workbench/menu/xray/path-ops.js",
|
||||
"shared/components/workbench/menu/xray/path.js",
|
||||
"shared/components/workbench/menu/xray/point.js",
|
||||
"shared/components/workbench/menu/xray/reset.js",
|
||||
"lab/components/footer.js",
|
||||
"lab/components/wrappers/layout.js",
|
||||
"lab/components/wrappers/page.js"
|
||||
],
|
||||
config: [
|
||||
{
|
||||
from: 'measurements.mjs',
|
||||
to: 'shared/config/measurements.mjs'
|
||||
}
|
||||
],
|
||||
}
|
||||
}
|
43
packages/new-design/lib/download-list.js
Normal file
43
packages/new-design/lib/download-list.js
Normal file
|
@ -0,0 +1,43 @@
|
|||
import rdir from 'recursive-readdir'
|
||||
import { join, basename } from 'path'
|
||||
|
||||
// Files to not download
|
||||
const avoid = {
|
||||
files: [
|
||||
'README.md',
|
||||
'package.json',
|
||||
'CHANGELOG.md',
|
||||
'version-pickers.js',
|
||||
'pattern-picker.js',
|
||||
'header.js',
|
||||
],
|
||||
dirs: [ 'node_modules', 'layouts' ]
|
||||
}
|
||||
|
||||
|
||||
// Method to check what files to keep
|
||||
const keep = file => {
|
||||
if (avoid.files.indexOf(basename(file)) !== -1) return false
|
||||
for (const dir of avoid.dirs) {
|
||||
if (file.indexOf(dir) !== -1) return false
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
const getFiles = async (site) => {
|
||||
const all = await rdir(join('..', '..', 'sites', site))
|
||||
|
||||
return all
|
||||
.filter(file => keep(file))
|
||||
.map(file => file.slice(12))
|
||||
}
|
||||
|
||||
getFiles('shared').then(shared => {
|
||||
getFiles(join('lab', 'components')).then(lab => {
|
||||
console.log(JSON.stringify([
|
||||
...shared,
|
||||
...lab,
|
||||
], null, 2))
|
||||
})
|
||||
})
|
259
packages/new-design/lib/utils.mjs
Normal file
259
packages/new-design/lib/utils.mjs
Normal file
|
@ -0,0 +1,259 @@
|
|||
import { config } from './config.mjs'
|
||||
import { mkdir, readFile, writeFile, copyFile } from 'node:fs/promises'
|
||||
import { join, resolve, dirname, extname } from 'path'
|
||||
import mustache from 'mustache'
|
||||
import rdir from 'recursive-readdir'
|
||||
import chalk from 'chalk'
|
||||
import prompts from 'prompts'
|
||||
import {oraPromise} from 'ora'
|
||||
import { execa } from 'execa'
|
||||
import axios from 'axios'
|
||||
|
||||
const nl = "\n"
|
||||
const tab = " "
|
||||
const nlt = nl+tab
|
||||
|
||||
// Checks for node 14 or higher
|
||||
export const checkNodeVersion = () => {
|
||||
const node_version = process.version.slice(1).split('.')[0]
|
||||
if (parseInt(node_version) < config.node) {
|
||||
console.log(
|
||||
chalk.yellow(nlt+`⚠️ FreeSewing requires Node v${config.node} or newer`) +
|
||||
nl+nlt+'We hightly recommend using NVM to manage your Node versions:' +
|
||||
nlt+chalk.blue('https://github.com/nvm-sh/nvm') +
|
||||
nl+nlt+'When in doubt, pick an active LTS version:' +
|
||||
nlt+chalk.blue('https://nodejs.org/en/about/releases/')+nl+nl
|
||||
)
|
||||
process.exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
// Helper method to validate the design name
|
||||
const validateDesignName = (name) => {
|
||||
if (/^([a-z]+)$/.test(name)) return true
|
||||
else return ' 🙈 Please use only [a-z], no spaces, no capitals, no nothing 🤷'
|
||||
}
|
||||
|
||||
// Gets user input to figure out what to do
|
||||
export const getChoices = async () => {
|
||||
|
||||
const { template } = await prompts({
|
||||
type: 'select',
|
||||
name: 'template',
|
||||
message: 'What template would you like to use? 📑',
|
||||
choices: [
|
||||
{ title: 'From Scratch', value: 'scratch', description: 'Create a design from scratch' },
|
||||
{ title: 'Extend Brian', value: 'brian', description: "Extend the Brian design (basic torso block for menswear)" },
|
||||
{ title: 'Extend Bent', value: 'bent', description: "Extend the Bent design (like brian with added two-part sleeve)" },
|
||||
{ title: 'Extend Bella', value: 'bella', description: "Extend the Bella design (womenswear torso block)" },
|
||||
{ title: 'Extend Breanna', value: 'breanna', description: "Extend the Breanna design (womenswear torso block - YMMV)" },
|
||||
{ title: 'Extend Titan', value: 'titan', description: "Extend the Titan design (gender-neutral trouser block)" },
|
||||
],
|
||||
initial: 0,
|
||||
})
|
||||
|
||||
const { name } = await prompts({
|
||||
type: 'text',
|
||||
name: 'name',
|
||||
message: 'What name would you like the design to have? 🏷️ ([a-z] only)',
|
||||
validate: validateDesignName,
|
||||
})
|
||||
|
||||
const { manager } = await prompts({
|
||||
type: 'select',
|
||||
name: 'manager',
|
||||
message: 'Last but not least, what package manager do you use? 📦',
|
||||
choices: [
|
||||
{ title: 'yarn', value: 'yarn', description: 'Yarn - Nice if you have it' },
|
||||
{ title: 'npm', value: 'npm', description: "NPM - Comes with NodeJS" },
|
||||
],
|
||||
initial: 0,
|
||||
})
|
||||
|
||||
return { template, name, manager }
|
||||
}
|
||||
|
||||
// Keep track of directories that need to be created
|
||||
const dirs = {}
|
||||
const ensureDir = async (file, suppress=false) => {
|
||||
const dir = suppress
|
||||
? dirname(file.replace(suppress))
|
||||
: dirname(file)
|
||||
if (!dirs[dir]) {
|
||||
await mkdir(dir, { recursive: true })
|
||||
dirs[dir] = true
|
||||
}
|
||||
}
|
||||
|
||||
// Helper method to copy template files
|
||||
const copyTemplate = async (config, choices) => {
|
||||
|
||||
// Copy files in parallel rather than using await
|
||||
const promises = []
|
||||
|
||||
// Copy shared files
|
||||
for (const from of config.files.shared) {
|
||||
const to = config.dest + from.slice(config.source.shared.length)
|
||||
if (!dirs[to]) await ensureDir(to)
|
||||
console.log(to)
|
||||
promises.push(copyFile(from, to))
|
||||
}
|
||||
|
||||
// Template files
|
||||
for (const from of config.files.template) {
|
||||
const to = config.dest + from.slice(config.source.template.length)
|
||||
if (!dirs[to]) await ensureDir(to)
|
||||
if (extname(from) === '.json') {
|
||||
// Template out package.json
|
||||
const src = await readFile(from, 'utf-8')
|
||||
promises.push(
|
||||
writeFile(to, mustache.render(src, { name: choices.name }))
|
||||
)
|
||||
} else {
|
||||
// Just copy the file
|
||||
promises.push(copyFile(from, to))
|
||||
}
|
||||
}
|
||||
|
||||
await Promise.all(promises)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// Helper method to run [yarn|npm] install
|
||||
const installDependencies = async (config, choices) => await execa(
|
||||
`${choices.manager} install`,
|
||||
{
|
||||
cwd: config.dest,
|
||||
shell: true
|
||||
}
|
||||
)
|
||||
|
||||
// Helper method to download web environment
|
||||
const downloadLabFiles = async (config) => {
|
||||
const base = 'https://raw.githubusercontent.com'
|
||||
const promises = []
|
||||
for (const dir in config.fetch) {
|
||||
for (const file of config.fetch[dir]) {
|
||||
const to = (typeof file === 'string')
|
||||
? join(config.dest, file)
|
||||
: join(config.dest, file.to)
|
||||
if (!dirs[to]) await ensureDir(to)
|
||||
console.log(to)
|
||||
promises.push(
|
||||
axios.get(`${base}/${config.repo}/${config.branch}/${dir}/${typeof file === 'string' ? file : file.from}`)
|
||||
.catch(err => console.log(err))
|
||||
.then(res => promises.push(writeFile(to, res.data)))
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
await Promise.all(promises)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// Creates the environment based on the user's choices
|
||||
export const createEnvironment = async (choices) => {
|
||||
|
||||
// Store directories for re-use
|
||||
config.cwd = process.cwd()
|
||||
config.source = {
|
||||
root: dirname(process.argv[1]),
|
||||
template: dirname(process.argv[1]) + `/templates/from-${choices.template}`,
|
||||
shared: dirname(process.argv[1]) + `/shared`
|
||||
}
|
||||
config.dest = join(config.cwd, choices.name)
|
||||
|
||||
// Create target directory
|
||||
await mkdir(config.dest, { recursive: true })
|
||||
|
||||
// Find files
|
||||
config.files = {
|
||||
template: await rdir(config.source.template),
|
||||
shared: await rdir(config.source.shared),
|
||||
}
|
||||
|
||||
// Copy/Template files
|
||||
await copyTemplate(config, choices)
|
||||
|
||||
// Install dependencies
|
||||
await oraPromise(
|
||||
installDependencies(config, choices),
|
||||
chalk.white.bold('Installing dependencies')+chalk.white.dim(' (This will take a while)')
|
||||
)
|
||||
|
||||
// Fetch web components
|
||||
await oraPromise(
|
||||
downloadLabFiles(config),
|
||||
chalk.white.bold('Downloading web components')+chalk.white.dim(' (This too will take a while)')
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
//const handlebars = require('handlebars')
|
||||
//const execa = require('execa')
|
||||
//const fs = require('fs')
|
||||
//const globby = require('globby')
|
||||
//const normalize = require('normalize-path')
|
||||
//const mkdirp = require('make-dir')
|
||||
//const ora = require('ora')
|
||||
//const pEachSeries = require('p-each-series')
|
||||
|
||||
//const pkg = require('../package')
|
||||
/*
|
||||
const templateBlacklist = new Set([path.join('example', 'public', 'favicon.ico')])
|
||||
|
||||
module.exports = async (info) => {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if (git) {
|
||||
const promise = module.exports.initGitRepo({ dest })
|
||||
ora.promise(promise, 'Initializing git repo')
|
||||
await promise
|
||||
}
|
||||
|
||||
|
||||
return dest
|
||||
}
|
||||
|
||||
module.exports.initGitRepo = async (opts) => {
|
||||
const { dest } = opts
|
||||
|
||||
const gitIgnorePath = path.join(dest, '.gitignore')
|
||||
fs.writeFileSync(
|
||||
gitIgnorePath,
|
||||
`
|
||||
# See https://help.github.com/ignore-files/ for more about ignoring files.
|
||||
|
||||
# dependencies
|
||||
node_modules
|
||||
|
||||
# builds
|
||||
build
|
||||
dist
|
||||
.rpt2_cache
|
||||
|
||||
# misc
|
||||
.DS_Store
|
||||
.env
|
||||
.env.local
|
||||
.env.development.local
|
||||
.env.test.local
|
||||
.env.production.local
|
||||
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
`,
|
||||
'utf8'
|
||||
)
|
||||
|
||||
const cmd = `git init && git add . && git commit -m ":tada: Initialized ${pkg.name}@${pkg.version} with create-freesewing-pattern"`
|
||||
return execa.sync(cmd, { cwd: dest, shell: true })
|
||||
}
|
||||
|
||||
*/
|
57
packages/new-design/package.json
Normal file
57
packages/new-design/package.json
Normal file
|
@ -0,0 +1,57 @@
|
|||
{
|
||||
"name": "@freesewing/new-design",
|
||||
"version": "2.21.0-rc.0",
|
||||
"description": "Initializer package for a new FreeSewing design: npx @freesewing/new-design",
|
||||
"author": "Joost De Cock <joost@joost.at> (https://github.com/joostdecock)",
|
||||
"homepage": "https://freesewing.org/",
|
||||
"repository": "github:freesewing/freesewing",
|
||||
"license": "MIT",
|
||||
"bugs": {
|
||||
"url": "https://github.com/freesewing/freesewing/issues"
|
||||
},
|
||||
"funding": {
|
||||
"type": "individual",
|
||||
"url": "https://freesewing.org/patrons/join"
|
||||
},
|
||||
"keywords": [
|
||||
"freesewing",
|
||||
"freesewing"
|
||||
],
|
||||
"main": "dist/index.js",
|
||||
"module": "dist/index.mjs",
|
||||
"scripts": {
|
||||
"build": "SITE=new-design/shared node ../../sites/shared/prebuild/i18n-only.mjs",
|
||||
"clean": "rimraf dist",
|
||||
"mbuild": "NO_MINIFY=1 node build.js",
|
||||
"symlink": "mkdir -p ./node_modules/@freesewing && cd ./node_modules/@freesewing && ln -s -f ../../../* . && cd -",
|
||||
"test": "echo \"new-design: No tests configured. Perhaps you'd like to do this?\" && exit 0",
|
||||
"vbuild": "VERBOSE=1 node build.js",
|
||||
"lab": "cd ../../sites/lab && yarn start",
|
||||
"tips": "node ../../scripts/help.mjs",
|
||||
"cibuild_step6": "node build.js"
|
||||
},
|
||||
"peerDependencies": {},
|
||||
"dependencies": {
|
||||
"axios": "^0.27.2",
|
||||
"chalk": "^5.0.1",
|
||||
"execa": "^6.1.0",
|
||||
"mustache": "^4.2.0",
|
||||
"ora": "^6.1.0",
|
||||
"prompts": "^2.4.2",
|
||||
"recursive-readdir": "^2.2.2"
|
||||
},
|
||||
"devDependencies": {},
|
||||
"files": [
|
||||
"dist/*",
|
||||
"README.md",
|
||||
"package.json"
|
||||
],
|
||||
"publishConfig": {
|
||||
"access": "public",
|
||||
"tag": "next"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14.0.0",
|
||||
"npm": ">=6"
|
||||
}
|
||||
}
|
100
packages/new-design/shared/lab/components/header.js
Normal file
100
packages/new-design/shared/lab/components/header.js
Normal file
|
@ -0,0 +1,100 @@
|
|||
import { useState, useEffect } from 'react'
|
||||
import Logo from 'shared/components/logos/freesewing.js'
|
||||
import Link from 'next/link'
|
||||
import ThemePicker from 'shared/components/theme-picker.js'
|
||||
import LocalePicker from 'shared/components/locale-picker.js'
|
||||
import CloseIcon from 'shared/components/icons/close.js'
|
||||
import MenuIcon from 'shared/components/icons/menu.js'
|
||||
import DocsIcon from 'shared/components/icons/docs.js'
|
||||
import HelpIcon from 'shared/components/icons/help.js'
|
||||
import { useTranslation } from 'next-i18next'
|
||||
|
||||
const Right = props => (
|
||||
<svg xmlns="http://www.w3.org/2000/svg" className="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M17 8l4 4m0 0l-4 4m4-4H3" />
|
||||
</svg>
|
||||
)
|
||||
const Left = props => (
|
||||
<svg xmlns="http://www.w3.org/2000/svg" className="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M10 19l-7-7m0 0l7-7m-7 7h18" />
|
||||
</svg>
|
||||
)
|
||||
|
||||
const Header = ({ app }) => {
|
||||
const { t } = useTranslation(['common'])
|
||||
|
||||
const [prevScrollPos, setPrevScrollPos] = useState(0)
|
||||
const [show, setShow] = useState(true)
|
||||
|
||||
useEffect(() => {
|
||||
if (typeof window !== 'undefined') {
|
||||
const handleScroll = () => {
|
||||
const curScrollPos = (typeof window !== 'undefined') ? window.pageYOffset : 0
|
||||
if (curScrollPos >= prevScrollPos) {
|
||||
if (show && curScrollPos > 20) setShow(false)
|
||||
}
|
||||
else setShow(true)
|
||||
setPrevScrollPos(curScrollPos)
|
||||
}
|
||||
window.addEventListener('scroll', handleScroll)
|
||||
return () => window.removeEventListener('scroll', handleScroll)
|
||||
}
|
||||
}, [prevScrollPos, show])
|
||||
|
||||
|
||||
return (
|
||||
<header className={`
|
||||
fixed top-0 left-0
|
||||
bg-neutral
|
||||
w-full
|
||||
z-30
|
||||
transition-transform
|
||||
drop-shadow-xl
|
||||
${show ? '': 'fixed top-0 left-0 -translate-y-20'}
|
||||
${app.loading ? "theme-gradient loading" : ""}
|
||||
`}>
|
||||
<div className="max-w-6xl m-auto">
|
||||
<div className="p-2 flex flex-row gap-2 justify-between text-neutral-content">
|
||||
<button
|
||||
className={`
|
||||
btn btn-sm
|
||||
text-neutral-content bg-transparent
|
||||
border border-transparent
|
||||
hover:bg-transparent hover:border-base-100
|
||||
md:hidden
|
||||
h-12
|
||||
`}
|
||||
onClick={app.togglePrimaryMenu}>
|
||||
{app.primaryMenu
|
||||
? <><CloseIcon /><span className="opacity-50 pl-2 flex flex-row items-center gap-1"><Left />swipe</span></>
|
||||
: <><MenuIcon /><span className="opacity-50 pl-2 flex flex-row items-center gap-1"><Right />swipe</span></>
|
||||
}
|
||||
</button>
|
||||
<div className="hidden md:flex flex-row items-center">
|
||||
<a role="button" className="btn btn-link btn-sm text-neutral-content" href="https://freesewing.dev/">
|
||||
<DocsIcon /><span className="ml-2">{t('docs')}</span>
|
||||
</a>
|
||||
<Link href="/support">
|
||||
<a role="button" className="btn btn-link btn-sm text-neutral-content ">
|
||||
<DocsIcon /><span className="ml-2">{t('support')}</span>
|
||||
</a>
|
||||
</Link>
|
||||
</div>
|
||||
<div className="hidden md:flex md:flex-row gap-2">
|
||||
<Link href="/">
|
||||
<a role="button" className="btn btn-link btn-sm text-neutral-content h-12 font-normal lowercase text-2xl">
|
||||
<span className="font-black px-1 normal-case">FreeSewing</span>
|
||||
</a>
|
||||
</Link>
|
||||
</div>
|
||||
<div className="hidden md:flex flex-row items-center">
|
||||
<ThemePicker app={app} />
|
||||
<LocalePicker app={app} />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
)
|
||||
}
|
||||
|
||||
export default Header
|
69
packages/new-design/shared/lab/components/layouts/bare.js
Normal file
69
packages/new-design/shared/lab/components/layouts/bare.js
Normal file
|
@ -0,0 +1,69 @@
|
|||
import React from 'react'
|
||||
import { useRouter } from 'next/router'
|
||||
import Link from 'next/link'
|
||||
// Shared components
|
||||
import Logo from 'shared/components/logos/freesewing.js'
|
||||
import Aside from 'shared/components/navigation/aside'
|
||||
import get from 'lodash.get'
|
||||
import { BeforeNav } from './lab'
|
||||
|
||||
const PageTitle = ({ app, slug, title }) => {
|
||||
if (title) return <h1>{title}</h1>
|
||||
if (slug) return <h1>{get(app.navigation, slug.split('/')).__title}</h1>
|
||||
|
||||
return <h1>FIXME: This page has no title</h1>
|
||||
}
|
||||
|
||||
const Breadcrumbs = ({ app, slug=false, title }) => {
|
||||
if (!slug) return null
|
||||
const crumbs = []
|
||||
const chunks = slug.split('/')
|
||||
for (const i in chunks) {
|
||||
const j = parseInt(i)+parseInt(1)
|
||||
const page = get(app.navigation, chunks.slice(0,j))
|
||||
if (page) crumbs.push([page.__linktitle, '/'+chunks.slice(0,j).join('/'), (j < chunks.length)])
|
||||
}
|
||||
|
||||
return (
|
||||
<ul className="flex flex-row flex-wrap gap-2 font-bold">
|
||||
<li>
|
||||
<Link href="/">
|
||||
<a title="To the homepage" className="text-base-content">
|
||||
<Logo size={24} fill="currentColor" stroke={false}/>
|
||||
</a>
|
||||
</Link>
|
||||
</li>
|
||||
{crumbs.map(crumb => (
|
||||
<React.Fragment key={crumb[1]}>
|
||||
<li className="text-base-content">»</li>
|
||||
<li>
|
||||
{crumb[2]
|
||||
? (
|
||||
<Link href={crumb[1]}>
|
||||
<a title={crumb[0]} className="text-secondary hover:text-secondary-focus">
|
||||
{crumb[0]}
|
||||
</a>
|
||||
</Link>
|
||||
)
|
||||
: <span className="text-base-content">{crumb[0]}</span>
|
||||
}
|
||||
</li>
|
||||
</React.Fragment>
|
||||
))}
|
||||
</ul>
|
||||
)
|
||||
}
|
||||
|
||||
const DefaultLayout = ({ app, title=false, children=[] }) => {
|
||||
const router = useRouter()
|
||||
const slug = router.asPath.slice(1)
|
||||
|
||||
return (
|
||||
<>
|
||||
<Aside app={app} slug={slug} before={<BeforeNav app={app}/>} mobileOnly />
|
||||
{children}
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
export default DefaultLayout
|
14
packages/new-design/shared/lab/components/layouts/docs.js
Normal file
14
packages/new-design/shared/lab/components/layouts/docs.js
Normal file
|
@ -0,0 +1,14 @@
|
|||
import React from 'react'
|
||||
import { useRouter } from 'next/router'
|
||||
import Link from 'next/link'
|
||||
import Aside from 'shared/components/navigation/aside'
|
||||
|
||||
const DocsLayout = ({ app, title=false, children=[] }) => (
|
||||
<div className="max-w-7xl m-auto mt-32">
|
||||
{title && <h1 className="capitalize">{title}</h1>}
|
||||
<Aside app={app} mobileOnly />
|
||||
{children}
|
||||
</div>
|
||||
)
|
||||
|
||||
export default DocsLayout
|
47
packages/new-design/shared/lab/components/layouts/lab.js
Normal file
47
packages/new-design/shared/lab/components/layouts/lab.js
Normal file
|
@ -0,0 +1,47 @@
|
|||
import ThemePicker from 'shared/components/theme-picker.js'
|
||||
import LocalePicker from 'shared/components/locale-picker.js'
|
||||
|
||||
export const BeforeNav = ({ app }) => (
|
||||
<>
|
||||
<div className="md:hidden flex flex-row flex-wrap sm:flex-nowrap gap-2 mb-2">
|
||||
<ThemePicker app={app} />
|
||||
<LocalePicker app={app} />
|
||||
</div>
|
||||
<div className="md:hidden flex flex-row flex-wrap sm:flex-nowrap gap-2 mb-2">
|
||||
</div>
|
||||
</>
|
||||
)
|
||||
|
||||
const LabLayout = ({ app, AltMenu, children=[] }) => (
|
||||
<div className="py-24 lg:py-36 flex flex-row">
|
||||
<div className="w-full px-8">
|
||||
{children}
|
||||
</div>
|
||||
<aside className={`
|
||||
fixed top-0 right-0
|
||||
pt-20 pb-8 px-8
|
||||
md:pt-0
|
||||
md:relative md:transform-none
|
||||
h-screen w-screen
|
||||
bg-base-100
|
||||
md:bg-base-50
|
||||
md:flex
|
||||
md:sticky
|
||||
overflow-y-scroll
|
||||
z-20
|
||||
bg-base-100 text-base-content
|
||||
transition-all
|
||||
xl:w-1/4
|
||||
${app.primaryMenu ? '' : 'translate-x-[-100%]'} transition-transform
|
||||
md:flex-row
|
||||
md:w-80
|
||||
lg:w-96
|
||||
shrink-0
|
||||
`}>
|
||||
<BeforeNav app={app}/>
|
||||
{AltMenu}
|
||||
</aside>
|
||||
</div>
|
||||
)
|
||||
|
||||
export default LabLayout
|
5
packages/new-design/shared/lab/components/mdx/dot.js
Normal file
5
packages/new-design/shared/lab/components/mdx/dot.js
Normal file
|
@ -0,0 +1,5 @@
|
|||
// Noop placeholder
|
||||
const Noop = props => null
|
||||
|
||||
export default Noop
|
||||
|
4
packages/new-design/shared/lab/components/search.js
Normal file
4
packages/new-design/shared/lab/components/search.js
Normal file
|
@ -0,0 +1,4 @@
|
|||
// Noop placeholder
|
||||
const Noop = props => null
|
||||
|
||||
export default Noop
|
58
packages/new-design/shared/lab/hooks/useApp.js
Normal file
58
packages/new-design/shared/lab/hooks/useApp.js
Normal file
|
@ -0,0 +1,58 @@
|
|||
import { useState } from 'react'
|
||||
// Stores state in local storage
|
||||
import useLocalStorage from 'shared/hooks/useLocalStorage.js'
|
||||
// Locale and translation
|
||||
import { useRouter } from 'next/router'
|
||||
import { useTranslation } from 'next-i18next'
|
||||
import { capitalize } from 'shared/utils.mjs'
|
||||
import useTheme from 'shared/hooks/useTheme'
|
||||
|
||||
function useApp(full = true) {
|
||||
|
||||
// Load translation method
|
||||
const locale = useRouter().locale
|
||||
const { t } = useTranslation(['app'])
|
||||
|
||||
// Persistent state
|
||||
const [account, setAccount] = useLocalStorage('account', { username: false })
|
||||
const [theme, setTheme] = useTheme();
|
||||
|
||||
// React State
|
||||
const [primaryMenu, setPrimaryMenu] = useState(false)
|
||||
const [navigation, setNavigation] = useState({})
|
||||
const [slug, setSlug] = useState('/')
|
||||
const [loading, setLoading] = useState(false)
|
||||
|
||||
// State methods
|
||||
const togglePrimaryMenu = () => setPrimaryMenu(!primaryMenu)
|
||||
|
||||
return {
|
||||
// Static vars
|
||||
site: 'lab',
|
||||
|
||||
// i18n
|
||||
locale,
|
||||
|
||||
// State
|
||||
loading,
|
||||
navigation,
|
||||
primaryMenu,
|
||||
slug,
|
||||
theme,
|
||||
|
||||
// State setters
|
||||
setLoading,
|
||||
setNavigation,
|
||||
setPrimaryMenu,
|
||||
setSlug,
|
||||
setTheme,
|
||||
startLoading: () => { setLoading(true); setPrimaryMenu(false) }, // Always close menu when navigating
|
||||
stopLoading: () => setLoading(false),
|
||||
|
||||
// State handlers
|
||||
togglePrimaryMenu,
|
||||
}
|
||||
}
|
||||
|
||||
export default useApp
|
||||
|
13
packages/new-design/shared/next-i18next.config.js
Normal file
13
packages/new-design/shared/next-i18next.config.js
Normal file
|
@ -0,0 +1,13 @@
|
|||
// See: https://github.com/isaachinman/next-i18next
|
||||
module.exports = {
|
||||
i18n: {
|
||||
defaultLocale: 'en',
|
||||
locales: ['en', 'de', 'es', 'fr', 'nl'],
|
||||
defaultNS: 'common',
|
||||
},
|
||||
interpolation: {
|
||||
prefix: '{',
|
||||
suffix: '}',
|
||||
},
|
||||
localeStructure: '{lng}/{ns}',
|
||||
}
|
26
packages/new-design/shared/next.config.mjs
Normal file
26
packages/new-design/shared/next.config.mjs
Normal file
|
@ -0,0 +1,26 @@
|
|||
import path from 'path'
|
||||
import i18nConfig from './next-i18next.config.js'
|
||||
|
||||
const config = {
|
||||
experimental: {
|
||||
externalDir: true,
|
||||
},
|
||||
i18n: i18nConfig.i18n,
|
||||
pageExtensions: [ 'js', 'mjs' ],
|
||||
webpack: (config, options) => {
|
||||
|
||||
// Suppress warnings about importing version from package.json
|
||||
// We'll deal with it in v3 of FreeSewing
|
||||
config.ignoreWarnings = [
|
||||
/only default export is available soon/
|
||||
]
|
||||
|
||||
// Aliases
|
||||
config.resolve.alias.shared = path.resolve('./shared/')
|
||||
config.resolve.alias.site = path.resolve('./lab/')
|
||||
config.resolve.alias.design = path.resolve('./')
|
||||
|
||||
return config
|
||||
}
|
||||
}
|
||||
export default config
|
6
packages/new-design/shared/pages/_app.js
Normal file
6
packages/new-design/shared/pages/_app.js
Normal file
|
@ -0,0 +1,6 @@
|
|||
import 'shared/styles/globals.css'
|
||||
import { appWithTranslation } from 'next-i18next'
|
||||
|
||||
const FreeSewingLab = ({ Component, pageProps }) => <Component {...pageProps} />
|
||||
|
||||
export default appWithTranslation(FreeSewingLab)
|
27
packages/new-design/shared/pages/design.js
Normal file
27
packages/new-design/shared/pages/design.js
Normal file
|
@ -0,0 +1,27 @@
|
|||
import design from 'design/src/index.js'
|
||||
import { serverSideTranslations } from 'next-i18next/serverSideTranslations'
|
||||
|
||||
import Page from 'site/components/wrappers/page.js'
|
||||
import useApp from 'site/hooks/useApp.js'
|
||||
import WorkbenchWrapper from 'shared/components/wrappers/workbench.js'
|
||||
import Layout from 'site/components/layouts/lab'
|
||||
|
||||
const WorkbenchPage = props => {
|
||||
const app = useApp()
|
||||
|
||||
return (
|
||||
<Page app={app}>
|
||||
<WorkbenchWrapper {...{ app, design, layout: Layout }} />
|
||||
</Page>
|
||||
)
|
||||
}
|
||||
|
||||
export default WorkbenchPage
|
||||
|
||||
export async function getStaticProps({ locale }) {
|
||||
return {
|
||||
props: {
|
||||
...(await serverSideTranslations(locale)),
|
||||
}
|
||||
}
|
||||
}
|
112
packages/new-design/shared/pages/index.js
Normal file
112
packages/new-design/shared/pages/index.js
Normal file
|
@ -0,0 +1,112 @@
|
|||
import Page from 'site/components/wrappers/page.js'
|
||||
import useApp from 'site/hooks/useApp.js'
|
||||
import { serverSideTranslations } from 'next-i18next/serverSideTranslations'
|
||||
import Layout from 'site/components/layouts/docs'
|
||||
import { useTranslation } from 'next-i18next'
|
||||
import ConfigIcon from 'shared/components/icons/settings'
|
||||
import CogIcon from 'shared/components/icons/cog'
|
||||
import HeartIcon from 'shared/components/icons/heart'
|
||||
import FsIcon from 'shared/components/icons/freesewing'
|
||||
import Link from 'next/link'
|
||||
import Popout from 'shared/components/popout'
|
||||
import LocaleIcon from 'shared/components/icons/i18n.js'
|
||||
import { useRouter } from 'next/router'
|
||||
import themes from 'shared/themes/index.js'
|
||||
|
||||
const gh = `<a class="text-secondary hover:text-secondary-focus"
|
||||
href="https://github.com/freesewing/freesewing">freesewing/freesewing</a>`
|
||||
const fsd = `<a class="text-secondary hover:text-secondary-focus"
|
||||
href="https://freesewing.dev">freesewing.dev</a>`
|
||||
|
||||
const translations = {
|
||||
sade: {
|
||||
en: `Stand-alone development environment`,
|
||||
nl: `Vrijstaande ontwikkeling omgeving`,
|
||||
},
|
||||
load: {
|
||||
en: `To your design`,
|
||||
nl: `Naar jouw ontwerp`,
|
||||
},
|
||||
tips: {
|
||||
en: <Popout tip compact>Edit the files in the <strong>design</strong> folder, and we'll auto-update your design</Popout>,
|
||||
nl: <Popout tip compact>Bewerk de bestanden in de <strong>design</strong> map, en we passen je ontwerp automatisch aan</Popout>,
|
||||
},
|
||||
}
|
||||
|
||||
const HomePage = (props) => {
|
||||
const app = useApp()
|
||||
const router = useRouter()
|
||||
const { t } = useTranslation(['common', 'patrons', 'locales', 'themes'])
|
||||
|
||||
return (
|
||||
<Page app={app} title={false} layout={Layout}>
|
||||
<div className="text-center w-full pt-20 pb-10 max-w-4xl m-auto">
|
||||
<FsIcon className="w-96 m-auto" />
|
||||
<h1>FreeSewing</h1>
|
||||
<h4>{translations.sade[app.locale]}</h4>
|
||||
<Link href="/design">
|
||||
<a className="btn btn-primary btn-lg h-20 my-8 mb-12">
|
||||
<span role='image' className="text-4xl px-6">👉</span>
|
||||
<span className="text-xl px-2">{translations.load[app.locale]}</span>
|
||||
<span role='image' className="text-4xl px-6">👈</span>
|
||||
</a>
|
||||
</Link>
|
||||
{translations.tips[app.locale]}
|
||||
</div>
|
||||
<div className="flex flex-row flex-wrap gap-4 w-full max-w-4xl m-auto justify-center">
|
||||
{router.locales.map(locale => (
|
||||
<Link href={router.asPath} locale={locale} key={locale}>
|
||||
<a className="btn btn-ghost text-base-content hover:bg-base-200">
|
||||
<span className="text-base-content">
|
||||
{t(`locales:${locale}`)}
|
||||
</span>
|
||||
</a>
|
||||
</Link>
|
||||
))}
|
||||
</div>
|
||||
<div className="flex flex-row flex-wrap gap-4 w-full max-w-4xl m-auto justify-center mt-4">
|
||||
{Object.keys(themes).map(theme => (
|
||||
<button
|
||||
key={theme}
|
||||
onClick={() => app.setTheme(theme)}
|
||||
className="btn btn-ghost hover:bg-base-200"
|
||||
>
|
||||
<span className="text-base-content">
|
||||
{t(`themes:${theme}Theme`)}
|
||||
</span>
|
||||
</button>
|
||||
))}
|
||||
</div>
|
||||
|
||||
|
||||
<div className="py-20">
|
||||
<h2>{t('patrons:supportFreesewing')}</h2>
|
||||
<div className="flex flex-row flex-wrap gap-2">
|
||||
<div>
|
||||
<p className="max-w-3xl">{t('patrons:patronLead')}</p>
|
||||
<p className="max-w-3xl">{t('patrons:patronPitch')}</p>
|
||||
</div>
|
||||
<a className="btn btn-accent btn-lg ">
|
||||
<span role='image' className="text-4xl px-4">🥰</span>
|
||||
<span className="px-2">{t('patrons:becomeAPatron')}</span>
|
||||
<span role='image' className="text-4xl px-4">🙏🏻</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</Page>
|
||||
)
|
||||
}
|
||||
|
||||
export default HomePage
|
||||
|
||||
export async function getStaticProps({ locale }) {
|
||||
return {
|
||||
props: {
|
||||
...(await serverSideTranslations(locale)),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
139
packages/new-design/shared/pages/support.js
Normal file
139
packages/new-design/shared/pages/support.js
Normal file
|
@ -0,0 +1,139 @@
|
|||
import Page from 'site/components/wrappers/page.js'
|
||||
import useApp from 'site/hooks/useApp.js'
|
||||
import { serverSideTranslations } from 'next-i18next/serverSideTranslations'
|
||||
import Layout from 'site/components/layouts/docs'
|
||||
import { useTranslation } from 'next-i18next'
|
||||
import DiscordIcon from 'shared/components/icons/discord'
|
||||
import Popout from 'shared/components/popout'
|
||||
import GithubIcon from 'shared/components/icons/github'
|
||||
import CcIcon from 'shared/components/icons/community'
|
||||
import HeartIcon from 'shared/components/icons/heart'
|
||||
import DocsIcon from 'shared/components/icons/docs'
|
||||
|
||||
const gh = `<a class="text-secondary hover:text-secondary-focus"
|
||||
href="https://github.com/freesewing/freesewing">freesewing/freesewing</a>`
|
||||
const fsd = `<a class="text-secondary hover:text-secondary-focus"
|
||||
href="https://freesewing.dev">freesewing.dev</a>`
|
||||
|
||||
const translations = {
|
||||
discord: {
|
||||
en: `Our Discord server on is the best place to ask questions, or hang
|
||||
out with other members of the FreeSewing community.`,
|
||||
nl: `Onze Discord server is de best plek om vragen te stellen, hulp te ontvangen,
|
||||
of gewoon een leuke tijd te spenderen met andere leden van de FreeSewing gemeenschap.`,
|
||||
},
|
||||
github: {
|
||||
en: `For bug reports, please create an issue in the ${gh} repository on Github.
|
||||
This is also where you'll find all our source code.`,
|
||||
nl: `Een bug gevonden? Maak dan een issue aan in de ${gh} repository op Github.
|
||||
Dit is ook waar je al de FreeSewing broncode kan vinden.`,
|
||||
},
|
||||
cc: {
|
||||
en: `Every two weeks, there's the FreeSewing contributor call, which is when we discuss
|
||||
ongoing issues, future plans, and news big and small about FreeSewing and its community.`,
|
||||
nl: `Elke twee weken is er de FreeSewing contributor call (Engelstalig), waar de FreeSewing
|
||||
vrijwilligers de lopende zaken bespreken. Ook de plannen voor de toekomst en groot en klein
|
||||
nieuws over FreeSewing en de gemeenschap komen aan bod.`
|
||||
},
|
||||
cc: {
|
||||
en: `Every two weeks, there's the FreeSewing contributor call, which is when we discuss
|
||||
ongoing issues, future plans, and news big and small about FreeSewing and its community.`,
|
||||
nl: `Elke twee weken is er de FreeSewing contributor call (Engelstalig), waar de FreeSewing
|
||||
vrijwilligers de lopende zaken bespreken. Ook de plannen voor de toekomst en groot en klein
|
||||
nieuws over FreeSewing en de gemeenschap komen aan bod.`
|
||||
},
|
||||
docs: {
|
||||
en: `Our documentation for developers hosted on ${fsd}. You can find guides and how-to's
|
||||
there, as well as reference documantation for FreeSewing's core API.
|
||||
<br /> <br />
|
||||
We stive to provide excellent documentation. So if something is not clear please, let us know.`,
|
||||
nl: `Onze documentatie voor ontwikkelaars is beschikbaar op ${fsd}. Je vindt er guides en how-to's,
|
||||
alsook de referentie documentatie voor FreeSewing's core API.
|
||||
<br /> <br />
|
||||
We streven ernaar om uitstekende documentatie te voorzien. Dus als er iets niet duidelijk is, laat
|
||||
het ons dan zeker weten.`,
|
||||
},
|
||||
}
|
||||
|
||||
const SupportPage = (props) => {
|
||||
const app = useApp()
|
||||
const { t } = useTranslation(['common', 'patrons'])
|
||||
return (
|
||||
<Page app={app} title={t('support')} layout={Layout}>
|
||||
|
||||
<h2>Discord</h2>
|
||||
<div className="flex flex-row flex-wrap gap-2">
|
||||
<p className="max-w-3xl">
|
||||
{translations.discord[app.locale]}
|
||||
</p>
|
||||
<a className="btn btn-primary btn-lg w-96"
|
||||
href="https://discord.freesewing.org/">
|
||||
<DiscordIcon />
|
||||
<span className="ml-4">discord.freesewing.org</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<h2>Github</h2>
|
||||
<div className="flex flex-row flex-wrap gap-2">
|
||||
<p className="max-w-3xl"
|
||||
dangerouslySetInnerHTML={{__html: translations.github[app.locale]}}/>
|
||||
<a className="btn btn-primary btn-outline btn-lg w-96"
|
||||
href="https://github.com/freesewing/freesewing">
|
||||
<GithubIcon />
|
||||
<span className="ml-4">github.com/freesewing</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<h2>{t('docs')}</h2>
|
||||
<div className="flex flex-row flex-wrap gap-2">
|
||||
<p className="max-w-3xl"
|
||||
dangerouslySetInnerHTML={{__html: translations.docs[app.locale]}}/>
|
||||
<a className="btn btn-primary btn-outline btn-lg w-96"
|
||||
href="https://freesewing.dev/">
|
||||
<DocsIcon />
|
||||
<span className="ml-4">www.FreeSewing.dev</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<h2>Contributor Calls</h2>
|
||||
<div className="flex flex-row flex-wrap gap-2">
|
||||
<p className="max-w-3xl"
|
||||
dangerouslySetInnerHTML={{__html: translations.cc[app.locale]}}/>
|
||||
<a className="btn btn-primary btn-outline btn-lg w-96"
|
||||
href="https://github.com/freesewing/freesewing/discussions?discussions_q=label%3A%22%3Atv%3A+fscc%22">
|
||||
<CcIcon />
|
||||
<span className="ml-4">Contributor Calls</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
<div className="py-20">
|
||||
<h2>{t('patrons:supportFreesewing')}</h2>
|
||||
<div className="flex flex-row flex-wrap gap-2">
|
||||
<div>
|
||||
<p className="max-w-3xl">{t('patrons:patronLead')}</p>
|
||||
<p className="max-w-3xl">{t('patrons:patronPitch')}</p>
|
||||
</div>
|
||||
<a className="btn btn-accent btn-lg w-96">
|
||||
<HeartIcon className="fill-accent-content stroke-accent-content w-6 h-6"/>
|
||||
<span className="ml-4">{t('patrons:becomeAPatron')}</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</Page>
|
||||
)
|
||||
}
|
||||
|
||||
export default SupportPage
|
||||
|
||||
export async function getStaticProps({ locale }) {
|
||||
return {
|
||||
props: {
|
||||
...(await serverSideTranslations(locale)),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
5
packages/new-design/shared/postcss.config.js
Normal file
5
packages/new-design/shared/postcss.config.js
Normal file
|
@ -0,0 +1,5 @@
|
|||
// Can't seem to make this work as ESM
|
||||
const config = require('./shared/config/postcss.config.js')
|
||||
|
||||
module.exports = config
|
||||
|
0
packages/new-design/shared/public/locales/de/.gitkeep
Normal file
0
packages/new-design/shared/public/locales/de/.gitkeep
Normal file
0
packages/new-design/shared/public/locales/en/.gitkeep
Normal file
0
packages/new-design/shared/public/locales/en/.gitkeep
Normal file
0
packages/new-design/shared/public/locales/es/.gitkeep
Normal file
0
packages/new-design/shared/public/locales/es/.gitkeep
Normal file
0
packages/new-design/shared/public/locales/fr/.gitkeep
Normal file
0
packages/new-design/shared/public/locales/fr/.gitkeep
Normal file
0
packages/new-design/shared/public/locales/nl/.gitkeep
Normal file
0
packages/new-design/shared/public/locales/nl/.gitkeep
Normal file
|
@ -0,0 +1,40 @@
|
|||
import CopyToClipboard from 'shared/components/copy-to-clipboard'
|
||||
|
||||
const names = {
|
||||
json: 'JSON',
|
||||
yaml: 'YAML',
|
||||
}
|
||||
|
||||
const Highlight = (props) => {
|
||||
|
||||
let language = 'txt'
|
||||
if (props.language) language = props.language
|
||||
if (props.children?.props?.className) {
|
||||
language = props.children.props.className.split('-').pop()
|
||||
}
|
||||
const preProps = {
|
||||
className: `language-${language} hljs text-base lg:text-lg whitespace-pre overflow-scroll pr-4`
|
||||
}
|
||||
if (props.raw) preProps.dangerouslySetInnerHTML = { __html: props.raw }
|
||||
|
||||
return (
|
||||
<div className="hljs my-4">
|
||||
<div className={`
|
||||
flex flex-row justify-between
|
||||
text-xs uppercase font-bold text-neutral-content
|
||||
mt-1 border-b border-neutral-content border-opacity-25
|
||||
py-1 mb-2 lg:text-sm
|
||||
`}>
|
||||
<span> </span>
|
||||
<span>{names[language] ? names[language] : language}</span>
|
||||
<CopyToClipboard content={props.children} />
|
||||
</div>
|
||||
<pre {...preProps}>
|
||||
{props.children}
|
||||
</pre>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
export default Highlight
|
||||
|
63
packages/new-design/shared/src/box.js
Normal file
63
packages/new-design/shared/src/box.js
Normal file
|
@ -0,0 +1,63 @@
|
|||
export default function (part) {
|
||||
const {
|
||||
Point, points,
|
||||
Path, paths,
|
||||
Snippet, snippets,
|
||||
complete,
|
||||
options,
|
||||
sa,
|
||||
paperless,
|
||||
macro
|
||||
} = part.shorthand()
|
||||
|
||||
// Add points to make a box
|
||||
const w = 500 * options.size
|
||||
points.topLeft = new Point(0, 0)
|
||||
points.topRight = new Point(w, 0)
|
||||
points.bottomLeft = new Point(0, w / 2)
|
||||
points.bottomRight = new Point(w, w / 2)
|
||||
|
||||
// Create a path for the box outline
|
||||
paths.seam = new Path()
|
||||
.move(points.topLeft)
|
||||
.line(points.bottomLeft)
|
||||
.line(points.bottomRight)
|
||||
.line(points.topRight)
|
||||
.line(points.topLeft)
|
||||
.close()
|
||||
.attr('class', 'fabric')
|
||||
|
||||
// Complete?
|
||||
if (complete) {
|
||||
// Add a logo
|
||||
points.logo = points.topLeft.shiftFractionTowards(points.bottomRight, 0.5)
|
||||
snippets.logo = new Snippet('logo', points.logo)
|
||||
|
||||
// Add some text
|
||||
points.text = points.logo
|
||||
.shift(-90, w / 8)
|
||||
.attr('data-text', 'hello')
|
||||
.attr('data-text-class', 'center')
|
||||
|
||||
if (sa) {
|
||||
// Add seam allowance
|
||||
paths.sa = paths.seam.offset(sa).attr('class', 'fabric sa')
|
||||
}
|
||||
}
|
||||
|
||||
// Add dimensions for paperless mode
|
||||
if (paperless) {
|
||||
macro('hd', {
|
||||
from: points.bottomLeft,
|
||||
to: points.bottomRight,
|
||||
y: points.bottomLeft.y + sa + 15,
|
||||
})
|
||||
macro('vd', {
|
||||
from: points.bottomRight,
|
||||
to: points.topRight,
|
||||
x: points.topRight.x + sa + 15,
|
||||
})
|
||||
}
|
||||
|
||||
return part
|
||||
}
|
27
packages/new-design/shared/tailwind.config.js
Normal file
27
packages/new-design/shared/tailwind.config.js
Normal file
|
@ -0,0 +1,27 @@
|
|||
// Handle themes
|
||||
const themes = require('./shared/themes/index.js')
|
||||
|
||||
module.exports = {
|
||||
content: [
|
||||
'./pages/*.js',
|
||||
'./pages/**/*.js',
|
||||
'./shared/**/*.js',
|
||||
'./lab/**/*.js',
|
||||
],
|
||||
plugins: [require('daisyui'), require('tailwindcss/nesting')],
|
||||
daisyui: {
|
||||
styled: true,
|
||||
themes: [themes],
|
||||
base: true,
|
||||
utils: true,
|
||||
logs: true,
|
||||
rtl: false,
|
||||
},
|
||||
theme: {
|
||||
extend: {
|
||||
aspectRatio: {
|
||||
'9/16': '9 / 16'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
18
packages/new-design/templates/from-scratch/config.js
Normal file
18
packages/new-design/templates/from-scratch/config.js
Normal file
|
@ -0,0 +1,18 @@
|
|||
import { version } from './package.json'
|
||||
|
||||
export default {
|
||||
name: '{{name}}',
|
||||
version,
|
||||
optionGroups: {
|
||||
fit: ['size'],
|
||||
},
|
||||
measurements: [],
|
||||
dependencies: {},
|
||||
inject: {},
|
||||
hide: [],
|
||||
parts: ['box'],
|
||||
options: {
|
||||
size: { pct: 50, min: 10, max: 100 },
|
||||
},
|
||||
}
|
||||
|
93
packages/new-design/templates/from-scratch/package.json
Normal file
93
packages/new-design/templates/from-scratch/package.json
Normal file
|
@ -0,0 +1,93 @@
|
|||
{
|
||||
"name": "@freesewing/{{name}}",
|
||||
"version": "0.0.1",
|
||||
"description": "A new FreeSewing design",
|
||||
"author": "Joost De Cock <joost@joost.at> (https://github.com/joostdecock)",
|
||||
"homepage": "https://freesewing.org/",
|
||||
"repository": "github:freesewing/freesewing",
|
||||
"license": "MIT",
|
||||
"bugs": {
|
||||
"url": "https://github.com/freesewing/freesewing/issues"
|
||||
},
|
||||
"funding": {
|
||||
"type": "individual",
|
||||
"url": "https://freesewing.org/patrons/join"
|
||||
},
|
||||
"keywords": [
|
||||
"freesewing",
|
||||
"design",
|
||||
"diy",
|
||||
"fashion",
|
||||
"parametric design",
|
||||
"sewing",
|
||||
"sewing pattern"
|
||||
],
|
||||
"main": "dist/index.js",
|
||||
"module": "dist/index.mjs",
|
||||
"scripts": {
|
||||
"dev": "node --experimental-json-modules ./node_modules/.bin/next dev -p 8000",
|
||||
"build": "node build.js",
|
||||
"clean": "rimraf dist",
|
||||
"mbuild": "NO_MINIFY=1 node build.js",
|
||||
"test": "BABEL_ENV=production npx mocha tests/*.test.mjs --require @babel/register",
|
||||
"vbuild": "VERBOSE=1 node build.js"
|
||||
},
|
||||
"dependencies": {
|
||||
"@freesewing/core": "latest",
|
||||
"@freesewing/plugin-bundle": "latest",
|
||||
"@freesewing/config-helpers": "next"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@freesewing/plugin-svgattr": "latest",
|
||||
"@freesewing/plugin-theme": "latest",
|
||||
"@freesewing/plugin-i18n": "latest",
|
||||
"@freesewing/utils": "latest",
|
||||
"@freesewing/models": "latest",
|
||||
"js-yaml": "^4.1.0",
|
||||
"file-saver": "^2.0.5",
|
||||
"axios": "^0.27.2",
|
||||
"react": "^17.0.2",
|
||||
"react-dom": "^17.0.2",
|
||||
"react-sizeme": "^3.0.2",
|
||||
"react-zoom-pan-pinch": "^2.1.3",
|
||||
"react-markdown": "^8.0.3",
|
||||
"roughjs": "^4.5.2",
|
||||
"@tailwindcss/typography": "^0.5.2",
|
||||
"d3-dispatch": "^3.0.1",
|
||||
"d3-drag": "^3.0.0",
|
||||
"d3-selection": "^3.0.0",
|
||||
"daisyui": "^2.0.6",
|
||||
"lodash.get": "^4.4.2",
|
||||
"lodash.orderby": "^4.6.0",
|
||||
"lodash.set": "^4.3.2",
|
||||
"lodash.unset": "^4.5.2",
|
||||
"next": "latest",
|
||||
"next-i18next": "^11.0.0",
|
||||
"react-copy-to-clipboard": "^5.0.4",
|
||||
"react-hotkeys-hook": "^3.4.4",
|
||||
"react-swipeable": "^6.2.0",
|
||||
"react-timeago": "^6.2.1",
|
||||
"mocha": "^9.1.1",
|
||||
"chai": "^4.2.0",
|
||||
"autoprefixer": "^10.4.0",
|
||||
"eslint-config-next": "12.1.6",
|
||||
"highlight.js": "^11.5.1",
|
||||
"js-yaml": "^4.1.0",
|
||||
"postcss": "^8.4.14",
|
||||
"tailwindcss": "^3.1.3",
|
||||
"tailwindcss-open-variant": "^1.0.0"
|
||||
},
|
||||
"files": [
|
||||
"dist/*",
|
||||
"README.md",
|
||||
"package.json"
|
||||
],
|
||||
"publishConfig": {
|
||||
"access": "public",
|
||||
"tag": "next"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14.0.0",
|
||||
"npm": ">=6"
|
||||
}
|
||||
}
|
16
packages/new-design/templates/from-scratch/src/index.js
Normal file
16
packages/new-design/templates/from-scratch/src/index.js
Normal file
|
@ -0,0 +1,16 @@
|
|||
// Import dependencies
|
||||
import freesewing from '@freesewing/core'
|
||||
import plugins from '@freesewing/plugin-bundle'
|
||||
// Import configuration
|
||||
import config from '../config'
|
||||
// Import parts
|
||||
import draftBox from './box'
|
||||
|
||||
// Create the new design
|
||||
const Design = new freesewing.Design(config, plugins)
|
||||
|
||||
// Attach the draft methods to the prototype
|
||||
Design.prototype.draftBox = draftBox
|
||||
|
||||
// Export the new Design
|
||||
export default Design
|
|
@ -3,10 +3,7 @@ import OsiLogo from 'shared/components/logos/osi.js'
|
|||
import CreativeCommonsLogo from 'shared/components/logos/cc.js'
|
||||
import CcByLogo from 'shared/components/logos/cc-by.js'
|
||||
import { useTranslation } from 'next-i18next'
|
||||
import PageLink from 'shared/components/page-link'
|
||||
import DocsLink from 'shared/components/docs-link'
|
||||
import PinkedRibbon from 'shared/components/pinked-ribbon.js'
|
||||
import Worm from 'shared/components/worm.js'
|
||||
import Link from 'next/link'
|
||||
|
||||
import DiscordIcon from 'shared/components/icons/discord.js'
|
||||
|
|
|
@ -57,7 +57,7 @@ const Breadcrumbs = ({ app, slug=false, title }) => {
|
|||
const DefaultLayout = ({ app, title=false, children=[] }) => {
|
||||
const router = useRouter()
|
||||
const slug = router.asPath.slice(1)
|
||||
console.log(BeforeNav)
|
||||
|
||||
return (
|
||||
<>
|
||||
<Aside app={app} slug={slug} before={<BeforeNav app={app}/>} mobileOnly />
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import React from 'react'
|
||||
import MeasurementInput from '../inputs/measurement.js'
|
||||
import { withBreasts, withoutBreasts } from 'pkgs/models/src/index.js'
|
||||
import { withBreasts, withoutBreasts } from '@freesewing/models'
|
||||
import nonHuman from './non-human.js'
|
||||
import WithBreastsIcon from 'shared/components/icons/with-breasts.js'
|
||||
import WithoutBreastsIcon from 'shared/components/icons/without-breasts.js'
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
import { prebuildI18n } from './i18n.mjs'
|
||||
import { config as newDesignConfig } from '../../../packages/new-design/lib/config.mjs'
|
||||
|
||||
prebuildI18n(process.env.SITE)
|
||||
prebuildI18n(
|
||||
process.env.SITE,
|
||||
process.env.SITE==='new-design/shared' ? newDesignConfig.i18n : false
|
||||
)
|
||||
|
|
|
@ -19,7 +19,7 @@ const writeJson = (site, locale, namespace, content) => fs.writeFileSync(
|
|||
/*
|
||||
* Main method that does what needs doing
|
||||
*/
|
||||
export const prebuildI18n = async (site) => {
|
||||
export const prebuildI18n = async (site, only=false) => {
|
||||
// Iterate over locales
|
||||
for (const locale in locales) {
|
||||
// Only English for dev site
|
||||
|
@ -28,11 +28,13 @@ export const prebuildI18n = async (site) => {
|
|||
const loc = locales[locale]
|
||||
// Fan out into namespaces
|
||||
for (const namespace in loc) {
|
||||
if (!only || only.indexOf(namespace) !== -1) {
|
||||
writeJson(
|
||||
site, locale, namespace,
|
||||
loc[namespace]
|
||||
)
|
||||
}
|
||||
}
|
||||
writeJson(site, locale, 'locales', languages)
|
||||
}
|
||||
}
|
||||
|
|
78
yarn.lock
78
yarn.lock
|
@ -6514,6 +6514,14 @@ axios@^0.25.0:
|
|||
dependencies:
|
||||
follow-redirects "^1.14.7"
|
||||
|
||||
axios@^0.27.2:
|
||||
version "0.27.2"
|
||||
resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972"
|
||||
integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==
|
||||
dependencies:
|
||||
follow-redirects "^1.14.9"
|
||||
form-data "^4.0.0"
|
||||
|
||||
axobject-query@^2.2.0:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be"
|
||||
|
@ -7452,6 +7460,15 @@ bl@^4.0.3, bl@^4.1.0:
|
|||
inherits "^2.0.4"
|
||||
readable-stream "^3.4.0"
|
||||
|
||||
bl@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/bl/-/bl-5.0.0.tgz#6928804a41e9da9034868e1c50ca88f21f57aea2"
|
||||
integrity sha512-8vxFNZ0pflFfi0WXA3WQXlj6CaMEwsmh63I1CNp0q+wWv8sD0ARx1KovSQd0l2GkwrMIOyedq0EF1FxI+RCZLQ==
|
||||
dependencies:
|
||||
buffer "^6.0.3"
|
||||
inherits "^2.0.4"
|
||||
readable-stream "^3.4.0"
|
||||
|
||||
bluebird@3.5.1:
|
||||
version "3.5.1"
|
||||
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9"
|
||||
|
@ -7809,6 +7826,14 @@ buffer@^5.1.0, buffer@^5.2.1, buffer@^5.5.0, buffer@^5.6.0:
|
|||
base64-js "^1.3.1"
|
||||
ieee754 "^1.1.13"
|
||||
|
||||
buffer@^6.0.3:
|
||||
version "6.0.3"
|
||||
resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6"
|
||||
integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==
|
||||
dependencies:
|
||||
base64-js "^1.3.1"
|
||||
ieee754 "^1.2.1"
|
||||
|
||||
build-array@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/build-array/-/build-array-1.0.0.tgz#385e66f6b05c29ff16870c6e9944ccae77f7f100"
|
||||
|
@ -8247,6 +8272,11 @@ chalk@^5.0.0:
|
|||
resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.0.0.tgz#bd96c6bb8e02b96e08c0c3ee2a9d90e050c7b832"
|
||||
integrity sha512-/duVOqst+luxCQRKEo4bNxinsOQtMP80ZYm7mMqzuh5PociNL0PvmHFvREJ9ueYL2TxlHjBcmLCdmocx9Vg+IQ==
|
||||
|
||||
chalk@^5.0.1:
|
||||
version "5.0.1"
|
||||
resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.0.1.tgz#ca57d71e82bb534a296df63bbacc4a1c22b2a4b6"
|
||||
integrity sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==
|
||||
|
||||
char-regex@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf"
|
||||
|
@ -8541,7 +8571,7 @@ cli-progress@^3.7.0:
|
|||
dependencies:
|
||||
string-width "^4.2.0"
|
||||
|
||||
cli-spinners@^2.5.0:
|
||||
cli-spinners@^2.5.0, cli-spinners@^2.6.1:
|
||||
version "2.6.1"
|
||||
resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d"
|
||||
integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==
|
||||
|
@ -12023,7 +12053,7 @@ execa@^5.0.0, execa@^5.1.0, execa@^5.1.1:
|
|||
signal-exit "^3.0.3"
|
||||
strip-final-newline "^2.0.0"
|
||||
|
||||
execa@^6.0.0:
|
||||
execa@^6.0.0, execa@^6.1.0:
|
||||
version "6.1.0"
|
||||
resolved "https://registry.yarnpkg.com/execa/-/execa-6.1.0.tgz#cea16dee211ff011246556388effa0818394fb20"
|
||||
integrity sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==
|
||||
|
@ -12684,6 +12714,11 @@ follow-redirects@^1.0.0, follow-redirects@^1.14.0, follow-redirects@^1.14.7, fol
|
|||
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.8.tgz#016996fb9a11a100566398b1c6839337d7bfa8fc"
|
||||
integrity sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==
|
||||
|
||||
follow-redirects@^1.14.9:
|
||||
version "1.15.1"
|
||||
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5"
|
||||
integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==
|
||||
|
||||
font-awesome@^4.7.0:
|
||||
version "4.7.0"
|
||||
resolved "https://registry.yarnpkg.com/font-awesome/-/font-awesome-4.7.0.tgz#8fa8cf0411a1a31afd07b06d2902bb9fc815a133"
|
||||
|
@ -13981,7 +14016,7 @@ highlight.js@^10.4.1:
|
|||
resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531"
|
||||
integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==
|
||||
|
||||
highlight.js@^11.4.0:
|
||||
highlight.js@^11.4.0, highlight.js@^11.5.1:
|
||||
version "11.5.1"
|
||||
resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-11.5.1.tgz#027c24e4509e2f4dcd00b4a6dda542ce0a1f7aea"
|
||||
integrity sha512-LKzHqnxr4CrD2YsNoIf/o5nJ09j4yi/GcH5BnYz9UnVpZdS4ucMgvP61TDty5xJcFGRjnH4DpujkS9bHT3hq0Q==
|
||||
|
@ -14412,7 +14447,7 @@ identity-obj-proxy@^3.0.0:
|
|||
dependencies:
|
||||
harmony-reflect "^1.4.6"
|
||||
|
||||
ieee754@^1.1.13, ieee754@^1.1.4:
|
||||
ieee754@^1.1.13, ieee754@^1.1.4, ieee754@^1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
|
||||
integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
|
||||
|
@ -15088,6 +15123,11 @@ is-interactive@^1.0.0:
|
|||
resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e"
|
||||
integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==
|
||||
|
||||
is-interactive@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-2.0.0.tgz#40c57614593826da1100ade6059778d597f16e90"
|
||||
integrity sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==
|
||||
|
||||
is-ip@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/is-ip/-/is-ip-2.0.0.tgz#68eea07e8a0a0a94c2d080dd674c731ab2a461ab"
|
||||
|
@ -15385,6 +15425,11 @@ is-unicode-supported@^1.0.0:
|
|||
resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-1.1.0.tgz#9127b71f9fa82f52ca5c20e982e7bec0ee31ee1e"
|
||||
integrity sha512-lDcxivp8TJpLG75/DpatAqNzOpDPSpED8XNtrpBHTdQ2InQ1PbW78jhwSxyxhhu+xbVSast2X38bwj8atwoUQA==
|
||||
|
||||
is-unicode-supported@^1.1.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-1.2.0.tgz#f4f54f34d8ebc84a46b93559a036763b6d3e1014"
|
||||
integrity sha512-wH+U77omcRzevfIG8dDhTS0V9zZyweakfD01FULl97+0EHiJTTZtJqxPSkIIo/SDPv/i07k/C9jAPY+jwLLeUQ==
|
||||
|
||||
is-url-superb@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/is-url-superb/-/is-url-superb-4.0.0.tgz#b54d1d2499bb16792748ac967aa3ecb41a33a8c2"
|
||||
|
@ -17286,6 +17331,14 @@ log-symbols@^1.0.2:
|
|||
dependencies:
|
||||
chalk "^1.0.0"
|
||||
|
||||
log-symbols@^5.1.0:
|
||||
version "5.1.0"
|
||||
resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-5.1.0.tgz#a20e3b9a5f53fac6aeb8e2bb22c07cf2c8f16d93"
|
||||
integrity sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==
|
||||
dependencies:
|
||||
chalk "^5.0.0"
|
||||
is-unicode-supported "^1.1.0"
|
||||
|
||||
log-update@^2.3.0:
|
||||
version "2.3.0"
|
||||
resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708"
|
||||
|
@ -19288,7 +19341,7 @@ multiparty@^4.2.1:
|
|||
safe-buffer "5.2.1"
|
||||
uid-safe "2.1.5"
|
||||
|
||||
mustache@^4.0.1:
|
||||
mustache@^4.0.1, mustache@^4.2.0:
|
||||
version "4.2.0"
|
||||
resolved "https://registry.yarnpkg.com/mustache/-/mustache-4.2.0.tgz#e5892324d60a12ec9c2a73359edca52972bf6f64"
|
||||
integrity sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==
|
||||
|
@ -20509,6 +20562,21 @@ ora@^5.0.0, ora@^5.4.0, ora@^5.4.1:
|
|||
strip-ansi "^6.0.0"
|
||||
wcwidth "^1.0.1"
|
||||
|
||||
ora@^6.1.0:
|
||||
version "6.1.0"
|
||||
resolved "https://registry.yarnpkg.com/ora/-/ora-6.1.0.tgz#86aa07058c4e9fb91444412d103b0d7e01aca973"
|
||||
integrity sha512-CxEP6845hLK+NHFWZ+LplGO4zfw4QSfxTlqMfvlJ988GoiUeZDMzCvqsZkFHv69sPICmJH1MDxZoQFOKXerAVw==
|
||||
dependencies:
|
||||
bl "^5.0.0"
|
||||
chalk "^5.0.0"
|
||||
cli-cursor "^4.0.0"
|
||||
cli-spinners "^2.6.1"
|
||||
is-interactive "^2.0.0"
|
||||
is-unicode-supported "^1.1.0"
|
||||
log-symbols "^5.1.0"
|
||||
strip-ansi "^7.0.1"
|
||||
wcwidth "^1.0.1"
|
||||
|
||||
original@^1.0.0:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue