diff --git a/config/dependencies.yaml b/config/dependencies.yaml index c58e514fca0..62f1a73c519 100644 --- a/config/dependencies.yaml +++ b/config/dependencies.yaml @@ -85,6 +85,10 @@ jaeger: '@freesewing/brian': *freesewing '@freesewing/bent': *freesewing '@freesewing/plugin-bust': *freesewing +lily: + peer: + '@freesewing/titan': *freesewing + '@freesewing/paco': *freesewing new-design: _: 'axios': &axios '1.6.8' diff --git a/config/exceptions.yaml b/config/exceptions.yaml index 1c38f056d89..26a3f8214b2 100644 --- a/config/exceptions.yaml +++ b/config/exceptions.yaml @@ -34,6 +34,8 @@ packageJson: private: true lab: private: true + lily: + author: Anna Puk (https://github.com/anna-puk) lucy: author: SeaZeeZee (https://github.com/SeaZeeZee) lunetius: &starf diff --git a/config/software/designs.json b/config/software/designs.json index 0d40f83fe31..3fd16902a0e 100644 --- a/config/software/designs.json +++ b/config/software/designs.json @@ -573,14 +573,25 @@ "techniques": [] }, "naomiwu": { - "description": "A FreeSewing pattern for Naomi Wu's signature cargo skirt", "code": "Joost De Cock", - "design": ["Naomi Wu", "Joost De Cock"], + "description": "A FreeSewing pattern for Naomi Wu's signature cargo skirt", + "design": [ + "Naomi Wu", + "Joost De Cock" + ], "difficulty": 3, "lab": false, "org": false, - "tags": ["bottoms", "skirts"], - "techniques": ["button", "hem", "pocket", "lining"] + "tags": [ + "bottoms", + "skirts" + ], + "techniques": [ + "button", + "hem", + "pocket", + "lining" + ] }, "noble": { "code": "Wouter Van Wageningen", @@ -995,5 +1006,21 @@ "hem", "button" ] + }, + "lily": { + "code": "Anna Puk, Joost De Cock", + "description": "A FreeSewing pattern for basic leggings", + "design": "Anna Puk", + "difficulty": 2, + "lab": true, + "org": true, + "tags": [ + "bottoms" + ], + "techniques": [ + "elastic", + "curvedSeam", + "hem" + ] } -} +} \ No newline at end of file diff --git a/designs/aaron/package.json b/designs/aaron/package.json index ce49326fd04..ea3aaf7747d 100644 --- a/designs/aaron/package.json +++ b/designs/aaron/package.json @@ -55,7 +55,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/albert/package.json b/designs/albert/package.json index 2da5d562161..76d7bf1ecad 100644 --- a/designs/albert/package.json +++ b/designs/albert/package.json @@ -53,7 +53,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/bee/package.json b/designs/bee/package.json index 526713a6274..679d1ef1970 100644 --- a/designs/bee/package.json +++ b/designs/bee/package.json @@ -54,7 +54,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/bella/package.json b/designs/bella/package.json index 13a232d076a..9c2e7949bac 100644 --- a/designs/bella/package.json +++ b/designs/bella/package.json @@ -53,7 +53,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/benjamin/package.json b/designs/benjamin/package.json index 306fcec95e6..34e8c8a00b4 100644 --- a/designs/benjamin/package.json +++ b/designs/benjamin/package.json @@ -53,7 +53,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/bent/package.json b/designs/bent/package.json index 7f65d2d1937..ab30a071207 100644 --- a/designs/bent/package.json +++ b/designs/bent/package.json @@ -55,7 +55,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/bob/package.json b/designs/bob/package.json index 690304808e0..386c486b04f 100644 --- a/designs/bob/package.json +++ b/designs/bob/package.json @@ -53,7 +53,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/breanna/package.json b/designs/breanna/package.json index 98433c12533..23703212f1d 100644 --- a/designs/breanna/package.json +++ b/designs/breanna/package.json @@ -54,7 +54,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/brian/package.json b/designs/brian/package.json index f849821156b..1b8d3fef38d 100644 --- a/designs/brian/package.json +++ b/designs/brian/package.json @@ -54,7 +54,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/bruce/package.json b/designs/bruce/package.json index 0331cf23c1f..11c39cca02c 100644 --- a/designs/bruce/package.json +++ b/designs/bruce/package.json @@ -53,7 +53,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/carlita/package.json b/designs/carlita/package.json index d6d57077e8b..cacda75c2f2 100644 --- a/designs/carlita/package.json +++ b/designs/carlita/package.json @@ -57,7 +57,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/carlton/package.json b/designs/carlton/package.json index 993c41644db..527c7549a2d 100644 --- a/designs/carlton/package.json +++ b/designs/carlton/package.json @@ -56,7 +56,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/cathrin/package.json b/designs/cathrin/package.json index dd7914bed64..b1b143c31f4 100644 --- a/designs/cathrin/package.json +++ b/designs/cathrin/package.json @@ -53,7 +53,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/charlie/package.json b/designs/charlie/package.json index 18d70deb1f9..719da827cd5 100644 --- a/designs/charlie/package.json +++ b/designs/charlie/package.json @@ -55,7 +55,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/cornelius/package.json b/designs/cornelius/package.json index 6b25b344a0b..10cc99cdfe8 100644 --- a/designs/cornelius/package.json +++ b/designs/cornelius/package.json @@ -53,7 +53,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/diana/package.json b/designs/diana/package.json index ca162a5e64a..712695b98a1 100644 --- a/designs/diana/package.json +++ b/designs/diana/package.json @@ -55,7 +55,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/examples/package.json b/designs/examples/package.json index 62370fdfe04..4b9785928aa 100644 --- a/designs/examples/package.json +++ b/designs/examples/package.json @@ -49,7 +49,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/florence/package.json b/designs/florence/package.json index 2be92777915..78c0d6f8a46 100644 --- a/designs/florence/package.json +++ b/designs/florence/package.json @@ -53,7 +53,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/florent/package.json b/designs/florent/package.json index 5517dc5daaf..ccc886313fb 100644 --- a/designs/florent/package.json +++ b/designs/florent/package.json @@ -53,7 +53,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/gozer/package.json b/designs/gozer/package.json index 87a57c23f00..9f69b8e32fe 100644 --- a/designs/gozer/package.json +++ b/designs/gozer/package.json @@ -53,7 +53,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/hi/package.json b/designs/hi/package.json index 9d69fb4066d..0f168e4475a 100644 --- a/designs/hi/package.json +++ b/designs/hi/package.json @@ -53,7 +53,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/holmes/package.json b/designs/holmes/package.json index 8d117ccc321..4fd2f67ee9f 100644 --- a/designs/holmes/package.json +++ b/designs/holmes/package.json @@ -56,7 +56,7 @@ "@freesewing/plugin-gore": "3.2.0" }, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/hortensia/package.json b/designs/hortensia/package.json index 94509b15abb..6257ce5ecc6 100644 --- a/designs/hortensia/package.json +++ b/designs/hortensia/package.json @@ -53,7 +53,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/huey/package.json b/designs/huey/package.json index 5625fd7e419..c3add0f8398 100644 --- a/designs/huey/package.json +++ b/designs/huey/package.json @@ -55,7 +55,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/hugo/package.json b/designs/hugo/package.json index 07352d582f2..ca8b3417488 100644 --- a/designs/hugo/package.json +++ b/designs/hugo/package.json @@ -55,7 +55,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/jaeger/package.json b/designs/jaeger/package.json index 8057ca5af1c..062664a8321 100644 --- a/designs/jaeger/package.json +++ b/designs/jaeger/package.json @@ -56,7 +56,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/legend/package.json b/designs/legend/package.json index 393b84a3c33..c4c98decf3d 100644 --- a/designs/legend/package.json +++ b/designs/legend/package.json @@ -53,7 +53,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/lily/CHANGELOG.md b/designs/lily/CHANGELOG.md new file mode 100644 index 00000000000..83751ede3b8 --- /dev/null +++ b/designs/lily/CHANGELOG.md @@ -0,0 +1,17 @@ +# Change log for: @freesewing/lily + + +## 3.0.0 (2023-09-30) + +### Changed + + - All FreeSewing packages are now ESM only. + - All FreeSewing packages now use named exports. + - Dropped support for NodeJS 14. NodeJS 18 (LTS/hydrogen) or more recent is now required. + + +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. + diff --git a/designs/lily/README.md b/designs/lily/README.md new file mode 100644 index 00000000000..c95b8710c5b --- /dev/null +++ b/designs/lily/README.md @@ -0,0 +1,162 @@ +

@freesewing/lily on NPM + License: MIT + Code quality on DeepScan + Open issues tagged pkg:lily + All Contributors +

Follow @freesewing_org on Twitter + Chat with us on Discord + Become a FreeSewing Patron + Follow @freesewing_org on Twitter +

+ +# @freesewing/lily + +A FreeSewing pattern for basic leggings + + + +# FreeSewing + +> [!TIP] +>#### Support FreeSewing: Become a patron, or make a one-time donation 🥰 +> +> FreeSewing is an open source project maintained by Joost De Cock and financially supported by the FreeSewing patrons. +> +> If you feel FreeSewing is worthwhile, and you can spend a few coins without +hardship, then you should [join us and become a patron](https://freesewing.org/community/join). + +## What am I looking at? 🤔 + +This repository is the FreeSewing *monorepo* holding all FreeSewing's websites, documentation, designs, plugins, and other NPM packages. + +This folder holds: @freesewing/lily + +If you're not entirely sure what to do or how to start, type this command: + +``` +npm run tips +``` + +> [!NOTE] +> If you don't want to set up a dev environment, you can run it in your browser: +> +> [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/freesewing/freesewing) +> +> We recommend that you fork our repository and then +> put `gitpod.io/# to start up a browser-based dev environment of your own. + +## 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 +sewing patterns adapted to your measurements. + +If you're a developer, the FreeSewing documentation lives at [freesewing.dev](https://freesewing.dev/). +The FreeSewing [core library](https://freesewing.dev/reference/api/) is a *batteries-included* toolbox +for parametric design of sewing patterns. But FreeSewing also provides 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 @freesewing/new-design +``` + +Getting started guides are available for: +- [Linux](https://freesewing.dev/tutorials/getting-started-linux/) +- [MacOS](https://freesewing.dev/tutorials/getting-started-mac/) +- [Windows](https://freesewing.dev/tutorials/getting-started-windows/) + +The [pattern design tutorial](https://freesewing.dev/tutorials/pattern-design/) will +show you how to create your first parametric design. + +## Getting started ⚡ + +To get started with FreeSewing, you can spin up our development environment with: + +```bash +npx @freesewing/new-design +``` + +To work with FreeSewing's monorepo, you'll need [NodeJS v18](https://nodejs.org), [lerna](https://lerna.js.org/) and [yarn](https://yarnpkg.com/) on your system. +Once you have those, clone (or fork) this repo and run `yarn kickstart`: + +```bash +git clone git@github.com:freesewing/freesewing.git +cd freesewing +yarn kickstart +``` + +## Links 👩‍💻 + +**Official channels** + + - 💻 Makers website: [FreeSewing.org](https://freesewing.org) + - 💻 Developers website: [FreeSewing.dev](https://freesewing.dev) + - ✅ [Support](https://github.com/freesewing/freesewing/issues/new/choose), + [Issues](https://github.com/freesewing/freesewing/issues) & + [Discussions](https://github.com/freesewing/freesewing/discussions) on + [GitHub](https://github.com/freesewing/freesewing) + +**Social media** + + - 🐦 Twitter: [@freesewing_org](https://twitter.com/freesewing_org) + - 📷 Instagram: [@freesewing_org](https://instagram.com/freesewing_org) + +**Places the FreeSewing community hangs out** + + - 💬 [Discord](https://discord.freesewing.org/) + - 💬 [Facebook](https://www.facebook.com/groups/627769821272714/) + - 💬 [Reddit](https://www.reddit.com/r/freesewing/) + +## 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 🤯 + +For [Support](https://github.com/freesewing/freesewing/issues/new/choose), +please use the [Issues](https://github.com/freesewing/freesewing/issues) & +[Discussions](https://github.com/freesewing/freesewing/discussions) on +[GitHub](https://github.com/freesewing/freesewing). + diff --git a/designs/lily/build.mjs b/designs/lily/build.mjs new file mode 100644 index 00000000000..99ace216bc8 --- /dev/null +++ b/designs/lily/build.mjs @@ -0,0 +1,35 @@ +/* This script will build the package with esbuild */ +import esbuild from 'esbuild' +import pkg from './package.json' assert { type: '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: ['src/index.mjs'], + format: 'esm', + outfile: 'dist/index.mjs', + external: ['@freesewing'], + metafile: process.env.VERBOSE ? true : false, + minify: process.env.NO_MINIFY ? false : true, + sourcemap: true, +} + +// Let esbuild generate the build +const build = async () => { + const result = await esbuild.build(options).catch(() => process.exit(1)) + + if (process.env.VERBOSE) { + const info = await esbuild.analyzeMetafile(result.metafile) + console.log(info) + } +} +build() diff --git a/designs/lily/data.mjs b/designs/lily/data.mjs new file mode 100644 index 00000000000..ff5d4a4d600 --- /dev/null +++ b/designs/lily/data.mjs @@ -0,0 +1,4 @@ +// This file is auto-generated | All changes you make will be overwritten. +export const name = '@freesewing/lily' +export const version = '3.2.0' +export const data = { name, version } diff --git a/designs/lily/i18n/de.json b/designs/lily/i18n/de.json new file mode 100644 index 00000000000..185dfb452be --- /dev/null +++ b/designs/lily/i18n/de.json @@ -0,0 +1,7 @@ +{ + "t": "Lily", + "d": "A FreeSewing pattern that needs a description", + "p": { }, + "s": { }, + "o": { } +} diff --git a/designs/lily/i18n/en.json b/designs/lily/i18n/en.json new file mode 100644 index 00000000000..ad820c3445d --- /dev/null +++ b/designs/lily/i18n/en.json @@ -0,0 +1,24 @@ +{ + "t": "Lily", + "d": "A FreeSewing pattern for basic leggings", + "p": { + "back": "Back", + "front": "Front", + "waistband": "Waistband" + }, + "s": { + "adjustEase.t": "Adjust ease settings to match fabric stretch", + "adjustEase.d": "Knee, seat and waist ease should be set to fabric stretch * -1/10; click the button to adjust all three.", + "adjustEase": "adjust ease" + }, + "o": { + "lengthReduction": { + "t": "Length reduction", + "d": "Controls how much the leggings are shortened with respect to ankle length" + }, + "fabricStretch": { + "t": "Fabric stretch", + "d": "How much the fabric can stretch horizontally; this is used to calculate ease" + } + } +} diff --git a/designs/lily/i18n/es.json b/designs/lily/i18n/es.json new file mode 100644 index 00000000000..185dfb452be --- /dev/null +++ b/designs/lily/i18n/es.json @@ -0,0 +1,7 @@ +{ + "t": "Lily", + "d": "A FreeSewing pattern that needs a description", + "p": { }, + "s": { }, + "o": { } +} diff --git a/designs/lily/i18n/fr.json b/designs/lily/i18n/fr.json new file mode 100644 index 00000000000..185dfb452be --- /dev/null +++ b/designs/lily/i18n/fr.json @@ -0,0 +1,7 @@ +{ + "t": "Lily", + "d": "A FreeSewing pattern that needs a description", + "p": { }, + "s": { }, + "o": { } +} diff --git a/designs/lily/i18n/index.mjs b/designs/lily/i18n/index.mjs new file mode 100644 index 00000000000..36aac928b67 --- /dev/null +++ b/designs/lily/i18n/index.mjs @@ -0,0 +1,8 @@ +import en from './en.json' assert { type: 'json' } +import de from './de.json' assert { type: 'json' } +import es from './es.json' assert { type: 'json' } +import fr from './fr.json' assert { type: 'json' } +import nl from './nl.json' assert { type: 'json' } +import uk from './uk.json' assert { type: 'json' } + +export const i18n = { en, de, es, fr, nl, uk } diff --git a/designs/lily/i18n/nl.json b/designs/lily/i18n/nl.json new file mode 100644 index 00000000000..185dfb452be --- /dev/null +++ b/designs/lily/i18n/nl.json @@ -0,0 +1,7 @@ +{ + "t": "Lily", + "d": "A FreeSewing pattern that needs a description", + "p": { }, + "s": { }, + "o": { } +} diff --git a/designs/lily/i18n/uk.json b/designs/lily/i18n/uk.json new file mode 100644 index 00000000000..185dfb452be --- /dev/null +++ b/designs/lily/i18n/uk.json @@ -0,0 +1,7 @@ +{ + "t": "Lily", + "d": "A FreeSewing pattern that needs a description", + "p": { }, + "s": { }, + "o": { } +} diff --git a/designs/lily/package.json b/designs/lily/package.json new file mode 100644 index 00000000000..34552f353c8 --- /dev/null +++ b/designs/lily/package.json @@ -0,0 +1,74 @@ +{ + "name": "@freesewing/lily", + "version": "3.2.0", + "description": "A FreeSewing pattern for basic leggings", + "author": "Anna Puk (https://github.com/anna-puk)", + "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", + "made to measure", + "parametric design", + "pattern", + "sewing", + "sewing pattern" + ], + "type": "module", + "module": "dist/index.mjs", + "exports": { + ".": { + "internal": "./src/index.mjs", + "default": "./dist/index.mjs" + } + }, + "scripts": { + "build": "node build.mjs", + "build:all": "yarn build", + "clean": "rimraf dist", + "mbuild": "NO_MINIFY=1 node build.mjs", + "symlink": "mkdir -p ./node_modules/@freesewing && cd ./node_modules/@freesewing && ln -s -f ../../../* . && cd -", + "test": "npx mocha tests/*.test.mjs", + "vbuild": "VERBOSE=1 node build.mjs", + "lab": "cd ../../sites/lab && yarn start", + "tips": "node ../../scripts/help.mjs", + "lint": "npx eslint 'src/**' 'tests/*.mjs'", + "prettier": "npx prettier --write 'src/*.mjs' 'tests/*.mjs'", + "testci": "NODE_OPTIONS=\"--conditions=internal\" npx mocha tests/*.test.mjs --reporter ../../tests/reporters/terse.js", + "wbuild": "node build.mjs", + "wbuild:all": "yarn wbuild" + }, + "peerDependencies": { + "@freesewing/core": "3.2.0", + "@freesewing/titan": "3.2.0", + "@freesewing/paco": "3.2.0" + }, + "dependencies": {}, + "devDependencies": { + "mocha": "10.3.0", + "chai": "5.1.0", + "@freesewing/models": "3.2.0", + "@freesewing/plugin-timing": "3.2.0" + }, + "files": [ + "dist/*", + "README.md" + ], + "publishConfig": { + "access": "public", + "tag": "latest" + }, + "engines": { + "node": ">= 18.17.0 <22" + } +} diff --git a/designs/lily/src/back.mjs b/designs/lily/src/back.mjs new file mode 100644 index 00000000000..fc290e894d9 --- /dev/null +++ b/designs/lily/src/back.mjs @@ -0,0 +1,590 @@ +import { back as titanBack } from '@freesewing/titan' + +function draftLilyBack({ + points, + Point, + paths, + Path, + measurements, + options, + complete, + paperless, + store, + macro, + utils, + snippets, + Snippet, + sa, + absoluteOptions, + part, + log, + units, +}) { + //TODO: implement stretch setting to replace ease + // work-around: flag it + const stretchAsEase = -options.fabricStretch / 10 + const easeTol = 0.005 + if ( + Math.abs(options.waistEase - stretchAsEase) > easeTol || + Math.abs(options.seatEase - stretchAsEase) > easeTol || + Math.abs(options.kneeEase - stretchAsEase) > easeTol + ) { + store.flag.note({ + msg: `lily:adjustEase`, + replace: { + stretch: units(options.fabricStretch), + ease: stretchAsEase, + }, + suggest: { + text: 'adjustEase', + icon: 'options', + update: { + settings: [ + 'options', + { + ...options, + waistEase: stretchAsEase, + seatEase: stretchAsEase, + kneeEase: stretchAsEase, + }, + ], + }, + }, + }) + } + + /* + * Helper method to draw the inseam path + */ + const drawInseam = () => + new Path() + .move(points.fork) + .curve(points.forkCp2, points.kneeInCp1, points.kneeIn) + .curve(points.kneeInCp2, points.floorInCp2, points.floorIn) + /* + * Helper method to draw the outseam path + */ + const drawOutseam = () => { + const waistOut = points.styleWaistOutLily || points.waistOut + if (points.waistOut.x > points.seatOut.x) + return new Path() + .move(points.floorOut) + .curve(points.floorOutCp2, points.kneeOutCp1, points.kneeOut) + .curve(points.kneeOutCp2, points.seatOut, waistOut) + else + return new Path() + .move(points.floorOut) + .curve(points.floorOutCp2, points.kneeOutCp1, points.kneeOut) + .curve(points.kneeOutCp2, points.seatOutCp1, points.seatOut) + .curve_(points.seatOutCp2, waistOut) + } + /* + * Helper method to draw the outline path + */ + const drawPath = () => { + const waistIn = points.styleWaistInLily || points.waistIn + return drawInseam() + .line(points.floorOut) + .join(drawOutseam()) + .line(waistIn) + .line(points.crossSeamCurveStart) + .curve(points.crossSeamCurveCp1, points.crossSeamCurveCp2, points.fork) + .close() + } + /* + * Helper method to calculate the length of the cross seam + */ + const crossSeamDelta = () => + new Path() + .move(points.waistIn) + .line(points.crossSeamCurveStart) + .curve(points.crossSeamCurveCp1, points.crossSeamCurveCp2, points.fork) + .length() - measurements.crossSeamBack + /* + * Helper method to (re)draw the cross seam + */ + const drawCrossSeam = () => { + points.crossSeamCurveStart = points.waistIn.shiftFractionTowards( + points.cbSeat, + options.crossSeamCurveStart + ) + points.crossSeamCurveMax = utils.beamsIntersect( + points.waistIn, + points.cbSeat, + points.fork, + points.fork.shift(0, 1) // beams have infinite length anyway + ) + points.crossSeamCurveCp1 = points.crossSeamCurveStart.shiftFractionTowards( + points.crossSeamCurveMax, + options.crossSeamCurveBend + ) + points.crossSeamCurveCp2 = points.fork + .shiftFractionTowards(points.crossSeamCurveMax, options.crossSeamCurveBend) + .rotate(options.crossSeamCurveAngle, points.fork) + } + + // NOTE: majority of points re-used from titan + + // shape at the ankle (unlike titan) + const halfAnkle = + measurements.ankle * (1 + options.fabricStretch) > measurements.heel + ? (1 - options.fabricStretch / 10) * (measurements.ankle / 4) + : measurements.heel / 4 / (1 + options.fabricStretch) + // NOTE: for shortened leggings, this may not have been necessary... + + points.floorOut = points.floor.shift(0, halfAnkle) + points.floorIn = points.floorOut.flipX(points.floor) + + store.set('halfAnkle', halfAnkle) + + points.floorInCp2 = points.floorIn.shift(90, points.knee.dy(points.floor) / 3) + points.kneeInCp2 = points.kneeIn.shift(90, -points.knee.dy(points.floor) / 3) + points.floorOutCp2 = points.floorOut.shift(90, points.knee.dy(points.floor) / 3) + points.kneeOutCp1 = points.kneeOut.shift(90, -points.knee.dy(points.floor) / 3) + + // other control points have already been calculated in titan: + // Control points to shape the legs towards the seat + // Balance the waist + + // Cross seam + drawCrossSeam() + + //Uncomment the line below to see the seam prior to fitting the cross seam + // paths.seam1 = drawPath().attr('class', 'dashed lining') + + // Should we fit the cross seam? + if (options.fitCrossSeam && options.fitCrossSeamBack) { + let delta = crossSeamDelta() + let run = 0 + do { + run++ + // Remedy A: Slash and spread + for (const i of ['waistIn', 'waistOut']) + points[i] = points[i].rotate(delta / 15, points.seatOut) + // Remedy B: Nudge the fork inwards/outwards + points.fork = points.fork.shift(0, delta / 5) + points.forkCp2 = points.crossSeamCurveCp2.rotate(-90, points.fork) + drawCrossSeam() + delta = crossSeamDelta() + // Uncomment the line beloe this to see all iterations + // paths[`try${run}`] = drawPath().attr('class', 'dotted') + } while (Math.abs(delta) > 1 && run < 15) + } + + // Store inseam & outseam length + store.set('inseamBack', drawInseam().length()) + store.set('outseamBack', drawOutseam().length()) + + // Only now style the waist lower if requested + // Note: redo this for lily even though it was already done for titan; + // calculation for titan happened using its own seam lengths + store.set('waistbandWidth', absoluteOptions.waistbandWidth) // used in lilyWaistband + if (options.waistHeight < 1 || absoluteOptions.waistbandWidth > 0) { + points.styleWaistOutLily = drawOutseam() + .reverse() + .shiftAlong( + measurements.waistToHips * (1 - options.waistHeight) + absoluteOptions.waistbandWidth + ) + points.styleWaistInLily = utils.beamsIntersect( + points.styleWaistOutLily, + points.styleWaistOutLily.shift(points.waistOut.angle(points.waistIn), 10), + points.waistIn, + points.crossSeamCurveStart + ) + } else { + points.styleWaistInLily = points.waistIn.clone() + points.styleWaistOutLily = points.waistOut.clone() + } + // Adapt the vertical placement of the seat control point to the lowered waist + points.seatOutCp2.y = points.seatOut.y - points.styleWaistOutLily.dy(points.seatOut) / 2 + let test = points.styleWaistInLily.dist(points.styleWaistOutLily) + console.log('back waist length', test) + store.set('backWaist', points.styleWaistInLily.dist(points.styleWaistOutLily)) + + // Paths + paths.seam = drawPath().attr('class', 'fabric') + + // adjust the length (at the bottom) + let extendBeyondKnee = 1 + if (options.lengthReduction > 0) { + let requestedLength = (1 - options.lengthReduction) * measurements.waistToFloor + // leggings must reach to fork at least, so define a minimum + const waistToFork = points.waistX.dy(points.fork) + if (waistToFork >= 0.999 * requestedLength) { + log.warn('length reduction capped; cutting off at fork') + // add one percent to waistToFork to ensure that path length is nonzero + requestedLength = waistToFork * 1.01 + } + + // work-around to avoid splitting exactly at the knee + // (due to a bug, splitting a path at a node is not possible) + if ( + 0.999 < requestedLength / measurements.waistToKnee && + requestedLength / measurements.waistToKnee < 1.001 + ) { + requestedLength = 1.001 * measurements.waistToKnee + } + points.bottom = points.waistX.shift(270, requestedLength) + let upperPoint, upperCp + if (requestedLength < measurements.waistToKnee) { + extendBeyondKnee = 0 + + // 'cut' between fork and knee + if (points.waistOut.x > points.seatOut.x) { + upperPoint = points.styleWaistOutLily + upperCp = points.seatOut + } else { + upperPoint = points.seatOut + upperCp = points.seatOutCp1 + } + points.bottomOut = utils.beamIntersectsCurve( + points.bottom.shift(0, 999), + points.bottom.shift(180, 999), + points.kneeOut, + points.kneeOutCp2, + upperCp, + upperPoint + ) + + points.bottomIn = utils.beamIntersectsCurve( + points.bottom.shift(0, 999), + points.bottom.shift(180, 999), + points.kneeIn, + points.kneeInCp1, + points.forkCp2, + points.fork + ) + } else { + // 'cut' between knee and 'floor' + points.bottomOut = utils.beamIntersectsCurve( + points.bottom.shift(0, 999), + points.bottom.shift(180, 999), + points.kneeOut, + points.kneeOutCp1, + points.floorOutCp2, + points.floorOut + ) + + points.bottomIn = utils.beamIntersectsCurve( + points.bottom.shift(0, 999), + points.bottom.shift(180, 999), + points.kneeIn, + points.kneeInCp2, + points.floorInCp2, + points.floorIn + ) + } + + // define the three parts of the path, then combine + paths.bottom = new Path().move(points.bottomIn).line(points.bottomOut) + + const halves = paths.seam.split(points.bottomIn) + paths.upperInseam = halves[0] + const halves2 = halves[1].split(points.bottomOut) + paths.upperOutseam = halves2[1] + + paths.seam = paths.upperInseam.join(paths.bottom).join(paths.upperOutseam) + + // store requestedLength for use in front part + store.set('requestedLength', requestedLength) + } else { + // define the same three parts of the path as when length reduction is enabled, then combine + + // first define the points (also used for paperless) + points.bottom = points.floor + points.bottomIn = points.floorIn + points.bottomOut = points.floorOut + + paths.bottom = new Path().move(points.bottomIn).line(points.bottomOut) + + // note: upperOutseam contains waist and cross seam as well + paths.upperInseam = drawInseam() + paths.upperOutseam = drawOutseam().join( + new Path() + .move(points.styleWaistOutLily) + .line(points.styleWaistInLily) + .line(points.crossSeamCurveStart) + .curve(points.crossSeamCurveCp1, points.crossSeamCurveCp2, points.fork) + ) + paths.bottom.hide() + paths.upperInseam.hide() + paths.upperOutseam.hide() + } + + points.grainlineTop.y = points.styleWaistOutLily.y + points.grainlineBottom.y = points.bottom.y + macro('grainline', { + from: points.grainlineTop, + to: points.grainlineBottom, + }) + points.logoAnchor = new Point(points.crossSeamCurveStart.x / 2, points.fork.y) + snippets.logo = new Snippet('logo', points.logoAnchor) + points.scalebox = points.logoAnchor.shiftFractionTowards( + points.styleWaistOutLily.shiftFractionTowards(points.styleWaistInLily, 0.5), + 0.5 + ) + macro('scalebox', { at: points.scalebox }) + points.titleAnchor = points.logoAnchor.shift(-90, 60) + macro('title', { + nr: 1, + title: 'back', + at: points.titleAnchor, + }) + + //notches + if (options.fitGuides) { + points.waistMid = points.waistOut.shiftFractionTowards(points.waistIn, 0.5) + // shift + rotate (below) is equivalent to shifting measurements.waistToSeat perpendicular to the waistIn-waistMid line + points.seatMid = points.waistMid + .shiftTowards(points.waistIn, measurements.waistToSeat) + .rotate(90, points.waistMid) + points.seatInTarget = points.seatOut.shiftOutwards(points.seatMid, measurements.seat / 4) + points.seatOutTarget = points.seatMid.shiftTowards(points.seatOut, measurements.seat / 4) + // shift + rotate (below) is equivalent to shifting measurements.waistToHips perpendicular to the waistIn-waistOut line + points.hipsInTarget = points.waistIn + .shiftTowards(points.waistOut, measurements.waistToHips) + .rotate(-90, points.waistIn) + points.hipsOutTarget = points.waistOut + .shiftTowards(points.waistIn, measurements.waistToHips) + .rotate(90, points.waistOut) + points.hipsIn = utils.beamsIntersect( + points.hipsOutTarget, + points.hipsInTarget, + points.waistIn, + points.crossSeamCurveStart + ) + points.crossSeamCurveStartMid = utils.beamsIntersect( + points.crossSeamCurveStart, + points.crossSeamCurveStart.shift(points.waistIn.angle(points.waistOut), 1), + points.waistMid, + points.seatMid + ) + if (points.seatMid.y > points.crossSeamCurveStartMid.y) { + points.seatIn = utils.lineIntersectsCurve( + points.seatMid, + points.seatInTarget, + points.crossSeamCurveStart, + points.crossSeamCurveCp1, + points.crossSeamCurveCp2, + points.fork + ) + } else { + points.seatIn = utils.beamsIntersect( + points.seatMid, + points.seatInTarget, + points.waistIn, + points.crossSeamCurveStart + ) + } + if (points.waistOut.x > points.seatOut.x) { + points.hipsOut = utils.lineIntersectsCurve( + points.hipsIn, + points.hipsIn.rotate(180, points.hipsOutTarget), + points.kneeOut, + points.kneeOutCp2, + points.seatOut, + points.waistOut + ) + points.seatOutNotch = utils.lineIntersectsCurve( + points.seatMid, + points.seatOutTarget, + points.kneeOut, + points.kneeOutCp2, + points.seatOut, + points.waistOut + ) + } else { + points.hipsOut = utils.lineIntersectsCurve( + points.hipsIn, + points.hipsIn.rotate(180, points.hipsOutTarget), + points.seatOut, + points.seatOutCp2, + points.waistOut, + points.waistOut + ) + points.seatOutNotch = points.seatOut + } + points.kneeOutNotch = points.kneeOut + points.kneeInNotch = points.kneeIn + macro('sprinkle', { + snippet: 'notch', + on: ['seatOutNotch'], + }) + if (extendBeyondKnee) { + macro('sprinkle', { + snippet: 'notch', + on: ['kneeInNotch', 'kneeOutNotch'], + }) + } + macro('sprinkle', { + snippet: 'bnotch', + on: ['crossSeamCurveStart', 'seatIn'], + }) + + if (complete) { + paths.seatline = new Path() + .move(points.seatIn) + .line(points.seatOutNotch) + .addClass('fabric help') + .addText('Seat Line', 'center') + if ( + measurements.waistToHips * (1 - options.waistHeight) + absoluteOptions.waistbandWidth < + measurements.waistToHips + ) { + snippets.hipsIn = new Snippet('bnotch', points.hipsIn) + snippets.hipsOut = new Snippet('notch', points.hipsOut) + paths.hipline = new Path() + .move(points.hipsIn) + .line(points.hipsOut) + .addClass('fabric help') + .addText('Hip Line', 'center') + } + } + } + + if (sa) { + paths.saBase = paths.upperOutseam.join(paths.upperInseam).hide() + paths.hemBase = paths.bottom.hide() + paths.sa = paths.hemBase + .offset(sa * 3) + .join(paths.saBase.offset(sa)) + .close() + .addClass('fabric sa') + } + + if (paperless) { + // Help construct cross seam + paths.hint = new Path() + .move(points.crossSeamCurveStart) + .line(points.crossSeamCurveMax) + .line(points.fork) + .addClass('note lashed') + macro('hd', { + id: 'wHem', + from: points.bottomIn, + to: points.bottomOut, + y: points.bottomIn.y - 30, + }) + macro('hd', { + id: 'wHemLeft', + from: points.bottomIn, + to: points.bottom, + y: points.bottomIn.y - 15, + }) + macro('hd', { + id: 'wHemRight', + from: points.bottom, + to: points.bottomOut, + y: points.bottomIn.y - 15, + }) + macro('vd', { + id: 'hHemToSideWaist', + from: points.bottomOut, + to: points.styleWaistOutLily, + x: + (points.seatOut.x > points.styleWaistOutLily.x + ? points.seatOut.x + : points.styleWaistOutLily.x) + + sa + + 15, + }) + macro('vd', { + id: 'hHemToFork', + from: points.bottomIn, + to: points.fork, + x: points.fork.x - sa - 15, + }) + macro('vd', { + id: 'hForkToCbWaist', + from: points.fork, + to: points.styleWaistInLily, + x: points.fork.x - sa - 15, + }) + macro('vd', { + id: 'hFull', + from: points.bottomIn, + to: points.styleWaistInLily, + x: points.fork.x - sa - 30, + }) + macro('vd', { + id: 'hStartCrotchCurveToCbWaist', + from: points.crossSeamCurveStart, + to: points.styleWaistInLily, + x: points.crossSeamCurveStart.x - sa - 15, + }) + macro('hd', { + id: 'wCbWaistToPleat', + from: points.styleWaistInLily, + to: points.grainlineTop, + y: points.styleWaistInLily.y - sa - 15, + }) + macro('hd', { + id: 'wStartCrotchCurveToPleat', + from: points.crossSeamCurveStart, + to: points.grainlineTop, + y: points.styleWaistInLily.y - sa - 30, + }) + macro('hd', { + id: 'wForkProjectionToPleat', + from: points.crossSeamCurveMax, + to: points.grainlineTop, + y: points.styleWaistInLily.y - sa - 45, + }) + macro('hd', { + id: 'wForkToPleat', + from: points.fork, + to: points.grainlineTop, + y: points.styleWaistInLily.y - sa - 60, + }) + macro('hd', { + id: 'wPleatToSideWaist', + from: points.grainlineTop, + to: points.styleWaistOutLily, + y: points.styleWaistInLily.y - sa - 15, + }) + if (points.seatOut.x > points.styleWaistOutLily.x) { + macro('hd', { + id: 'wPleatToSideWaistAlt', + from: points.grainlineTop, + to: points.seatOut, + y: points.styleWaistInLily.y - sa - 30, + }) + } + } + + return part +} + +export const back = { + name: 'lily.back', + from: titanBack, + //after: titanFront, + measurements: [ + 'ankle', + 'heel', // secondary measurement, used instead of ankle + ], + options: { + fitGuides: { bool: false, menu: 'advanced' }, + fitKnee: { bool: true, hide: true }, + legBalance: 0.5, // between back and front parts + waistBalance: 0.5, + crotchDrop: { pct: 0, min: 0, max: 15, menu: 'advanced' }, // 'downgrade' to advanced menu + waistHeight: { ...titanBack.options.waistHeight, pct: 50 }, // halfway between waist and hips + fabricStretch: { pct: 40, min: 0, max: 50, menu: 'fit' }, + waistEase: { pct: -4, min: -20, max: 0, menu: 'fit' }, // -fabricStretch/10, + seatEase: { pct: -4, min: -20, max: 0, menu: 'fit' }, // -fabricStretch/10, + kneeEase: { pct: -4, min: -20, max: 0, menu: 'fit' }, // -fabricStretch/10, + //test: {pct: back.options.fabricStretch/2, min: 0, max: 50, menu: 'fit'}, + lengthBonus: 0, + lengthReduction: { + pct: 0, + min: 0, + max: 100, + toAbs: (pct, { measurements }) => measurements.waistToFloor * pct, + menu: 'style', + }, + waistbandWidth: { ...titanBack.options.waistbandWidth, menu: 'style' }, + }, + hide: 'HIDE_TREE', + draft: draftLilyBack, +} diff --git a/designs/lily/src/front.mjs b/designs/lily/src/front.mjs new file mode 100644 index 00000000000..d4e4cbb5e13 --- /dev/null +++ b/designs/lily/src/front.mjs @@ -0,0 +1,602 @@ +import { front as titanFront } from '@freesewing/titan' +import { back } from './back.mjs' + +function draftLilyFront({ + points, + Point, + paths, + Path, + measurements, + options, + complete, + paperless, + store, + macro, + utils, + snippets, + Snippet, + sa, + absoluteOptions, + log, + part, +}) { + /* + * Helper method to draw the inseam path + */ + const drawInseam = () => + new Path() + .move(points.floorIn) + .curve(points.floorInCp2, points.kneeInCp1, points.kneeIn) + .curve(points.kneeInCp2, points.forkCp1, points.fork) + /* + * Helper method to draw the outseam path + */ + const drawOutseam = () => { + const waistOut = points.styleWaistOutLily || points.waistOut + return points.waistOut.x < points.seatOut.x + ? new Path() + .move(waistOut) + .curve(points.seatOut, points.kneeOutCp1, points.kneeOut) + .curve(points.kneeOutCp2, points.floorOutCp2, points.floorOut) + : new Path() + .move(waistOut) + ._curve(points.seatOutCp1, points.seatOut) + .curve(points.seatOutCp2, points.kneeOutCp1, points.kneeOut) + .curve(points.kneeOutCp2, points.floorOutCp2, points.floorOut) + } + /* + * Helper method to draw the outline path + */ + const drawPath = () => { + const waistIn = points.styleWaistInLily || points.waistIn + const waistOut = points.styleWaistOutLily || points.waistOut + return drawOutseam() + .line(points.floorIn) + .join(drawInseam()) + .curve(points.crotchSeamCurveCp1, points.crotchSeamCurveCp2, points.crotchSeamCurveStart) + .line(waistIn) + .line(waistOut) + .close() + } + /* + * Helper method to calculate the length of the crotch seam + */ + const crotchSeamDelta = () => + new Path() + .move(points.waistIn) + .line(points.crotchSeamCurveStart) + .curve(points.crotchSeamCurveCp2, points.crotchSeamCurveCp1, points.fork) + .length() - measurements.crossSeamFront + /* + * Helper method to (re)draw the crotch seam + */ + const drawCrotchSeam = () => { + points.crotchSeamCurveStart = points.waistIn.shiftFractionTowards( + points.cfSeat, + options.crotchSeamCurveStart + ) + points.crotchSeamCurveMax = utils.beamsIntersect( + points.waistIn, + points.cfSeat, + points.fork, + points.fork.shift(0, 666) + ) + points.crotchSeamCurveCp1 = points.fork + .shiftFractionTowards(points.crotchSeamCurveMax, options.crotchSeamCurveBend) + .rotate(options.crotchSeamCurveAngle * -1, points.fork) + points.crotchSeamCurveCp2 = points.crotchSeamCurveStart.shiftFractionTowards( + points.crotchSeamCurveMax, + options.crotchSeamCurveBend + ) + points.forkCp1 = points.crotchSeamCurveCp1.rotate(90, points.fork) + } + /* + * Helper method to calculate the inseam delta + */ + const inseamDelta = () => drawInseam().length() - store.get('inseamBack') + /* + * Helper method to calculate the outseam delta + */ + const outseamDelta = () => drawOutseam().length() - store.get('outseamBack') + /* + * Helper method to lengthen/shorten both inseam and outseam + */ + const adaptInseamAndOutseam = () => { + const shift = [ + 'kneeInCp1', + 'kneeInCp2', + 'kneeOutCp1', + 'kneeOutCp2', + 'kneeIn', + 'kneeOut', + 'knee', + 'floorInCp2', + 'floorIn', + 'floorOutCp2', + 'floorOut', + 'floor', + 'grainlineBottom', + ] + let delta = seamDelta() + let run = 0 + do { + run++ + for (const i of shift) points[i] = points[i].shift(90, delta) + delta = seamDelta() + } while (Math.abs(delta) > 1 && run < 10) + } + /* + * Helper method to determine the delta common when both inseam and outseam + * are either too long or too short + */ + const seamDelta = () => { + const inseam = inseamDelta() + const outseam = outseamDelta() + return Math.abs(inseam) > Math.abs(outseam) ? outseam : inseam + } + /* + * Helper method that can fit either inseam or outseam + */ + const adaptSeam = (side) => { + const out = side === 'out' ? true : false + const rotate = [ + 'cfSeat', + 'crotchSeamCurveCp1', + 'crotchSeamCurveCp2', + 'crotchSeamCurveStart', + 'waistIn', + 'cfWaist', + 'waistOut', + ] + rotate.push(out ? 'seatOut' : 'fork') + const deltaMethod = out ? outseamDelta : inseamDelta + let run = 0 + let delta = deltaMethod() + do { + for (const i of rotate) + points[i] = points[i].rotate( + (delta / 10) * (out ? 1 : -1), + points[out ? 'fork' : 'seatOut'] + ) + run++ + delta = deltaMethod() + } while (Math.abs(delta) > 1 && run < 20) + } + const adaptOutseam = () => adaptSeam('out') + const adaptInseam = () => adaptSeam('in') + + // NOTE: majority of points re-used from titan + + // shape at the ankle (unlike titan) + points.floorOut = points.floor.shift(180, store.get('halfAnkle')) + points.floorIn = points.floorOut.flipX(points.floor) + + // Control points between knee and ankle + points.floorInCp2 = points.floorIn.shift(90, points.knee.dy(points.floor) / 3) + points.kneeInCp1 = points.kneeIn.shift(90, -points.knee.dy(points.floor) / 3) + points.floorOutCp2 = points.floorOut.shift(90, points.knee.dy(points.floor) / 3) + points.kneeOutCp2 = points.kneeOut.shift(90, -points.knee.dy(points.floor) / 3) + + // other control points have already been calculated in titan + // Control points to shape the legs towards the seat + // Balance the waist + + // Draw initial crotch seam + drawCrotchSeam() + + // Uncomment this to see the outline prior to fitting the crotch seam + //paths.seam1 = drawPath().attr('class', 'dashed lining') + + if (options.fitCrossSeam && options.fitCrossSeamFront) { + let delta = crotchSeamDelta() + let run = 0 + do { + run++ + // Remedy A: Slash and spread + for (const i of ['waistIn', 'waistOut', 'cfWaist']) + points[i] = points[i].rotate(delta / -15, points.seatOut) + // Remedy B: Nudge the fork inwards/outwards + points.fork = points.fork.shift(180, delta / 5) + drawCrotchSeam() + delta = crotchSeamDelta() + // Uncomment the line below this to see all iterations + //paths[`try${run}`] = drawPath().attr('class', 'dotted') + } while (Math.abs(delta) > 1 && run < 15) + } + + // Uncomment this to see the outline prior to fitting the inseam & outseam + //paths.seam2 = drawPath().attr('class', 'dotted interfacing') + + /* + * With the cross seams matched back and front, + * all that's left is to match the inseam and outseam + */ + + // When both are too short/long, adapt the leg length + if ((inseamDelta() < 0 && outseamDelta() < 0) || (inseamDelta() > 0 && outseamDelta() > 0)) + adaptInseamAndOutseam() + + // Now one is ok, the other will be adapted + adaptOutseam() + adaptInseam() + + // Changing one will ever so slightly impact the other, so let's run both again to be sure + adaptOutseam() + adaptInseam() + + // Only now style the waist lower if requested + // Note: redo this for lily even though it was already done for titan; + // calculation for titan happened using its own seam lengths + if (options.waistHeight < 1 || absoluteOptions.waistbandWidth > 0) { + points.styleWaistOutLily = drawOutseam().shiftAlong( + measurements.waistToHips * (1 - options.waistHeight) + absoluteOptions.waistbandWidth + ) + points.styleWaistInLily = utils.beamsIntersect( + points.styleWaistOutLily, + points.styleWaistOutLily.shift(points.waistOut.angle(points.waistIn), 10), + points.waistIn, + points.crotchSeamCurveStart + ) + } else { + points.styleWaistInLily = points.waistIn.clone() + points.styleWaistOutLily = points.waistOut.clone() + } + store.set('frontWaist', points.styleWaistInLily.dist(points.styleWaistOutLily)) + + // Now that the top of the garment has been lowered, adjust the + // crotchSeamCurveStart so it doesn't start above the top of the garment. + if (points.crotchSeamCurveStart.y < points.styleWaistInLily.y) { + points.crotchSeamCurveStart = points.styleWaistInLily.clone() + } + + // Seamline + paths.seam = drawPath().attr('class', 'fabric') + + // adjust the length (at the bottom) + let extendBeyondKnee = 1 + if (options.lengthReduction > 0) { + let requestedLength = store.get('requestedLength') + // leggings must reach to fork at least, so define a minimum + let waistToFork = points.waistX.dy(points.fork) + let waistToKnee = points.waistX.dy(points.knee) // adapting the seams may have shifted the knee up or down + if (waistToFork > requestedLength) { + //log.warning('length reduction capped; cutting off at fork') // log only for back part + // add one percent to waistToFork to ensure that path length is nonzero + requestedLength = waistToFork * 1.01 + } + + // work-around to avoid splitting exactly at the knee + // (due to a bug, splitting a path at a node is not possible) + if (0.999 < requestedLength / waistToKnee && requestedLength / waistToKnee < 1.001) { + requestedLength = 1.001 * waistToKnee + } + points.bottom = points.waistX.shift(270, requestedLength) + let upperPoint, upperCp + if (requestedLength < waistToKnee) { + extendBeyondKnee = 0 + + // 'cut' between fork and knee + if (points.waistOut.x < points.seatOut.x) { + upperPoint = points.styleWaistOutLily + upperCp = points.seatOut + } else { + upperPoint = points.seatOut + upperCp = points.seatOutCp2 + } + points.bottomOut = utils.lineIntersectsCurve( + points.bottom.shift(0, 999), + points.bottom.shift(180, 999), + points.kneeOut, + points.kneeOutCp1, + upperCp, + upperPoint + ) + + points.bottomIn = utils.lineIntersectsCurve( + points.bottom.shift(0, 999), + points.bottom.shift(180, 999), + points.kneeIn, + points.kneeInCp2, + points.forkCp1, + points.fork + ) + } else { + // 'cut' between knee and 'floor' + points.bottomOut = utils.lineIntersectsCurve( + points.bottom.shift(0, 999), + points.bottom.shift(180, 999), + points.kneeOut, + points.kneeOutCp2, + points.floorOutCp2, + points.floorOut + ) + + points.bottomIn = utils.lineIntersectsCurve( + points.bottom.shift(0, 999), + points.bottom.shift(180, 999), + points.kneeIn, + points.kneeInCp1, + points.floorInCp2, + points.floorIn + ) + } + + // define the three parts of the path, then combine + paths.bottom = new Path().move(points.bottomOut).line(points.bottomIn) + + const halves = paths.seam.split(points.bottomOut) + paths.upperOutseam = halves[0] + const halves2 = halves[1].split(points.bottomIn) + paths.upperInseam = halves2[1] + + paths.seam = paths.upperOutseam.join(paths.bottom).join(paths.upperInseam) + } else { + // define the same three parts of the path as when length reduction is enabled, then combine + + // first define the points (also used for paperless) + points.bottom = points.floor + points.bottomIn = points.floorIn + points.bottomOut = points.floorOut + + paths.bottom = new Path().move(points.bottomOut).line(points.bottomIn) + + // note: upperInseam contains waist and cross seam as well + paths.upperInseam = drawInseam() + .curve(points.crotchSeamCurveCp1, points.crotchSeamCurveCp2, points.crotchSeamCurveStart) + .line(points.styleWaistInLily) + .line(points.styleWaistOutLily) + paths.upperOutseam = drawOutseam() + paths.bottom.hide() + paths.upperInseam.hide() + paths.upperOutseam.hide() + } + + if (complete) { + points.grainlineTop.y = points.styleWaistInLily.y + points.grainlineBottom.y = points.bottom.y + macro('grainline', { + from: points.grainlineTop, + to: points.grainlineBottom, + }) + points.logoAnchor = new Point(points.crotchSeamCurveStart.x / 2, points.fork.y) + snippets.logo = new Snippet('logo', points.logoAnchor) + points.titleAnchor = points.logoAnchor.shift(-90, 60) + macro('title', { + nr: 2, + title: 'front', + at: points.titleAnchor, + }) + + //notches + if (options.fitGuides) { + points.waistMid = points.waistOut.shiftFractionTowards(points.waistIn, 0.5) + points.seatMid = points.waistMid + .shiftTowards(points.waistOut, measurements.waistToSeat) + .rotate(90, points.waistMid) + points.seatInTarget = points.seatOut.shiftOutwards(points.seatMid, measurements.seat / 4) + points.seatOutTarget = points.seatMid.shiftTowards(points.seatOut, measurements.seat / 4) + points.hipsInTarget = points.waistIn + .shiftTowards(points.waistOut, measurements.waistToHips) + .rotate(90, points.waistIn) + points.hipsOutTarget = points.waistOut + .shiftTowards(points.waistIn, measurements.waistToHips) + .rotate(-90, points.waistOut) + points.hipsIn = utils.beamsIntersect( + points.hipsOutTarget, + points.hipsInTarget, + points.waistIn, + points.crotchSeamCurveStart + ) + // intersection between the vertical line from waistMid to seatMid and a line parallel to waistIn-waistOut that goes through crotchSeamCurveStart + points.crotchSeamCurveStartMid = utils.beamsIntersect( + points.crotchSeamCurveStart, + points.crotchSeamCurveStart.shift(points.waistIn.angle(points.waistOut), 1), + points.waistMid, + points.seatMid + ) + // check whether intersection occurs above or below crotch seam curve start + points.seatInTemp = utils.beamsIntersect( + points.seatMid, + points.seatInTarget, + points.crotchSeamCurveStart, + points.waistIn + ) // NOTE: guaranteed to return a Point since the lines cannot be parallel + if (points.seatInTemp.y <= points.crotchSeamCurveStartMid.y) { + // intersection is above the crotch seam curve start, so on the line segment + points.seatIn = points.seatInTemp.clone() + } else if (points.seatInTemp.y > points.fork.y) { + // seat appears to be below crotch + log.warn('seat estimated to be below crotch; this is probably not accurate') + points.seatIn = points.fork.clone() + } else { + points.seatIn = utils.beamIntersectsCurve( + points.seatMid, + points.seatInTarget, + points.crotchSeamCurveStart, + points.crotchSeamCurveCp2, + points.crotchSeamCurveCp1, + points.fork + ) + } + if (points.waistOut.x < points.seatOut.x) { + //log.info('waist to the left of seat') + points.hipsOut = utils.lineIntersectsCurve( + points.hipsIn, + points.hipsIn.rotate(180, points.hipsOutTarget), + points.waistOut, + points.seatOut, + points.kneeOutCp1, + points.kneeOut + ) + points.seatOutNotch = utils.lineIntersectsCurve( + points.seatMid, + points.seatOutTarget, + points.waistOut, + points.seatOut, + points.kneeOutCp1, + points.kneeOut + ) + } else { + //log.info('waist to the right of seat') + points.hipsOut = utils.lineIntersectsCurve( + points.hipsIn, + points.hipsIn.rotate(180, points.hipsOutTarget), + points.waistOut, + points.waistOut, + points.seatOutCp1, + points.seatOut + ) + points.seatOutNotch = points.seatOut + } + points.kneeOutNotch = points.kneeOut + points.kneeInNotch = points.kneeIn + macro('sprinkle', { + snippet: 'notch', + on: ['crotchSeamCurveStart', 'seatIn', 'seatOutNotch'], + }) + if (extendBeyondKnee) { + macro('sprinkle', { + snippet: 'notch', + on: ['kneeInNotch', 'kneeOutNotch'], + }) + } + paths.seatline = new Path() + .move(points.seatOutNotch) + .line(points.seatIn) + .addClass('fabric help') + .addText('Seat Line', 'center') + if ( + measurements.waistToHips * (1 - options.waistHeight) + absoluteOptions.waistbandWidth < + measurements.waistToHips + ) { + macro('sprinkle', { + snippet: 'notch', + on: ['hipsIn', 'hipsOut'], + }) + paths.hipline = new Path() + .move(points.hipsOut) + .line(points.hipsIn) + .addClass('fabric help') + .addText('Hip Line', 'center') + } + } + + if (sa) { + paths.saBase = paths.upperInseam.join(paths.upperOutseam).hide() + paths.hemBase = paths.bottom.hide() + paths.sa = paths.hemBase + .offset(sa * 3) + .join(paths.saBase.offset(sa)) + .close() + .addClass('fabric sa') + } + + // Delete Titan's old hint path (which could start above the top + // of the garment) + // delete paths.hint + + if (paperless) { + // Help construct crotch seam + paths.hint = new Path() + .move(points.crotchSeamCurveStart) + .line(points.crotchSeamCurveMax) + .line(points.fork) + .addClass('note lashed') + macro('hd', { + id: 'wHemLeftToPleat', + from: points.bottomOut, + to: points.bottom, + y: points.bottomIn.y - 15, + }) + macro('hd', { + id: 'wHemRightToPleat', + from: points.bottom, + to: points.bottomIn, + y: points.bottomIn.y - 15, + }) + macro('hd', { + id: 'wHem', + from: points.bottomOut, + to: points.bottomIn, + y: points.bottomIn.y - 30, + }) + macro('vd', { + id: 'hHemToFork', + from: points.bottomOut, + to: points.fork, + x: points.fork.x + sa + 15, + }) + macro('vd', { + id: 'hForkToCfWaist', + from: points.fork, + to: points.styleWaistInLily, + x: points.fork.x + sa + 15, + }) + macro('vd', { + id: 'hHemToSideWaist', + from: points.bottomIn, + to: points.styleWaistOutLily, + x: + (points.seatOut.x < points.styleWaistOutLily.x + ? points.seatOut.x + : points.styleWaistOutLily.x) - + sa - + 15, + }) + macro('vd', { + id: 'hStartCrotchCurveToCfWaist', + from: points.crotchSeamCurveStart, + to: points.styleWaistInLily, + x: points.crotchSeamCurveStart.x + sa + 15, + }) + macro('hd', { + id: 'wSideWaistToPleat', + from: points.seatOut, + to: points.grainlineTop, + y: points.styleWaistInLily.y - sa - 15, + }) + if (points.styleWaistOutLily.x < points.seatOut.x) { + macro('hd', { + id: 'wSideWaistToPleatAlt', + from: points.styleWaistOutLily, + to: points.grainlineTop, + y: points.styleWaistInLily.y - sa - 30, + }) + } + macro('hd', { + id: 'wPleatToCfWaist', + from: points.grainlineTop, + to: points.styleWaistInLily, + y: points.styleWaistInLily.y - sa - 15, + }) + macro('hd', { + id: 'wPleatToStartCrotchCurve', + from: points.grainlineTop, + to: points.crotchSeamCurveStart, + y: points.styleWaistInLily.y - sa - 30, + }) + macro('hd', { + id: 'wPleatToCrotchProjection', + from: points.grainlineTop, + to: points.crotchSeamCurveMax, + y: points.styleWaistInLily.y - sa - 45, + }) + macro('hd', { + id: 'wPleatToFork', + from: points.grainlineTop, + to: points.fork, + y: points.styleWaistInLily.y - sa - 60, + }) + } + } + + return part +} + +export const front = { + name: 'lily.front', + from: titanFront, + after: back, + hide: 'HIDE_TREE', + draft: draftLilyFront, +} diff --git a/designs/lily/src/index.mjs b/designs/lily/src/index.mjs new file mode 100644 index 00000000000..1a831522031 --- /dev/null +++ b/designs/lily/src/index.mjs @@ -0,0 +1,16 @@ +import { Design } from '@freesewing/core' +import { i18n } from '../i18n/index.mjs' +import { data } from '../data.mjs' +// Parts +import { front } from './front.mjs' +import { back } from './back.mjs' +import { waistband } from './waistband.mjs' + +// Create new design +const Lily = new Design({ + data, + parts: [front, back, waistband], +}) + +// Named exports +export { front, back, waistband, i18n, Lily } diff --git a/designs/lily/src/waistband.mjs b/designs/lily/src/waistband.mjs new file mode 100644 index 00000000000..b6deb052d44 --- /dev/null +++ b/designs/lily/src/waistband.mjs @@ -0,0 +1,18 @@ +import { back } from './back.mjs' +import { front } from './front.mjs' +import { waistband as pacoWaistband } from '@freesewing/paco' + +export const waistband = { + name: 'lily.waistband', + after: [back, front], + hide: 'HIDE_TREE', + draft: (sh) => { + const { snippets, part } = sh + //draft + pacoWaistband.draft(sh) + //delete eyelets + for (let s in snippets) delete snippets[s] + + return part + }, +} diff --git a/designs/lily/tests/shared.test.mjs b/designs/lily/tests/shared.test.mjs new file mode 100644 index 00000000000..e587224479e --- /dev/null +++ b/designs/lily/tests/shared.test.mjs @@ -0,0 +1,20 @@ +// This file is auto-generated | Any changes you make will be overwritten. +import { Lily, i18n } from '../src/index.mjs' + +// Shared tests +import { testPatternConfig } from '../../../tests/designs/config.mjs' +import { testPatternI18n } from '../../../tests/designs/i18n.mjs' +import { testPatternDrafting } from '../../../tests/designs/drafting.mjs' +import { testPatternSampling } from '../../../tests/designs/sampling.mjs' + +// Test config +testPatternConfig(Lily) + +// Test translation +testPatternI18n(Lily, i18n) + +// Test drafting - Change the second parameter to `true` to log errors +testPatternDrafting(Lily, false) + +// Test sampling - Change the second parameter to `true` to log errors +testPatternSampling(Lily, false) diff --git a/designs/lucy/package.json b/designs/lucy/package.json index fa1b7b9750c..1d88fed6ac4 100644 --- a/designs/lucy/package.json +++ b/designs/lucy/package.json @@ -53,7 +53,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/lumina/package.json b/designs/lumina/package.json index 34aec3889be..d29100eba1e 100644 --- a/designs/lumina/package.json +++ b/designs/lumina/package.json @@ -53,7 +53,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/lumira/package.json b/designs/lumira/package.json index 1f785ea47b8..a8f347f9478 100644 --- a/designs/lumira/package.json +++ b/designs/lumira/package.json @@ -53,7 +53,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/lunetius/package.json b/designs/lunetius/package.json index d330055838a..33945b987ed 100644 --- a/designs/lunetius/package.json +++ b/designs/lunetius/package.json @@ -53,7 +53,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/magde/package.json b/designs/magde/package.json index 05c56cdd495..85b88a524bc 100644 --- a/designs/magde/package.json +++ b/designs/magde/package.json @@ -53,7 +53,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/naomiwu/package.json b/designs/naomiwu/package.json index f264bfcfbc6..7e94a19d612 100644 --- a/designs/naomiwu/package.json +++ b/designs/naomiwu/package.json @@ -53,7 +53,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/noble/package.json b/designs/noble/package.json index 386a9f1fc4e..a129e21771c 100644 --- a/designs/noble/package.json +++ b/designs/noble/package.json @@ -54,7 +54,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/octoplushy/package.json b/designs/octoplushy/package.json index c0575885b02..c045f09f539 100644 --- a/designs/octoplushy/package.json +++ b/designs/octoplushy/package.json @@ -53,7 +53,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/onyx/package.json b/designs/onyx/package.json index eb391f0487c..9cdf7db32a4 100644 --- a/designs/onyx/package.json +++ b/designs/onyx/package.json @@ -53,7 +53,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/otis/package.json b/designs/otis/package.json index d5bc84c0d50..6da21cc33f7 100644 --- a/designs/otis/package.json +++ b/designs/otis/package.json @@ -53,7 +53,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/paco/package.json b/designs/paco/package.json index 8d1e605df9f..91d4085935e 100644 --- a/designs/paco/package.json +++ b/designs/paco/package.json @@ -55,7 +55,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/penelope/package.json b/designs/penelope/package.json index 53809315576..f7bb4c9d458 100644 --- a/designs/penelope/package.json +++ b/designs/penelope/package.json @@ -53,7 +53,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/plugintest/package.json b/designs/plugintest/package.json index 82cfdd51637..1c5802400b1 100644 --- a/designs/plugintest/package.json +++ b/designs/plugintest/package.json @@ -64,7 +64,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/rendertest/package.json b/designs/rendertest/package.json index a20ffc0b6d6..d289bc33358 100644 --- a/designs/rendertest/package.json +++ b/designs/rendertest/package.json @@ -53,7 +53,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/sandy/package.json b/designs/sandy/package.json index c68744723f9..46629614acc 100644 --- a/designs/sandy/package.json +++ b/designs/sandy/package.json @@ -54,7 +54,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/shelly/package.json b/designs/shelly/package.json index ff36d0da81d..640316a9f39 100644 --- a/designs/shelly/package.json +++ b/designs/shelly/package.json @@ -53,7 +53,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/shin/package.json b/designs/shin/package.json index b1cb670c6d1..b07a360390c 100644 --- a/designs/shin/package.json +++ b/designs/shin/package.json @@ -54,7 +54,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/simon/package.json b/designs/simon/package.json index 1c3dd85df64..13a8be358da 100644 --- a/designs/simon/package.json +++ b/designs/simon/package.json @@ -56,7 +56,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/simone/package.json b/designs/simone/package.json index a0e6f349f6f..cc6ab5ef1a9 100644 --- a/designs/simone/package.json +++ b/designs/simone/package.json @@ -57,7 +57,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/skully/package.json b/designs/skully/package.json index 902e1c6c547..70b10a4c3fc 100644 --- a/designs/skully/package.json +++ b/designs/skully/package.json @@ -53,7 +53,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/sven/package.json b/designs/sven/package.json index e190e0352ee..2d0457b03c6 100644 --- a/designs/sven/package.json +++ b/designs/sven/package.json @@ -55,7 +55,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/tamiko/package.json b/designs/tamiko/package.json index f51300d340a..59db79d575b 100644 --- a/designs/tamiko/package.json +++ b/designs/tamiko/package.json @@ -54,7 +54,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/teagan/package.json b/designs/teagan/package.json index 8ddb9931348..85aec5e3f4c 100644 --- a/designs/teagan/package.json +++ b/designs/teagan/package.json @@ -55,7 +55,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/tiberius/package.json b/designs/tiberius/package.json index 2856b97eb6b..d8baff4cca9 100644 --- a/designs/tiberius/package.json +++ b/designs/tiberius/package.json @@ -53,7 +53,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/titan/package.json b/designs/titan/package.json index 1a580665506..fc9becb3e0d 100644 --- a/designs/titan/package.json +++ b/designs/titan/package.json @@ -54,7 +54,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/trayvon/package.json b/designs/trayvon/package.json index 8802043a845..d1845b37b3c 100644 --- a/designs/trayvon/package.json +++ b/designs/trayvon/package.json @@ -54,7 +54,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/tristan/package.json b/designs/tristan/package.json index 75f650a70e1..6eefb36c598 100644 --- a/designs/tristan/package.json +++ b/designs/tristan/package.json @@ -53,7 +53,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/uma/package.json b/designs/uma/package.json index a604f506236..1b1b780c669 100644 --- a/designs/uma/package.json +++ b/designs/uma/package.json @@ -53,7 +53,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/wahid/package.json b/designs/wahid/package.json index 7bd43e2b1e9..556c25b8f2d 100644 --- a/designs/wahid/package.json +++ b/designs/wahid/package.json @@ -55,7 +55,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/walburga/package.json b/designs/walburga/package.json index c9c5006449d..40e3691c03f 100644 --- a/designs/walburga/package.json +++ b/designs/walburga/package.json @@ -53,7 +53,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/waralee/package.json b/designs/waralee/package.json index 338ea5cecd2..1b7be0b4cb1 100644 --- a/designs/waralee/package.json +++ b/designs/waralee/package.json @@ -53,7 +53,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/designs/yuri/package.json b/designs/yuri/package.json index 21d8ff1e509..9b7aea2882d 100644 --- a/designs/yuri/package.json +++ b/designs/yuri/package.json @@ -55,7 +55,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/models": "3.2.0", "@freesewing/plugin-timing": "3.2.0" diff --git a/markdown/org/docs/about/site/en.md b/markdown/org/docs/about/site/en.md index 453f435004a..e21782be297 100644 --- a/markdown/org/docs/about/site/en.md +++ b/markdown/org/docs/about/site/en.md @@ -25,7 +25,7 @@ So I'm not going to do that. I'm going to assume you are reading with an open mi On every page of FreeSewing.org is the same header with links to the most important sections of the site: - [Designs](/designs/) shows our collection of parametric designs you can generate bespoke sewing patterns from -- [Documentation](/documentation/) holds all the documentation, for the website, for our designs, everything +- [Documentation](/docs/) holds all the documentation, for the website, for our designs, everything - [Blog](/blog/) holds blog posts with updates and news about FreeSewing - [Showcase](/showcase/) show examples from the FreeSewing community, things they have made with FreeSewing patterns - [Account](/account/) is where you can manage your FreeSewing account diff --git a/package.json b/package.json index 9bdd7774ed8..8059cd55e90 100644 --- a/package.json +++ b/package.json @@ -72,7 +72,7 @@ "esbuild-plugin-yaml": "^0.0.1", "eslint": "^8.23.1", "eslint-plugin-jsonc": "^2.4.0", - "eslint-plugin-markdown": "^4.0.1", + "eslint-plugin-markdown": "^5.0.0", "eslint-plugin-mongo": "^1.0.5", "eslint-plugin-yaml": "^0.5.0", "husky": "^9.0.10", diff --git a/packages/core/package.json b/packages/core/package.json index 3486b1ebea7..044df17a26f 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -64,7 +64,7 @@ "devDependencies": { "eslint": "8.57.0", "nyc": "15.1.0", - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "sinon": "^17.0.1" }, diff --git a/packages/new-design/lib/download-list.mjs b/packages/new-design/lib/download-list.mjs index e5c0c5778af..3f4b50e29d8 100644 --- a/packages/new-design/lib/download-list.mjs +++ b/packages/new-design/lib/download-list.mjs @@ -10,7 +10,6 @@ export const downloads = { 'sde/site.config.mjs', 'sde/tailwind.config.mjs', 'sde/hooks/use-design.mjs', - 'sde/pkgs/.gitkeep', 'sde/mock/designs.mjs', 'sde/mock/docs-helpers.mjs', 'sde/mock/highlight.mjs', @@ -21,6 +20,7 @@ export const downloads = { 'sde/mock/read-more.mjs', 'sde/mock/tabbed-example.mjs', 'sde/mock/youtube.mjs', + 'sde/pkgs/.gitkeep', 'sde/prebuild/.gitkeep', 'sde/prebuild/sitenav.de.mjs', 'sde/prebuild/sitenav.en.mjs', @@ -36,23 +36,11 @@ export const downloads = { 'sde/components/search.mjs', 'sde/components/header/design-picker.mjs', 'sde/components/header/index.mjs', - 'sde/components/navigation/modal-menu.mjs', 'sde/components/layouts/bare.mjs', 'sde/components/layouts/default.mjs', 'sde/components/layouts/workbench.mjs', + 'sde/components/navigation/modal-menu.mjs', 'sde/components/wrappers/page.mjs', - 'sde/design/from-bent/src/back.mjs', - 'sde/design/from-bent/src/front.mjs', - 'sde/design/from-bent/src/index.mjs', - 'sde/design/from-bent/src/top-sleeve.mjs', - 'sde/design/from-bent/src/under-sleeve.mjs', - 'sde/design/from-bent/i18n/de.json', - 'sde/design/from-bent/i18n/en.json', - 'sde/design/from-bent/i18n/es.json', - 'sde/design/from-bent/i18n/fr.json', - 'sde/design/from-bent/i18n/index.mjs', - 'sde/design/from-bent/i18n/nl.json', - 'sde/design/from-bent/i18n/uk.json', 'sde/design/from-bella/en.json', 'sde/design/from-bella/i18n/de.json', 'sde/design/from-bella/i18n/en.json', @@ -64,6 +52,18 @@ export const downloads = { 'sde/design/from-bella/src/back.mjs', 'sde/design/from-bella/src/front.mjs', 'sde/design/from-bella/src/index.mjs', + 'sde/design/from-bent/i18n/de.json', + 'sde/design/from-bent/i18n/en.json', + 'sde/design/from-bent/i18n/es.json', + 'sde/design/from-bent/i18n/fr.json', + 'sde/design/from-bent/i18n/index.mjs', + 'sde/design/from-bent/i18n/nl.json', + 'sde/design/from-bent/i18n/uk.json', + 'sde/design/from-bent/src/back.mjs', + 'sde/design/from-bent/src/front.mjs', + 'sde/design/from-bent/src/index.mjs', + 'sde/design/from-bent/src/top-sleeve.mjs', + 'sde/design/from-bent/src/under-sleeve.mjs', 'sde/design/from-breanna/i18n/de.json', 'sde/design/from-breanna/i18n/en.json', 'sde/design/from-breanna/i18n/es.json', @@ -75,6 +75,10 @@ export const downloads = { 'sde/design/from-breanna/src/front.mjs', 'sde/design/from-breanna/src/index.mjs', 'sde/design/from-breanna/src/sleeve.mjs', + 'sde/design/from-brian/src/back.mjs', + 'sde/design/from-brian/src/front.mjs', + 'sde/design/from-brian/src/index.mjs', + 'sde/design/from-brian/src/sleeve.mjs', 'sde/design/from-brian/i18n/de.json', 'sde/design/from-brian/i18n/en.json', 'sde/design/from-brian/i18n/es.json', @@ -82,10 +86,6 @@ export const downloads = { 'sde/design/from-brian/i18n/index.mjs', 'sde/design/from-brian/i18n/nl.json', 'sde/design/from-brian/i18n/uk.json', - 'sde/design/from-brian/src/back.mjs', - 'sde/design/from-brian/src/front.mjs', - 'sde/design/from-brian/src/index.mjs', - 'sde/design/from-brian/src/sleeve.mjs', 'sde/design/from-scratch/i18n/de.json', 'sde/design/from-scratch/i18n/en.json', 'sde/design/from-scratch/i18n/es.json', @@ -189,6 +189,60 @@ export const downloads = { 'sde/public/locales/de/tutorial.json', 'sde/public/locales/de/ui-settings.json', 'sde/public/locales/de/workbench.json', + 'sde/public/locales/es/account.json', + 'sde/public/locales/es/auth.json', + 'sde/public/locales/es/bella.json', + 'sde/public/locales/es/bent.json', + 'sde/public/locales/es/breanna.json', + 'sde/public/locales/es/brian.json', + 'sde/public/locales/es/common.json', + 'sde/public/locales/es/core-settings.json', + 'sde/public/locales/es/curate.json', + 'sde/public/locales/es/cut.json', + 'sde/public/locales/es/design-options.json', + 'sde/public/locales/es/designs.json', + 'sde/public/locales/es/docs.json', + 'sde/public/locales/es/errors.json', + 'sde/public/locales/es/flag.json', + 'sde/public/locales/es/footer.json', + 'sde/public/locales/es/frombella.json', + 'sde/public/locales/es/frombent.json', + 'sde/public/locales/es/frombreanna.json', + 'sde/public/locales/es/frombrian.json', + 'sde/public/locales/es/fromscratch.json', + 'sde/public/locales/es/fromtitan.json', + 'sde/public/locales/es/gdpr.json', + 'sde/public/locales/es/header.json', + 'sde/public/locales/es/hodl.json', + 'sde/public/locales/es/homepage.json', + 'sde/public/locales/es/lab.json', + 'sde/public/locales/es/locales.json', + 'sde/public/locales/es/logs.json', + 'sde/public/locales/es/measurements.json', + 'sde/public/locales/es/modal.json', + 'sde/public/locales/es/newsletter.json', + 'sde/public/locales/es/patrons.json', + 'sde/public/locales/es/plugin-annotations.json', + 'sde/public/locales/es/plugins.json', + 'sde/public/locales/es/popout.json', + 'sde/public/locales/es/print.json', + 'sde/public/locales/es/roles.json', + 'sde/public/locales/es/sde.json', + 'sde/public/locales/es/sections.json', + 'sde/public/locales/es/sets.json', + 'sde/public/locales/es/sponsors.json', + 'sde/public/locales/es/status.json', + 'sde/public/locales/es/submissions.json', + 'sde/public/locales/es/support.json', + 'sde/public/locales/es/susi.json', + 'sde/public/locales/es/tags.json', + 'sde/public/locales/es/techniques.json', + 'sde/public/locales/es/themes.json', + 'sde/public/locales/es/timeago.json', + 'sde/public/locales/es/titan.json', + 'sde/public/locales/es/tutorial.json', + 'sde/public/locales/es/ui-settings.json', + 'sde/public/locales/es/workbench.json', 'sde/public/locales/en/account.json', 'sde/public/locales/en/auth.json', 'sde/public/locales/en/bella.json', @@ -297,114 +351,6 @@ export const downloads = { 'sde/public/locales/fr/tutorial.json', 'sde/public/locales/fr/ui-settings.json', 'sde/public/locales/fr/workbench.json', - 'sde/public/locales/nl/account.json', - 'sde/public/locales/nl/auth.json', - 'sde/public/locales/nl/bella.json', - 'sde/public/locales/nl/bent.json', - 'sde/public/locales/nl/breanna.json', - 'sde/public/locales/nl/brian.json', - 'sde/public/locales/nl/common.json', - 'sde/public/locales/nl/core-settings.json', - 'sde/public/locales/nl/curate.json', - 'sde/public/locales/nl/cut.json', - 'sde/public/locales/nl/design-options.json', - 'sde/public/locales/nl/designs.json', - 'sde/public/locales/nl/docs.json', - 'sde/public/locales/nl/errors.json', - 'sde/public/locales/nl/flag.json', - 'sde/public/locales/nl/footer.json', - 'sde/public/locales/nl/frombella.json', - 'sde/public/locales/nl/frombent.json', - 'sde/public/locales/nl/frombreanna.json', - 'sde/public/locales/nl/frombrian.json', - 'sde/public/locales/nl/fromscratch.json', - 'sde/public/locales/nl/fromtitan.json', - 'sde/public/locales/nl/gdpr.json', - 'sde/public/locales/nl/header.json', - 'sde/public/locales/nl/hodl.json', - 'sde/public/locales/nl/homepage.json', - 'sde/public/locales/nl/lab.json', - 'sde/public/locales/nl/locales.json', - 'sde/public/locales/nl/logs.json', - 'sde/public/locales/nl/measurements.json', - 'sde/public/locales/nl/modal.json', - 'sde/public/locales/nl/newsletter.json', - 'sde/public/locales/nl/patrons.json', - 'sde/public/locales/nl/plugin-annotations.json', - 'sde/public/locales/nl/plugins.json', - 'sde/public/locales/nl/popout.json', - 'sde/public/locales/nl/print.json', - 'sde/public/locales/nl/roles.json', - 'sde/public/locales/nl/sde.json', - 'sde/public/locales/nl/sections.json', - 'sde/public/locales/nl/sets.json', - 'sde/public/locales/nl/sponsors.json', - 'sde/public/locales/nl/status.json', - 'sde/public/locales/nl/submissions.json', - 'sde/public/locales/nl/support.json', - 'sde/public/locales/nl/susi.json', - 'sde/public/locales/nl/tags.json', - 'sde/public/locales/nl/techniques.json', - 'sde/public/locales/nl/themes.json', - 'sde/public/locales/nl/timeago.json', - 'sde/public/locales/nl/titan.json', - 'sde/public/locales/nl/tutorial.json', - 'sde/public/locales/nl/ui-settings.json', - 'sde/public/locales/nl/workbench.json', - 'sde/public/locales/es/account.json', - 'sde/public/locales/es/auth.json', - 'sde/public/locales/es/bella.json', - 'sde/public/locales/es/bent.json', - 'sde/public/locales/es/breanna.json', - 'sde/public/locales/es/brian.json', - 'sde/public/locales/es/common.json', - 'sde/public/locales/es/core-settings.json', - 'sde/public/locales/es/curate.json', - 'sde/public/locales/es/cut.json', - 'sde/public/locales/es/design-options.json', - 'sde/public/locales/es/designs.json', - 'sde/public/locales/es/docs.json', - 'sde/public/locales/es/errors.json', - 'sde/public/locales/es/flag.json', - 'sde/public/locales/es/footer.json', - 'sde/public/locales/es/frombella.json', - 'sde/public/locales/es/frombent.json', - 'sde/public/locales/es/frombreanna.json', - 'sde/public/locales/es/frombrian.json', - 'sde/public/locales/es/fromscratch.json', - 'sde/public/locales/es/fromtitan.json', - 'sde/public/locales/es/gdpr.json', - 'sde/public/locales/es/header.json', - 'sde/public/locales/es/hodl.json', - 'sde/public/locales/es/homepage.json', - 'sde/public/locales/es/lab.json', - 'sde/public/locales/es/locales.json', - 'sde/public/locales/es/logs.json', - 'sde/public/locales/es/measurements.json', - 'sde/public/locales/es/modal.json', - 'sde/public/locales/es/newsletter.json', - 'sde/public/locales/es/patrons.json', - 'sde/public/locales/es/plugin-annotations.json', - 'sde/public/locales/es/plugins.json', - 'sde/public/locales/es/popout.json', - 'sde/public/locales/es/print.json', - 'sde/public/locales/es/roles.json', - 'sde/public/locales/es/sde.json', - 'sde/public/locales/es/sections.json', - 'sde/public/locales/es/sets.json', - 'sde/public/locales/es/sponsors.json', - 'sde/public/locales/es/status.json', - 'sde/public/locales/es/submissions.json', - 'sde/public/locales/es/support.json', - 'sde/public/locales/es/susi.json', - 'sde/public/locales/es/tags.json', - 'sde/public/locales/es/techniques.json', - 'sde/public/locales/es/themes.json', - 'sde/public/locales/es/timeago.json', - 'sde/public/locales/es/titan.json', - 'sde/public/locales/es/tutorial.json', - 'sde/public/locales/es/ui-settings.json', - 'sde/public/locales/es/workbench.json', 'sde/public/locales/uk/account.json', 'sde/public/locales/uk/auth.json', 'sde/public/locales/uk/bella.json', @@ -459,6 +405,60 @@ export const downloads = { 'sde/public/locales/uk/tutorial.json', 'sde/public/locales/uk/ui-settings.json', 'sde/public/locales/uk/workbench.json', + 'sde/public/locales/nl/account.json', + 'sde/public/locales/nl/auth.json', + 'sde/public/locales/nl/bella.json', + 'sde/public/locales/nl/bent.json', + 'sde/public/locales/nl/breanna.json', + 'sde/public/locales/nl/brian.json', + 'sde/public/locales/nl/common.json', + 'sde/public/locales/nl/core-settings.json', + 'sde/public/locales/nl/curate.json', + 'sde/public/locales/nl/cut.json', + 'sde/public/locales/nl/design-options.json', + 'sde/public/locales/nl/designs.json', + 'sde/public/locales/nl/docs.json', + 'sde/public/locales/nl/errors.json', + 'sde/public/locales/nl/flag.json', + 'sde/public/locales/nl/footer.json', + 'sde/public/locales/nl/frombella.json', + 'sde/public/locales/nl/frombent.json', + 'sde/public/locales/nl/frombreanna.json', + 'sde/public/locales/nl/frombrian.json', + 'sde/public/locales/nl/fromscratch.json', + 'sde/public/locales/nl/fromtitan.json', + 'sde/public/locales/nl/gdpr.json', + 'sde/public/locales/nl/header.json', + 'sde/public/locales/nl/hodl.json', + 'sde/public/locales/nl/homepage.json', + 'sde/public/locales/nl/lab.json', + 'sde/public/locales/nl/locales.json', + 'sde/public/locales/nl/logs.json', + 'sde/public/locales/nl/measurements.json', + 'sde/public/locales/nl/modal.json', + 'sde/public/locales/nl/newsletter.json', + 'sde/public/locales/nl/patrons.json', + 'sde/public/locales/nl/plugin-annotations.json', + 'sde/public/locales/nl/plugins.json', + 'sde/public/locales/nl/popout.json', + 'sde/public/locales/nl/print.json', + 'sde/public/locales/nl/roles.json', + 'sde/public/locales/nl/sde.json', + 'sde/public/locales/nl/sections.json', + 'sde/public/locales/nl/sets.json', + 'sde/public/locales/nl/sponsors.json', + 'sde/public/locales/nl/status.json', + 'sde/public/locales/nl/submissions.json', + 'sde/public/locales/nl/support.json', + 'sde/public/locales/nl/susi.json', + 'sde/public/locales/nl/tags.json', + 'sde/public/locales/nl/techniques.json', + 'sde/public/locales/nl/themes.json', + 'sde/public/locales/nl/timeago.json', + 'sde/public/locales/nl/titan.json', + 'sde/public/locales/nl/tutorial.json', + 'sde/public/locales/nl/ui-settings.json', + 'sde/public/locales/nl/workbench.json', 'shared/utils.mjs', 'shared/components/mdx/dynamic.mjs', 'shared/components/mdx/design-measurements.mjs', diff --git a/plugins/core-plugins/package.json b/plugins/core-plugins/package.json index f8161bb41d8..55b6267fe70 100644 --- a/plugins/core-plugins/package.json +++ b/plugins/core-plugins/package.json @@ -53,7 +53,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0", "@freesewing/plugin-annotations": "3.2.0", "@freesewing/plugin-mirror": "3.2.0", diff --git a/plugins/plugin-annotations/package.json b/plugins/plugin-annotations/package.json index 080aeac1c48..9595a53eb92 100644 --- a/plugins/plugin-annotations/package.json +++ b/plugins/plugin-annotations/package.json @@ -53,7 +53,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0" }, "files": [ diff --git a/plugins/plugin-bin-pack/package.json b/plugins/plugin-bin-pack/package.json index de2420f1fa8..2bbb3177085 100644 --- a/plugins/plugin-bin-pack/package.json +++ b/plugins/plugin-bin-pack/package.json @@ -53,7 +53,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0" }, "files": [ diff --git a/plugins/plugin-bust/package.json b/plugins/plugin-bust/package.json index 78bbbf1bc64..2bf7619359f 100644 --- a/plugins/plugin-bust/package.json +++ b/plugins/plugin-bust/package.json @@ -53,7 +53,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0" }, "files": [ diff --git a/plugins/plugin-flip/package.json b/plugins/plugin-flip/package.json index c67d522a583..620410d3a05 100644 --- a/plugins/plugin-flip/package.json +++ b/plugins/plugin-flip/package.json @@ -53,7 +53,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0" }, "files": [ diff --git a/plugins/plugin-gore/package.json b/plugins/plugin-gore/package.json index 76b6b1cd68e..7109989548f 100644 --- a/plugins/plugin-gore/package.json +++ b/plugins/plugin-gore/package.json @@ -53,7 +53,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0" }, "files": [ diff --git a/plugins/plugin-i18n/package.json b/plugins/plugin-i18n/package.json index fa39fd98abb..0cd8688c19f 100644 --- a/plugins/plugin-i18n/package.json +++ b/plugins/plugin-i18n/package.json @@ -53,7 +53,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0" }, "files": [ diff --git a/plugins/plugin-measurements/package.json b/plugins/plugin-measurements/package.json index 0f5550513ca..7922a7c75bd 100644 --- a/plugins/plugin-measurements/package.json +++ b/plugins/plugin-measurements/package.json @@ -53,7 +53,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0" }, "files": [ diff --git a/plugins/plugin-mirror/package.json b/plugins/plugin-mirror/package.json index 733c2c5b3e4..f96155821fe 100644 --- a/plugins/plugin-mirror/package.json +++ b/plugins/plugin-mirror/package.json @@ -53,7 +53,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0" }, "files": [ diff --git a/plugins/plugin-ringsector/package.json b/plugins/plugin-ringsector/package.json index 3b2f69a23c9..7a3674e6e81 100644 --- a/plugins/plugin-ringsector/package.json +++ b/plugins/plugin-ringsector/package.json @@ -53,7 +53,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0" }, "files": [ diff --git a/plugins/plugin-round/package.json b/plugins/plugin-round/package.json index c5f81e78971..6d85f49d3fe 100644 --- a/plugins/plugin-round/package.json +++ b/plugins/plugin-round/package.json @@ -53,7 +53,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0" }, "files": [ diff --git a/plugins/plugin-sprinkle/package.json b/plugins/plugin-sprinkle/package.json index 72a16401155..75a5153fd03 100644 --- a/plugins/plugin-sprinkle/package.json +++ b/plugins/plugin-sprinkle/package.json @@ -53,7 +53,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0" }, "files": [ diff --git a/plugins/plugin-svgattr/package.json b/plugins/plugin-svgattr/package.json index 5322bf25702..9d89a25858d 100644 --- a/plugins/plugin-svgattr/package.json +++ b/plugins/plugin-svgattr/package.json @@ -53,7 +53,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0" }, "files": [ diff --git a/plugins/plugin-theme/package.json b/plugins/plugin-theme/package.json index dc9e123f800..bb83f9c2ac9 100644 --- a/plugins/plugin-theme/package.json +++ b/plugins/plugin-theme/package.json @@ -53,7 +53,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0" }, "files": [ diff --git a/plugins/plugin-timing/package.json b/plugins/plugin-timing/package.json index cc7bdbb438b..d1841135c09 100644 --- a/plugins/plugin-timing/package.json +++ b/plugins/plugin-timing/package.json @@ -53,7 +53,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0" }, "files": [ diff --git a/plugins/plugin-versionfree-svg/package.json b/plugins/plugin-versionfree-svg/package.json index 73a4aa1a79a..9b11f459a4b 100644 --- a/plugins/plugin-versionfree-svg/package.json +++ b/plugins/plugin-versionfree-svg/package.json @@ -53,7 +53,7 @@ }, "dependencies": {}, "devDependencies": { - "mocha": "10.3.0", + "mocha": "10.4.0", "chai": "5.1.0" }, "files": [ diff --git a/sites/backend/package.json b/sites/backend/package.json index 9632132cef2..5a662082ab2 100644 --- a/sites/backend/package.json +++ b/sites/backend/package.json @@ -29,7 +29,7 @@ "peerDependencies": {}, "dependencies": { "@aws-sdk/client-sesv2": "3.535.0", - "@prisma/client": "5.11.0", + "@prisma/client": "5.13.0", "bcryptjs": "2.4.3", "cors": "2.8.5", "dotenv": "16.4.5", @@ -50,7 +50,7 @@ "chai": "5.1.0", "chai-http": "4.4.0", "esbuild": "0.20.2", - "mocha": "10.3.0", + "mocha": "10.4.0", "mocha-steps": "1.3.0", "nodemon": "3.1.0", "prisma": "5.11.0" diff --git a/sites/dev/package.json b/sites/dev/package.json index 51ee9abddec..7c60a2fdfc3 100644 --- a/sites/dev/package.json +++ b/sites/dev/package.json @@ -32,14 +32,14 @@ "@mdx-js/mdx": "^3.0.0", "@mdx-js/react": "^3.0.0", "@mdx-js/runtime": "2.0.0-next.9", - "@next/bundle-analyzer": "14.1.4", - "@tailwindcss/typography": "0.5.10", + "@next/bundle-analyzer": "14.2.3", + "@tailwindcss/typography": "0.5.13", "algoliasearch": "4.22.1", - "daisyui": "4.7.3", + "daisyui": "4.10.4", "lodash.get": "4.4.2", "lodash.orderby": "4.6.0", "lodash.set": "4.3.2", - "next": "14.1.4", + "next": "14.2.3", "react": "18.3.1", "react-copy-to-clipboard": "5.1.0", "react-dom": "18.3.1", diff --git a/sites/lab/hooks/use-design.mjs b/sites/lab/hooks/use-design.mjs index fca27f1477e..deedaac3680 100644 --- a/sites/lab/hooks/use-design.mjs +++ b/sites/lab/hooks/use-design.mjs @@ -59,6 +59,7 @@ import { Wahid as wahid } from '@freesewing/wahid' import { Walburga as walburga } from '@freesewing/walburga' import { Waralee as waralee } from '@freesewing/waralee' import { Yuri as yuri } from '@freesewing/yuri' +import { Lily as lily } from '@freesewing/lily' const designs = { aaron, @@ -118,6 +119,7 @@ const designs = { walburga, waralee, yuri, + lily, } export const useDesign = (design) => (designs[design] ? designs[design] : false) diff --git a/sites/lab/package.json b/sites/lab/package.json index 6e2d3ea8b57..51806d61a44 100644 --- a/sites/lab/package.json +++ b/sites/lab/package.json @@ -30,23 +30,23 @@ "@mdx-js/mdx": "^3.0.0", "@mdx-js/react": "^3.0.0", "@mdx-js/runtime": "2.0.0-next.9", - "@tailwindcss/typography": "0.5.10", + "@tailwindcss/typography": "0.5.13", "algoliasearch": "4.22.1", "d3-dispatch": "3.0.1", "d3-drag": "3.0.0", "d3-selection": "3.0.0", - "daisyui": "4.7.3", + "daisyui": "4.10.4", "i18next": "23.11.2", "lodash.get": "4.4.2", "lodash.orderby": "4.6.0", "lodash.set": "4.3.2", - "next": "14.1.4", - "next-i18next": "15.2.0", + "next": "14.2.3", + "next-i18next": "15.3.0", "ora": "8.0.1", "react": "18.3.1", "react-copy-to-clipboard": "5.1.0", "react-hotkeys-hook": "4.5.0", - "react-i18next": "14.1.0", + "react-i18next": "14.1.1", "react-instantsearch-dom": "6.40.4", "react-swipeable": "7.0.1", "react-timeago": "7.2.0", diff --git a/sites/org/hooks/use-design.mjs b/sites/org/hooks/use-design.mjs index 8db552d77fb..612a73c4ef1 100644 --- a/sites/org/hooks/use-design.mjs +++ b/sites/org/hooks/use-design.mjs @@ -56,6 +56,7 @@ import { Wahid as wahid } from '@freesewing/wahid' import { Walburga as walburga } from '@freesewing/walburga' import { Waralee as waralee } from '@freesewing/waralee' import { Yuri as yuri } from '@freesewing/yuri' +import { Lily as lily } from '@freesewing/lily' const designs = { aaron, @@ -112,6 +113,7 @@ const designs = { walburga, waralee, yuri, + lily, } export const useDesign = (design) => (designs[design] ? designs[design] : false) diff --git a/sites/org/package.json b/sites/org/package.json index 0a5f4e5d335..9122d2e2d65 100644 --- a/sites/org/package.json +++ b/sites/org/package.json @@ -29,36 +29,36 @@ "peerDependencies": {}, "dependencies": { "@bugsnag/js": "7.22.4", - "@bugsnag/plugin-react": "7.19.0", + "@bugsnag/plugin-react": "7.22.7", "@mdx-js/mdx": "^3.0.0", "@mdx-js/react": "^3.0.0", "@mdx-js/runtime": "2.0.0-next.9", "@tailwindcss/nesting": "^0.0.0-insiders.565cd3e", - "@tailwindcss/typography": "0.5.10", + "@tailwindcss/typography": "0.5.13", "algoliasearch": "4.22.1", "react-copy-to-clipboard": "5.1.0", - "daisyui": "4.7.3", + "daisyui": "4.10.4", "echarts": "5.5.0", "echarts-for-react": "3.0.2", - "jotai": "2.7.1", - "jotai-location": "0.5.4", + "jotai": "2.8.0", + "jotai-location": "0.5.5", "lodash.get": "4.4.2", "lodash.orderby": "4.6.0", "lodash.set": "4.3.2", "luxon": "3.4.4", - "next": "14.1.4", - "next-i18next": "15.2.0", + "next": "14.2.3", + "next-i18next": "15.3.0", "ora": "8.0.1", "react": "18.3.1", "react-dom": "18.3.1", "react-dropzone": "14.2.3", "react-hotkeys-hook": "4.5.0", - "react-i18next": "14.1.0", + "react-i18next": "14.1.1", "react-instantsearch-dom": "6.40.4", "react-instantsearch-hooks-web": "6.47.3", "react-swipeable": "7.0.1", "react-timeago": "7.2.0", - "react-zoom-pan-pinch": "3.4.3", + "react-zoom-pan-pinch": "3.4.4", "rehype-autolink-headings": "7.1.0", "rehype-highlight": "7.0.0", "rehype-sanitize": "6.0.0", @@ -69,7 +69,7 @@ "remark-gfm": "4.0.0", "remark-mdx-frontmatter": "4.0.0", "strip-markdown": "6.0.0", - "use-local-storage-state": "19.1.0", + "use-local-storage-state": "19.2.0", "yaml-loader": "0.8.1" }, "devDependencies": { diff --git a/sites/org/pages/account/patterns/lily/edit.mjs b/sites/org/pages/account/patterns/lily/edit.mjs new file mode 100644 index 00000000000..4f6a6136207 --- /dev/null +++ b/sites/org/pages/account/patterns/lily/edit.mjs @@ -0,0 +1,86 @@ +/* + * This page is auto-generated. Do not edit it by hand. + */ +import { Lily } from 'designs/lily/src/index.mjs' +// Dependencies +import { serverSideTranslations } from 'next-i18next/serverSideTranslations' +import { nsMerge, getSearchParam } from 'shared/utils.mjs' +// Hooks +import { useState, useEffect, useContext } from 'react' +import { useTranslation } from 'next-i18next' +import { useBackend } from 'shared/hooks/use-backend.mjs' +// Context +import { LoadingStatusContext } from 'shared/context/loading-status-context.mjs' +// Components +import { PageWrapper, ns as pageNs } from 'shared/components/wrappers/page.mjs' +import { Workbench, ns as wbNs } from 'shared/components/workbench/new.mjs' +import { WorkbenchLayout } from 'site/components/layouts/workbench.mjs' +import { Loading } from 'shared/components/spinner.mjs' + +// Translation namespaces used on this page +const ns = nsMerge('lily', wbNs, pageNs) + +const EditDesignComponent = ({ id, design, Design, settings }) => ( + +) + +const EditLilyPage = ({ page }) => { + const { setLoadingStatus } = useContext(LoadingStatusContext) + const backend = useBackend() + const { t } = useTranslation(ns) + + const [pattern, setPattern] = useState(false) + + useEffect(() => { + const getPattern = async () => { + setLoadingStatus([true, t('backendLoadingStarted')]) + let result + try { + result = await backend.getPattern(id) + if (result.success) { + setPattern(result.data.pattern) + setLoadingStatus([true, 'backendLoadingCompleted', true, true]) + } else setLoadingStatus([true, 'backendError', true, false]) + } catch (err) { + console.log(err) + setLoadingStatus([true, 'backendError', true, false]) + } + } + const id = getSearchParam('id') + if (id) getPattern() + }, [backend, setLoadingStatus, t]) + + return ( + // prettier-ignore + + {pattern ? ( + + ) : ( +
+

{t('account:oneMomentPLease')}

+ +
+ )} +
+ ) +} + +export default EditLilyPage + +export async function getStaticProps({ locale }) { + return { + props: { + ...(await serverSideTranslations(locale, ns)), + page: { + locale, + path: ['account', 'patterns', 'lily'], + title: 'Lily', + }, + }, + } +} diff --git a/sites/org/pages/new/lily.mjs b/sites/org/pages/new/lily.mjs new file mode 100644 index 00000000000..e9abc59ccd7 --- /dev/null +++ b/sites/org/pages/new/lily.mjs @@ -0,0 +1,41 @@ +/* + * This page is auto-generated. Do not edit it by hand. + */ +import { Lily } from 'designs/lily/src/index.mjs' +// Dependencies +import { serverSideTranslations } from 'next-i18next/serverSideTranslations' +import { nsMerge } from 'shared/utils.mjs' +// Components +import { PageWrapper, ns as pageNs } from 'shared/components/wrappers/page.mjs' +import { Workbench, ns as wbNs } from 'shared/components/workbench/new.mjs' +import { WorkbenchLayout } from 'site/components/layouts/workbench.mjs' + +// Translation namespaces used on this page +const ns = nsMerge('lily', wbNs, pageNs) + +const NewLilyPage = ({ page, docs }) => ( + + + +) + +export default NewLilyPage + +export async function getStaticProps({ locale }) { + return { + props: { + ...(await serverSideTranslations(locale, ns)), + page: { + locale, + path: ['new', 'lily'], + title: 'Lily', + }, + }, + } +} diff --git a/sites/sde/package.json b/sites/sde/package.json index d0aec045d94..baa972c6528 100644 --- a/sites/sde/package.json +++ b/sites/sde/package.json @@ -44,38 +44,38 @@ "@mdx-js/react": "^3.0.0", "@mdx-js/runtime": "2.0.0-next.9", "@tailwindcss/nesting": "^0.0.0-insiders.565cd3e", - "@tailwindcss/typography": "0.5.10", + "@tailwindcss/typography": "0.5.13", "autoprefixer": "10.4.19", "axios": "1.6.8", "d3-dispatch": "3.0.1", "d3-drag": "3.0.0", "d3-selection": "3.0.0", - "daisyui": "4.7.3", + "daisyui": "4.10.4", "echarts": "5.5.0", "echarts-for-react": "3.0.2", "file-saver": "2.0.5", "i18next": "23.11.2", - "jotai": "2.7.1", - "jotai-location": "0.5.4", + "jotai": "2.8.0", + "jotai-location": "0.5.5", "js-yaml": "4.1.0", "lodash.debounce": "^4.0.8", "lodash.get": "4.4.2", "lodash.orderby": "4.6.0", "lodash.set": "4.3.2", "mustache": "4.2.0", - "next": "14.1.4", - "next-i18next": "15.2.0", + "next": "14.2.3", + "next-i18next": "15.3.0", "pdfkit": "0.14.0", "postcss-for": "2.1.1", "react": "18.3.1", "react-dom": "18.3.1", "react-copy-to-clipboard": "5.1.0", "react-hotkeys-hook": "4.5.0", - "react-i18next": "14.1.0", + "react-i18next": "14.1.1", "react-dropzone": "14.2.3", "react-swipeable": "7.0.1", "react-timeago": "7.2.0", - "react-zoom-pan-pinch": "3.4.3", + "react-zoom-pan-pinch": "3.4.4", "remark-gfm": "4.0.0", "remark-frontmatter": "5.0.0", "remark-mdx-frontmatter": "4.0.0", @@ -83,8 +83,8 @@ "slugify": "^1.6.6", "svg-to-pdfkit": "https://git@github.com/eriese/SVG-to-PDFKit", "tailwindcss": "3.4.1", - "tlds": "1.251.0", - "use-local-storage-state": "19.1.0", + "tlds": "1.252.0", + "use-local-storage-state": "19.2.0", "web-worker": "1.3.0" }, "devDependencies": {}, diff --git a/sites/shared/i18n/designs.mjs b/sites/shared/i18n/designs.mjs index 104187d8a25..c1ffa3bf9b2 100644 --- a/sites/shared/i18n/designs.mjs +++ b/sites/shared/i18n/designs.mjs @@ -62,6 +62,7 @@ import { i18n as wahid } from '@freesewing/wahid' import { i18n as walburga } from '@freesewing/walburga' import { i18n as waralee } from '@freesewing/waralee' import { i18n as yuri } from '@freesewing/yuri' +import { i18n as lily } from '@freesewing/lily' export const designs = { aaron, @@ -124,4 +125,5 @@ export const designs = { walburga, waralee, yuri, + lily, } diff --git a/sites/shared/package.json b/sites/shared/package.json index 7ccd89a2b8a..e4a6a5f11da 100644 --- a/sites/shared/package.json +++ b/sites/shared/package.json @@ -16,27 +16,27 @@ "scripts": {}, "peerDependencies": {}, "dependencies": { - "@next/mdx": "14.1.4", + "@next/mdx": "14.2.3", "@resvg/resvg-js": "2.6.0", - "@tailwindcss/typography": "0.5.10", + "@tailwindcss/typography": "0.5.13", "Buffer": "0.0.0", "d3-dispatch": "3.0.1", "d3-drag": "3.0.0", "d3-selection": "3.0.0", - "daisyui": "4.7.3", + "daisyui": "4.10.4", "feed": "4.2.2", "file-saver": "2.0.5", "front-matter": "4.0.2", "highlight.js": "11.9.0", "github-slugger": "2.0.0", - "jotai": "2.7.1", - "jotai-location": "0.5.4", + "jotai": "2.8.0", + "jotai-location": "0.5.5", "lodash.clonedeep": "4.5.0", "lodash.debounce": "^4.0.8", "lodash.orderby": "4.6.0", "lodash.unset": "4.5.2", "lodash.get": "4.4.2", - "mdast-util-toc": "7.0.0", + "mdast-util-toc": "7.0.1", "mermaid": "10.9.0", "ora": "8.0.1", "pdfkit": "0.14.0", @@ -44,7 +44,7 @@ "react": "18.3.1", "react-dom": "18.3.1", "react-timeago": "7.2.0", - "react-zoom-pan-pinch": "3.4.3", + "react-zoom-pan-pinch": "3.4.4", "rehype-autolink-headings": "7.1.0", "rehype-highlight": "7.0.0", "remark-frontmatter": "5.0.0", @@ -52,10 +52,10 @@ "remark-smartypants": "2.1.0", "slugify": "^1.6.6", "svg-to-pdfkit": "https://git@github.com/eriese/SVG-to-PDFKit", - "tlds": "1.251.0", + "tlds": "1.252.0", "to-vfile": "8.0.0", "unist-util-visit": "5.0.0", - "use-local-storage-state": "19.1.0", + "use-local-storage-state": "19.2.0", "web-worker": "1.3.0" }, "devDependencies": { diff --git a/yarn.lock b/yarn.lock index 95dc35a1255..da875135002 100644 --- a/yarn.lock +++ b/yarn.lock @@ -626,9 +626,9 @@ semver "^6.3.1" "@babel/eslint-parser@^7.22.15": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.24.1.tgz" - integrity sha512-d5guuzMlPeDfZIbpQ8+g1NaCNuAGBBGNECh0HVqz1sjOeVLh2CEaifuOysCH18URW6R7pqXINvf5PaR/dC6jLQ== + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.24.5.tgz#3b0f7d383a540329a30a6a9937cfc89461d26217" + integrity sha512-gsUcqS/fPlgAw1kOtpss7uhY6E9SFFANQ6EFX5GTvzUwaV0+sGaZWk6xq22MOdeT9wfxyokW3ceCUvOiRtZciQ== dependencies: "@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1" eslint-visitor-keys "^2.1.0" @@ -910,10 +910,10 @@ pump "^3.0.0" stack-generator "^2.0.3" -"@bugsnag/plugin-react@7.19.0": - version "7.19.0" - resolved "https://registry.npmjs.org/@bugsnag/plugin-react/-/plugin-react-7.19.0.tgz" - integrity sha512-owC4QXYJWGllMoOPcH5P7sbDIDuFLMCbjGAU6FwH5mBMObSQo+1ViSKImlTJQUFXATM8ySISTBVt7w3C6FFHng== +"@bugsnag/plugin-react@7.22.7": + version "7.22.7" + resolved "https://registry.yarnpkg.com/@bugsnag/plugin-react/-/plugin-react-7.22.7.tgz#9f308cc4c043ee765d77686fca4e4404dc1c88d0" + integrity sha512-CDyCHK5+KMkpf/2vmVC7xqqP4ys25Yuj9M8xVrmP7LC02nFUPt/UzEIt43MSO4Jfw254ZimbsQrhIweabQNyxQ== "@bugsnag/safe-json-stringify@^6.0.0": version "6.0.0" @@ -1463,17 +1463,17 @@ resolved "https://registry.npmjs.org/@mdx-js/util/-/util-2.0.0-next.1.tgz" integrity sha512-F36kWTFdFXrbNIsM77dhVwYZsZonUIKHkYyYgnuw1NWskBfEn1ET5B5Z5mm58ckKNf7SimchnxR9sKCCtH38WA== -"@next/bundle-analyzer@14.1.4": - version "14.1.4" - resolved "https://registry.npmjs.org/@next/bundle-analyzer/-/bundle-analyzer-14.1.4.tgz" - integrity sha512-IpF/18HcAOcfHRr24tqPOUpMmVKIqvkCxIubMeRYWCXs3jm7niPGrt8Mu74yMDzfGlUwgQA6Xd6BUc5+jQxcEg== +"@next/bundle-analyzer@14.2.3": + version "14.2.3" + resolved "https://registry.yarnpkg.com/@next/bundle-analyzer/-/bundle-analyzer-14.2.3.tgz#dfa43586983d3fffdeb5f3c50f2c65ab1c51f184" + integrity sha512-Z88hbbngMs7njZKI8kTJIlpdLKYfMSLwnsqYe54AP4aLmgL70/Ynx/J201DQ+q2Lr6FxFw1uCeLGImDrHOl2ZA== dependencies: webpack-bundle-analyzer "4.10.1" -"@next/env@14.1.4": - version "14.1.4" - resolved "https://registry.npmjs.org/@next/env/-/env-14.1.4.tgz" - integrity sha512-e7X7bbn3Z6DWnDi75UWn+REgAbLEqxI8Tq2pkFOFAMpWAWApz/YCUhtWMWn410h8Q2fYiYL7Yg5OlxMOCfFjJQ== +"@next/env@14.2.3": + version "14.2.3" + resolved "https://registry.yarnpkg.com/@next/env/-/env-14.2.3.tgz#d6def29d1c763c0afb397343a15a82e7d92353a0" + integrity sha512-W7fd7IbkfmeeY2gXrzJYDx8D2lWKbVoTIj1o1ScPHNzvp30s1AuoEFSdr39bC5sjxJaxTtq3OTCZboNp0lNWHA== "@next/eslint-plugin-next@14.2.3": version "14.2.3" @@ -1482,57 +1482,57 @@ dependencies: glob "10.3.10" -"@next/mdx@14.1.4": - version "14.1.4" - resolved "https://registry.npmjs.org/@next/mdx/-/mdx-14.1.4.tgz" - integrity sha512-FyuDXPTEmuIqtj/AxaKLvwiEZb6hDviq6Ywn8ZlsZOlvYSWpcZGuQrYrDulrdIm/I48hHXANor7EiJzTbVig8Q== +"@next/mdx@14.2.3": + version "14.2.3" + resolved "https://registry.yarnpkg.com/@next/mdx/-/mdx-14.2.3.tgz#f914cc8c2caf05cbf2ed10eff3a79977faa3eced" + integrity sha512-oVz7BWpoLQ9dKvCKxPIX9X6BILPTrpTJnYDn2lAsZvK7J9Ela6xNm57vNwgZ8q7xw1THSDdSlbPNgIalM7U/+A== dependencies: source-map "^0.7.0" -"@next/swc-darwin-arm64@14.1.4": - version "14.1.4" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.1.4.tgz#a3bca0dc4393ac4cf3169bbf24df63441de66bb7" - integrity sha512-ubmUkbmW65nIAOmoxT1IROZdmmJMmdYvXIe8211send9ZYJu+SqxSnJM4TrPj9wmL6g9Atvj0S/2cFmMSS99jg== +"@next/swc-darwin-arm64@14.2.3": + version "14.2.3" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.3.tgz#db1a05eb88c0224089b815ad10ac128ec79c2cdb" + integrity sha512-3pEYo/RaGqPP0YzwnlmPN2puaF2WMLM3apt5jLW2fFdXD9+pqcoTzRk+iZsf8ta7+quAe4Q6Ms0nR0SFGFdS1A== -"@next/swc-darwin-x64@14.1.4": - version "14.1.4" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-14.1.4.tgz#ba3683d4e2d30099f3f2864dd7349a4d9f440140" - integrity sha512-b0Xo1ELj3u7IkZWAKcJPJEhBop117U78l70nfoQGo4xUSvv0PJSTaV4U9xQBLvZlnjsYkc8RwQN1HoH/oQmLlQ== +"@next/swc-darwin-x64@14.2.3": + version "14.2.3" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.3.tgz#a3f8af05b5f9a52ac3082e66ac29e125ab1d7b9c" + integrity sha512-6adp7waE6P1TYFSXpY366xwsOnEXM+y1kgRpjSRVI2CBDOcbRjsJ67Z6EgKIqWIue52d2q/Mx8g9MszARj8IEA== -"@next/swc-linux-arm64-gnu@14.1.4": - version "14.1.4" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.1.4.tgz#3519969293f16379954b7e196deb0c1eecbb2f8b" - integrity sha512-457G0hcLrdYA/u1O2XkRMsDKId5VKe3uKPvrKVOyuARa6nXrdhJOOYU9hkKKyQTMru1B8qEP78IAhf/1XnVqKA== +"@next/swc-linux-arm64-gnu@14.2.3": + version "14.2.3" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.3.tgz#4e63f43879285b52554bfd39e6e0cc78a9b27bbf" + integrity sha512-cuzCE/1G0ZSnTAHJPUT1rPgQx1w5tzSX7POXSLaS7w2nIUJUD+e25QoXD/hMfxbsT9rslEXugWypJMILBj/QsA== -"@next/swc-linux-arm64-musl@14.1.4": - version "14.1.4" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.1.4.tgz#4bb3196bd402b3f84cf5373ff1021f547264d62f" - integrity sha512-l/kMG+z6MB+fKA9KdtyprkTQ1ihlJcBh66cf0HvqGP+rXBbOXX0dpJatjZbHeunvEHoBBS69GYQG5ry78JMy3g== +"@next/swc-linux-arm64-musl@14.2.3": + version "14.2.3" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.3.tgz#ebdaed26214448b1e6f2c3e8b3cd29bfba387990" + integrity sha512-0D4/oMM2Y9Ta3nGuCcQN8jjJjmDPYpHX9OJzqk42NZGJocU2MqhBq5tWkJrUQOQY9N+In9xOdymzapM09GeiZw== -"@next/swc-linux-x64-gnu@14.1.4": - version "14.1.4" - resolved "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.1.4.tgz" - integrity sha512-BapIFZ3ZRnvQ1uWbmqEGJuPT9cgLwvKtxhK/L2t4QYO7l+/DxXuIGjvp1x8rvfa/x1FFSsipERZK70pewbtJtw== +"@next/swc-linux-x64-gnu@14.2.3": + version "14.2.3" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.3.tgz#19e3bcc137c3b582a1ab867106817e5c90a20593" + integrity sha512-ENPiNnBNDInBLyUU5ii8PMQh+4XLr4pG51tOp6aJ9xqFQ2iRI6IH0Ds2yJkAzNV1CfyagcyzPfROMViS2wOZ9w== -"@next/swc-linux-x64-musl@14.1.4": - version "14.1.4" - resolved "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.1.4.tgz" - integrity sha512-mqVxTwk4XuBl49qn2A5UmzFImoL1iLm0KQQwtdRJRKl21ylQwwGCxJtIYo2rbfkZHoSKlh/YgztY0qH3wG1xIg== +"@next/swc-linux-x64-musl@14.2.3": + version "14.2.3" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.3.tgz#794a539b98e064169cf0ff7741b2a4fb16adec7d" + integrity sha512-BTAbq0LnCbF5MtoM7I/9UeUu/8ZBY0i8SFjUMCbPDOLv+un67e2JgyN4pmgfXBwy/I+RHu8q+k+MCkDN6P9ViQ== -"@next/swc-win32-arm64-msvc@14.1.4": - version "14.1.4" - resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.1.4.tgz#84280a08c00cc3be24ddd3a12f4617b108e6dea6" - integrity sha512-xzxF4ErcumXjO2Pvg/wVGrtr9QQJLk3IyQX1ddAC/fi6/5jZCZ9xpuL9Tzc4KPWMFq8GGWFVDMshZOdHGdkvag== +"@next/swc-win32-arm64-msvc@14.2.3": + version "14.2.3" + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.3.tgz#eda9fa0fbf1ff9113e87ac2668ee67ce9e5add5a" + integrity sha512-AEHIw/dhAMLNFJFJIJIyOFDzrzI5bAjI9J26gbO5xhAKHYTZ9Or04BesFPXiAYXDNdrwTP2dQceYA4dL1geu8A== -"@next/swc-win32-ia32-msvc@14.1.4": - version "14.1.4" - resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.1.4.tgz#23ff7f4bd0a27177428669ef6fa5c3923c738031" - integrity sha512-WZiz8OdbkpRw6/IU/lredZWKKZopUMhcI2F+XiMAcPja0uZYdMTZQRoQ0WZcvinn9xZAidimE7tN9W5v9Yyfyw== +"@next/swc-win32-ia32-msvc@14.2.3": + version "14.2.3" + resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.3.tgz#7c1190e3f640ab16580c6bdbd7d0e766b9920457" + integrity sha512-vga40n1q6aYb0CLrM+eEmisfKCR45ixQYXuBXxOOmmoV8sYST9k7E3US32FsY+CkkF7NtzdcebiFT4CHuMSyZw== -"@next/swc-win32-x64-msvc@14.1.4": - version "14.1.4" - resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.1.4.tgz#bccf5beccfde66d6c66fa4e2509118c796385eda" - integrity sha512-4Rto21sPfw555sZ/XNLqfxDUNeLhNYGO2dlPqsnuCg8N8a2a9u1ltqBOPQ4vj1Gf7eJC0W2hHG2eYUHuiXgY2w== +"@next/swc-win32-x64-msvc@14.2.3": + version "14.2.3" + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.3.tgz#2be4e39ee25bfbd85be78eea17c0e7751dc4323c" + integrity sha512-Q1/zm43RWynxrO7lW4ehciQVj+5ePBhOK+/K2P7pLFX3JaJ/IZVC69SHidrmZSOkqz7ECIOhhy7XhAFG4JYyHA== "@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1": version "5.1.1-v1" @@ -1892,10 +1892,10 @@ resolved "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.24.tgz" integrity sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ== -"@prisma/client@5.11.0": - version "5.11.0" - resolved "https://registry.npmjs.org/@prisma/client/-/client-5.11.0.tgz" - integrity sha512-SWshvS5FDXvgJKM/a0y9nDC1rqd7KG0Q6ZVzd+U7ZXK5soe73DJxJJgbNBt2GNXOa+ysWB4suTpdK5zfFPhwiw== +"@prisma/client@5.13.0": + version "5.13.0" + resolved "https://registry.yarnpkg.com/@prisma/client/-/client-5.13.0.tgz#b9f1d0983d714e982675201d8222a9ecb4bdad4a" + integrity sha512-uYdfpPncbZ/syJyiYBwGZS8Gt1PTNoErNYMuqHDa2r30rNSFtgTA/LXsSk55R7pdRTMi5pHkeP9B14K6nHmwkg== "@prisma/debug@5.11.0": version "5.11.0" @@ -2504,11 +2504,17 @@ "@smithy/util-buffer-from" "^2.2.0" tslib "^2.6.2" -"@swc/helpers@0.5.2": - version "0.5.2" - resolved "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.2.tgz" - integrity sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw== +"@swc/counter@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@swc/counter/-/counter-0.1.3.tgz#cc7463bd02949611c6329596fccd2b0ec782b0e9" + integrity sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ== + +"@swc/helpers@0.5.5": + version "0.5.5" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.5.tgz#12689df71bfc9b21c4f4ca00ae55f2f16c8b77c0" + integrity sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A== dependencies: + "@swc/counter" "^0.1.3" tslib "^2.4.0" "@swc/helpers@^0.3.13": @@ -2525,10 +2531,10 @@ dependencies: postcss-nested "^5.0.5" -"@tailwindcss/typography@0.5.10": - version "0.5.10" - resolved "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.10.tgz" - integrity sha512-Pe8BuPJQJd3FfRnm6H0ulKIGoMEQS+Vq01R6M5aCrFB/ccR/shT+0kXLjouGC1gFLm9hopTFN+DMP0pfwRWzPw== +"@tailwindcss/typography@0.5.13": + version "0.5.13" + resolved "https://registry.yarnpkg.com/@tailwindcss/typography/-/typography-0.5.13.tgz#cd788a4fa4d0ca2506e242d512f377b22c1f7932" + integrity sha512-ADGcJ8dX21dVVHIwTRgzrcunY6YY9uSlAHHGVKvkA+vLc5qLwEszvKts40lx7z0qc4clpjclwLeK5rVCV2P/uw== dependencies: lodash.castarray "^4.4.0" lodash.isplainobject "^4.0.6" @@ -2756,10 +2762,10 @@ "@types/cookiejar" "*" "@types/node" "*" -"@types/ungap__structured-clone@^0.3.0": - version "0.3.3" - resolved "https://registry.npmjs.org/@types/ungap__structured-clone/-/ungap__structured-clone-0.3.3.tgz" - integrity sha512-RNmhIPwoip6K/zZOv3ypksTAqaqLEXvlNSXKyrC93xMSOAHZCR7PifW6xKZCwkbbnbM9dwB9X56PPoNTlNwEqw== +"@types/ungap__structured-clone@^1.0.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@types/ungap__structured-clone/-/ungap__structured-clone-1.2.0.tgz#12b9fd4ab3e6a82292d60048492b05eb75b4a48f" + integrity sha512-ZoaihZNLeZSxESbk9PUAPZOlSpcKx81I1+4emtULDVmBLkYutTcMlCj2K9VNlf9EWODxdO6gkAqEaLorXwZQVA== "@types/unist@*", "@types/unist@^3.0.0": version "3.0.2" @@ -4684,10 +4690,10 @@ dagre-d3-es@7.0.10: d3 "^7.8.2" lodash-es "^4.17.21" -daisyui@4.7.3: - version "4.7.3" - resolved "https://registry.npmjs.org/daisyui/-/daisyui-4.7.3.tgz" - integrity sha512-R8jUpBMAUm4rSyxzGa9QqFdJTkzREtb1QahXdDoOfElGiF4VbSuu5bfqQoOro1kkSagPy+aTKu5WtSSXmH3u3g== +daisyui@4.10.4: + version "4.10.4" + resolved "https://registry.yarnpkg.com/daisyui/-/daisyui-4.10.4.tgz#130d876d17ff7c3272a5002ffbe9ffaaff044dcc" + integrity sha512-B2zCnUPL96aO0GJUWNCIKotmM9n6aFw7F+2kuhd+D3piOIJGH7tgXJX84Jsfkl8pfftK+iOnlKxNv35EYil4VQ== dependencies: css-selector-tokenizer "^0.8" culori "^3" @@ -5100,9 +5106,9 @@ ee-first@1.1.1: integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== ejs@^3.1.7: - version "3.1.9" - resolved "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz" - integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ== + version "3.1.10" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.10.tgz#69ab8358b14e896f80cc39e62087b88500c3ac3b" + integrity sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA== dependencies: jake "^10.8.5" @@ -5523,10 +5529,10 @@ eslint-plugin-jsx-a11y@^6.7.1: object.entries "^1.1.7" object.fromentries "^2.0.7" -eslint-plugin-markdown@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/eslint-plugin-markdown/-/eslint-plugin-markdown-4.0.1.tgz" - integrity sha512-5/MnGvYU0i8MbHH5cg8S+Vl3DL+bqRNYshk1xUO86DilNBaxtTkhH+5FD0/yO03AmlI6+lfNFdk2yOw72EPzpA== +eslint-plugin-markdown@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-markdown/-/eslint-plugin-markdown-5.0.0.tgz#a2b69bce83e85838111d44c84b2d6721452dbb73" + integrity sha512-kY2u9yDhzvfZ0kmRTsvgm3mTnvZgTSGIIPeHg3yesSx4R5CTCnITUjCPhzCD1MUhNcqHU5Tr6lzx+02EclVPbw== dependencies: mdast-util-from-markdown "^0.8.5" @@ -7948,15 +7954,15 @@ jiti@^1.19.1: resolved "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz" integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q== -jotai-location@0.5.4: - version "0.5.4" - resolved "https://registry.npmjs.org/jotai-location/-/jotai-location-0.5.4.tgz" - integrity sha512-IqpyYLAF6HgoDoJVlX66IGvgrugCA1LJybT01NqenpdwypPtUB6u0cnJZMbN6axU+Yl2FTI6l+4x9IWh4WGFRA== +jotai-location@0.5.5: + version "0.5.5" + resolved "https://registry.yarnpkg.com/jotai-location/-/jotai-location-0.5.5.tgz#2b2622da6ee49493bc4d69e5610e2e5d382894ed" + integrity sha512-6QW/7W9IJHjhbn7gRgAw4sC30k0/G6JiC4uPlKi8ZPZGYk7R7r9PyMD2eVhL4XSxxag89JxS1iSyr6BIXsB4Sw== -jotai@2.7.1: - version "2.7.1" - resolved "https://registry.npmjs.org/jotai/-/jotai-2.7.1.tgz" - integrity sha512-bsaTPn02nFgWNP6cBtg/htZhCu4s0wxqoklRHePp6l/vlsypR9eLn7diRliwXYWMXDpPvW/LLA2afI8vwgFFaw== +jotai@2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/jotai/-/jotai-2.8.0.tgz#5a6585cd5576c400c2c5f8e157b83ad2ba70b2ab" + integrity sha512-yZNMC36FdLOksOr8qga0yLf14miCJlEThlp5DeFJNnqzm2+ZG7wLcJzoOyij5K6U6Xlc5ljQqPDlJRgqW0Y18g== js-base64@^2.1.9: version "2.6.4" @@ -9092,13 +9098,13 @@ mdast-util-to-string@^4.0.0: dependencies: "@types/mdast" "^4.0.0" -mdast-util-toc@7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/mdast-util-toc/-/mdast-util-toc-7.0.0.tgz" - integrity sha512-C28UcSqjmnWuvgT8d97qpaItHKvySqVPAECUzqQ51xuMyNFFJwcFoKW77KoMjtXrclTidLQFDzLUmTmrshRweA== +mdast-util-toc@7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-toc/-/mdast-util-toc-7.0.1.tgz#e886e45cd462060fab10a63f160fd2dbe2daf8d8" + integrity sha512-mBuhuKtP8F/5vVLNJKeC1fs1W5w2sZqB1uUvKwQK9qftSiBILVkQjKQ8aLVrhIEFPGwbMKCVCB3WAAW+BoVPxg== dependencies: "@types/mdast" "^4.0.0" - "@types/ungap__structured-clone" "^0.3.0" + "@types/ungap__structured-clone" "^1.0.0" "@ungap/structured-clone" "^1.0.0" github-slugger "^2.0.0" mdast-util-to-string "^4.0.0" @@ -10026,7 +10032,7 @@ mocha-steps@1.3.0: mocha@10.3.0: version "10.3.0" - resolved "https://registry.npmjs.org/mocha/-/mocha-10.3.0.tgz" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.3.0.tgz#0e185c49e6dccf582035c05fa91084a4ff6e3fe9" integrity sha512-uF2XJs+7xSLsrmIvn37i/wnc91nw7XjOQB8ccyx5aEgdnohr7n+rEiZP23WkCYHjilR6+EboEnbq/ZQDz4LSbg== dependencies: ansi-colors "4.1.1" @@ -10050,9 +10056,9 @@ mocha@10.3.0: yargs-parser "20.2.4" yargs-unparser "2.0.0" -mocha@^10.0.0: +mocha@10.4.0, mocha@^10.0.0: version "10.4.0" - resolved "https://registry.npmjs.org/mocha/-/mocha-10.4.0.tgz" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.4.0.tgz#ed03db96ee9cfc6d20c56f8e2af07b961dbae261" integrity sha512-eqhGB8JKapEYcC4ytX/xrzKforgEc3j1pGlAXVy3eRwrtAy5/nIfT1SvgGzfN0XZZxeLq0aQWkOUAmqIJiv+bA== dependencies: ansi-colors "4.1.1" @@ -10166,10 +10172,10 @@ nested-error-stacks@^2.0.0: resolved "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.1.tgz" integrity sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw== -next-i18next@15.2.0: - version "15.2.0" - resolved "https://registry.npmjs.org/next-i18next/-/next-i18next-15.2.0.tgz" - integrity sha512-Rl5yZ4oGffsB0AjRykZ5PzNQ2M6am54MaMayldGmH/UKZisrIxk2SKEPJvaHhKlWe1qgdNi2FkodwK8sEjfEmg== +next-i18next@15.3.0: + version "15.3.0" + resolved "https://registry.yarnpkg.com/next-i18next/-/next-i18next-15.3.0.tgz#b4530c80573854d00f95229af405e1e5beedbf18" + integrity sha512-bq7Cc9XJFcmGOCLnyEtHaeJ3+JJNsI/8Pkj9BaHAnhm4sZ9vNNC4ZsaqYnlRZ7VH5ypSo73fEqLK935jLsmCvQ== dependencies: "@babel/runtime" "^7.23.2" "@types/hoist-non-react-statics" "^3.3.4" @@ -10177,28 +10183,28 @@ next-i18next@15.2.0: hoist-non-react-statics "^3.3.2" i18next-fs-backend "^2.3.1" -next@14.1.4: - version "14.1.4" - resolved "https://registry.npmjs.org/next/-/next-14.1.4.tgz" - integrity sha512-1WTaXeSrUwlz/XcnhGTY7+8eiaFvdet5z9u3V2jb+Ek1vFo0VhHKSAIJvDWfQpttWjnyw14kBeq28TPq7bTeEQ== +next@14.2.3: + version "14.2.3" + resolved "https://registry.yarnpkg.com/next/-/next-14.2.3.tgz#f117dd5d5f20c307e7b8e4f9c1c97d961008925d" + integrity sha512-dowFkFTR8v79NPJO4QsBUtxv0g9BrS/phluVpMAt2ku7H+cbcBJlopXjkWlwxrk/xGqMemr7JkGPGemPrLLX7A== dependencies: - "@next/env" "14.1.4" - "@swc/helpers" "0.5.2" + "@next/env" "14.2.3" + "@swc/helpers" "0.5.5" busboy "1.6.0" caniuse-lite "^1.0.30001579" graceful-fs "^4.2.11" postcss "8.4.31" styled-jsx "5.1.1" optionalDependencies: - "@next/swc-darwin-arm64" "14.1.4" - "@next/swc-darwin-x64" "14.1.4" - "@next/swc-linux-arm64-gnu" "14.1.4" - "@next/swc-linux-arm64-musl" "14.1.4" - "@next/swc-linux-x64-gnu" "14.1.4" - "@next/swc-linux-x64-musl" "14.1.4" - "@next/swc-win32-arm64-msvc" "14.1.4" - "@next/swc-win32-ia32-msvc" "14.1.4" - "@next/swc-win32-x64-msvc" "14.1.4" + "@next/swc-darwin-arm64" "14.2.3" + "@next/swc-darwin-x64" "14.2.3" + "@next/swc-linux-arm64-gnu" "14.2.3" + "@next/swc-linux-arm64-musl" "14.2.3" + "@next/swc-linux-x64-gnu" "14.2.3" + "@next/swc-linux-x64-musl" "14.2.3" + "@next/swc-win32-arm64-msvc" "14.2.3" + "@next/swc-win32-ia32-msvc" "14.2.3" + "@next/swc-win32-x64-msvc" "14.2.3" nise@^5.1.5: version "5.1.9" @@ -11665,10 +11671,10 @@ react-hotkeys-hook@4.5.0: resolved "https://registry.npmjs.org/react-hotkeys-hook/-/react-hotkeys-hook-4.5.0.tgz" integrity sha512-Samb85GSgAWFQNvVt3PS90LPPGSf9mkH/r4au81ZP1yOIFayLC3QAvqTgGtJ8YEDMXtPmaVBs6NgipHO6h4Mug== -react-i18next@14.1.0: - version "14.1.0" - resolved "https://registry.npmjs.org/react-i18next/-/react-i18next-14.1.0.tgz" - integrity sha512-3KwX6LHpbvGQ+sBEntjV4sYW3Zovjjl3fpoHbUwSgFHf0uRBcbeCBLR5al6ikncI5+W0EFb71QXZmfop+J6NrQ== +react-i18next@14.1.1: + version "14.1.1" + resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-14.1.1.tgz#3d942a99866555ae3552c40f9fddfa061e29d7f3" + integrity sha512-QSiKw+ihzJ/CIeIYWrarCmXJUySHDwQr5y8uaNIkbxoGRm/5DukkxZs+RPla79IKyyDPzC/DRlgQCABHtrQuQQ== dependencies: "@babel/runtime" "^7.23.9" html-parse-stringify "^3.0.1" @@ -11739,10 +11745,10 @@ react-timeago@7.2.0: resolved "https://registry.npmjs.org/react-timeago/-/react-timeago-7.2.0.tgz" integrity sha512-2KsBEEs+qRhKx/kekUVNSTIpop3Jwd7SRBm0R4Eiq3mPeswRGSsftY9FpKsE/lXLdURyQFiHeHFrIUxLYskG5g== -react-zoom-pan-pinch@3.4.3: - version "3.4.3" - resolved "https://registry.npmjs.org/react-zoom-pan-pinch/-/react-zoom-pan-pinch-3.4.3.tgz" - integrity sha512-x5MFlfAx2D6NTpZu8OISqc2nYn4p+YEaM1p21w7S/VE1wbVzK8vRzTo9Bj1ydufa649MuP7JBRM3vvj1RftFZw== +react-zoom-pan-pinch@3.4.4: + version "3.4.4" + resolved "https://registry.yarnpkg.com/react-zoom-pan-pinch/-/react-zoom-pan-pinch-3.4.4.tgz#5450b027dbf9f161773cde71b061423ff1109328" + integrity sha512-lGTu7D9lQpYEQ6sH+NSlLA7gicgKRW8j+D/4HO1AbSV2POvKRFzdWQ8eI0r3xmOsl4dYQcY+teV6MhULeg1xBw== react@18.3.1, react@^18.2.0: version "18.3.1" @@ -13398,10 +13404,10 @@ tiny-inflate@^1.0.0, tiny-inflate@^1.0.3: resolved "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz" integrity sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw== -tlds@1.251.0: - version "1.251.0" - resolved "https://registry.npmjs.org/tlds/-/tlds-1.251.0.tgz" - integrity sha512-yztVk5O1LGKCjPd+7soBQyiKvSBXI5qugc/X0C7pLa0rV5ufBS6xcyX0pdf4NznO8xcZ5fqX248q+jTHd4AQJA== +tlds@1.252.0: + version "1.252.0" + resolved "https://registry.yarnpkg.com/tlds/-/tlds-1.252.0.tgz#71d9617f4ef4cc7347843bee72428e71b8b0f419" + integrity sha512-GA16+8HXvqtfEnw/DTcwB0UU354QE1n3+wh08oFjr6Znl7ZLAeUgYzCcK+/CCrOyE0vnHR8/pu3XXG3vDijXpQ== tmp@^0.0.33: version "0.0.33" @@ -14018,10 +14024,10 @@ urlgrey@1.0.0: dependencies: fast-url-parser "^1.1.3" -use-local-storage-state@19.1.0: - version "19.1.0" - resolved "https://registry.npmjs.org/use-local-storage-state/-/use-local-storage-state-19.1.0.tgz" - integrity sha512-3Ea6uRtRaSwpZYD9maZPKoEEGRuHmVA7zGrV/Uh9s5NTj9K1x/MB4IOQoywjUesQyhXmJq6bqjC5cAqlsXoOTw== +use-local-storage-state@19.2.0: + version "19.2.0" + resolved "https://registry.yarnpkg.com/use-local-storage-state/-/use-local-storage-state-19.2.0.tgz#eac2f18c8f4762931d3b6661097be0b2c00f65de" + integrity sha512-z5+n406vi3FzPJW6+lzuL/LJr4VLhXsUq1TWWeHQABL37bnJ159dSUmO7XuwqvACX93ZA9P2vkB8GMDgq1rr7A== use-sync-external-store@^1.0.0: version "1.2.0"