1
0
Fork 0

Merge branch 'develop' into joost

This commit is contained in:
Joost De Cock 2023-10-18 16:37:36 +02:00 committed by GitHub
commit cac64e3a9e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
63 changed files with 2287 additions and 1333 deletions

View file

@ -340,6 +340,20 @@
"curvedSeam"
]
},
"gozer": {
"code": "Wouter Van Wageningen",
"description": "A FreeSewing pattern for a ghost costume",
"design": "Wouter Van Wageningen",
"difficulty": 1,
"lab": true,
"org": true,
"tags": [
"costumes"
],
"techniques": [
"hem"
]
},
"hi": {
"code": "Wouter Van Wageningen",
"description": "A FreeSewing pattern for a shark plush toy",
@ -836,7 +850,7 @@
"bottoms",
"trousers"
],
"techniques": []
"techniques": ["curvedSeam", "hem", "weltPocket"]
},
"yuri": {
"code": "Hellgy",

View file

@ -0,0 +1,17 @@
# Change log for: @freesewing/gozer
## 3.0.0 (2022-09-30)
### Changed
- All FreeSewing pacakges are now ESM only.
- All FreeSewing pacakges 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.

143
designs/gozer/README.md Normal file
View file

@ -0,0 +1,143 @@
![FreeSewing](https://static.freesewing.org/banner.png)
<p align='center'><a
href="https://www.npmjs.com/package/@freesewing/gozer"
title="@freesewing/gozer on NPM"
><img src="https://img.shields.io/npm/v/@freesewing/gozer.svg"
alt="@freesewing/gozer on NPM"/>
</a><a
href="https://opensource.org/licenses/MIT"
title="License: MIT"
><img src="https://img.shields.io/npm/l/@freesewing/gozer.svg?label=License"
alt="License: MIT"/>
</a><a
href="https://deepscan.io/dashboard#view=project&tid=2114&pid=2993&bid=23256"
title="Code quality on DeepScan"
><img src="https://deepscan.io/api/teams/2114/projects/2993/branches/23256/badge/grade.svg"
alt="Code quality on DeepScan"/>
</a><a
href="https://github.com/freesewing/freesewing/issues?q=is%3Aissue+is%3Aopen+label%3Apkg%3Agozer"
title="Open issues tagged pkg:gozer"
><img src="https://img.shields.io/github/issues/freesewing/freesewing/pkg:gozer.svg?label=Issues"
alt="Open issues tagged pkg:gozer"/>
</a><a
href="#contributors-"
title="All Contributors"
><img src="https://img.shields.io/badge/all_contributors-111-pink.svg"
alt="All Contributors"/>
</a></p><p align='center'><a
href="https://twitter.com/freesewing_org"
title="Follow @freesewing_org on Twitter"
><img src="https://img.shields.io/badge/%F3%A0%80%A0-Follow%20us-blue.svg?logo=twitter&logoColor=white&logoWidth=15"
alt="Follow @freesewing_org on Twitter"/>
</a><a
href="https://chat.freesewing.org"
title="Chat with us on Discord"
><img src="https://img.shields.io/discord/698854858052075530?label=Chat%20on%20Discord"
alt="Chat with us on Discord"/>
</a><a
href="https://freesewing.org/patrons/join"
title="Become a FreeSewing Patron"
><img src="https://img.shields.io/badge/%F3%A0%80%A0-Support%20us-blueviolet.svg?logo=cash-app&logoColor=white&logoWidth=15"
alt="Become a FreeSewing Patron"/>
</a><a
href="https://instagram.com/freesewing_org"
title="Follow @freesewing_org on Twitter"
><img src="https://img.shields.io/badge/%F3%A0%80%A0-Follow%20us-E4405F.svg?logo=instagram&logoColor=white&logoWidth=15"
alt="Follow @freesewing_org on Twitter"/>
</a></p>
# @freesewing/gozer
A FreeSewing pattern for a ghost costume
## 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/gozer
If you're not entirely sure what to do or how to start, type this command:
```
npm run tips
```
> 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/#<entire-url-of-your-fork` into a browser
> 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 create-freesewing-pattern
```
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.
## Support FreeSewing: Become a patron 🥰
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 coind without
hardship, then you should [join us and become a patron](https://freesewing.org/community/join).
## 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).

35
designs/gozer/build.mjs Normal file
View file

@ -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()

4
designs/gozer/data.mjs Normal file
View file

@ -0,0 +1,4 @@
// This file is auto-generated | All changes you make will be overwritten.
export const name = '@freesewing/gozer'
export const version = '3.0.0'
export const data = { name, version }

View file

@ -0,0 +1,7 @@
{
"t": "Gozer",
"d": "A FreeSewing pattern that needs a description",
"p": { },
"s": { },
"o": { }
}

View file

@ -0,0 +1,9 @@
{
"t": "Gozer",
"d": "A FreeSewing pattern for a Halloween costume",
"p": {
"ghost": "ghost"
},
"s": { },
"o": { }
}

View file

@ -0,0 +1,7 @@
{
"t": "Gozer",
"d": "A FreeSewing pattern that needs a description",
"p": { },
"s": { },
"o": { }
}

View file

@ -0,0 +1,7 @@
{
"t": "Gozer",
"d": "A FreeSewing pattern that needs a description",
"p": { },
"s": { },
"o": { }
}

View file

@ -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 }

View file

@ -0,0 +1,7 @@
{
"t": "Gozer",
"d": "A FreeSewing pattern that needs a description",
"p": { },
"s": { },
"o": { }
}

View file

@ -0,0 +1,7 @@
{
"t": "Gozer",
"d": "A FreeSewing pattern that needs a description",
"p": { },
"s": { },
"o": { }
}

View file

@ -0,0 +1,73 @@
{
"name": "@freesewing/gozer",
"version": "3.0.0",
"description": "A FreeSewing pattern for a ghost costume",
"author": "Joost De Cock <joost@joost.at> (https://github.com/joostdecock)",
"homepage": "https://freesewing.org/",
"repository": "github:freesewing/freesewing",
"license": "MIT",
"bugs": {
"url": "https://github.com/freesewing/freesewing/issues"
},
"funding": {
"type": "individual",
"url": "https://freesewing.org/patrons/join"
},
"keywords": [
"freesewing",
"design",
"diy",
"fashion",
"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.0.0"
},
"dependencies": {},
"devDependencies": {
"mocha": "10.2.0",
"chai": "4.3.10",
"@freesewing/models": "3.0.0",
"@freesewing/plugin-timing": "3.0.0"
},
"files": [
"dist/*",
"README.md"
],
"publishConfig": {
"access": "public",
"tag": "latest"
},
"engines": {
"node": "18",
"npm": "9"
}
}

View file

@ -0,0 +1,55 @@
export const ghost = {
name: 'gozer.ghost',
measurements: ['hpsToWaistBack', 'waistToFloor', 'head'],
draft: ({ measurements, Point, points, Snippet, snippets, sa, macro, part }) => {
const eyeSize = measurements.head * 0.0416
const size =
measurements.hpsToWaistBack + measurements.waistToFloor + measurements.head / Math.PI
points.middle = new Point(0, 0).addCircle(size, 'fabric')
points.eyeLine = points.middle.shift(270, measurements.head / Math.PI / 2)
points.eyeLeft = points.eyeLine.shift(180, measurements.head * 0.13)
points.eyeRight = points.eyeLine.shift(0, measurements.head * 0.13)
points.left = new Point(-1 * size, 0)
points.right = new Point(size, 0)
points.eyeLeft.addCircle(eyeSize)
points.eyeRight.addCircle(eyeSize)
points.title = points.middle.shift(270, size * 0.65)
macro('title', {
nr: 1,
at: points.title,
title: 'Gozer',
align: 'center',
})
points.logo = points.middle.shift(270, size * 0.5)
snippets.logo = new Snippet('logo', points.logo)
if (sa) {
points.sa = new Point(0, 0).addCircle(size + sa, 'fabric sa')
}
macro('hd', {
from: points.left,
to: points.right,
id: 'width',
y: points.right.y,
})
macro('hd', {
from: points.eyeLeft,
to: points.middle,
id: 'eye',
y: points.eyeLeft.y,
})
macro('vd', {
from: points.eyeLeft,
to: points.middle,
id: 'eye',
x: points.eyeLeft.x,
})
return part
},
}

View file

@ -0,0 +1,16 @@
//
import { Design } from '@freesewing/core'
import { i18n } from '../i18n/index.mjs'
import { data } from '../data.mjs'
// Parts
import { ghost } from './ghost.mjs'
// Create new design
const Gozer = new Design({
data,
parts: [ghost],
})
// Named exports
export { ghost, i18n, Gozer }

View file

@ -0,0 +1,20 @@
// This file is auto-generated | Any changes you make will be overwritten.
import { Gozer, 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(Gozer)
// Test translation
testPatternI18n(Gozer, i18n)
// Test drafting - Change the second parameter to `true` to log errors
testPatternDrafting(Gozer, false)
// Test sampling - Change the second parameter to `true` to log errors
testPatternSampling(Gozer, false)

View file

@ -4,26 +4,65 @@
"p": {
"backPocket": "Back pocket",
"cutout": "Cutout",
"facings": "Facings",
"mini": "Mini",
"facingBack": "Back Pocket Facing",
"facingFront": "Front Pocket Facing",
"mini": "Mini version",
"pants": "Pants",
"pantsProto": "FIXME: Give this part a name",
"pantsProto": "Pants prototype",
"pocket": "Pocket",
"strapBack": "Strap back",
"strapFront": "Strap front",
"waistbandBack": "Waistband back",
"waistbandFront": "Waistband front"
},
"s": {},
"s": {
"thisIsNotAPart": "This is not a real part",
"doNotCutFromFabric": "Do not cut this from the fabric",
"useMeasurementsToCutFromFabric": "Use these measurements to cut the shape from the fabric",
"cutBackPocket.t": "The back pocket is not shown",
"cutBackPocket.d": "The **back pocket** is made of two rectangles of fabric {{{ width }}} wide and {{{ length }}} long.",
"cutFacingback.t": "The back pocket facing is not shown",
"cutFacingback.d": "The **back pocket facing** is made of a rectangle of fabric {{{ width }}} wide and {{{ length }}} long.",
"cutFacingfront.t": "The front pocket facing is not shown",
"cutFacingfront.d": "The **front pocket facing** is made of a rectangle of fabric {{{ width }}} wide and {{{ length }}} long.",
"cutwaistbandBack.t": "The back waist band is not shown",
"cutwaistbandBack.d": "The **back waist band** is made of two strips of fabric {{{ width }}} wide and {{{ length }}} long.",
"cutwaistbandFront.t": "The front waist band is not shown",
"cutwaistbandFront.d": "The **front waist band** is made of two strips of fabric {{{ width }}} wide and {{{ length }}} long.",
"cutstrapBack.t": "The back strap is not shown",
"cutstrapBack.d": "The **back strap** is made of two strips of fabric {{{ width }}} wide and {{{ length }}} long.",
"cutstrapFront.t": "The front strap is not shown",
"cutstrapFront.d": "The **front strap** is made of two strips of fabric {{{ width }}} wide and {{{ length }}} long.",
"showPants.t": "The full pants are shown",
"showPants.d": "The **full pants** are shown. This takes up a lot of paper to print. Consider hiding this part, and a minimized version will show with the dimensions.",
"hidePants.t": "The full pants are not shown",
"hidePants.d": "The **full pants** are not shown. Instead a minimized version is show with the dimensions, allowing you cut this directly from the fabric. This saves considerably on the required paper to print this pattern."
},
"o": {
"backPocket": {
"t": "Back pocket",
"d": "Whether to include a back pocket or not"
},
"backPocketYes": {
"t": "Back pocket",
"d": "The back pocket is included"
},
"backPocketNo": {
"t": "No Back pocket",
"d": "The pattern is drawn without a back pocket"
},
"frontPocket": {
"t": "Front pocket",
"d": "Whether to include a front pocket or not"
},
"frontPocketYes": {
"t": "Front pocket",
"d": "The front pocket is included"
},
"frontPocketNo": {
"t": "No Front pocket",
"d": "The pattern is drawn without a front pocket"
},
"hemWidth": {
"t": "Hem size",
"d": "Size of the hem at the bottom of the pants"
@ -64,33 +103,61 @@
"t": "Waist Overlap",
"d": "This dicates how much you want the leg flaps to overlap at the waist. A setting of 0 would have them meet at the side seam, and a setting of 100 makes them meet at the front/back."
},
"legShortening": {
"t": "Leg Shortening",
"d": "This dictates how long the pants will be. It is a factor of the inseam measurement. The larger the value, the more that will be taken off the length."
"legSize": {
"t": "Leg Size",
"d": "This dictates how long the pants will be. It is a factor of the inseam measurement. The larger the value, the longer the pants."
},
"backRaise": {
"t": "Back Raise",
"d": "This setting raises the waist in the back. Our waist does not sit horizontally, but is angled up at the back. This seting allows you to raise this in the back if you need it for a good fit."
},
"fitWaist": {
"t": "FIXME: Give this option a name",
"d": "FIXME: Give this option a description"
"t": "Fit the garment to the waist",
"d": "Traditionally, wrap pants are not fitted to the waist, and just use the flexibility of the fabric to adjust."
},
"fitWaistNo": {
"t": "Do not fit the garment to the waist",
"d": "The traditional wrap pants."
},
"fitWaistYes": {
"t": "Fit the garment to the waist",
"d": "Adjust the crotch cutout to make the waist fit better."
},
"frontPocketStyle": {
"t": "FIXME: Give this option a name",
"d": "FIXME: Give this option a description"
"t": "Front pocket style",
"d": "A welt pocket, or a pocket hidden in the waistband."
},
"frontPocketStyle.welt": {
"t": "Welt style Front pocket",
"d": "The front pocket will be a welt pocket, slanted, and hidden by the overlap."
},
"frontPocketStyle.waistband": {
"t": "Waistband Front pocket",
"d": "The front pocket will be hidden in the seam of the waistband."
},
"knotInFront": {
"t": "FIXME: Give this option a name",
"d": "FIXME: Give this option a description"
"t": "Place the knot in the front",
"d": "The knot of the wrap straps can be placed in the front or back."
},
"knotInFrontNo": {
"t": "Knot in the back",
"d": "The knot of the wrap straps will be in the back."
},
"knotInFrontYes": {
"t": "Knot in the front",
"d": "The knot of the wrap straps will be in the front."
},
"separateWaistband": {
"t": "FIXME: Give this option a name",
"d": "FIXME: Give this option a description"
"t": "Create a separate waistband",
"d": "Create a separate waistband, or have a hem the size of the waistband."
},
"showMini": {
"t": "FIXME: Give this option a name",
"d": "FIXME: Give this option a description"
"separateWaistbandNo": {
"t": "No separate waistband",
"d": "The waistband is created by a folded hem."
},
"separateWaistbandYes": {
"t": "Separate waistband",
"d": "The waistband is a separate piece, and sewn onto the pants."
}
}
}

View file

@ -1,54 +1,83 @@
import { pantsProto } from './pantsproto.mjs'
function waraleeBackPocket({
options,
measurements,
Point,
Path,
points,
paths,
Snippet,
snippets,
complete,
paperless,
macro,
sa,
part,
}) {
if (false == options.backPocket) {
return part
}
export const backPocket = {
name: 'waralee.backPocket',
after: pantsProto,
draft: ({
options,
measurements,
Point,
Path,
points,
paths,
Snippet,
snippets,
macro,
sa,
store,
expand,
units,
part,
}) => {
if (false == options.backPocket) {
return part.hide()
}
const pocketDepth = options.backPocketDepth * measurements.crotchDepth
let pocketDepth = options.backPocketDepth
if (!expand) {
// Expand is off, do not draw the part but flag this to the user
store.flag.note({
msg: `waralee:cutBackPocket`,
replace: {
width: units(options.backPocketSize * measurements.crotchDepth),
length: units(pocketDepth + options.backPocketVerticalOffset * measurements.crotchDepth),
},
suggest: {
text: 'flag:show',
icon: 'expand',
update: {
settings: ['expand', 1],
},
},
})
// Also hint about expand
store.flag.preset('expand')
points.topLeft = new Point(0, 0)
points.bottomLeft = points.topLeft.shift(
270,
pocketDepth /*+ 30*/ * 2 +
options.backPocketVerticalOffset * measurements.crotchDepth /*- measurements.waistToHips*/
)
return part.hide()
}
points.topRight = points.topLeft.shift(
0,
options.backPocketSize * measurements.crotchDepth /*- measurements.waistToHips*/ /*+ 24*/
)
points.bottomRight = points.topRight.shift(
270,
pocketDepth /*+ 30*/ * 2 +
options.backPocketVerticalOffset * measurements.crotchDepth /*- measurements.waistToHips*/
)
points.topLeft = new Point(0, 0)
points.bottomLeft = points.topLeft.shift(
270,
pocketDepth + options.backPocketVerticalOffset * measurements.crotchDepth
)
paths.seam = new Path()
.move(points.topLeft)
.line(points.bottomLeft)
.line(points.bottomRight)
.line(points.topRight)
.line(points.topLeft)
.close()
.attr('class', 'fabric')
points.topRight = points.topLeft.shift(0, options.backPocketSize * measurements.crotchDepth)
points.bottomRight = points.topRight.shift(
270,
pocketDepth + options.backPocketVerticalOffset * measurements.crotchDepth
)
paths.seamSA = new Path()
.move(points.bottomRight)
.line(points.topRight)
.line(points.topLeft)
.line(points.bottomLeft)
.hide()
paths.seam = new Path()
.move(points.bottomLeft)
.line(points.bottomRight)
.join(paths.seamSA)
.close()
.addClass('fabric')
macro('cutonfold', {
from: points.bottomLeft,
to: points.bottomRight,
})
store.cutlist.addCut({ cut: 2, from: 'lining' })
// Complete?
if (complete) {
points.title = points.topLeft.shift(270, 75).shift(0, 50)
macro('title', {
nr: 4,
@ -58,16 +87,10 @@ function waraleeBackPocket({
points.logo = points.title.shift(270, 75)
snippets.logo = new Snippet('logo', points.logo)
points.text = points.logo
.shift(-90, 25)
.attr('data-text', 'Waralee')
.attr('data-text-class', 'center')
points.text = points.logo.shift(-90, 25).addText('Waralee', 'center')
if (sa) paths.sa = paths.seam.offset(sa).attr('class', 'fabric sa')
}
if (sa) paths.sa = paths.seamSA.close().offset(sa).addClass('fabric sa')
// Paperless?
if (paperless) {
macro('hd', {
id: 1,
from: points.topLeft,
@ -80,13 +103,7 @@ function waraleeBackPocket({
to: points.bottomLeft,
x: points.topLeft.x + 15,
})
}
return part
}
export const backPocket = {
name: 'waralee.backPocket',
after: pantsProto,
draft: waraleeBackPocket,
return part
},
}

View file

@ -1,38 +1,26 @@
import { pantsProto } from './pantsproto.mjs'
function waraleeCutout({
options,
Path,
points,
paths,
Snippet,
snippets,
complete,
sa,
paperless,
macro,
part,
}) {
let separateWaistband = options.separateWaistband
if ('waistband' == options.frontPocketStyle) {
separateWaistband = true
}
export const cutout = {
name: 'waralee.cutout',
from: pantsProto,
draft: ({ options, Path, points, paths, Snippet, snippets, sa, macro, expand, part }) => {
if (expand) {
return part.hide()
}
paths.seam = new Path()
.move(points.mWaist1)
.line(points.mWaist2)
.line(separateWaistband ? points.bWaistSideSeam : points.bWaistSide)
.join(paths.backTopCutOut)
.join(paths.backBottomCutOut)
.join(paths.frontBottomCutOut)
.join(paths.frontTopCutOut)
.close()
.attr('class', 'fabric')
const separateWaistband = options.separateWaistband || 'waistband' == options.frontPocketStyle
paths.cutout.hide()
paths.seam = new Path()
.move(points.mWaist1)
.line(points.mWaist2)
.line(separateWaistband ? points.bWaistSideSeam : points.bWaistSide)
.join(paths.backTopCutOut)
.join(paths.backBottomCutOut)
.join(paths.frontBottomCutOut)
.join(paths.frontTopCutOut)
.close()
.attr('class', 'fabric')
// Complete?
if (complete) {
points.title = points.mWaist.shift(270, 75)
macro('title', {
nr: 2,
@ -54,10 +42,7 @@ function waraleeCutout({
paths.sa = paths.seamAlternate.offset(sa).attr('class', 'fabric sa')
}
}
// Paperless?
if (paperless) {
macro('hd', {
id: 1,
from: points.fWaistSide,
@ -82,13 +67,7 @@ function waraleeCutout({
to: points.mWaist1,
x: points.mWaist.x + 15,
})
}
return part.setHidden(!options.showMini)
}
export const cutout = {
name: 'waralee.cutout',
from: pantsProto,
draft: waraleeCutout,
return part
},
}

View file

@ -1,128 +1,112 @@
import { pantsProto } from './pantsproto.mjs'
function waraleeFacings({
options,
measurements,
Point,
Path,
points,
paths,
Snippet,
snippets,
complete,
paperless,
macro,
sa,
part,
}) {
let frontPocketSize =
options.frontPocketSize * measurements.crotchDepth /*- measurements.waistToHips*/
let backPocketSize =
options.backPocketSize * measurements.crotchDepth /*- measurements.waistToHips*/
function waraleeFacing(
type,
{
options,
measurements,
Point,
Path,
points,
paths,
Snippet,
snippets,
macro,
sa,
store,
expand,
units,
part,
}
) {
const frontPocketSize = options.frontPocketSize * measurements.crotchDepth
const backPocketSize = options.backPocketSize * measurements.crotchDepth
points.frontTL = new Point(0, 0)
points.frontTR = points.frontTL.shift(0, frontPocketSize + sa + sa)
points.frontBL = points.frontTL.shift(270, frontPocketSize / 2)
points.frontBR = points.frontTR.shift(270, frontPocketSize / 2)
points.backTL = points.frontBL.shift(270, 50)
points.backTR = points.backTL.shift(0, backPocketSize + sa + sa)
points.backBL = points.backTL.shift(270, backPocketSize / 2)
points.backBR = points.backTR.shift(270, backPocketSize / 2)
paths.frontSeam = new Path()
.move(points.frontTL)
.line(points.frontBL)
.line(points.frontBR)
.line(points.frontTR)
.line(points.frontTL)
.close()
.attr('class', 'fabric')
.setHidden(!(options.frontPocket && 'welt' == options.frontPocketStyle))
paths.backSeam = new Path()
.move(points.backTL)
.line(points.backBL)
.line(points.backBR)
.line(points.backTR)
.line(points.backTL)
.close()
.attr('class', 'fabric')
.setHidden(!options.backPocket)
// Complete?
if (complete) {
if (options.frontPocket && 'welt' == options.frontPocketStyle) {
points.frontTitle = points.frontTL.shift(270, 30).shift(0, 40)
macro('title', {
nr: 5,
at: points.frontTitle.shift(0, 30),
title: 'frontFacing',
prefix: 'front',
scale: 0.6,
})
points.frontLogo = points.frontTitle.shift(270, 0)
snippets.frontLogo = new Snippet('logo', points.frontLogo).attr('data-scale', 0.3)
points.frontText = points.frontLogo
.shift(-90, 15)
.attr('data-text', 'Waralee')
.attr('data-text-class', 'center')
if (type == 'front') {
if (!options.frontPocket || 'welt' != options.frontPocketStyle) {
return part.hide()
}
if (options.backPocket) {
points.backTitle = points.backTL.shift(270, 30).shift(0, 40)
macro('title', {
nr: 6,
at: points.backTitle.shift(0, 30),
title: 'backFacing',
prefix: 'back',
scale: 0.6,
})
points.backLogo = points.backTitle.shift(270, 0)
snippets.backLogo = new Snippet('logo', points.backLogo).attr('data-scale', 0.3)
points.backText = points.backLogo
.shift(-90, 15)
.attr('data-text', 'Waralee')
.attr('data-text-class', 'center')
} else {
if (!options.backPocket) {
return part.hide()
}
}
// Paperless?
if (paperless) {
if (options.frontPocket && 'welt' == options.frontPocketStyle) {
macro('hd', {
id: 1,
from: points.frontTL,
to: points.frontTR,
y: points.frontTL.y + 15,
})
macro('vd', {
id: 2,
from: points.frontTL,
to: points.frontBL,
x: points.frontTL.x + 15,
})
}
if (options.backPocket) {
macro('hd', {
id: 3,
from: points.backTL,
to: points.backTR,
y: points.backTL.y + 15,
})
macro('vd', {
id: 4,
from: points.backTL,
to: points.backBL,
x: points.backTL.x + 15,
})
}
const width = (type == 'front' ? frontPocketSize : backPocketSize) + sa + sa
const height = (type == 'front' ? frontPocketSize : backPocketSize) / 2
if (!expand) {
// Expand is off, do not draw the part but flag this to the user
store.flag.note({
msg: `waralee:cutFacing` + type,
replace: {
width: units(width),
length: units(height),
},
suggest: {
text: 'flag:show',
icon: 'expand',
update: {
settings: ['expand', 1],
},
},
})
// Also hint about expand
store.flag.preset('expand')
return part.hide()
}
points.tl = new Point(0, 0)
points.tr = points.tl.shift(0, width)
points.bl = points.tl.shift(270, height)
points.br = points.tr.shift(270, height)
paths.seamSeam = new Path()
.move(points.tl)
.line(points.bl)
.line(points.br)
.line(points.tr)
.line(points.tl)
.close()
.addClass('fabric')
store.cutlist.addCut({ cut: type == 'front' ? 4 : 2, from: 'fabric' })
points.title = points.tl.shift(270, 30).shift(0, 40)
macro('title', {
nr: type == 'front' ? 5 : 6,
at: points.title.shift(0, 30),
title: type + 'Facing',
scale: 0.6,
})
points.logo = points.title.shift(270, 0)
snippets.logo = new Snippet('logo', points.logo).attr('data-scale', 0.3)
macro('hd', {
id: 1,
from: points.tl,
to: points.tr,
y: points.tl.y + 15,
})
macro('vd', {
id: 2,
from: points.tl,
to: points.bl,
x: points.tl.x + 15,
})
return part
}
export const facings = {
name: 'waralee.facings',
export const facingFront = {
name: 'waralee.facingFront',
after: pantsProto,
draft: waraleeFacings,
draft: (part) => waraleeFacing('front', part),
}
export const facingBack = {
name: 'waralee.facingBack',
after: pantsProto,
draft: (part) => waraleeFacing('back', part),
}

View file

@ -5,7 +5,7 @@ import { pants } from './pants.mjs'
import { cutout } from './cutout.mjs'
import { pocket } from './pocket.mjs'
import { backPocket } from './backpocket.mjs'
import { facings } from './facings.mjs'
import { facingFront, facingBack } from './facings.mjs'
import { mini } from './mini.mjs'
import { waistbandFront, waistbandBack, strapFront, strapBack } from './waistband.mjs'
// Re-export skeleton parts so peope can re-use them
@ -19,7 +19,8 @@ const Waralee = new Design({
cutout,
pocket,
backPocket,
facings,
facingFront,
facingBack,
mini,
waistbandFront,
waistbandBack,
@ -34,7 +35,8 @@ export {
cutout,
pocket,
backPocket,
facings,
facingFront,
facingBack,
mini,
waistbandFront,
waistbandBack,

View file

@ -4,44 +4,44 @@ import { pantsProto } from './pantsproto.mjs'
// To keep you from printing it completely, you could print this part in paperless mode
// and only have a single sheet with all the dimensions on it.
function waraleeMini({ options, Path, points, paths, complete, sa, macro, store, part }) {
let mini = options.minimizer
let separateWaistband = options.separateWaistband
if ('waistband' == options.frontPocketStyle) {
separateWaistband = true
}
export const mini = {
name: 'waralee.mini',
from: pantsProto,
draft: ({ options, Path, points, paths, sa, macro, store, expand, part }) => {
if (expand) {
return part.hide()
}
for (var p in points) {
points[p].x = points[p].x / mini
points[p].y = points[p].y / mini
}
const mini = points.bWaistBackOverlapSeam.dist(points.fWaistFrontOverlapSeam) / 150
const separateWaistband = options.separateWaistband || 'waistband' == options.frontPocketStyle
paths.waistFoldBack = paths.waistBack
.offset((-1 * store.get('waistBand')) / mini)
.attr('class', 'fabric stroke-sm')
paths.waistFoldFront = paths.waistFront
.offset((-1 * store.get('waistBand')) / mini)
.attr('class', 'fabric stroke-sm')
for (const p in points) {
points[p].x = points[p].x / mini
points[p].y = points[p].y / mini
}
paths.frontFold = paths.front
.offset((-1 * store.get('hem')) / mini)
.attr('class', 'fabric stroke-sm')
paths.legFold = paths.leg.offset((-1 * store.get('hem')) / mini).attr('class', 'fabric stroke-sm')
paths.backFold = paths.back
.offset((-1 * store.get('hem')) / mini)
.attr('class', 'fabric stroke-sm')
paths.waistFoldBack = paths.waistBack
.offset((-1 * store.get('waistBand')) / mini)
.addClass('fabric stroke-sm')
paths.waistFoldFront = paths.waistFront
.offset((-1 * store.get('waistBand')) / mini)
.addClass('fabric stroke-sm')
paths.cutOut = new Path()
.move(separateWaistband ? points.bWaistSideSeam : points.bWaistSide)
.line(points.mWaist2)
.line(points.mWaist1)
.line(separateWaistband ? points.fWaistSideSeam : points.fWaistSide)
.attr('class', 'help')
paths.frontFold = paths.front
.offset((-1 * store.get('hem')) / mini)
.addClass('fabric stroke-sm')
paths.legFold = paths.leg.offset((-1 * store.get('hem')) / mini).addClass('fabric stroke-sm')
paths.backFold = paths.back.offset((-1 * store.get('hem')) / mini).addClass('fabric stroke-sm')
paths.seam.unhide()
paths.cutOut = new Path()
.move(separateWaistband ? points.bWaistSideSeam : points.bWaistSide)
.line(points.mWaist2)
.line(points.mWaist1)
.line(separateWaistband ? points.fWaistSideSeam : points.fWaistSide)
.addClass('help')
paths.seam.unhide()
// Complete?
if (complete) {
macro('scalebox', { at: points.mLeg.shift(-90, 35) })
if (options.frontPocket && 'welt' == options.frontPocketStyle) {
@ -52,28 +52,25 @@ function waraleeMini({ options, Path, points, paths, complete, sa, macro, store,
}
if (sa) {
paths.sa = paths.seam.offset(sa / mini).attr('class', 'fabric sa')
paths.sa = paths.seam.offset(sa / mini).addClass('fabric sa')
}
points.pText1 = points.mHip
.shiftFractionTowards(points.mLeg, 0.5)
.attr('data-text', 'thisIsNotAPart')
.attr('data-text-class', 'center')
.addText('waralee:thisIsNotAPart', 'center')
points.pText2 = points.mHip
.shiftFractionTowards(points.mLeg, 0.6)
.attr('data-text', 'doNotCutFromFabric')
.attr('data-text-class', 'center')
.addText('waralee:doNotCutFromFabric', 'center')
points.pText3 = points.mHip
.shiftFractionTowards(points.mLeg, 0.7)
.attr('data-text', 'useMeasurementsToCutFromFabric')
.attr('data-text-class', 'center')
.addText('waralee:useMeasurementsToCutFromFabric', 'center')
let fWaistSide = separateWaistband ? points.fWaistSideSeam : points.fWaistSide
let fWaistFrontOverlap = separateWaistband
const fWaistSide = separateWaistband ? points.fWaistSideSeam : points.fWaistSide
const fWaistFrontOverlap = separateWaistband
? points.fWaistFrontOverlapSeam
: points.fWaistFrontOverlap
let bWaistSide = separateWaistband ? points.bWaistSideSeam : points.bWaistSide
let bWaistBackOverlap = separateWaistband
const bWaistSide = separateWaistband ? points.bWaistSideSeam : points.bWaistSide
const bWaistBackOverlap = separateWaistband
? points.bWaistBackOverlapSeam
: points.bWaistBackOverlap
@ -83,6 +80,7 @@ function waraleeMini({ options, Path, points, paths, complete, sa, macro, store,
to: fWaistSide,
y: fWaistSide.y + 10,
text: part.units(fWaistSide.dist(points.fWaistFrontOverlap) * mini),
force: true,
})
macro('hd', {
id: 2,
@ -90,6 +88,7 @@ function waraleeMini({ options, Path, points, paths, complete, sa, macro, store,
to: points.bLegBackOverlap,
y: points.bLegBackOverlap.y - 10,
text: part.units(points.fLegFrontOverlap.dist(points.bLegBackOverlap) * mini),
force: true,
})
macro('hd', {
id: 3,
@ -97,6 +96,7 @@ function waraleeMini({ options, Path, points, paths, complete, sa, macro, store,
to: points.bWaistBackOverlap,
y: points.bWaistBackOverlap.y + 20,
text: part.units(points.bWaistBackOverlap.dist(points.bWaistBack) * mini),
force: true,
})
macro('hd', {
id: 4,
@ -104,6 +104,7 @@ function waraleeMini({ options, Path, points, paths, complete, sa, macro, store,
to: points.mHip,
y: points.mHip.y + 10,
text: part.units((points.mHip.x - points.fWaistFrontOverlap.x) * mini),
force: true,
})
macro('vd', {
id: 5,
@ -111,6 +112,7 @@ function waraleeMini({ options, Path, points, paths, complete, sa, macro, store,
to: points.fLegFrontOverlap,
x: points.fLegFrontOverlap.x + 10,
text: part.units(fWaistFrontOverlap.dist(points.fLegFrontOverlap) * mini),
force: true,
})
macro('vd', {
id: 6,
@ -118,6 +120,7 @@ function waraleeMini({ options, Path, points, paths, complete, sa, macro, store,
to: bWaistBackOverlap,
x: points.bLegBackOverlap.x - 10,
text: part.units(bWaistBackOverlap.dist(points.bLegBackOverlap) * mini),
force: true,
})
macro('vd', {
id: 7,
@ -125,6 +128,7 @@ function waraleeMini({ options, Path, points, paths, complete, sa, macro, store,
to: bWaistSide,
x: bWaistSide.x + 10,
text: part.units((points.bLegBackOverlap.y - bWaistSide.y) * mini),
force: true,
})
if (options.frontPocket && 'welt' == options.frontPocketStyle) {
@ -134,6 +138,7 @@ function waraleeMini({ options, Path, points, paths, complete, sa, macro, store,
to: points.frontPocketBottom2,
y: points.frontPocketBottom2.y + 20,
text: part.units((points.frontPocketBottom2.x - fWaistFrontOverlap.x) * mini),
force: true,
})
macro('vd', {
id: 9,
@ -141,6 +146,7 @@ function waraleeMini({ options, Path, points, paths, complete, sa, macro, store,
to: points.frontPocketBottom2,
x: points.frontPocketBottom2.x + 20,
text: part.units((points.frontPocketBottom2.y - fWaistFrontOverlap.y) * mini),
force: true,
})
}
@ -151,6 +157,7 @@ function waraleeMini({ options, Path, points, paths, complete, sa, macro, store,
to: bWaistBackOverlap,
y: bWaistBackOverlap.y + 40,
text: part.units((bWaistBackOverlap.x - points.backPocketRight.x) * mini),
force: true,
})
macro('vd', {
id: 11,
@ -158,15 +165,9 @@ function waraleeMini({ options, Path, points, paths, complete, sa, macro, store,
to: points.backPocketRight,
x: points.backPocketRight.x,
text: part.units((points.backPocketRight.y - bWaistBackOverlap.y) * mini),
force: true,
})
}
}
return part.setHidden(!options.showMini)
}
export const mini = {
name: 'waralee.mini',
from: pantsProto,
draft: waraleeMini,
return part
},
}

View file

@ -1,36 +0,0 @@
// Fit
export const backRaise = { pct: 10, min: 0, max: 25, menu: 'fit' }
export const waistRaise = { pct: 0, min: -20, max: 40, menu: 'fit' }
// Style
export const hemWidth = { pct: 1.75, min: 1, max: 2.5, menu: 'style' }
export const legShortening = { pct: 25, min: -10, max: 50, menu: 'style' }
export const waistOverlap = { pct: 50, min: 10, max: 100, menu: 'style' }
export const frontPocket = { bool: true, menu: 'style' }
export const backPocket = { bool: true, menu: 'style' }
export const waistbandWidth = { pct: 3.5, min: 2, max: 5, menu: 'style' }
// Advanced
export const crotchFront = { pct: 30, min: 10, max: 70, menu: 'advanced' }
export const crotchBack = { pct: 45, min: 10, max: 70, menu: 'advanced' }
export const crotchFactorFrontHor = { pct: 90, min: 10, max: 100, menu: 'advanced' }
export const crotchFactorFrontVer = { pct: 30, min: 10, max: 70, menu: 'advanced' }
export const crotchFactorBackHor = { pct: 90, min: 10, max: 100, menu: 'advanced' }
export const crotchFactorBackVer = { pct: 60, min: 20, max: 90, menu: 'advanced' }
// Static values
export const minimizer = 4
export const frontPocketVerticalOffset = 0.07
export const frontPocketHorizontalOffset = 0.18
export const frontPocketSize = 0.45
export const frontPocketDepthFactor = 1.6
export const backPocketDepth = 140
export const backPocketVerticalOffset = 0.2
export const backPocketHorizontalOffset = 0.045
export const backPocketSize = 0.45
// Added later
export const frontWaistAdjustment = 0.163
export const backWaistAdjustment = 0.3
export const crotchEase = 1.08
export const frontPocketStyle = { dflt: 'welt', list: ['welt', 'waistband'], menu: 'style' }
export const showMini = { bool: true, menu: 'options' }
export const fitWaist = { bool: true, menu: 'fit' }
export const separateWaistband = { bool: false, menu: 'style' }
export const knotInFront = { bool: true, menu: 'style' }

View file

@ -1,44 +1,54 @@
import { pantsProto } from './pantsproto.mjs'
function waraleePants({
options,
points,
Path,
paths,
Snippet,
snippets,
complete,
sa,
paperless,
macro,
store,
part,
}) {
let separateWaistband = options.separateWaistband
if ('waistband' == options.frontPocketStyle) {
separateWaistband = true
}
export const pants = {
name: 'waralee.pants',
from: pantsProto,
draft: ({ options, points, Path, paths, Snippet, snippets, sa, macro, store, expand, part }) => {
const separateWaistband = options.separateWaistband || 'waistband' == options.frontPocketStyle
if (false == separateWaistband) {
paths.waistFoldBack = new Path()
.move(points.bWaistSideHem)
.line(separateWaistband ? points.bWaistBackSeam : points.bWaistBackHem)
.line(separateWaistband ? points.bWaistBackSeam : points.bWaistBackOverlapHem)
.attr('class', 'fabric stroke-sm')
paths.waistFoldFront = new Path()
.move(points.fWaistSideHem)
.line(points.fWaistFrontOverlapHem)
.attr('class', 'fabric stroke-sm')
}
if (expand) {
// Expand is on, do not draw the part but flag this to the user
store.flag.note({
msg: `waralee:showPants`,
suggest: {
text: 'flag:hide',
icon: 'expand',
update: {
settings: ['expand', 0],
},
},
})
} else {
// Expand is off, do not draw the part but flag this to the user
store.flag.note({
msg: `waralee:hidePants`,
})
// Also hint about expand
store.flag.preset('expand')
paths.frontFold = paths.front.offset(-1 * store.get('hem')).attr('class', 'fabric stroke-sm')
paths.legFold = paths.leg.offset(-1 * store.get('hem')).attr('class', 'fabric stroke-sm')
paths.backFold = paths.back.offset(-1 * store.get('hem')).attr('class', 'fabric stroke-sm')
return part.hide()
}
paths.seam.unhide()
if (false == separateWaistband) {
paths.waistFoldBack = new Path()
.move(points.bWaistSideHem)
.line(separateWaistband ? points.bWaistBackSeam : points.bWaistBackHem)
.line(separateWaistband ? points.bWaistBackSeam : points.bWaistBackOverlapHem)
.addClass('fabric stroke-sm')
paths.waistFoldFront = new Path()
.move(points.fWaistSideHem)
.line(points.fWaistFrontOverlapHem)
.addClass('fabric stroke-sm')
}
paths.frontFold = paths.front.offset(-1 * store.get('hem')).addClass('fabric stroke-sm')
paths.legFold = paths.leg.offset(-1 * store.get('hem')).addClass('fabric stroke-sm')
paths.backFold = paths.back.offset(-1 * store.get('hem')).addClass('fabric stroke-sm')
paths.seam.unhide()
store.cutlist.addCut({ cut: 2, from: 'fabric' })
// Complete?
if (complete) {
points.title = points.fWaistFront.shift(270, 400)
macro('title', {
nr: 1,
@ -47,23 +57,20 @@ function waraleePants({
})
points.logo = points.title.shift(270, 75)
snippets.logo = new Snippet('logo', points.logo)
macro('scalebox', { at: points.mHip.shift(-90, 70) })
if (sa) paths.sa = paths.seam.offset(sa).attr('class', 'fabric sa')
}
if (sa) paths.sa = paths.seam.offset(sa).addClass('fabric sa')
if (options.frontPocket && 'welt' == options.frontPocketStyle) {
paths.frontPocket.unhide()
}
if (options.backPocket) {
paths.backPocket.unhide()
}
if (options.frontPocket && 'welt' == options.frontPocketStyle) {
paths.frontPocket.unhide()
paths.frontPocketSeam.unhide()
}
if (options.backPocket) {
paths.backPocket.unhide()
}
// Paperless?
if (paperless) {
let fWaistSide = separateWaistband ? points.fWaistSideSeam : points.fWaistSide
let bWaistSide = separateWaistband ? points.bWaistSideSeam : points.bWaistSide
macro('hd', {
@ -114,6 +121,7 @@ function waraleePants({
to: points.bLegBackOverlap,
x: points.bLegBackOverlap.x - 30,
})
if (false == separateWaistband) {
macro('vd', {
id: 8,
@ -121,68 +129,62 @@ function waraleePants({
to: points.fWaistSideHem,
x: points.fWaistSide.x + 10,
})
if (options.frontPocket && 'welt' == options.frontPocketStyle) {
macro('vd', {
id: 9,
from: fWaistSide,
to: points.frontPocketTop,
x: points.frontPocketTop.x,
})
macro('vd', {
id: 10,
from: fWaistSide,
to: points.frontPocketBottom,
x: points.frontPocketBottom.x,
})
macro('hd', {
id: 11,
from: points.frontPocketTop,
to: fWaistSide,
y: points.frontPocketTop.y,
})
macro('hd', {
id: 12,
from: points.frontPocketBottom,
to: fWaistSide,
y: points.frontPocketBottom.y,
})
}
if (options.backPocket) {
macro('vd', {
id: 13,
from: bWaistSide,
to: points.backPocketLeft,
x: points.backPocketLeft.x,
})
macro('vd', {
id: 14,
from: bWaistSide,
to: points.backPocketRight,
x: points.backPocketRight.x,
})
macro('hd', {
id: 15,
from: bWaistSide,
to: points.backPocketLeft,
y: points.backPocketLeft.y,
})
macro('hd', {
id: 16,
from: bWaistSide,
to: points.backPocketRight,
y: points.backPocketRight.y,
})
}
}
if (options.frontPocket && 'welt' == options.frontPocketStyle) {
macro('vd', {
id: 9,
from: fWaistSide,
to: points.frontPocketTop,
x: points.frontPocketTop.x,
})
macro('vd', {
id: 10,
from: fWaistSide,
to: points.frontPocketBottom,
x: points.frontPocketBottom.x,
})
macro('hd', {
id: 11,
from: points.frontPocketTop,
to: fWaistSide,
y: points.frontPocketTop.y,
})
macro('hd', {
id: 12,
from: points.frontPocketBottom,
to: fWaistSide,
y: points.frontPocketBottom.y,
})
}
if (options.backPocket) {
macro('vd', {
id: 13,
from: bWaistSide,
to: points.backPocketLeft,
x: points.backPocketLeft.x,
})
macro('vd', {
id: 14,
from: bWaistSide,
to: points.backPocketRight,
x: points.backPocketRight.x,
})
macro('hd', {
id: 15,
from: bWaistSide,
to: points.backPocketLeft,
y: points.backPocketLeft.y,
})
macro('hd', {
id: 16,
from: bWaistSide,
to: points.backPocketRight,
y: points.backPocketRight.y,
})
}
}
return part.setHidden(options.showMini != false)
}
export const pants = {
name: 'waralee.pants',
from: pantsProto,
draft: waraleePants,
return part
},
}

View file

@ -1,310 +1,70 @@
import * as options from './options.mjs'
import { pctBasedOn } from '@freesewing/core'
function waraleePantsProto({ options, measurements, Point, Path, points, paths, store, part }) {
let seatDepth =
measurements.crotchDepth /* - measurements.waistToHips */ *
(1 + options.waistRaise) *
options.crotchEase
let circumference = measurements.seat
let waist =
typeof measurements.waist == 'undefined' || false == options.fitWaist
? measurements.seat
: measurements.waist
let waistBack =
typeof measurements.waistBack == 'undefined' || false == options.fitWaist
? waist / 2
: measurements.waistBack
let separateWaistband = options.separateWaistband
if ('waistband' == options.frontPocketStyle) {
separateWaistband = true
}
if (circumference < waist) {
circumference = waist
}
let circumference4 = circumference / 4
let hem = measurements.inseam * options.hemWidth
let waistBand = measurements.inseam * options.waistbandWidth
store.set('waistBand', waistBand)
store.set('hem', hem)
points.mWaist = new Point(0, 0)
points.mHip = points.mWaist.shift(270, seatDepth)
points.fWaistSide = points.mWaist
.shift(180, options.crotchFront * circumference4)
.shift(90, waistBand)
points.fWaistCrotchCP = points.fWaistSide.shift(
270,
seatDepth * options.crotchFactorFrontVer + waistBand
)
points.fHipCrotchCP = points.mHip.shift(
180,
options.crotchFront * circumference4 * options.crotchFactorFrontHor
)
points.fHipSide = points.mHip.shift(180, options.crotchFront * circumference4)
points.bWaistSide = points.mWaist
.shift(0, options.crotchBack * circumference4)
.shift(90, waistBand)
.shift(90, options.backRaise * seatDepth)
points.bWaistCrotchCP = points.bWaistSide.shift(270, seatDepth * options.crotchFactorBackVer)
points.bHipCrotchCP = points.mHip.shift(
0,
options.crotchBack * circumference4 * options.crotchFactorBackHor
)
points.bHipSide = points.mHip.shift(0, options.crotchBack * circumference4)
points.fCutOutHip = new Path()
.move(points.fWaistSide)
.curve(points.fWaistCrotchCP, points.fHipCrotchCP, points.mHip)
.shiftAlong(measurements.waistToHips + waistBand)
points.bCutOutHip = new Path()
.move(points.bWaistSide)
.curve(points.bWaistCrotchCP, points.bHipCrotchCP, points.mHip)
.shiftAlong(measurements.waistToHips + waistBand + options.backRaise * seatDepth)
let waistSeatDifferenceBack = measurements.seat / 2 - waistBack
let waistSeatDifferenceFront = measurements.seat / 2 - (waist - waistBack)
points.bWaistAdjusted = points.bWaistSide.shift(
0,
waistSeatDifferenceBack * options.backWaistAdjustment
)
points.fWaistAdjusted = points.fWaistSide.shift(
180,
waistSeatDifferenceFront * options.frontWaistAdjustment
)
points.mLeg = points.mHip.shift(270, measurements.inseam * (1 - options.legShortening))
points.fLegSide = points.mLeg.shift(180, options.crotchFront * circumference4)
points.bLegSide = points.mLeg.shift(0, options.crotchBack * circumference4)
points.fWaistFront = points.fWaistSide.shift(180, circumference4)
points.fWaistFrontOverlap = points.fWaistFront.shift(180, options.waistOverlap * circumference4)
points.fHipFront = points.fHipSide.shift(180, circumference4)
points.fHipFrontOverlap = points.fHipFront.shift(180, options.waistOverlap * circumference4)
points.fLegFront = points.fLegSide.shift(180, circumference4)
points.fLegFrontOverlap = points.fLegFront.shift(180, options.waistOverlap * circumference4)
// Calculate the distance we need to move horizontally to get to the point that will
// diagonally be the distance we're looking for (circumference/4)
let bHorDistance = Math.sqrt(
circumference4 * circumference4 - options.backRaise * seatDepth * options.backRaise * seatDepth
)
// Create a point that is this distance from the side.
points.bWaistBack = points.mWaist
.shift(90, waistBand)
.shift(0, options.crotchBack * circumference4 + bHorDistance)
points.bWaistBackOverlap = points.bWaistBack.shift(0, options.waistOverlap * circumference4)
points.bHipBack = points.bHipSide.shift(0, circumference4)
points.bHipBackOverlap = points.bHipBack.shift(0, options.waistOverlap * circumference4)
points.bLegBack = points.bLegSide.shift(0, circumference4)
points.bLegBackOverlap = points.bLegBack.shift(0, options.waistOverlap * circumference4)
points.bWaistSideTemp = points.bWaistSide.shift(0, 2) // This is a trick to make the offset() call work. Without it, the offset is crossing the cutout line.
let fPaths = new Path()
.move(points.fWaistSide)
.curve(points.fWaistCrotchCP, points.fHipCrotchCP, points.mHip)
.split(points.fCutOutHip)
let bPaths = new Path()
.move(points.bWaistSide)
.curve(points.bWaistCrotchCP, points.bHipCrotchCP, points.mHip)
.split(points.bCutOutHip)
fPaths[0].hide()
fPaths[1].hide()
bPaths[0].hide()
bPaths[1].hide()
points.fCutOutHipCp1 = fPaths[1].ops[1].cp1.shiftFractionTowards(points.fCutOutHip, 1.25)
points.fCutOutHipCp2 = fPaths[1].ops[1].cp1.clone()
points.mHipCp1 = fPaths[1].ops[1].cp2.clone()
points.mHipCp2 = bPaths[1].ops[1].cp2.clone()
points.bCutOutHipCp1 = bPaths[1].ops[1].cp1.clone()
points.bCutOutHipCp2 = bPaths[1].ops[1].cp1.shiftFractionTowards(points.bCutOutHip, 1.25)
paths.frontBottomCutOut = new Path()
.move(points.mHip)
.curve(points.mHipCp1, points.fCutOutHipCp2, points.fCutOutHip)
.hide()
paths.backBottomCutOut = new Path()
.move(points.bCutOutHip)
.curve(points.bCutOutHipCp1, points.mHipCp2, points.mHip)
.hide()
paths.frontTopCutOut = new Path()
.move(points.fCutOutHip)
.curve(points.fCutOutHipCp1, points.fWaistAdjusted, points.fWaistAdjusted)
.hide()
paths.backTopCutOut = new Path()
.move(points.bWaistAdjusted)
.curve(points.bWaistAdjusted, points.bCutOutHipCp2, points.bCutOutHip)
.hide()
points.fWaistSideHem = paths.frontTopCutOut.reverse().shiftAlong(waistBand)
points.fWaistSideSeam = paths.frontTopCutOut.reverse().shiftAlong(waistBand * 2)
points.fWaistSide = points.fWaistSideSeam.flipY(points.fWaistSideHem)
points.bWaistSideHem = paths.backTopCutOut.shiftAlong(waistBand)
points.bWaistSideSeam = paths.backTopCutOut.shiftAlong(waistBand * 2)
points.bWaistSide = points.bWaistSideSeam.flipY(points.bWaistSideHem)
points.fWaistFrontOverlapHem = points.fWaistFrontOverlap.shift(270, waistBand)
points.bWaistBackHem = points.bWaistBack.shift(270, waistBand)
points.bWaistBackOverlapHem = points.bWaistBackOverlap.shift(270, waistBand)
points.fWaistFrontOverlapSeam = points.fWaistFrontOverlap.shift(270, waistBand * 2)
points.bWaistBackSeam = points.bWaistBack.shift(270, waistBand * 2)
points.bWaistBackOverlapSeam = points.bWaistBackOverlap.shift(270, waistBand * 2)
points.fWaistSideCp2 = paths.frontTopCutOut.split(points.fWaistSideSeam)[0].ops[1].cp2.clone()
points.fWaistSideCp2 = paths.frontTopCutOut.split(points.fWaistSideSeam)[0].ops[1].cp2.clone()
points.fWaistHipCp1 = paths.frontTopCutOut.split(points.fWaistSideSeam)[0].ops[1].cp1.clone()
points.bWaistSideCp1 = paths.backTopCutOut.split(points.bWaistSideSeam)[1].ops[1].cp1.clone()
points.bWaistHipCp2 = paths.backTopCutOut.split(points.bWaistSideSeam)[1].ops[1].cp2.clone()
if (separateWaistband) {
points.mWaist1 = new Point(points.mWaist.x, points.fWaistSideSeam.y)
// points.mWaist = new Point(points.mWaist.x, points.fWaistSideSeam.y)
} else {
points.mWaist1 = new Point(points.mWaist.x, points.fWaistSide.y)
}
if (separateWaistband) {
points.mWaist2 = new Point(points.mWaist.x, points.bWaistSideSeam.y)
} else {
points.mWaist2 = new Point(points.mWaist.x, points.bWaistSide.y)
}
paths.frontTopCutOut = new Path()
.move(points.fCutOutHip)
.curve(points.fCutOutHipCp1, points.fWaistSideCp2, points.fWaistSideSeam)
.hide()
if (false == separateWaistband) {
paths.frontTopCutOut.line(points.fWaistSideHem)
paths.frontTopCutOut.line(points.fWaistSide)
}
if (false == separateWaistband) {
paths.backTopCutOut = new Path()
.move(points.bWaistSide)
.line(points.bWaistSideHem)
.line(points.bWaistSideSeam)
} else {
paths.backTopCutOut = new Path().move(points.bWaistSideSeam)
}
paths.backTopCutOut.curve(points.bWaistSideCp1, points.bCutOutHipCp2, points.bCutOutHip).hide()
paths.cutout = paths.backTopCutOut
.join(paths.backBottomCutOut)
.join(paths.frontBottomCutOut)
.join(paths.frontTopCutOut)
.hide()
paths.waistBack = new Path()
.move(separateWaistband ? points.bWaistBackOverlapSeam : points.bWaistBackOverlap)
.line(separateWaistband ? points.bWaistBackSeam : points.bWaistBack)
// .line(points.bWaistSideTemp) // This is a trick to make the offset() call work. Without it, the offset is crossing the cutout line.
.line(separateWaistband ? points.bWaistSideSeam : points.bWaistSide)
.hide()
paths.waistFront = new Path()
.move(separateWaistband ? points.fWaistSideSeam : points.fWaistSide)
.line(separateWaistband ? points.fWaistFrontOverlapSeam : points.fWaistFrontOverlap)
.hide()
paths.front = new Path()
.move(separateWaistband ? points.fWaistFrontOverlapSeam : points.fWaistFrontOverlap)
.line(points.fHipFrontOverlap)
.line(points.fLegFrontOverlap)
.hide()
paths.back = new Path()
.move(points.bLegBackOverlap)
.line(points.bHipBackOverlap)
.line(separateWaistband ? points.bWaistBackOverlapSeam : points.bWaistBackOverlap)
.hide()
paths.leg = new Path().move(points.fLegFrontOverlap).line(points.bLegBackOverlap).hide()
paths.seam = paths.waistFront
.join(paths.front)
.join(paths.leg)
.join(paths.back)
.join(paths.waistBack)
.join(paths.cutout)
.close()
.attr('class', 'fabric')
.hide()
if (options.frontPocket) {
points.frontPocketTop = points.fWaistSideSeam
.shift(
270,
options.frontPocketVerticalOffset *
measurements.crotchDepth /*- measurements.waistToHips*/ +
waistBand * (separateWaistband ? 1 : 2)
)
.shift(180, options.frontPocketHorizontalOffset * measurements.seat)
points.frontPocketTop2 = points.frontPocketTop.shift(340, 12)
points.frontPocketBottom = points.frontPocketTop.shift(
250,
options.frontPocketSize * measurements.crotchDepth /*- measurements.waistToHips*/
)
points.frontPocketBottom2 = points.frontPocketBottom.shift(340, 12)
paths.frontPocket = new Path()
.move(points.frontPocketTop)
.line(points.frontPocketBottom)
.line(points.frontPocketBottom2)
.line(points.frontPocketTop2)
.close()
.attr('class', 'fabric')
.hide()
}
if (options.backPocket) {
points.backPocketRight = points.bWaistBack
.shiftTowards(points.bWaistSide, options.backPocketHorizontalOffset * measurements.seat)
.shift(
270,
options.backPocketVerticalOffset * measurements.crotchDepth /*- measurements.waistToHips*/ +
waistBand * (separateWaistband ? 1 : 2)
)
points.backPocketLeft = points.bWaistBack
.shiftTowards(
points.bWaistSide,
options.backPocketHorizontalOffset * measurements.seat +
options.backPocketSize * measurements.crotchDepth /*- measurements.waistToHips*/
)
.shift(
270,
options.backPocketVerticalOffset * measurements.crotchDepth /*- measurements.waistToHips*/ +
waistBand * (separateWaistband ? 1 : 2)
)
points.backPocketRight2 = points.backPocketRight.shift(
points.backPocketRight.angle(points.backPocketLeft) + 90,
12
)
points.backPocketLeft2 = points.backPocketLeft.shift(
points.backPocketLeft.angle(points.backPocketRight) - 90,
12
)
paths.backPocket = new Path()
.move(points.backPocketLeft)
.line(points.backPocketLeft2)
.line(points.backPocketRight2)
.line(points.backPocketRight)
.close()
.attr('class', 'fabric')
.hide()
}
return part.hide()
export const options = {
// Fit
backRaise: {
pct: 10,
min: 0,
max: 25,
// eslint-disable-next-line no-unused-vars
toAbs: (value, { measurements, options }, mergedOptions) =>
value *
(measurements.crotchDepth * (1 + mergedOptions.waistRaise) * mergedOptions.crotchEase),
menu: 'fit',
},
waistRaise: {
pct: 0,
min: -20,
max: 40,
// eslint-disable-next-line no-unused-vars
toAbs: (value, { measurements, options }, mergedOptions) =>
measurements.crotchDepth * (1 + value),
menu: 'fit',
},
fitWaist: { bool: true, menu: 'fit' },
// Style
hemWidth: { pct: 1.75, min: 1, max: 2.5, ...pctBasedOn('inseam'), menu: 'style' },
legSize: { pct: 75, max: 90, min: 50, ...pctBasedOn('inseam'), menu: 'style' },
waistOverlap: {
pct: 50,
min: 10,
max: 100,
// eslint-disable-next-line no-unused-vars
toAbs: (value, { measurements, options }, mergedOptions) => {
const waist =
typeof measurements.waist == 'undefined' || false == mergedOptions.fitWaist
? measurements.seat
: measurements.waist
return (measurements.seat > waist ? measurements.seat : waist) * value
},
menu: 'style',
},
frontPocket: { bool: true, menu: 'style' },
backPocket: { bool: true, menu: 'style' },
waistbandWidth: { pct: 3.5, min: 2, max: 5, ...pctBasedOn('inseam'), menu: 'style' },
frontPocketStyle: { dflt: 'welt', list: ['welt', 'waistband'], menu: 'style' },
separateWaistband: { bool: false, menu: 'style' },
knotInFront: { bool: true, menu: 'style' },
// Advanced
crotchFront: { pct: 30, min: 10, max: 70, menu: 'advanced' },
crotchBack: { pct: 45, min: 10, max: 70, menu: 'advanced' },
crotchFactorFrontHor: { pct: 90, min: 10, max: 100, menu: 'advanced' },
crotchFactorFrontVer: { pct: 30, min: 10, max: 70, menu: 'advanced' },
crotchFactorBackHor: { pct: 90, min: 10, max: 100, menu: 'advanced' },
crotchFactorBackVer: { pct: 60, min: 20, max: 90, menu: 'advanced' },
// Static values
backWaistAdjustment: 0.3,
frontPocketVerticalOffset: 0.07,
frontPocketHorizontalOffset: 0.18,
frontPocketSize: 0.45,
frontPocketWidthHeightRatio: 0.076,
frontPocketDepthFactor: 1.6,
frontWaistAdjustment: 0.163,
backPocketDepth: 0.5,
backPocketVerticalOffset: 0.2,
backPocketHorizontalOffset: 0.045,
backPocketSize: 0.45,
crotchEase: 1.08,
}
export const pantsProto = {
@ -313,5 +73,362 @@ export const pantsProto = {
measurements: ['seat', 'inseam', 'crotchDepth', 'waistToHips'],
optionalMeasurements: ['waist', 'waistBack'],
options,
draft: waraleePantsProto,
draft: ({ options, measurements, Point, Path, points, paths, store, part, utils }) => {
const seatDepth = measurements.crotchDepth * (1 + options.waistRaise) * options.crotchEase
const waist =
typeof measurements.waist == 'undefined' || false == options.fitWaist
? measurements.seat
: measurements.waist
const circumference = measurements.seat > waist ? measurements.seat : waist
const waistBack =
typeof measurements.waistBack == 'undefined' || false == options.fitWaist
? waist / 2
: measurements.waistBack
const separateWaistband = options.separateWaistband || 'waistband' == options.frontPocketStyle
const circumference4 = circumference / 4
const hem = measurements.inseam * options.hemWidth
const waistBand = measurements.inseam * options.waistbandWidth
const frontPocketSize = options.frontPocketSize * measurements.crotchDepth
const pocketDepth =
(measurements.crotchDepth - measurements.waistToHips) * options.frontPocketDepthFactor >
frontPocketSize * 1.75
? (measurements.crotchDepth - measurements.waistToHips) * options.frontPocketDepthFactor
: frontPocketSize * 1.75
const frontPocketHeight = frontPocketSize * options.frontPocketWidthHeightRatio
store.set('waistBand', waistBand)
store.set('hem', hem)
store.set('pocketDepth', pocketDepth)
store.set('frontPocketSize', frontPocketSize)
points.mWaist = new Point(0, 0)
points.mHip = points.mWaist.shift(270, seatDepth)
points.fWaistSide = points.mWaist
.shift(180, options.crotchFront * circumference4)
.shift(90, waistBand)
points.fWaistCrotchCP = points.fWaistSide.shift(
270,
seatDepth * options.crotchFactorFrontVer + waistBand
)
points.fHipCrotchCP = points.mHip.shift(
180,
options.crotchFront * circumference4 * options.crotchFactorFrontHor
)
points.fHipSide = points.mHip.shift(180, options.crotchFront * circumference4)
points.bWaistSide = points.mWaist
.shift(0, options.crotchBack * circumference4)
.shift(90, waistBand)
.shift(90, options.backRaise * seatDepth)
points.bWaistCrotchCP = points.bWaistSide.shift(270, seatDepth * options.crotchFactorBackVer)
points.bHipCrotchCP = points.mHip.shift(
0,
options.crotchBack * circumference4 * options.crotchFactorBackHor
)
points.bHipSide = points.mHip.shift(0, options.crotchBack * circumference4)
points.fCutOutHip = new Path()
.move(points.fWaistSide)
.curve(points.fWaistCrotchCP, points.fHipCrotchCP, points.mHip)
.shiftAlong(measurements.waistToHips + waistBand)
points.bCutOutHip = new Path()
.move(points.bWaistSide)
.curve(points.bWaistCrotchCP, points.bHipCrotchCP, points.mHip)
.shiftAlong(measurements.waistToHips + waistBand + options.backRaise * seatDepth)
const waistSeatDifferenceBack = measurements.seat / 2 - waistBack
const waistSeatDifferenceFront = measurements.seat / 2 - (waist - waistBack)
points.bWaistAdjusted = points.bWaistSide.shift(
0,
waistSeatDifferenceBack * options.backWaistAdjustment
)
points.fWaistAdjusted = points.fWaistSide.shift(
180,
waistSeatDifferenceFront * options.frontWaistAdjustment
)
points.mLeg = points.mHip.shift(270, measurements.inseam * options.legSize)
points.fLegSide = points.mLeg.shift(180, options.crotchFront * circumference4)
points.bLegSide = points.mLeg.shift(0, options.crotchBack * circumference4)
points.fWaistFront = points.fWaistSide.shift(180, circumference4)
points.fWaistFrontOverlap = points.fWaistFront.shift(180, options.waistOverlap * circumference4)
points.fHipFront = points.fHipSide.shift(180, circumference4)
points.fHipFrontOverlap = points.fHipFront.shift(180, options.waistOverlap * circumference4)
points.fLegFront = points.fLegSide.shift(180, circumference4)
points.fLegFrontOverlap = points.fLegFront.shift(180, options.waistOverlap * circumference4)
// Calculate the distance we need to move horizontally to get to the point that will
// diagonally be the distance we're looking for (circumference/4)
const bHorDistance = Math.sqrt(
circumference4 * circumference4 -
options.backRaise * seatDepth * options.backRaise * seatDepth
)
// Create a point that is this distance from the side.
points.bWaistBack = points.mWaist
.shift(90, waistBand)
.shift(0, options.crotchBack * circumference4 + bHorDistance)
points.bWaistBackOverlap = points.bWaistBack.shift(0, options.waistOverlap * circumference4)
points.bHipBack = points.bHipSide.shift(0, circumference4)
points.bHipBackOverlap = points.bHipBack.shift(0, options.waistOverlap * circumference4)
points.bLegBack = points.bLegSide.shift(0, circumference4)
points.bLegBackOverlap = points.bLegBack.shift(0, options.waistOverlap * circumference4)
points.bWaistSideTemp = points.bWaistSide.shift(0, 2) // This is a trick to make the offset() call work. Without it, the offset is crossing the cutout line.
const fPaths = new Path()
.move(points.fWaistSide)
.curve(points.fWaistCrotchCP, points.fHipCrotchCP, points.mHip)
.split(points.fCutOutHip)
const bPaths = new Path()
.move(points.bWaistSide)
.curve(points.bWaistCrotchCP, points.bHipCrotchCP, points.mHip)
.split(points.bCutOutHip)
fPaths[0].hide()
fPaths[1].hide()
bPaths[0].hide()
bPaths[1].hide()
points.fCutOutHipCp1 = fPaths[1].ops[1].cp1.shiftFractionTowards(points.fCutOutHip, 1.25)
points.fCutOutHipCp2 = fPaths[1].ops[1].cp1.clone()
points.mHipCp1 = fPaths[1].ops[1].cp2.clone()
points.mHipCp2 = bPaths[1].ops[1].cp2.clone()
points.bCutOutHipCp1 = bPaths[1].ops[1].cp1.clone()
points.bCutOutHipCp2 = bPaths[1].ops[1].cp1.shiftFractionTowards(points.bCutOutHip, 1.25)
paths.frontBottomCutOut = new Path()
.move(points.mHip)
.curve(points.mHipCp1, points.fCutOutHipCp2, points.fCutOutHip)
.hide()
paths.backBottomCutOut = new Path()
.move(points.bCutOutHip)
.curve(points.bCutOutHipCp1, points.mHipCp2, points.mHip)
.hide()
paths.frontTopCutOut = new Path()
.move(points.fCutOutHip)
.curve(points.fCutOutHipCp1, points.fWaistAdjusted, points.fWaistAdjusted)
.hide()
paths.backTopCutOut = new Path()
.move(points.bWaistAdjusted)
.curve(points.bWaistAdjusted, points.bCutOutHipCp2, points.bCutOutHip)
.hide()
points.fWaistSideHem = paths.frontTopCutOut.reverse().shiftAlong(waistBand)
points.fWaistSideSeam = paths.frontTopCutOut.reverse().shiftAlong(waistBand * 2)
points.fWaistSide = points.fWaistSideSeam.flipY(points.fWaistSideHem)
points.bWaistSideHem = paths.backTopCutOut.shiftAlong(waistBand)
points.bWaistSideSeam = paths.backTopCutOut.shiftAlong(waistBand * 2)
points.bWaistSide = points.bWaistSideSeam.flipY(points.bWaistSideHem)
points.fWaistFrontOverlapHem = points.fWaistFrontOverlap.shift(270, waistBand)
points.bWaistBackHem = points.bWaistBack.shift(270, waistBand)
points.bWaistBackOverlapHem = points.bWaistBackOverlap.shift(270, waistBand)
points.fWaistFrontOverlapSeam = points.fWaistFrontOverlap.shift(270, waistBand * 2)
points.bWaistBackSeam = points.bWaistBack.shift(270, waistBand * 2)
points.bWaistBackOverlapSeam = points.bWaistBackOverlap.shift(270, waistBand * 2)
points.fWaistSideCp2 = paths.frontTopCutOut.split(points.fWaistSideSeam)[0].ops[1].cp2.clone()
points.fWaistSideCp2 = paths.frontTopCutOut.split(points.fWaistSideSeam)[0].ops[1].cp2.clone()
points.fWaistHipCp1 = paths.frontTopCutOut.split(points.fWaistSideSeam)[0].ops[1].cp1.clone()
points.bWaistSideCp1 = paths.backTopCutOut.split(points.bWaistSideSeam)[1].ops[1].cp1.clone()
points.bWaistHipCp2 = paths.backTopCutOut.split(points.bWaistSideSeam)[1].ops[1].cp2.clone()
if (separateWaistband) {
points.mWaist1 = new Point(points.mWaist.x, points.fWaistSideSeam.y)
// points.mWaist = new Point(points.mWaist.x, points.fWaistSideSeam.y)
} else {
points.mWaist1 = new Point(points.mWaist.x, points.fWaistSide.y)
}
if (separateWaistband) {
points.mWaist2 = new Point(points.mWaist.x, points.bWaistSideSeam.y)
} else {
points.mWaist2 = new Point(points.mWaist.x, points.bWaistSide.y)
}
paths.frontTopCutOut = new Path()
.move(points.fCutOutHip)
.curve(points.fCutOutHipCp1, points.fWaistSideCp2, points.fWaistSideSeam)
.hide()
if (false == separateWaistband) {
paths.frontTopCutOut.line(points.fWaistSideHem)
paths.frontTopCutOut.line(points.fWaistSide)
}
if (false == separateWaistband) {
paths.backTopCutOut = new Path()
.move(points.bWaistSide)
.line(points.bWaistSideHem)
.line(points.bWaistSideSeam)
} else {
paths.backTopCutOut = new Path().move(points.bWaistSideSeam)
}
paths.backTopCutOut.curve(points.bWaistSideCp1, points.bCutOutHipCp2, points.bCutOutHip).hide()
paths.cutout = paths.backTopCutOut
.join(paths.backBottomCutOut)
.join(paths.frontBottomCutOut)
.join(paths.frontTopCutOut)
.hide()
paths.waistBack = new Path()
.move(separateWaistband ? points.bWaistBackOverlapSeam : points.bWaistBackOverlap)
.line(separateWaistband ? points.bWaistBackSeam : points.bWaistBack)
.line(separateWaistband ? points.bWaistSideSeam : points.bWaistSide)
.hide()
paths.waistFront = new Path()
.move(separateWaistband ? points.fWaistSideSeam : points.fWaistSide)
.line(separateWaistband ? points.fWaistFrontOverlapSeam : points.fWaistFrontOverlap)
.hide()
paths.front = new Path()
.move(separateWaistband ? points.fWaistFrontOverlapSeam : points.fWaistFrontOverlap)
.line(points.fHipFrontOverlap)
.line(points.fLegFrontOverlap)
.hide()
paths.back = new Path()
.move(points.bLegBackOverlap)
.line(points.bHipBackOverlap)
.line(separateWaistband ? points.bWaistBackOverlapSeam : points.bWaistBackOverlap)
.hide()
paths.leg = new Path().move(points.fLegFrontOverlap).line(points.bLegBackOverlap).hide()
paths.seam = paths.waistFront
.join(paths.front)
.join(paths.leg)
.join(paths.back)
.join(paths.waistBack)
.join(paths.cutout)
.close()
.addClass('fabric')
.hide()
if (options.frontPocket) {
points.frontPocketTop = points.fWaistSideSeam
.shift(
270,
options.frontPocketVerticalOffset * measurements.crotchDepth +
waistBand * (separateWaistband ? 1 : 2)
)
.shift(180, options.frontPocketHorizontalOffset * measurements.seat)
points.frontPocketTop2 = points.frontPocketTop.shift(340, frontPocketHeight)
points.frontPocketBottom = points.frontPocketTop.shift(
250,
frontPocketSize
// options.frontPocketSize * measurements.crotchDepth
)
points.frontPocketBottom2 = points.frontPocketBottom.shift(340, frontPocketHeight)
paths.frontPocket = new Path()
.move(points.frontPocketTop)
.line(points.frontPocketBottom)
.line(points.frontPocketBottom2)
.line(points.frontPocketTop2)
.close()
.addClass('fabric')
.hide()
points.frontPocketSeam = utils.beamsIntersect(
points.frontPocketBottom,
points.frontPocketTop,
points.fWaistSideSeam,
points.fWaistFrontOverlapSeam
)
const frontPocketExtraDepth = points.frontPocketTop.dist(points.frontPocketSeam)
points.frontPocketTopLeft = points.frontPocketSeam.shiftTowards(
points.fWaistFrontOverlapSeam,
frontPocketHeight
)
points.frontPocketTopRight = points.frontPocketTopLeft.shift(0, pocketDepth * (1 / 3))
points.frontPocketBottomRight = points.frontPocketTopRight.shift(
270,
pocketDepth + frontPocketExtraDepth
)
points.frontPocketBottomLeft = points.frontPocketTopLeft.shift(
250,
pocketDepth * (5 / 6) + frontPocketExtraDepth
)
points.frontPocketBottomRightCP = points.frontPocketBottomRight.shift(
180,
pocketDepth * (1 / 6)
)
points.frontPocketBottomLeftCP = points.frontPocketBottomLeft.shift(
315,
pocketDepth * (1 / 4)
)
paths.frontPocketSeamSA = new Path()
.move(points.frontPocketTopRight)
.line(points.frontPocketTopLeft)
.line(points.frontPocketBottomLeft)
.curve(
points.frontPocketBottomLeftCP,
points.frontPocketBottomRightCP,
points.frontPocketBottomRight
)
.hide()
paths.frontPocketSeam = new Path()
.move(points.frontPocketBottomRight)
.line(points.frontPocketTopRight)
.join(paths.frontPocketSeamSA)
.close()
.addClass('dotted mark')
.hide()
}
if (options.backPocket) {
points.backPocketRight = points.bWaistBack
.shiftTowards(points.bWaistSide, options.backPocketHorizontalOffset * measurements.seat)
.shift(
270,
options.backPocketVerticalOffset * measurements.crotchDepth +
waistBand * (separateWaistband ? 1 : 2)
)
points.backPocketLeft = points.bWaistBack
.shiftTowards(
points.bWaistSide,
options.backPocketHorizontalOffset * measurements.seat +
options.backPocketSize * measurements.crotchDepth
)
.shift(
270,
options.backPocketVerticalOffset * measurements.crotchDepth +
waistBand * (separateWaistband ? 1 : 2)
)
points.backPocketRight2 = points.backPocketRight.shift(
points.backPocketRight.angle(points.backPocketLeft) + 90,
12
)
points.backPocketLeft2 = points.backPocketLeft.shift(
points.backPocketLeft.angle(points.backPocketRight) - 90,
12
)
paths.backPocket = new Path()
.move(points.backPocketLeft)
.line(points.backPocketLeft2)
.line(points.backPocketRight2)
.line(points.backPocketRight)
.close()
.addClass('fabric')
.hide()
}
return part.hide()
},
}

View file

@ -1,92 +1,81 @@
import { cbqc } from '@freesewing/core'
import { pantsProto } from './pantsproto.mjs'
function waraleePocket({
options,
measurements,
Point,
Path,
points,
paths,
Snippet,
snippets,
complete,
sa,
paperless,
macro,
part,
}) {
if (false == options.frontPocket) {
return part
}
export const pocket = {
name: 'waralee.pocket',
from: pantsProto,
draft: ({ options, Point, Path, points, paths, Snippet, snippets, sa, macro, store, part }) => {
if (false == options.frontPocket) {
return part.hide()
}
const c = 0.55191502449351
const frontPocketSize = store.get('frontPocketSize')
let pocketDepth =
(measurements.crotchDepth - measurements.waistToHips) * options.frontPocketDepthFactor
let frontPocketSize =
options.frontPocketSize * measurements.crotchDepth /*- measurements.waistToHips*/
if ('welt' != options.frontPocketStyle) {
points.topLeft = new Point(0, 0)
points.topRight = points.topLeft.shift(0, frontPocketSize)
points.bottomLeft = points.topLeft.shift(270, frontPocketSize * 1.5)
points.bottomRight = points.topRight.shift(270, frontPocketSize * 1.5)
if ('welt' == options.frontPocketStyle) {
points.topLeft = new Point(0, 0)
points.bottomLeft = points.topLeft.shift(270, pocketDepth)
points.topRight = points.topLeft.shift(0, pocketDepth * (1 / 3))
points.bottomRight = points.topRight.shift(290, pocketDepth * (5 / 6))
points.bottomLeftCP = points.bottomLeft.shift(0, pocketDepth * (1 / 6))
points.bottomRightCP = points.bottomRight.shift(225, pocketDepth * (1 / 4))
paths.seam = new Path()
.move(points.topLeft)
.line(points.bottomLeft)
.curve(points.bottomLeftCP, points.bottomRightCP, points.bottomRight)
.line(points.topRight)
.line(points.topLeft)
.close()
.attr('class', 'fabric')
} else {
points.topLeft = new Point(0, 0)
points.topRight = points.topLeft.shift(0, frontPocketSize)
points.bottomLeft = points.topLeft.shift(270, frontPocketSize * 1.5)
points.bottomRight = points.topRight.shift(270, frontPocketSize * 1.5)
points.bottomLeftCornerUp = points.bottomLeft.shift(90, frontPocketSize / 4)
points.bottomLeftCornerUpCp1 = points.bottomLeftCornerUp.shift(270, (frontPocketSize / 4) * c)
points.bottomLeftCornerOver = points.bottomLeft.shift(0, frontPocketSize / 4)
points.bottomLeftCornerOverCp2 = points.bottomLeftCornerOver.shift(
180,
(frontPocketSize / 4) * c
)
points.bottomRightCornerUp = points.bottomRight.shift(90, frontPocketSize / 4)
points.bottomRightCornerUpCp2 = points.bottomRightCornerUp.shift(270, (frontPocketSize / 4) * c)
points.bottomRightCornerOver = points.bottomRight.shift(180, frontPocketSize / 4)
points.bottomRightCornerOverCp1 = points.bottomRightCornerOver.shift(
0,
(frontPocketSize / 4) * c
)
paths.seam = new Path()
.move(points.topLeft)
.line(points.bottomLeftCornerUp)
.curve(
points.bottomLeftCornerUpCp1,
points.bottomLeftCornerOverCp2,
points.bottomLeftCornerOver
points.bottomLeftCornerUp = points.bottomLeft.shift(90, frontPocketSize / 4)
points.bottomLeftCornerUpCp1 = points.bottomLeftCornerUp.shift(
270,
(frontPocketSize / 4) * cbqc
)
.line(points.bottomRightCornerOver)
.curve(
points.bottomRightCornerOverCp1,
points.bottomRightCornerUpCp2,
points.bottomRightCornerUp
points.bottomLeftCornerOver = points.bottomLeft.shift(0, frontPocketSize / 4)
points.bottomLeftCornerOverCp2 = points.bottomLeftCornerOver.shift(
180,
(frontPocketSize / 4) * cbqc
)
points.bottomRightCornerUp = points.bottomRight.shift(90, frontPocketSize / 4)
points.bottomRightCornerUpCp2 = points.bottomRightCornerUp.shift(
270,
(frontPocketSize / 4) * cbqc
)
points.bottomRightCornerOver = points.bottomRight.shift(180, frontPocketSize / 4)
points.bottomRightCornerOverCp1 = points.bottomRightCornerOver.shift(
0,
(frontPocketSize / 4) * cbqc
)
.line(points.topRight)
.line(points.topLeft)
.close()
.attr('class', 'fabric')
}
// Complete?
if (complete) {
points.title = points.topLeft.shift(270, 75).shift(0, 50)
paths.seam = new Path()
.move(points.topLeft)
.line(points.bottomLeftCornerUp)
.curve(
points.bottomLeftCornerUpCp1,
points.bottomLeftCornerOverCp2,
points.bottomLeftCornerOver
)
.line(points.bottomRightCornerOver)
.curve(
points.bottomRightCornerOverCp1,
points.bottomRightCornerUpCp2,
points.bottomRightCornerUp
)
.line(points.topRight)
.line(points.topLeft)
.close()
.addClass('fabric')
paths.sa = paths.seam.offset(sa).addClass('fabric sa')
} else {
paths.frontPocketSeam.unhide().setClass('fabric')
if (sa) {
paths.sa = paths.frontPocketSeamSA.offset(sa).close().addClass('fabric sa')
}
paths.frontPocket.unhide().setClass('mark')
macro('cutonfold', {
from: points.frontPocketBottomRight,
to: points.frontPocketTopRight,
})
}
store.cutlist.addCut({ cut: 2, from: 'lining' })
points.title = points.frontPocketTopLeft.shift(270, 75).shift(0, 50)
macro('title', {
nr: 3,
at: points.title,
@ -95,71 +84,38 @@ function waraleePocket({
points.logo = points.title.shift(270, 75)
snippets.logo = new Snippet('logo', points.logo)
points.text = points.logo
.shift(-90, 25)
.attr('data-text', 'Waralee')
.attr('data-text-class', 'center')
points.text = points.logo.shift(-90, 25).addText('Waralee', 'center')
if ('welt' == options.frontPocketStyle) {
macro('cutonfold', {
from: points.topLeft,
to: points.bottomLeft,
margin: 5,
offset: 10,
})
}
if (sa) {
if ('welt' == options.frontPocketStyle) {
paths.sa = new Path()
.move(points.bottomLeft)
.join(
new Path()
.move(points.bottomLeft)
.curve(points.bottomLeftCP, points.bottomRightCP, points.bottomRight)
.line(points.topRight)
.line(points.topLeft)
.offset(sa)
)
.line(points.topLeft)
.attr('class', 'fabric sa')
} else {
paths.sa = paths.seam.offset(sa).attr('class', 'fabric sa')
}
}
}
// Paperless?
if (paperless) {
if ('welt' == options.frontPocketStyle) {
macro('hd', {
id: 1,
from: points.topLeft,
to: points.topRight,
y: points.topLeft.y + 15,
from: points.frontPocketTopLeft,
to: points.frontPocketTopRight,
y: points.frontPocketTopLeft.y - sa - 15,
})
macro('hd', {
id: 2,
from: points.bottomLeft,
to: points.bottomRight,
y: points.bottomRight.y,
from: points.frontPocketBottomLeft,
to: points.frontPocketBottomRight,
y: points.frontPocketBottomRight.y + sa + 15,
})
macro('vd', {
id: 3,
from: points.topLeft,
to: points.bottomLeft,
x: points.topLeft.x + 15,
from: points.frontPocketBottomLeft,
to: points.frontPocketTopLeft,
x: points.frontPocketBottomLeft.x - sa - 15,
})
macro('vd', {
id: 4,
from: points.topRight,
to: points.bottomRight,
x: points.bottomRight.x,
from: points.frontPocketTopRight,
to: points.frontPocketBottomRight,
x: points.frontPocketBottomRight.x + 15,
})
macro('vd', {
id: 5,
from: points.bottomRight,
to: points.bottomLeft,
x: points.bottomRight.x,
from: points.frontPocketBottomRight,
to: points.frontPocketBottomLeft,
x: points.frontPocketBottomLeft.x - sa - 15,
})
} else {
macro('hd', {
@ -170,18 +126,12 @@ function waraleePocket({
})
macro('vd', {
id: 7,
from: points.topLeft,
to: points.bottomLeftCornerOver,
from: points.bottomLeftCornerOver,
to: points.topLeft,
x: points.bottomLeftCornerOver.x,
})
}
}
return part
}
export const pocket = {
name: 'waralee.pocket',
after: pantsProto,
draft: waraleePocket,
return part
},
}

View file

@ -11,182 +11,122 @@ function waraleeWaistband(
paths,
Snippet,
snippets,
complete,
paperless,
macro,
sa,
store,
expand,
units,
part,
}
) {
const WidthReduction = 6
let waistBand = store.get('waistBand')
let waistBandLengthFront = points.fWaistSideHem.dist(points.fWaistFrontOverlapHem)
let waistBandLengthBack =
const waistBand = store.get('waistBand')
const waistBandLengthFront = points.fWaistSideHem.dist(points.fWaistFrontOverlapHem)
const waistBandLengthBack =
points.bWaistSideHem.dist(points.bWaistBackHem) +
points.bWaistBackHem.dist(points.bWaistBackOverlapHem)
let strapLength = measurements.waist + measurements.crotchDepth * 1.75
let waistBandLength = measurements.waist + measurements.crotchDepth * 1.75
let partNr = 0
switch (type) {
case 'waistBandFront':
if (false == options.separateWaistband && 'welt' == options.frontPocketStyle) {
return part
return part.hide()
}
partNr = 9
points.tr = points.fWaistSide
points.mr = points.fWaistSideHem
points.br = points.fWaistSideSeam
points.ml = points.fWaistSideHem.shift(180, (waistBandLengthFront / WidthReduction) * 2)
points.tl = points.ml.shift(90, waistBand)
points.bl = points.ml.shift(270, waistBand)
macro('hd', {
from: points.ml,
to: points.mr,
y: points.mr.y,
text: part.units(waistBandLengthFront),
})
waistBandLength = waistBandLengthFront * 2
break
case 'waistBandBack':
if (false == options.separateWaistband && 'welt' == options.frontPocketStyle) {
return part
return part.hide()
}
partNr = 10
points.tl = points.bWaistSide
points.ml = points.bWaistSideHem
points.bl = points.bWaistSideSeam
points.mr = points.bWaistSideHem.shift(0, (waistBandLengthBack / WidthReduction) * 2)
points.tr = points.mr.shift(90, waistBand)
points.br = points.mr.shift(270, waistBand)
macro('hd', {
from: points.ml,
to: points.mr,
y: points.mr.y,
text: part.units(waistBandLengthBack),
})
waistBandLength = waistBandLengthBack * 2
break
case 'strapFront':
partNr = 7
strapLength -= waistBandLengthFront * 2
strapLength += options.knotInFront ? measurements.waist / 2 : 0
points.mr = new Point(0, 0)
points.tr = points.mr.shift(90, waistBand)
points.br = points.mr.shift(270, waistBand)
points.ml = points.mr.shift(180, (waistBandLengthFront / WidthReduction) * 2)
points.tl = points.ml.shift(90, waistBand)
points.bl = points.ml.shift(270, waistBand)
macro('hd', {
from: points.ml,
to: points.mr,
y: points.mr.y,
text: part.units(strapLength),
})
waistBandLength -= waistBandLengthFront * 2
waistBandLength += options.knotInFront ? measurements.waist / 2 : 0
break
case 'strapBack':
partNr = 8
strapLength -= waistBandLengthBack * 2
strapLength += options.knotInFront ? 0 : measurements.waist / 2
points.mr = new Point(0, 0)
points.tr = points.mr.shift(90, waistBand)
points.br = points.mr.shift(270, waistBand)
points.ml = points.mr.shift(180, (waistBandLengthFront / WidthReduction) * 2)
points.tl = points.ml.shift(90, waistBand)
points.bl = points.ml.shift(270, waistBand)
macro('hd', {
from: points.ml,
to: points.mr,
y: points.mr.y,
text: part.units(strapLength),
})
waistBandLength -= waistBandLengthBack * 2
waistBandLength += options.knotInFront ? 0 : measurements.waist / 2
break
}
points.zigzagTop = points.tr.shift(180, waistBandLengthFront / WidthReduction)
points.zigzagTopR = points.zigzagTop.shift(0, waistBand / 8)
points.zigzagTopT = points.zigzagTop.shift(90, waistBand / 4)
points.zigzagTopL = points.zigzagTop.shift(180, waistBand / 8)
points.zigzagTopB = points.zigzagTop.shift(270, waistBand / 4)
points.zigzagBottom = points.br.shift(180, waistBandLengthFront / WidthReduction)
points.zigzagBottomR = points.zigzagBottom.shift(0, waistBand / 8)
points.zigzagBottomT = points.zigzagBottom.shift(90, waistBand / 4)
points.zigzagBottomL = points.zigzagBottom.shift(180, waistBand / 8)
points.zigzagBottomB = points.zigzagBottom.shift(270, waistBand / 4)
if (!expand) {
// Expand is off, do not draw the part but flag this to the user
store.flag.note({
msg: `waralee:cut` + type,
replace: {
width: units(waistBand * 2),
length: units(waistBandLength),
},
suggest: {
text: 'flag:show',
icon: 'expand',
update: {
settings: ['expand', 1],
},
},
})
// Also hint about expand
store.flag.preset('expand')
paths.ZZtop = new Path()
.move(points.zigzagTopR)
.line(points.zigzagTopT)
.line(points.zigzagTopB)
.line(points.zigzagTopL)
.attr('class', 'dotted')
paths.ZZbottom = new Path()
.move(points.zigzagBottomR)
.line(points.zigzagBottomT)
.line(points.zigzagBottomB)
.line(points.zigzagBottomL)
.attr('class', 'dotted')
paths.right = new Path()
.move(points.zigzagBottomR)
.line(points.br)
.line(points.mr)
.line(points.tr)
.line(points.zigzagTopR)
paths.left = new Path()
.move(points.zigzagBottomL)
.line(points.bl)
.line(points.ml)
.line(points.tl)
.line(points.zigzagTopL)
return part.hide()
}
store.cutlist.addCut({ cut: 1, from: 'fabric' })
points.tl = new Point(0, 0)
points.bl = new Point(0, waistBandLength)
points.tm = new Point(waistBand, 0)
points.bm = new Point(waistBand, waistBandLength)
points.tr = new Point(waistBand * 2, 0)
points.br = new Point(waistBand * 2, waistBandLength)
paths.seam = new Path()
.move(points.br)
.line(points.mr)
.line(points.tr)
.line(points.tl)
.line(points.ml)
.line(points.bl)
.line(points.br)
.close()
.hide()
// Complete?
if (complete) {
if (sa) paths.sa = paths.seam.offset(sa).attr('class', 'fabric sa')
paths.fold = new Path().move(points.tm).line(points.bm).addClass('fabric dotted').setText('fold')
points.title = points.tl.shiftFractionTowards(points.br, 0.2).shift(270, 20)
macro('title', {
nr: partNr,
at: points.title,
title: type,
prefix: 'front',
scale: 0.4,
})
if (sa) paths.sa = paths.seam.offset(sa).addClass('fabric sa')
points.logo = points.tl.shiftFractionTowards(points.br, 0.8)
snippets.logo = new Snippet('logo', points.logo).attr('data-scale', 0.3)
}
// Paperless?
if (paperless) {
macro('vd', {
id: 1,
from: points.tr,
to: points.br,
x: points.br.x + sa + 10,
})
}
store.cutlist.addCut({ cut: 1, from: 'fabric' })
points.title = new Point(waistBand, waistBandLength * 0.2)
macro('title', {
nr: partNr,
at: points.title,
title: type,
scale: 0.4,
align: 'center',
})
points.logo = new Point(waistBand, waistBandLength * 0.4)
snippets.logo = new Snippet('logo', points.logo).attr('data-scale', 0.3)
macro('hd', {
id: 'w',
from: points.tl,
to: points.tr,
y: points.tl.y - sa - 10,
})
macro('vd', {
id: 'h',
from: points.tr,
to: points.br,
x: points.br.x + sa + 10,
})
return part
}

View file

@ -0,0 +1,6 @@
---
title: "Gozer the ghost: Cutting Instructions"
---
- **Color 1; Traditionally white**
- Cut **1 Body**

View file

@ -0,0 +1,6 @@
---
title: Gozer the ghost
---
<DesignInfo design='gozer' docs />

View file

@ -0,0 +1,7 @@
---
title: "Gozer the ghost: Fabric Options"
---
## Main Fabric
Traditionally, white sheets are used.

View file

@ -0,0 +1,15 @@
---
title: "Gozer the ghost: Sewing Instructions"
---
## Step 1: The eyes
- Cut holes where marked.
## Step 2: The body
- Hem the body
## Step 3: Enjoy!
That's it, you are all done. Put it on and scare the neighborhood.

View file

@ -0,0 +1,5 @@
---
title: "Gozer the ghost: Required Measurements"
---
<DesignMeasurements design='gozer' />

View file

@ -0,0 +1,9 @@
---
title: "Gozer the ghost: What You Need"
---
To make Gozer, you will need the following:
- [Basic sewing supplies](/docs/sewing/basic-sewing-supplies)
- About 1 bed sheet

View file

@ -0,0 +1,6 @@
---
title: "Gozer the ghost: Designer Notes"
---
<Fixme>The designer, nor FreeSewing, are liable for anything that follows the use of this pattern. You've been warned.</Fixme>

View file

@ -1,9 +0,0 @@
---
title: "Verkürzung des Hosenbeins"
---
Das bestimmt, wie lange die Hosen sein werden. Es ist ein Faktor der Inseam-Messung. Je größer der Wert, desto mehr wird von der Länge entfernt.
## Effekt dieser Option auf das Schnittmuster
![Dieses Bild zeigt den Effekt dieser Option, indem es mehrere Varianten überlagert, die einen anderen Wert für diese Option haben](waralee_legshortening_sample.svg "Effekt dieser Option auf das Schnittmuster")

View file

@ -1,9 +0,0 @@
---
title: "Leg Shortening"
---
This dictates how long the pants will be. It is a factor of the inseam measurement. The larger the value, the more that will be taken off the length.

View file

@ -1,9 +0,0 @@
---
title: "Acortamiento de la pierna"
---
Esto dicta cuánto tiempo durarán los pantalones. Se trata de un factor de medición de buques. Cuanto más grande sea el valor, más se quitará de la longitud.
## Efecto de esta opción en el patrón
![Esta imagen muestra el efecto de esta opción superponiendo varias variantes que tienen un valor diferente para esta opción](waralee_legshortening_sample.svg "Efecto de esta opción en el patrón")

View file

@ -1,9 +0,0 @@
---
title: "Réduction des jambes"
---
Cela dicte combien de temps le pantalon sera. C'est un facteur de la mesure de la couture. Plus la valeur est grande, plus elle sera retirée de la longueur.
## Effet de cette option sur le motif
![Cette image montre l'effet de cette option en superposant plusieurs variantes qui ont une valeur différente pour cette option](waralee_legshortening_sample.svg "Effet de cette option sur le motif")

View file

@ -1,9 +0,0 @@
---
title: "Been Inkorten"
---
Dit bepaalt hoe lang de broek zal zijn. Het is een factor van de binnenste meting. Hoe groter de waarde, des te meer zal de lengte worden afgenomen.
## Effect van deze optie op het patroon
![Deze afbeelding toont het effect van deze optie door meerdere varianten die een andere waarde hebben voor deze optie te vervangen](waralee_legshortening_sample.svg "Effect van deze optie op het patroon")

View file

@ -1,9 +0,0 @@
---
title: "Довжина штанин"
---
Від цього залежить, якої довжини будуть штани. Це фактор вимірювання швів. Чим більше значення, тим більше буде віднято від довжини.
## Вплив цієї опції на шаблон
![На цьому зображенні показано вплив цієї опції шляхом накладання декількох варіантів, які мають різне значення для цієї опції](waralee_legshortening_sample.svg "Вплив цієї опції на шаблон")

View file

@ -0,0 +1,9 @@
---
title: "Leg Size"
---
This dictates how long the pants will be. It is a factor of the inseam measurement. The larger the value, the longer the pants.

View file

@ -0,0 +1,17 @@
---
title: "Breanna dress by Andrea Cretu"
caption: "Andrea made this lovely dress based on the Breanna block"
date: 20231017
intro: "Andrea added a circle skirt to the Breanna block to make this charming dress."
designs: ["breanna"]
maker: Natalia
---
Andrea added a circle skirt to the Breanna block to make this charming dress. We love the choice of fabric and buttons!
Andrea shared these helpful details:
> Made a dress based on the Breanna body block, with a circle skirt. Next iteration I'll scoop out the armholes and neck and add length to the bottom, so the skirt starts a little lower. Also will make the darts end earlier on the bust and later on the back.
Andrea is a talented creator, and the owner at [Yarnandy.com](Yarnandy.com).

View file

@ -0,0 +1,23 @@
---
title: "Four versions of Otis and a bonus Bob"
caption: "An Otis baby romper and Bob bib"
date: 20231017
intro: "Wouter made four versions of Otis for newborn Otis, and a Bob to complete the ensemble."
designs: ["otis", "bob"]
maker: Natalia
---
Wouter, the designer, made these:
> Four versions of otis. One with long sleeves, and one that is reversible (dont try this; figuring out how seams go together and in which sequence causes headaches).
We are head over heels for his adorable fabric choices. The cute baby doesn't hurt.
![Otis on Otis](https://imagedelivery.net/ouSuR9yY1bHt-fuAokSA5Q/showcase-four-versions-of-otis-and-a-bonus-bob-1/public "Otis on Otis")
![A polka dot Otis](https://imagedelivery.net/ouSuR9yY1bHt-fuAokSA5Q/showcase-four-versions-of-otis-and-a-bonus-bob-2/public "A polka dot Otis")
![This Otis is out of this world](https://imagedelivery.net/ouSuR9yY1bHt-fuAokSA5Q/showcase-four-versions-of-otis-and-a-bonus-bob-3/public "This Otis is out of this world")
![A view of the reverse](https://imagedelivery.net/ouSuR9yY1bHt-fuAokSA5Q/showcase-four-versions-of-otis-and-a-bonus-bob-4/public "A view of the reverse")

View file

@ -0,0 +1,19 @@
---
title: "Simone by Gaëlle"
caption: "A lovely Simone shirt with beautiful details"
date: 20231017
intro: "This Simone shirt features beautiful details, including coordinated buttons and custom labels."
designs: ["simone"]
maker: Natalia
---
The talented Gaëlle shared this Simone shirt. Don't miss the the detail photos.
![Another view of the front](https://imagedelivery.net/ouSuR9yY1bHt-fuAokSA5Q/showcase-simone-by-gaelle-1/public "Another view of the front")
![Collar details](https://imagedelivery.net/ouSuR9yY1bHt-fuAokSA5Q/showcase-simone-by-gaelle-2/public "Collar details")
![Cuff button details](https://imagedelivery.net/ouSuR9yY1bHt-fuAokSA5Q/showcase-simone-by-gaelle-4/public "Cuff button details")
![Custom label tags](https://imagedelivery.net/ouSuR9yY1bHt-fuAokSA5Q/showcase-simone-by-gaelle-5/public "Custom label tags")

View file

@ -28,7 +28,7 @@
},
"peerDependencies": {},
"dependencies": {
"@aws-sdk/client-sesv2": "3.428.0",
"@aws-sdk/client-sesv2": "3.430.0",
"@prisma/client": "5.4.2",
"bcryptjs": "2.4.3",
"cors": "2.8.5",
@ -49,7 +49,7 @@
"devDependencies": {
"chai": "4.3.10",
"chai-http": "4.4.0",
"esbuild": "0.19.4",
"esbuild": "0.19.5",
"mocha": "10.2.0",
"mocha-steps": "1.3.0",
"nodemon": "3.0.1",

View file

@ -35,7 +35,7 @@
"@next/bundle-analyzer": "13.5.4",
"@tailwindcss/typography": "0.5.9",
"algoliasearch": "4.20.0",
"daisyui": "3.9.2",
"daisyui": "3.9.3",
"lodash.get": "4.4.2",
"lodash.orderby": "4.6.0",
"lodash.set": "4.3.2",

View file

@ -20,6 +20,7 @@ import { Cornelius as cornelius } from '@freesewing/cornelius'
import { Diana as diana } from '@freesewing/diana'
import { Florence as florence } from '@freesewing/florence'
import { Florent as florent } from '@freesewing/florent'
import { Gozer as gozer } from '@freesewing/gozer'
import { Hi as hi } from '@freesewing/hi'
import { Holmes as holmes } from '@freesewing/holmes'
import { Hortensia as hortensia } from '@freesewing/hortensia'
@ -73,6 +74,7 @@ const designs = {
diana,
florence,
florent,
gozer,
hi,
holmes,
hortensia,

View file

@ -35,13 +35,13 @@
"d3-dispatch": "3.0.1",
"d3-drag": "3.0.0",
"d3-selection": "3.0.0",
"daisyui": "3.9.2",
"daisyui": "3.9.3",
"i18next": "23.5.1",
"lodash.get": "4.4.2",
"lodash.orderby": "4.6.0",
"lodash.set": "4.3.2",
"next": "13.5.4",
"next-i18next": "14.0.0",
"next": "13.5.5",
"next-i18next": "14.0.3",
"ora": "7.0.1",
"react": "18.2.0",
"react-copy-to-clipboard": "5.1.0",

View file

@ -0,0 +1,98 @@
/*
* This page is auto-generated. Do not edit it by hand.
*/
import { Gozer } from 'designs/gozer/src/index.mjs'
// Dependencies
import { serverSideTranslations } from 'next-i18next/serverSideTranslations'
import { nsMerge } 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('gozer', wbNs, pageNs)
const EditDesignComponent = ({ id, design, Design, settings, docs }) => (
<Workbench preload={{ settings }} saveAs={{ pattern: id }} {...{ design, Design, docs }} />
)
const EditGozerPage = ({ page, docs, id }) => {
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])
}
}
if (id) getPattern()
}, [id])
return (
// prettier-ignore
<PageWrapper {...page} title="Gozer" layout={pattern ? WorkbenchLayout : false} header={null}>
{pattern ? (
<EditDesignComponent
id={pattern.id}
settings={pattern.settings}
design="gozer"
Design={Gozer}
docs={docs}
/>
) : (
<div>
<h1>{t('account:oneMomentPLease')}</h1>
<Loading />
</div>
)}
</PageWrapper>
)
}
export default EditGozerPage
export async function getStaticProps({ locale, params }) {
return {
props: {
...(await serverSideTranslations(locale, ns)),
id: params.id,
page: {
locale,
path: ['account', 'patterns', 'gozer', params.id, 'edit'],
title: 'Gozer',
},
},
}
}
/*
* getStaticPaths() is used to specify for which routes (think URLs)
* this page should be used to generate the result.
*/
export async function getStaticPaths() {
return {
paths: [],
fallback: 'blocking',
}
}

View file

@ -0,0 +1,98 @@
/*
* This page is auto-generated. Do not edit it by hand.
*/
import { Skully } from 'designs/skully/src/index.mjs'
// Dependencies
import { serverSideTranslations } from 'next-i18next/serverSideTranslations'
import { nsMerge } 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('skully', wbNs, pageNs)
const EditDesignComponent = ({ id, design, Design, settings, docs }) => (
<Workbench preload={{ settings }} saveAs={{ pattern: id }} {...{ design, Design, docs }} />
)
const EditSkullyPage = ({ page, docs, id }) => {
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])
}
}
if (id) getPattern()
}, [id])
return (
// prettier-ignore
<PageWrapper {...page} title="Skully" layout={pattern ? WorkbenchLayout : false} header={null}>
{pattern ? (
<EditDesignComponent
id={pattern.id}
settings={pattern.settings}
design="skully"
Design={Skully}
docs={docs}
/>
) : (
<div>
<h1>{t('account:oneMomentPLease')}</h1>
<Loading />
</div>
)}
</PageWrapper>
)
}
export default EditSkullyPage
export async function getStaticProps({ locale, params }) {
return {
props: {
...(await serverSideTranslations(locale, ns)),
id: params.id,
page: {
locale,
path: ['account', 'patterns', 'skully', params.id, 'edit'],
title: 'Skully',
},
},
}
}
/*
* getStaticPaths() is used to specify for which routes (think URLs)
* this page should be used to generate the result.
*/
export async function getStaticPaths() {
return {
paths: [],
fallback: 'blocking',
}
}

View file

@ -0,0 +1,41 @@
/*
* This page is auto-generated. Do not edit it by hand.
*/
import { Gozer } from 'designs/gozer/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('gozer', wbNs, pageNs)
const NewGozerPage = ({ page, docs }) => (
<PageWrapper {...page} title="Gozer" layout={WorkbenchLayout} header={null}>
<Workbench
{...{
design: 'gozer',
Design: Gozer,
docs,
}}
/>
</PageWrapper>
)
export default NewGozerPage
export async function getStaticProps({ locale }) {
return {
props: {
...(await serverSideTranslations(locale, ns)),
page: {
locale,
path: ['new', 'gozer'],
title: 'Gozer',
},
},
}
}

View file

@ -0,0 +1,41 @@
/*
* This page is auto-generated. Do not edit it by hand.
*/
import { Skully } from 'designs/skully/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('skully', wbNs, pageNs)
const NewSkullyPage = ({ page, docs }) => (
<PageWrapper {...page} title="Skully" layout={WorkbenchLayout} header={null}>
<Workbench
{...{
design: 'skully',
Design: Skully,
docs,
}}
/>
</PageWrapper>
)
export default NewSkullyPage
export async function getStaticProps({ locale }) {
return {
props: {
...(await serverSideTranslations(locale, ns)),
page: {
locale,
path: ['new', 'skully'],
title: 'Skully',
},
},
}
}

View file

@ -20,6 +20,7 @@ import { Cornelius as cornelius } from '@freesewing/cornelius'
import { Diana as diana } from '@freesewing/diana'
import { Florence as florence } from '@freesewing/florence'
import { Florent as florent } from '@freesewing/florent'
import { Gozer as gozer } from '@freesewing/gozer'
import { Hi as hi } from '@freesewing/hi'
import { Holmes as holmes } from '@freesewing/holmes'
import { Hortensia as hortensia } from '@freesewing/hortensia'
@ -70,6 +71,7 @@ const designs = {
diana,
florence,
florent,
gozer,
hi,
holmes,
hortensia,

View file

@ -36,8 +36,8 @@
"@tailwindcss/typography": "0.5.9",
"algoliasearch": "4.20.0",
"react-copy-to-clipboard": "5.1.0",
"daisyui": "3.9.2",
"echarts": "5.4.2",
"daisyui": "3.9.3",
"echarts": "5.4.3",
"echarts-for-react": "3.0.2",
"jotai": "2.4.3",
"jotai-location": "0.5.1",

View file

@ -0,0 +1,98 @@
/*
* This page is auto-generated. Do not edit it by hand.
*/
import { Gozer } from 'designs/gozer/src/index.mjs'
// Dependencies
import { serverSideTranslations } from 'next-i18next/serverSideTranslations'
import { nsMerge } 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('gozer', wbNs, pageNs)
const EditDesignComponent = ({ id, design, Design, settings, docs }) => (
<Workbench preload={{ settings }} saveAs={{ pattern: id }} {...{ design, Design, docs }} />
)
const EditGozerPage = ({ page, docs, id }) => {
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])
}
}
if (id) getPattern()
}, [id])
return (
// prettier-ignore
<PageWrapper {...page} title="Gozer" layout={pattern ? WorkbenchLayout : false} header={null}>
{pattern ? (
<EditDesignComponent
id={pattern.id}
settings={pattern.settings}
design="gozer"
Design={Gozer}
docs={docs}
/>
) : (
<div>
<h1>{t('account:oneMomentPLease')}</h1>
<Loading />
</div>
)}
</PageWrapper>
)
}
export default EditGozerPage
export async function getStaticProps({ locale, params }) {
return {
props: {
...(await serverSideTranslations(locale, ns)),
id: params.id,
page: {
locale,
path: ['account', 'patterns', 'gozer', params.id, 'edit'],
title: 'Gozer',
},
},
}
}
/*
* getStaticPaths() is used to specify for which routes (think URLs)
* this page should be used to generate the result.
*/
export async function getStaticPaths() {
return {
paths: [],
fallback: 'blocking',
}
}

View file

@ -0,0 +1,41 @@
/*
* This page is auto-generated. Do not edit it by hand.
*/
import { Gozer } from 'designs/gozer/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('gozer', wbNs, pageNs)
const NewGozerPage = ({ page, docs }) => (
<PageWrapper {...page} title="Gozer" layout={WorkbenchLayout} header={null}>
<Workbench
{...{
design: 'gozer',
Design: Gozer,
docs,
}}
/>
</PageWrapper>
)
export default NewGozerPage
export async function getStaticProps({ locale }) {
return {
props: {
...(await serverSideTranslations(locale, ns)),
page: {
locale,
path: ['new', 'gozer'],
title: 'Gozer',
},
},
}
}

View file

@ -48,7 +48,7 @@
"d3-dispatch": "3.0.1",
"d3-drag": "3.0.0",
"d3-selection": "3.0.0",
"daisyui": "3.9.2",
"daisyui": "3.9.3",
"file-saver": "2.0.5",
"i18next": "23.5.1",
"jotai": "2.4.3",
@ -59,8 +59,8 @@
"lodash.orderby": "4.6.0",
"lodash.set": "4.3.2",
"mustache": "4.2.0",
"next": "13.5.4",
"next-i18next": "14.0.0",
"next": "13.5.5",
"next-i18next": "14.0.3",
"pdfkit": "0.13.0",
"postcss-for": "2.1.1",
"react": "18.2.0",
@ -71,7 +71,7 @@
"react-dropzone": "14.2.3",
"react-swipeable": "7.0.1",
"react-timeago": "7.2.0",
"react-zoom-pan-pinch": "3.1.0",
"react-zoom-pan-pinch": "3.2.0",
"remark-gfm": "3.0.1",
"remark-frontmatter": "4.0.1",
"remark-mdx-frontmatter": "3.0.0",

View file

@ -21,6 +21,7 @@ import { i18n as diana } from '@freesewing/diana'
import { i18n as examples } from '@freesewing/examples'
import { i18n as florence } from '@freesewing/florence'
import { i18n as florent } from '@freesewing/florent'
import { i18n as gozer } from '@freesewing/gozer'
import { i18n as hi } from '@freesewing/hi'
import { i18n as holmes } from '@freesewing/holmes'
import { i18n as hortensia } from '@freesewing/hortensia'
@ -76,6 +77,7 @@ export const designs = {
examples,
florence,
florent,
gozer,
hi,
holmes,
hortensia,

View file

@ -23,7 +23,7 @@
"d3-dispatch": "3.0.1",
"d3-drag": "3.0.0",
"d3-selection": "3.0.0",
"daisyui": "3.9.2",
"daisyui": "3.9.3",
"feed": "4.2.2",
"file-saver": "2.0.5",
"front-matter": "4.0.2",
@ -44,7 +44,7 @@
"react": "18.2.0",
"react-dom": "18.2.0",
"react-timeago": "7.2.0",
"react-zoom-pan-pinch": "3.1.0",
"react-zoom-pan-pinch": "3.2.0",
"rehype-autolink-headings": "7.0.0",
"rehype-highlight": "7.0.0",
"remark-frontmatter": "4.0.1",

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1,3 +1,3 @@
// __SDEFILE__ - This file is a dependency for the stand-alone environment
// This file is auto-generated by the prebuild script | Any changes will be overwritten
export const designs = ["aaron","albert","bee","bella","benjamin","bent","bob","breanna","brian","bruce","carlita","carlton","cathrin","charlie","cornelius","diana","examples","florence","florent","hi","holmes","hortensia","huey","hugo","jaeger","legend","lucy","lunetius","magde","noble","octoplushy","paco","penelope","plugintest","rendertest","sandy","shelly","shin","simon","simone","skully","sven","tamiko","teagan","tiberius","titan","trayvon","uma","wahid","walburga","waralee","yuri","otis"]
export const designs = ["aaron","albert","bee","bella","benjamin","bent","bob","breanna","brian","bruce","carlita","carlton","cathrin","charlie","cornelius","diana","examples","florence","florent","gozer","hi","holmes","hortensia","huey","hugo","jaeger","legend","lucy","lunetius","magde","noble","octoplushy","paco","penelope","plugintest","rendertest","sandy","shelly","shin","simon","simone","skully","sven","tamiko","teagan","tiberius","titan","trayvon","uma","wahid","walburga","waralee","yuri","otis"]

511
yarn.lock
View file

@ -197,35 +197,35 @@
"@aws-sdk/util-utf8-browser" "^3.0.0"
tslib "^1.11.1"
"@aws-sdk/client-sesv2@3.429.0":
version "3.429.0"
resolved "https://registry.yarnpkg.com/@aws-sdk/client-sesv2/-/client-sesv2-3.429.0.tgz#c637e7c820e929568545dee9320b71f0c561199b"
integrity sha512-NIK5DWFK7XlOnynMxbJ2XAnXVeUd+Hak4dfrVGxprtu3piYC9QcXtDNpiZH2PD1QZlFv44r4Hq1Oi7vcrTw3cw==
"@aws-sdk/client-sesv2@3.430.0":
version "3.430.0"
resolved "https://registry.yarnpkg.com/@aws-sdk/client-sesv2/-/client-sesv2-3.430.0.tgz#35966fa6b356978926c3cbd2472c3798c1971654"
integrity sha512-KRFZZCsR+AcIjj0cwVjexi6TOkLhEI6ejC7kpgh8d9fN3p08FkdeipP6o+u73whDY9sB2S7gc+7hkbkeYemTAw==
dependencies:
"@aws-crypto/sha256-browser" "3.0.0"
"@aws-crypto/sha256-js" "3.0.0"
"@aws-sdk/client-sts" "3.429.0"
"@aws-sdk/credential-provider-node" "3.429.0"
"@aws-sdk/client-sts" "3.430.0"
"@aws-sdk/credential-provider-node" "3.430.0"
"@aws-sdk/middleware-host-header" "3.429.0"
"@aws-sdk/middleware-logger" "3.428.0"
"@aws-sdk/middleware-recursion-detection" "3.428.0"
"@aws-sdk/middleware-signing" "3.428.0"
"@aws-sdk/middleware-user-agent" "3.428.0"
"@aws-sdk/region-config-resolver" "3.428.0"
"@aws-sdk/region-config-resolver" "3.430.0"
"@aws-sdk/types" "3.428.0"
"@aws-sdk/util-endpoints" "3.428.0"
"@aws-sdk/util-user-agent-browser" "3.428.0"
"@aws-sdk/util-user-agent-node" "3.428.0"
"@smithy/config-resolver" "^2.0.14"
"@aws-sdk/util-user-agent-node" "3.430.0"
"@smithy/config-resolver" "^2.0.15"
"@smithy/fetch-http-handler" "^2.2.3"
"@smithy/hash-node" "^2.0.11"
"@smithy/invalid-dependency" "^2.0.11"
"@smithy/middleware-content-length" "^2.0.13"
"@smithy/middleware-endpoint" "^2.1.1"
"@smithy/middleware-retry" "^2.0.16"
"@smithy/middleware-endpoint" "^2.1.2"
"@smithy/middleware-retry" "^2.0.17"
"@smithy/middleware-serde" "^2.0.11"
"@smithy/middleware-stack" "^2.0.5"
"@smithy/node-config-provider" "^2.1.1"
"@smithy/node-config-provider" "^2.1.2"
"@smithy/node-http-handler" "^2.1.7"
"@smithy/protocol-http" "^3.0.7"
"@smithy/smithy-client" "^2.1.11"
@ -235,15 +235,15 @@
"@smithy/util-body-length-browser" "^2.0.0"
"@smithy/util-body-length-node" "^2.1.0"
"@smithy/util-defaults-mode-browser" "^2.0.15"
"@smithy/util-defaults-mode-node" "^2.0.19"
"@smithy/util-defaults-mode-node" "^2.0.20"
"@smithy/util-retry" "^2.0.4"
"@smithy/util-utf8" "^2.0.0"
tslib "^2.5.0"
"@aws-sdk/client-sso@3.429.0":
version "3.429.0"
resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.429.0.tgz#756e47451621476a01b7b0a860a0479fb242c2b8"
integrity sha512-Bz802NpXUrFI1KB9uu1GwCbmi0xpw+GY6+TIyaGTXbGQjg4fYOJQLUtMxmb1c1/qUTZX/x5qetF3QBwgpBbLug==
"@aws-sdk/client-sso@3.430.0":
version "3.430.0"
resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.430.0.tgz#0ae8371a89ea1bed02c4927d73eeded5962af581"
integrity sha512-NxQJkTZCgl6LpdY12MCwsqGned6Ax19WsTCGLEiA/tsNE4vNrYLHHBR317G0sGWbIUQuhwsoM7wIrqJO7CacuQ==
dependencies:
"@aws-crypto/sha256-browser" "3.0.0"
"@aws-crypto/sha256-js" "3.0.0"
@ -251,21 +251,21 @@
"@aws-sdk/middleware-logger" "3.428.0"
"@aws-sdk/middleware-recursion-detection" "3.428.0"
"@aws-sdk/middleware-user-agent" "3.428.0"
"@aws-sdk/region-config-resolver" "3.428.0"
"@aws-sdk/region-config-resolver" "3.430.0"
"@aws-sdk/types" "3.428.0"
"@aws-sdk/util-endpoints" "3.428.0"
"@aws-sdk/util-user-agent-browser" "3.428.0"
"@aws-sdk/util-user-agent-node" "3.428.0"
"@smithy/config-resolver" "^2.0.14"
"@aws-sdk/util-user-agent-node" "3.430.0"
"@smithy/config-resolver" "^2.0.15"
"@smithy/fetch-http-handler" "^2.2.3"
"@smithy/hash-node" "^2.0.11"
"@smithy/invalid-dependency" "^2.0.11"
"@smithy/middleware-content-length" "^2.0.13"
"@smithy/middleware-endpoint" "^2.1.1"
"@smithy/middleware-retry" "^2.0.16"
"@smithy/middleware-endpoint" "^2.1.2"
"@smithy/middleware-retry" "^2.0.17"
"@smithy/middleware-serde" "^2.0.11"
"@smithy/middleware-stack" "^2.0.5"
"@smithy/node-config-provider" "^2.1.1"
"@smithy/node-config-provider" "^2.1.2"
"@smithy/node-http-handler" "^2.1.7"
"@smithy/protocol-http" "^3.0.7"
"@smithy/smithy-client" "^2.1.11"
@ -275,40 +275,40 @@
"@smithy/util-body-length-browser" "^2.0.0"
"@smithy/util-body-length-node" "^2.1.0"
"@smithy/util-defaults-mode-browser" "^2.0.15"
"@smithy/util-defaults-mode-node" "^2.0.19"
"@smithy/util-defaults-mode-node" "^2.0.20"
"@smithy/util-retry" "^2.0.4"
"@smithy/util-utf8" "^2.0.0"
tslib "^2.5.0"
"@aws-sdk/client-sts@3.429.0":
version "3.429.0"
resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.429.0.tgz#fa248b2ade0cd4354540b30a381643ca502318fc"
integrity sha512-yNRYHXqGIYjEGlpaIll9zJDsVOQWjwbvR2zfTpUwEtN4I17k/psjLAsznfTbq/4tEftkpAJ2pNsVrkHUOmCewA==
"@aws-sdk/client-sts@3.430.0":
version "3.430.0"
resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.430.0.tgz#cd906fb14cc5aeb5eeb38bd2de28c6ca9febedb6"
integrity sha512-njUY3QeZH0CG+tG/6jhoG+Zr7rI1aGoVkZi3l6woKTz57hIlkwu2jQlLbJujm7PKrLhPaN5+4AqBQuHFVgMobw==
dependencies:
"@aws-crypto/sha256-browser" "3.0.0"
"@aws-crypto/sha256-js" "3.0.0"
"@aws-sdk/credential-provider-node" "3.429.0"
"@aws-sdk/credential-provider-node" "3.430.0"
"@aws-sdk/middleware-host-header" "3.429.0"
"@aws-sdk/middleware-logger" "3.428.0"
"@aws-sdk/middleware-recursion-detection" "3.428.0"
"@aws-sdk/middleware-sdk-sts" "3.428.0"
"@aws-sdk/middleware-signing" "3.428.0"
"@aws-sdk/middleware-user-agent" "3.428.0"
"@aws-sdk/region-config-resolver" "3.428.0"
"@aws-sdk/region-config-resolver" "3.430.0"
"@aws-sdk/types" "3.428.0"
"@aws-sdk/util-endpoints" "3.428.0"
"@aws-sdk/util-user-agent-browser" "3.428.0"
"@aws-sdk/util-user-agent-node" "3.428.0"
"@smithy/config-resolver" "^2.0.14"
"@aws-sdk/util-user-agent-node" "3.430.0"
"@smithy/config-resolver" "^2.0.15"
"@smithy/fetch-http-handler" "^2.2.3"
"@smithy/hash-node" "^2.0.11"
"@smithy/invalid-dependency" "^2.0.11"
"@smithy/middleware-content-length" "^2.0.13"
"@smithy/middleware-endpoint" "^2.1.1"
"@smithy/middleware-retry" "^2.0.16"
"@smithy/middleware-endpoint" "^2.1.2"
"@smithy/middleware-retry" "^2.0.17"
"@smithy/middleware-serde" "^2.0.11"
"@smithy/middleware-stack" "^2.0.5"
"@smithy/node-config-provider" "^2.1.1"
"@smithy/node-config-provider" "^2.1.2"
"@smithy/node-http-handler" "^2.1.7"
"@smithy/protocol-http" "^3.0.7"
"@smithy/smithy-client" "^2.1.11"
@ -318,7 +318,7 @@
"@smithy/util-body-length-browser" "^2.0.0"
"@smithy/util-body-length-node" "^2.1.0"
"@smithy/util-defaults-mode-browser" "^2.0.15"
"@smithy/util-defaults-mode-node" "^2.0.19"
"@smithy/util-defaults-mode-node" "^2.0.20"
"@smithy/util-retry" "^2.0.4"
"@smithy/util-utf8" "^2.0.0"
fast-xml-parser "4.2.5"
@ -334,14 +334,14 @@
"@smithy/types" "^2.3.5"
tslib "^2.5.0"
"@aws-sdk/credential-provider-ini@3.429.0":
version "3.429.0"
resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.429.0.tgz#436887f1fee1a3dc4ab35924a07cbf020f74f3bd"
integrity sha512-rG1ecwU/8KojyXsx80tK/b+DDGqSbReakOm/db5fx2RzVnkAGdH9fvPNrhjjHZ1wGbPrUtXGmHGXP3eqnylazg==
"@aws-sdk/credential-provider-ini@3.430.0":
version "3.430.0"
resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.430.0.tgz#003ba7475aa7eadecd0d7701437a90b1dadeca5a"
integrity sha512-m3NcmDyVYr/w8RV9kMArrA/0982aXMsvoSXi4wFVbgg/T5hO+6i5CY7fB/0xpKIuEJ+rw63rYNnBzLwwW48kWg==
dependencies:
"@aws-sdk/credential-provider-env" "3.428.0"
"@aws-sdk/credential-provider-process" "3.428.0"
"@aws-sdk/credential-provider-sso" "3.429.0"
"@aws-sdk/credential-provider-sso" "3.430.0"
"@aws-sdk/credential-provider-web-identity" "3.428.0"
"@aws-sdk/types" "3.428.0"
"@smithy/credential-provider-imds" "^2.0.0"
@ -350,15 +350,15 @@
"@smithy/types" "^2.3.5"
tslib "^2.5.0"
"@aws-sdk/credential-provider-node@3.429.0":
version "3.429.0"
resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.429.0.tgz#801bfa9367470f551c1a4aa9d2686acafd8b54c6"
integrity sha512-XaXCIeF8UWAvqzXX/UaBQhICjyIjRksjuP0xMW+A23Nu4yPjYufuHL9AR4i6MVYEKP3inXHGAS7N0t35A8acOw==
"@aws-sdk/credential-provider-node@3.430.0":
version "3.430.0"
resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.430.0.tgz#9f4fcac99b05753f06574add3e1509bed15b523c"
integrity sha512-ItOHJcqOhpI0QM+aho5uMrk2ZP34hsdisMHxd8/6FT41U8TOe9kQKaZ2l2AsVf4QuM6RJe2LangcVGGstCf8Sw==
dependencies:
"@aws-sdk/credential-provider-env" "3.428.0"
"@aws-sdk/credential-provider-ini" "3.429.0"
"@aws-sdk/credential-provider-ini" "3.430.0"
"@aws-sdk/credential-provider-process" "3.428.0"
"@aws-sdk/credential-provider-sso" "3.429.0"
"@aws-sdk/credential-provider-sso" "3.430.0"
"@aws-sdk/credential-provider-web-identity" "3.428.0"
"@aws-sdk/types" "3.428.0"
"@smithy/credential-provider-imds" "^2.0.0"
@ -378,13 +378,13 @@
"@smithy/types" "^2.3.5"
tslib "^2.5.0"
"@aws-sdk/credential-provider-sso@3.429.0":
version "3.429.0"
resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.429.0.tgz#4251950cdddb30722e7222c2ad09646608ec6bea"
integrity sha512-Nx3/18ZxV/trGz3HAQD6eGxO5Goqx3U5YR+CJsWPBh+4Jwkoo+HC5cyxq6cJIcZ5n75Wc4kPt7Im4ffVjTaJIg==
"@aws-sdk/credential-provider-sso@3.430.0":
version "3.430.0"
resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.430.0.tgz#9693dd6b85ffec2b8d05a9574957f4204308534e"
integrity sha512-6de/aH9OFI+Ah7hL4alrZFqiNw5D6F+R92tLbIpFRQg7DxO/TuQTTtK94mLkft/AP/mGzVVBENjsyS1nJt166w==
dependencies:
"@aws-sdk/client-sso" "3.429.0"
"@aws-sdk/token-providers" "3.429.0"
"@aws-sdk/client-sso" "3.430.0"
"@aws-sdk/token-providers" "3.430.0"
"@aws-sdk/types" "3.428.0"
"@smithy/property-provider" "^2.0.0"
"@smithy/shared-ini-file-loader" "^2.0.6"
@ -464,21 +464,21 @@
"@smithy/types" "^2.3.5"
tslib "^2.5.0"
"@aws-sdk/region-config-resolver@3.428.0":
version "3.428.0"
resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.428.0.tgz#c275998078cbd784febd212e987e546905efafc7"
integrity sha512-VqyHZ/Hoz3WrXXMx8cAhFBl8IpjodbRsTjBI117QPq1YRCegxNdGvqmGZnJj8N2Ef9MP1iU30ZWQB+sviDcogA==
"@aws-sdk/region-config-resolver@3.430.0":
version "3.430.0"
resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.430.0.tgz#c7fe238e9771da91bafe7016afda21305a661473"
integrity sha512-9lqgtkcd4dqsQ2yN6V/i06blyDh4yLmS+fAS7LwEZih/NZZ2cBIR+5kb9c236auvTcuMcL1zFxVRloWwesYZjA==
dependencies:
"@smithy/node-config-provider" "^2.1.1"
"@smithy/node-config-provider" "^2.1.2"
"@smithy/types" "^2.3.5"
"@smithy/util-config-provider" "^2.0.0"
"@smithy/util-middleware" "^2.0.4"
tslib "^2.5.0"
"@aws-sdk/token-providers@3.429.0":
version "3.429.0"
resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.429.0.tgz#e952cfe55276ed75aa41f378a66341a2cfecb65e"
integrity sha512-1Lp5XW/aSHekMURfcoxhWR2ig0UlesD0wC1kcdrkhZGCPtvCE0VzMqgTmYkwtPKOWfRQf0qfu468ohBHBmzHdA==
"@aws-sdk/token-providers@3.430.0":
version "3.430.0"
resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.430.0.tgz#f5d20454c62ff65e5981d35b5a9b7660263bcc06"
integrity sha512-vE+QnqG0A4MWhMEFXXPg8gPXjw03b4Q3XZbHyrANoZ+tVrzh8JhpHIcbkesGh6WrjirNqId0UghzI9VanKxsLw==
dependencies:
"@aws-crypto/sha256-browser" "3.0.0"
"@aws-crypto/sha256-js" "3.0.0"
@ -489,17 +489,17 @@
"@aws-sdk/types" "3.428.0"
"@aws-sdk/util-endpoints" "3.428.0"
"@aws-sdk/util-user-agent-browser" "3.428.0"
"@aws-sdk/util-user-agent-node" "3.428.0"
"@smithy/config-resolver" "^2.0.14"
"@aws-sdk/util-user-agent-node" "3.430.0"
"@smithy/config-resolver" "^2.0.15"
"@smithy/fetch-http-handler" "^2.2.3"
"@smithy/hash-node" "^2.0.11"
"@smithy/invalid-dependency" "^2.0.11"
"@smithy/middleware-content-length" "^2.0.13"
"@smithy/middleware-endpoint" "^2.1.1"
"@smithy/middleware-retry" "^2.0.16"
"@smithy/middleware-endpoint" "^2.1.2"
"@smithy/middleware-retry" "^2.0.17"
"@smithy/middleware-serde" "^2.0.11"
"@smithy/middleware-stack" "^2.0.5"
"@smithy/node-config-provider" "^2.1.1"
"@smithy/node-config-provider" "^2.1.2"
"@smithy/node-http-handler" "^2.1.7"
"@smithy/property-provider" "^2.0.0"
"@smithy/protocol-http" "^3.0.7"
@ -511,7 +511,7 @@
"@smithy/util-body-length-browser" "^2.0.0"
"@smithy/util-body-length-node" "^2.1.0"
"@smithy/util-defaults-mode-browser" "^2.0.15"
"@smithy/util-defaults-mode-node" "^2.0.19"
"@smithy/util-defaults-mode-node" "^2.0.20"
"@smithy/util-retry" "^2.0.4"
"@smithy/util-utf8" "^2.0.0"
tslib "^2.5.0"
@ -549,13 +549,13 @@
bowser "^2.11.0"
tslib "^2.5.0"
"@aws-sdk/util-user-agent-node@3.428.0":
version "3.428.0"
resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.428.0.tgz#3966016d3592f0ccff4b0123c3b223e1e231279a"
integrity sha512-s721C3H8TkNd0usWLPEAy7yW2lEglR8QAYojdQGzE0e0wymc671nZAFePSZFRtmqZiFOSfk0R602L5fDbP3a8Q==
"@aws-sdk/util-user-agent-node@3.430.0":
version "3.430.0"
resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.430.0.tgz#efa200f7c21182d769b424ba4fff569857ff42f4"
integrity sha512-DPpFPL3mFMPtipFxjY7TKQBjnhmsPzYCr4Y+qna0oR6ij8jZOz2ILQDK33GxTRNh3+bV9YYbx+ZGDOnxoK5Mhw==
dependencies:
"@aws-sdk/types" "3.428.0"
"@smithy/node-config-provider" "^2.1.1"
"@smithy/node-config-provider" "^2.1.2"
"@smithy/types" "^2.3.5"
tslib "^2.5.0"
@ -896,13 +896,13 @@
integrity sha512-htzFO1Zc57S8kgdRK9mLcPVTW1BY2ijfH7Dk2CeZmspTWKdKqSo1iwmqrq2WtRjFlo8aRZYgLX0wFrDXF/9DLA==
"@commitlint/cli@^17.0.2":
version "17.7.2"
resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-17.7.2.tgz#3a0287373224db14968ab160b2b4988c693d3400"
integrity sha512-t3N7TZq7lOeqTOyEgfGcaltHqEJf7YDlPg75MldeVPPyz14jZq/+mbGF9tueDLFX8R6RwdymrN6D+U5XwZ8Iwg==
version "17.8.0"
resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-17.8.0.tgz#917761331df4b7a0b97b2b31415b006847b6fd02"
integrity sha512-D3LdyZYbiRyAChfJMNlAd9f2P9vNQ7GWbI9gN2o7L5hF07QJDqj4z/pcJF3PjDbJWOaUUXla287RdDmmKqH2WQ==
dependencies:
"@commitlint/format" "^17.4.4"
"@commitlint/lint" "^17.7.0"
"@commitlint/load" "^17.7.2"
"@commitlint/lint" "^17.8.0"
"@commitlint/load" "^17.8.0"
"@commitlint/read" "^17.5.1"
"@commitlint/types" "^17.4.4"
execa "^5.0.0"
@ -951,28 +951,28 @@
"@commitlint/types" "^17.4.4"
chalk "^4.1.0"
"@commitlint/is-ignored@^17.7.0":
version "17.7.0"
resolved "https://registry.yarnpkg.com/@commitlint/is-ignored/-/is-ignored-17.7.0.tgz#df9b284420bdb1aed5fdb2be44f4e98cc4826014"
integrity sha512-043rA7m45tyEfW7Zv2vZHF++176MLHH9h70fnPoYlB1slKBeKl8BwNIlnPg4xBdRBVNPaCqvXxWswx2GR4c9Hw==
"@commitlint/is-ignored@^17.8.0":
version "17.8.0"
resolved "https://registry.yarnpkg.com/@commitlint/is-ignored/-/is-ignored-17.8.0.tgz#429a050cebe8dc56dd4fe4f4c23ea9e1a679dfc6"
integrity sha512-8bR6rxNcWaNprPBdE4ePIOwbxutTQGOsRPYWssX+zjGxnEljzaZSGzFUOMxapYILlf8Tts/O1wPQgG549Rdvdg==
dependencies:
"@commitlint/types" "^17.4.4"
semver "7.5.4"
"@commitlint/lint@^17.7.0":
version "17.7.0"
resolved "https://registry.yarnpkg.com/@commitlint/lint/-/lint-17.7.0.tgz#33f831298dc43679e4de6b088aea63d1f884c7e7"
integrity sha512-TCQihm7/uszA5z1Ux1vw+Nf3yHTgicus/+9HiUQk+kRSQawByxZNESeQoX9ujfVd3r4Sa+3fn0JQAguG4xvvbA==
"@commitlint/lint@^17.8.0":
version "17.8.0"
resolved "https://registry.yarnpkg.com/@commitlint/lint/-/lint-17.8.0.tgz#d3a7fafe810db060aea15322e30384896da887f9"
integrity sha512-4ihwnqOY4TcJN6iz5Jv1LeYavvBllONwFyGxOIWmCT5s4PNMb43cws2TUdbXTZL1Vq59etGKd5LWYDFPVbs5EA==
dependencies:
"@commitlint/is-ignored" "^17.7.0"
"@commitlint/is-ignored" "^17.8.0"
"@commitlint/parse" "^17.7.0"
"@commitlint/rules" "^17.7.0"
"@commitlint/types" "^17.4.4"
"@commitlint/load@^17.7.2":
version "17.7.2"
resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-17.7.2.tgz#85730900a501c50f0bc890bb50e4a2167ee3085a"
integrity sha512-XA7WTnsjHZ4YH6ZYsrnxgLdXzriwMMq+utZUET6spbOEEIPBCDLdOQXS26P+v3TTO4hUHOEhzUquaBv3jbBixw==
"@commitlint/load@^17.8.0":
version "17.8.0"
resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-17.8.0.tgz#82f6c7555daecb4ce4b8a6282fcecc3665747578"
integrity sha512-9VnGXYJCP4tXmR4YrwP8n5oX6T5ZsHfPQq6WuUQOvAI+QsDQMaTGgTRXr7us+xsjz+b+mMBSagogqfUx2aixyw==
dependencies:
"@commitlint/config-validator" "^17.6.7"
"@commitlint/execute-rule" "^17.4.0"
@ -1063,115 +1063,115 @@
dependencies:
"@jridgewell/trace-mapping" "0.3.9"
"@esbuild/android-arm64@0.19.4":
version "0.19.4"
resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.4.tgz#74752a09301b8c6b9a415fbda9fb71406a62a7b7"
integrity sha512-mRsi2vJsk4Bx/AFsNBqOH2fqedxn5L/moT58xgg51DjX1la64Z3Npicut2VbhvDFO26qjWtPMsVxCd80YTFVeg==
"@esbuild/android-arm64@0.19.5":
version "0.19.5"
resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.5.tgz#276c5f99604054d3dbb733577e09adae944baa90"
integrity sha512-5d1OkoJxnYQfmC+Zd8NBFjkhyCNYwM4n9ODrycTFY6Jk1IGiZ+tjVJDDSwDt77nK+tfpGP4T50iMtVi4dEGzhQ==
"@esbuild/android-arm@0.19.4":
version "0.19.4"
resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.4.tgz#c27363e1e280e577d9b5c8fa7c7a3be2a8d79bf5"
integrity sha512-uBIbiYMeSsy2U0XQoOGVVcpIktjLMEKa7ryz2RLr7L/vTnANNEsPVAh4xOv7ondGz6ac1zVb0F8Jx20rQikffQ==
"@esbuild/android-arm@0.19.5":
version "0.19.5"
resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.5.tgz#4a3cbf14758166abaae8ba9c01a80e68342a4eec"
integrity sha512-bhvbzWFF3CwMs5tbjf3ObfGqbl/17ict2/uwOSfr3wmxDE6VdS2GqY/FuzIPe0q0bdhj65zQsvqfArI9MY6+AA==
"@esbuild/android-x64@0.19.4":
version "0.19.4"
resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.4.tgz#6c9ee03d1488973d928618100048b75b147e0426"
integrity sha512-4iPufZ1TMOD3oBlGFqHXBpa3KFT46aLl6Vy7gwed0ZSYgHaZ/mihbYb4t7Z9etjkC9Al3ZYIoOaHrU60gcMy7g==
"@esbuild/android-x64@0.19.5":
version "0.19.5"
resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.5.tgz#21a3d11cd4613d2d3c5ccb9e746c254eb9265b0a"
integrity sha512-9t+28jHGL7uBdkBjL90QFxe7DVA+KGqWlHCF8ChTKyaKO//VLuoBricQCgwhOjA1/qOczsw843Fy4cbs4H3DVA==
"@esbuild/darwin-arm64@0.19.4":
version "0.19.4"
resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.4.tgz#64e2ee945e5932cd49812caa80e8896e937e2f8b"
integrity sha512-Lviw8EzxsVQKpbS+rSt6/6zjn9ashUZ7Tbuvc2YENgRl0yZTktGlachZ9KMJUsVjZEGFVu336kl5lBgDN6PmpA==
"@esbuild/darwin-arm64@0.19.5":
version "0.19.5"
resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.5.tgz#714cb839f467d6a67b151ee8255886498e2b9bf6"
integrity sha512-mvXGcKqqIqyKoxq26qEDPHJuBYUA5KizJncKOAf9eJQez+L9O+KfvNFu6nl7SCZ/gFb2QPaRqqmG0doSWlgkqw==
"@esbuild/darwin-x64@0.19.4":
version "0.19.4"
resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.4.tgz#d8e26e1b965df284692e4d1263ba69a49b39ac7a"
integrity sha512-YHbSFlLgDwglFn0lAO3Zsdrife9jcQXQhgRp77YiTDja23FrC2uwnhXMNkAucthsf+Psr7sTwYEryxz6FPAVqw==
"@esbuild/darwin-x64@0.19.5":
version "0.19.5"
resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.5.tgz#2c553e97a6d2b4ae76a884e35e6cbab85a990bbf"
integrity sha512-Ly8cn6fGLNet19s0X4unjcniX24I0RqjPv+kurpXabZYSXGM4Pwpmf85WHJN3lAgB8GSth7s5A0r856S+4DyiA==
"@esbuild/freebsd-arm64@0.19.4":
version "0.19.4"
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.4.tgz#29751a41b242e0a456d89713b228f1da4f45582f"
integrity sha512-vz59ijyrTG22Hshaj620e5yhs2dU1WJy723ofc+KUgxVCM6zxQESmWdMuVmUzxtGqtj5heHyB44PjV/HKsEmuQ==
"@esbuild/freebsd-arm64@0.19.5":
version "0.19.5"
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.5.tgz#d554f556718adb31917a0da24277bf84b6ee87f3"
integrity sha512-GGDNnPWTmWE+DMchq1W8Sd0mUkL+APvJg3b11klSGUDvRXh70JqLAO56tubmq1s2cgpVCSKYywEiKBfju8JztQ==
"@esbuild/freebsd-x64@0.19.4":
version "0.19.4"
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.4.tgz#873edc0f73e83a82432460ea59bf568c1e90b268"
integrity sha512-3sRbQ6W5kAiVQRBWREGJNd1YE7OgzS0AmOGjDmX/qZZecq8NFlQsQH0IfXjjmD0XtUYqr64e0EKNFjMUlPL3Cw==
"@esbuild/freebsd-x64@0.19.5":
version "0.19.5"
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.5.tgz#288f7358a3bb15d99e73c65c9adaa3dabb497432"
integrity sha512-1CCwDHnSSoA0HNwdfoNY0jLfJpd7ygaLAp5EHFos3VWJCRX9DMwWODf96s9TSse39Br7oOTLryRVmBoFwXbuuQ==
"@esbuild/linux-arm64@0.19.4":
version "0.19.4"
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.4.tgz#659f2fa988d448dbf5010b5cc583be757cc1b914"
integrity sha512-ZWmWORaPbsPwmyu7eIEATFlaqm0QGt+joRE9sKcnVUG3oBbr/KYdNE2TnkzdQwX6EDRdg/x8Q4EZQTXoClUqqA==
"@esbuild/linux-arm64@0.19.5":
version "0.19.5"
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.5.tgz#95933ae86325c93cb6b5e8333d22120ecfdc901b"
integrity sha512-o3vYippBmSrjjQUCEEiTZ2l+4yC0pVJD/Dl57WfPwwlvFkrxoSO7rmBZFii6kQB3Wrn/6GwJUPLU5t52eq2meA==
"@esbuild/linux-arm@0.19.4":
version "0.19.4"
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.4.tgz#d5b13a7ec1f1c655ce05c8d319b3950797baee55"
integrity sha512-z/4ArqOo9EImzTi4b6Vq+pthLnepFzJ92BnofU1jgNlcVb+UqynVFdoXMCFreTK7FdhqAzH0vmdwW5373Hm9pg==
"@esbuild/linux-arm@0.19.5":
version "0.19.5"
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.5.tgz#0acef93aa3e0579e46d33b666627bddb06636664"
integrity sha512-lrWXLY/vJBzCPC51QN0HM71uWgIEpGSjSZZADQhq7DKhPcI6NH1IdzjfHkDQws2oNpJKpR13kv7/pFHBbDQDwQ==
"@esbuild/linux-ia32@0.19.4":
version "0.19.4"
resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.4.tgz#878cd8bf24c9847c77acdb5dd1b2ef6e4fa27a82"
integrity sha512-EGc4vYM7i1GRUIMqRZNCTzJh25MHePYsnQfKDexD8uPTCm9mK56NIL04LUfX2aaJ+C9vyEp2fJ7jbqFEYgO9lQ==
"@esbuild/linux-ia32@0.19.5":
version "0.19.5"
resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.5.tgz#b6e5c9e80b42131cbd6b1ddaa48c92835f1ed67f"
integrity sha512-MkjHXS03AXAkNp1KKkhSKPOCYztRtK+KXDNkBa6P78F8Bw0ynknCSClO/ztGszILZtyO/lVKpa7MolbBZ6oJtQ==
"@esbuild/linux-loong64@0.19.4":
version "0.19.4"
resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.4.tgz#df890499f6e566b7de3aa2361be6df2b8d5fa015"
integrity sha512-WVhIKO26kmm8lPmNrUikxSpXcgd6HDog0cx12BUfA2PkmURHSgx9G6vA19lrlQOMw+UjMZ+l3PpbtzffCxFDRg==
"@esbuild/linux-loong64@0.19.5":
version "0.19.5"
resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.5.tgz#e5f0cf95a180158b01ff5f417da796a1c09dfbea"
integrity sha512-42GwZMm5oYOD/JHqHska3Jg0r+XFb/fdZRX+WjADm3nLWLcIsN27YKtqxzQmGNJgu0AyXg4HtcSK9HuOk3v1Dw==
"@esbuild/linux-mips64el@0.19.4":
version "0.19.4"
resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.4.tgz#76eae4e88d2ce9f4f1b457e93892e802851b6807"
integrity sha512-keYY+Hlj5w86hNp5JJPuZNbvW4jql7c1eXdBUHIJGTeN/+0QFutU3GrS+c27L+NTmzi73yhtojHk+lr2+502Mw==
"@esbuild/linux-mips64el@0.19.5":
version "0.19.5"
resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.5.tgz#ae36fb86c7d5f641f3a0c8472e83dcb6ea36a408"
integrity sha512-kcjndCSMitUuPJobWCnwQ9lLjiLZUR3QLQmlgaBfMX23UEa7ZOrtufnRds+6WZtIS9HdTXqND4yH8NLoVVIkcg==
"@esbuild/linux-ppc64@0.19.4":
version "0.19.4"
resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.4.tgz#c49032f4abbcfa3f747b543a106931fe3dce41ff"
integrity sha512-tQ92n0WMXyEsCH4m32S21fND8VxNiVazUbU4IUGVXQpWiaAxOBvtOtbEt3cXIV3GEBydYsY8pyeRMJx9kn3rvw==
"@esbuild/linux-ppc64@0.19.5":
version "0.19.5"
resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.5.tgz#7960cb1666f0340ddd9eef7b26dcea3835d472d0"
integrity sha512-yJAxJfHVm0ZbsiljbtFFP1BQKLc8kUF6+17tjQ78QjqjAQDnhULWiTA6u0FCDmYT1oOKS9PzZ2z0aBI+Mcyj7Q==
"@esbuild/linux-riscv64@0.19.4":
version "0.19.4"
resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.4.tgz#0f815a090772138503ee0465a747e16865bf94b1"
integrity sha512-tRRBey6fG9tqGH6V75xH3lFPpj9E8BH+N+zjSUCnFOX93kEzqS0WdyJHkta/mmJHn7MBaa++9P4ARiU4ykjhig==
"@esbuild/linux-riscv64@0.19.5":
version "0.19.5"
resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.5.tgz#32207df26af60a3a9feea1783fc21b9817bade19"
integrity sha512-5u8cIR/t3gaD6ad3wNt1MNRstAZO+aNyBxu2We8X31bA8XUNyamTVQwLDA1SLoPCUehNCymhBhK3Qim1433Zag==
"@esbuild/linux-s390x@0.19.4":
version "0.19.4"
resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.4.tgz#8d2cca20cd4e7c311fde8701d9f1042664f8b92b"
integrity sha512-152aLpQqKZYhThiJ+uAM4PcuLCAOxDsCekIbnGzPKVBRUDlgaaAfaUl5NYkB1hgY6WN4sPkejxKlANgVcGl9Qg==
"@esbuild/linux-s390x@0.19.5":
version "0.19.5"
resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.5.tgz#b38d5681db89a3723862dfa792812397b1510a7d"
integrity sha512-Z6JrMyEw/EmZBD/OFEFpb+gao9xJ59ATsoTNlj39jVBbXqoZm4Xntu6wVmGPB/OATi1uk/DB+yeDPv2E8PqZGw==
"@esbuild/linux-x64@0.19.4":
version "0.19.4"
resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.4.tgz#f618bec2655de49bff91c588777e37b5e3169d4a"
integrity sha512-Mi4aNA3rz1BNFtB7aGadMD0MavmzuuXNTaYL6/uiYIs08U7YMPETpgNn5oue3ICr+inKwItOwSsJDYkrE9ekVg==
"@esbuild/linux-x64@0.19.5":
version "0.19.5"
resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.5.tgz#46feba2ad041a241379d150f415b472fe3885075"
integrity sha512-psagl+2RlK1z8zWZOmVdImisMtrUxvwereIdyJTmtmHahJTKb64pAcqoPlx6CewPdvGvUKe2Jw+0Z/0qhSbG1A==
"@esbuild/netbsd-x64@0.19.4":
version "0.19.4"
resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.4.tgz#7889744ca4d60f1538d62382b95e90a49687cef2"
integrity sha512-9+Wxx1i5N/CYo505CTT7T+ix4lVzEdz0uCoYGxM5JDVlP2YdDC1Bdz+Khv6IbqmisT0Si928eAxbmGkcbiuM/A==
"@esbuild/netbsd-x64@0.19.5":
version "0.19.5"
resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.5.tgz#3b5c1fb068f26bfc681d31f682adf1bea4ef0702"
integrity sha512-kL2l+xScnAy/E/3119OggX8SrWyBEcqAh8aOY1gr4gPvw76la2GlD4Ymf832UCVbmuWeTf2adkZDK+h0Z/fB4g==
"@esbuild/openbsd-x64@0.19.4":
version "0.19.4"
resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.4.tgz#c3e436eb9271a423d2e8436fcb120e3fd90e2b01"
integrity sha512-MFsHleM5/rWRW9EivFssop+OulYVUoVcqkyOkjiynKBCGBj9Lihl7kh9IzrreDyXa4sNkquei5/DTP4uCk25xw==
"@esbuild/openbsd-x64@0.19.5":
version "0.19.5"
resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.5.tgz#ca6830316ca68056c5c88a875f103ad3235e00db"
integrity sha512-sPOfhtzFufQfTBgRnE1DIJjzsXukKSvZxloZbkJDG383q0awVAq600pc1nfqBcl0ice/WN9p4qLc39WhBShRTA==
"@esbuild/sunos-x64@0.19.4":
version "0.19.4"
resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.4.tgz#f63f5841ba8c8c1a1c840d073afc99b53e8ce740"
integrity sha512-6Xq8SpK46yLvrGxjp6HftkDwPP49puU4OF0hEL4dTxqCbfx09LyrbUj/D7tmIRMj5D5FCUPksBbxyQhp8tmHzw==
"@esbuild/sunos-x64@0.19.5":
version "0.19.5"
resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.5.tgz#9efc4eb9539a7be7d5a05ada52ee43cda0d8e2dd"
integrity sha512-dGZkBXaafuKLpDSjKcB0ax0FL36YXCvJNnztjKV+6CO82tTYVDSH2lifitJ29jxRMoUhgkg9a+VA/B03WK5lcg==
"@esbuild/win32-arm64@0.19.4":
version "0.19.4"
resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.4.tgz#80be69cec92da4da7781cf7a8351b95cc5a236b0"
integrity sha512-PkIl7Jq4mP6ke7QKwyg4fD4Xvn8PXisagV/+HntWoDEdmerB2LTukRZg728Yd1Fj+LuEX75t/hKXE2Ppk8Hh1w==
"@esbuild/win32-arm64@0.19.5":
version "0.19.5"
resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.5.tgz#29f8184afa7a02a956ebda4ed638099f4b8ff198"
integrity sha512-dWVjD9y03ilhdRQ6Xig1NWNgfLtf2o/STKTS+eZuF90fI2BhbwD6WlaiCGKptlqXlURVB5AUOxUj09LuwKGDTg==
"@esbuild/win32-ia32@0.19.4":
version "0.19.4"
resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.4.tgz#15dc0ed83d2794872b05d8edc4a358fecf97eb54"
integrity sha512-ga676Hnvw7/ycdKB53qPusvsKdwrWzEyJ+AtItHGoARszIqvjffTwaaW3b2L6l90i7MO9i+dlAW415INuRhSGg==
"@esbuild/win32-ia32@0.19.5":
version "0.19.5"
resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.5.tgz#f3de07afb292ecad651ae4bb8727789de2d95b05"
integrity sha512-4liggWIA4oDgUxqpZwrDhmEfAH4d0iljanDOK7AnVU89T6CzHon/ony8C5LeOdfgx60x5cnQJFZwEydVlYx4iw==
"@esbuild/win32-x64@0.19.4":
version "0.19.4"
resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.4.tgz#d46a6e220a717f31f39ae80f49477cc3220be0f0"
integrity sha512-HP0GDNla1T3ZL8Ko/SHAS2GgtjOg+VmWnnYLhuTksr++EnduYB0f3Y2LzHsUwb2iQ13JGoY6G3R8h6Du/WG6uA==
"@esbuild/win32-x64@0.19.5":
version "0.19.5"
resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.5.tgz#faad84c41ba12e3a0acb52571df9bff37bee75f6"
integrity sha512-czTrygUsB/jlM8qEW5MD8bgYU2Xg14lo6kBDXW6HdxKjh8M5PzETGiSHaz9MtbXBYDloHNUAUW2tMiKW4KM9Mw==
"@eslint-community/eslint-utils@^4.2.0":
version "4.4.0"
@ -1304,21 +1304,21 @@
"@jridgewell/resolve-uri" "^3.1.0"
"@jridgewell/sourcemap-codec" "^1.4.14"
"@lerna/child-process@7.3.1":
version "7.3.1"
resolved "https://registry.yarnpkg.com/@lerna/child-process/-/child-process-7.3.1.tgz#ed9122a583adb828c26a5a6a662a3353e979495b"
integrity sha512-9neRI51jOhyIGT3/xKUQZftzg78ZY5Ya8iBCmVQYWwo8rLiMqUqcgwIwFHFFYyY41Sb4/HXatQ0iiuTTB/vr8A==
"@lerna/child-process@7.4.0":
version "7.4.0"
resolved "https://registry.yarnpkg.com/@lerna/child-process/-/child-process-7.4.0.tgz#90e2ef119fed904845cad9977002f71354df2b68"
integrity sha512-KhocFx7HI04N2tUdKv/kJDy627m9TzIDrtudRTMTFVS8vKzGtxpfjgWZAnJ20hwQqe/MvvfrOhHsvDBrcBEW/g==
dependencies:
chalk "^4.1.0"
execa "^5.0.0"
strong-log-transformer "^2.1.0"
"@lerna/create@7.3.1":
version "7.3.1"
resolved "https://registry.yarnpkg.com/@lerna/create/-/create-7.3.1.tgz#9e968935deb2d5c11dd3cbfce52d4f62a4d2285c"
integrity sha512-+gHt9rzWYaC0pxE/xMC8hQaLXJKW24rWlWJ7Vq6gETsl6D5v3rSy2VIlvoDE9WsvROnMSoXw2PZY371X79hNBw==
"@lerna/create@7.4.0":
version "7.4.0"
resolved "https://registry.yarnpkg.com/@lerna/create/-/create-7.4.0.tgz#5a7214b7f67e4804e7ce07d9e6c4275bfe85b3d5"
integrity sha512-VmuJCS/cC2itJjpMNNBWBl1YRfYNBjo6BR4+KVdDYPO2/WT+CWqv5gWGrm0bU5/djwGJ2BN96STzHnWegACK0A==
dependencies:
"@lerna/child-process" "7.3.1"
"@lerna/child-process" "7.4.0"
"@npmcli/run-script" "6.0.2"
"@nx/devkit" ">=16.5.1 < 17"
"@octokit/plugin-enterprise-rest" "6.0.1"
@ -2039,18 +2039,18 @@
"@smithy/types" "^2.3.5"
tslib "^2.5.0"
"@smithy/config-resolver@^2.0.14":
version "2.0.14"
resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-2.0.14.tgz#16163e14053949f5a717be6f5802a7039e5ff4d1"
integrity sha512-K1K+FuWQoy8j/G7lAmK85o03O89s2Vvh6kMFmzEmiHUoQCRH1rzbDtMnGNiaMHeSeYJ6y79IyTusdRG+LuWwtg==
"@smithy/config-resolver@^2.0.15":
version "2.0.15"
resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-2.0.15.tgz#dff48ef54e989df4eeb90001a2fef9ae3c5bb884"
integrity sha512-a2Pfocla5nSrG2RyB8i20jcWgMyR71TUeFKm8pmrnZotr/X22tlg4y/EhSvBK2oTE8MKHlKh4YdpDO2AryJbGQ==
dependencies:
"@smithy/node-config-provider" "^2.1.1"
"@smithy/node-config-provider" "^2.1.2"
"@smithy/types" "^2.3.5"
"@smithy/util-config-provider" "^2.0.0"
"@smithy/util-middleware" "^2.0.4"
tslib "^2.5.0"
"@smithy/credential-provider-imds@^2.0.0", "@smithy/credential-provider-imds@^2.0.16":
"@smithy/credential-provider-imds@^2.0.0":
version "2.0.16"
resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.16.tgz#07da7ecd43eff92156ddc54f3b5330bbc128d5cd"
integrity sha512-tKa2xF+69TvGxJT+lnJpGrKxUuAZDLYXFhqnPEgnHz+psTpkpcB4QRjHj63+uj83KaeFJdTfW201eLZeRn6FfA==
@ -2061,6 +2061,17 @@
"@smithy/url-parser" "^2.0.11"
tslib "^2.5.0"
"@smithy/credential-provider-imds@^2.0.17":
version "2.0.17"
resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.17.tgz#004463c314b9c3df4883fe643f0b3855f1f64d40"
integrity sha512-2XcD414yrwbxxuYueTo7tzLC2/w3jj9FZqfenpv3MQkocdOEmuOVS0v9WHsY/nW6V+2EcR340rj/z5HnvsHncQ==
dependencies:
"@smithy/node-config-provider" "^2.1.2"
"@smithy/property-provider" "^2.0.12"
"@smithy/types" "^2.3.5"
"@smithy/url-parser" "^2.0.11"
tslib "^2.5.0"
"@smithy/eventstream-codec@^2.0.11":
version "2.0.11"
resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-2.0.11.tgz#1ba090ea5dbf956e32d3d0d0986ffb0d0af8c57d"
@ -2116,7 +2127,7 @@
"@smithy/types" "^2.3.5"
tslib "^2.5.0"
"@smithy/middleware-endpoint@^2.1.1":
"@smithy/middleware-endpoint@^2.1.2":
version "2.1.2"
resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-2.1.2.tgz#c6610f17b3c5773e4f272eb4de5c18a878607fe0"
integrity sha512-dua4r2EbSTRzNefz72snz+KDuXN73RCe1K+rGeemzUyYemxuh1jujFbLQbTU6DVlTgHkhtrbH0+kdOFY/SV4Qg==
@ -2129,12 +2140,12 @@
"@smithy/util-middleware" "^2.0.4"
tslib "^2.5.0"
"@smithy/middleware-retry@^2.0.16":
version "2.0.16"
resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-2.0.16.tgz#f87401a01317de351df5228e4591961d04663607"
integrity sha512-Br5+0yoiMS0ugiOAfJxregzMMGIRCbX4PYo1kDHtLgvkA/d++aHbnHB819m5zOIAMPvPE7AThZgcsoK+WOsUTA==
"@smithy/middleware-retry@^2.0.17":
version "2.0.17"
resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-2.0.17.tgz#bf154e441accef071e9f3455bc673c8e7cae14e6"
integrity sha512-ZYVU1MmshCTbEKTNc5h7/Pps1vhH5C7hRclQWnAbVYKkIT+PEGu9dSVqprzEo/nlMA8Zv4Dj5Y+fv3pRnUwElw==
dependencies:
"@smithy/node-config-provider" "^2.1.1"
"@smithy/node-config-provider" "^2.1.2"
"@smithy/protocol-http" "^3.0.7"
"@smithy/service-error-classification" "^2.0.4"
"@smithy/types" "^2.3.5"
@ -2324,14 +2335,14 @@
bowser "^2.11.0"
tslib "^2.5.0"
"@smithy/util-defaults-mode-node@^2.0.19":
version "2.0.19"
resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.19.tgz#8996479c76dd68baae65fd863180a802a66fdf5d"
integrity sha512-7pScU4jBFADB2MBYKM3zb5onMh6Nn0X3IfaFVLYPyCarTIZDLUtUl1GtruzEUJPmDzP+uGeqOtU589HDY0Ni6g==
"@smithy/util-defaults-mode-node@^2.0.20":
version "2.0.20"
resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.20.tgz#4381d74cb6c7cbca3a2609dc81a7437973d7cdd2"
integrity sha512-kJjcZ/Lzvs3sPDKBwlhZsFFcgPNIpB3CMb6/saCakawRzo0E+JkyS3ZZRjVR3ce29yHtwoP/0YLKC1PeH0Dffg==
dependencies:
"@smithy/config-resolver" "^2.0.14"
"@smithy/credential-provider-imds" "^2.0.16"
"@smithy/node-config-provider" "^2.1.1"
"@smithy/config-resolver" "^2.0.15"
"@smithy/credential-provider-imds" "^2.0.17"
"@smithy/node-config-provider" "^2.1.2"
"@smithy/property-provider" "^2.0.12"
"@smithy/smithy-client" "^2.1.11"
"@smithy/types" "^2.3.5"
@ -4593,10 +4604,10 @@ dagre-d3-es@7.0.10:
d3 "^7.8.2"
lodash-es "^4.17.21"
daisyui@3.9.2:
version "3.9.2"
resolved "https://registry.yarnpkg.com/daisyui/-/daisyui-3.9.2.tgz#73c83d46ff86186568b211be2d231f4aee5a9ecc"
integrity sha512-yJZ1QjHUaL+r9BkquTdzNHb7KIgAJVFh0zbOXql2Wu0r7zx5qZNLxclhjN0WLoIpY+o2h/8lqXg7ijj8oTigOw==
daisyui@3.9.3:
version "3.9.3"
resolved "https://registry.yarnpkg.com/daisyui/-/daisyui-3.9.3.tgz#d8cd193feb57460d56a5fdf9e15063fd667842ec"
integrity sha512-8li177QCu6dqlEOzE3h/dAV1y9Movbjx5bzJIO/hNqMNZtJkbHM0trjTzbDejV7N57eNGdjBvAGtxZYKzS4jow==
dependencies:
colord "^2.9"
css-selector-tokenizer "^0.8"
@ -5256,33 +5267,33 @@ esbuild-plugin-yaml@^0.0.1:
fs-extra "^9.1.0"
js-yaml "^4.0.0"
esbuild@0.19.4, esbuild@^0.19.0:
version "0.19.4"
resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.4.tgz#cdf5c4c684956d550bc3c6d0c01dac7fef6c75b1"
integrity sha512-x7jL0tbRRpv4QUyuDMjONtWFciygUxWaUM1kMX2zWxI0X2YWOt7MSA0g4UdeSiHM8fcYVzpQhKYOycZwxTdZkA==
esbuild@0.19.5, esbuild@^0.19.0:
version "0.19.5"
resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.5.tgz#53a0e19dfbf61ba6c827d51a80813cf071239a8c"
integrity sha512-bUxalY7b1g8vNhQKdB24QDmHeY4V4tw/s6Ak5z+jJX9laP5MoQseTOMemAr0gxssjNcH0MCViG8ONI2kksvfFQ==
optionalDependencies:
"@esbuild/android-arm" "0.19.4"
"@esbuild/android-arm64" "0.19.4"
"@esbuild/android-x64" "0.19.4"
"@esbuild/darwin-arm64" "0.19.4"
"@esbuild/darwin-x64" "0.19.4"
"@esbuild/freebsd-arm64" "0.19.4"
"@esbuild/freebsd-x64" "0.19.4"
"@esbuild/linux-arm" "0.19.4"
"@esbuild/linux-arm64" "0.19.4"
"@esbuild/linux-ia32" "0.19.4"
"@esbuild/linux-loong64" "0.19.4"
"@esbuild/linux-mips64el" "0.19.4"
"@esbuild/linux-ppc64" "0.19.4"
"@esbuild/linux-riscv64" "0.19.4"
"@esbuild/linux-s390x" "0.19.4"
"@esbuild/linux-x64" "0.19.4"
"@esbuild/netbsd-x64" "0.19.4"
"@esbuild/openbsd-x64" "0.19.4"
"@esbuild/sunos-x64" "0.19.4"
"@esbuild/win32-arm64" "0.19.4"
"@esbuild/win32-ia32" "0.19.4"
"@esbuild/win32-x64" "0.19.4"
"@esbuild/android-arm" "0.19.5"
"@esbuild/android-arm64" "0.19.5"
"@esbuild/android-x64" "0.19.5"
"@esbuild/darwin-arm64" "0.19.5"
"@esbuild/darwin-x64" "0.19.5"
"@esbuild/freebsd-arm64" "0.19.5"
"@esbuild/freebsd-x64" "0.19.5"
"@esbuild/linux-arm" "0.19.5"
"@esbuild/linux-arm64" "0.19.5"
"@esbuild/linux-ia32" "0.19.5"
"@esbuild/linux-loong64" "0.19.5"
"@esbuild/linux-mips64el" "0.19.5"
"@esbuild/linux-ppc64" "0.19.5"
"@esbuild/linux-riscv64" "0.19.5"
"@esbuild/linux-s390x" "0.19.5"
"@esbuild/linux-x64" "0.19.5"
"@esbuild/netbsd-x64" "0.19.5"
"@esbuild/openbsd-x64" "0.19.5"
"@esbuild/sunos-x64" "0.19.5"
"@esbuild/win32-arm64" "0.19.5"
"@esbuild/win32-ia32" "0.19.5"
"@esbuild/win32-x64" "0.19.5"
escalade@^3.1.1:
version "3.1.1"
@ -8058,12 +8069,12 @@ leac@^0.6.0:
integrity sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==
lerna@^7.2.0:
version "7.3.1"
resolved "https://registry.yarnpkg.com/lerna/-/lerna-7.3.1.tgz#eda0021dbd48287e9f1de3c69c48a2089ff0952c"
integrity sha512-4Lt6nKIqCDqWgRlKu02g6+0Gfl5Hx9ZK3EIJTjMntea6QBuOgfSpJEj3j20osmE1tzFCkbAltJRyeLE1CImv+A==
version "7.4.0"
resolved "https://registry.yarnpkg.com/lerna/-/lerna-7.4.0.tgz#e6dabe956cc771eabe90c97e5e4759eb5d5117ef"
integrity sha512-Dp5js6R7mygy3Ncxc/1HxDd5EgiE7mFqZbCAYKm6FzeOn/GLcqyOPJHLsck6PlSu/uvqUh1lZO4wGaJJQAcW2Q==
dependencies:
"@lerna/child-process" "7.3.1"
"@lerna/create" "7.3.1"
"@lerna/child-process" "7.4.0"
"@lerna/create" "7.4.0"
"@npmcli/run-script" "6.0.2"
"@nx/devkit" ">=16.5.1 < 17"
"@octokit/plugin-enterprise-rest" "6.0.1"
@ -9828,10 +9839,10 @@ nested-error-stacks@^2.0.0:
resolved "https://registry.yarnpkg.com/nested-error-stacks/-/nested-error-stacks-2.1.1.tgz#26c8a3cee6cc05fbcf1e333cd2fc3e003326c0b5"
integrity sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==
next-i18next@14.0.0:
version "14.0.0"
resolved "https://registry.yarnpkg.com/next-i18next/-/next-i18next-14.0.0.tgz#fd637c81df96c9d6f2cc4716037130ac4e5d6968"
integrity sha512-umv8hOZoSoAA+td3ErfemyO/5Ib2pnYCdQ8/Oy+fncS2skFIL3hHKRer3Oa3Nfm4Xbv5p6DHWzm3NhT1j4tWwg==
next-i18next@14.0.3:
version "14.0.3"
resolved "https://registry.yarnpkg.com/next-i18next/-/next-i18next-14.0.3.tgz#9c17e69483b3af4172b15454af2ef92c5f79be48"
integrity sha512-FtnjRMfhlamk8YyeyWqd+pndNL+3er83iMZnH4M4mhiGA93l0+vtBUvuObgOAMHDJGLLB2SS2xOOZq69oiJh7A==
dependencies:
"@babel/runtime" "^7.20.13"
"@types/hoist-non-react-statics" "^3.3.1"
@ -11373,10 +11384,10 @@ react-timeago@7.2.0:
resolved "https://registry.yarnpkg.com/react-timeago/-/react-timeago-7.2.0.tgz#ae929d7423a63cbc3dc228e49d22fbf586d459ca"
integrity sha512-2KsBEEs+qRhKx/kekUVNSTIpop3Jwd7SRBm0R4Eiq3mPeswRGSsftY9FpKsE/lXLdURyQFiHeHFrIUxLYskG5g==
react-zoom-pan-pinch@3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/react-zoom-pan-pinch/-/react-zoom-pan-pinch-3.1.0.tgz#d87a66fd22a97f5dd56b54076411a9dce1f448cd"
integrity sha512-a3LlP8QPgTikvteCNkZ3X6wIWC0lrg1geP5WkUJyx2MXXAhHQek3r17N1nT/esOiWGuPIECnsd9AGoK8jOeGcg==
react-zoom-pan-pinch@3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/react-zoom-pan-pinch/-/react-zoom-pan-pinch-3.2.0.tgz#6ce7d014a8dc4aa62ce83ca57f85e76cf2e934b8"
integrity sha512-7MS0wYWoXjr6PrmpgHOVpVyNQr9gj7LEr4xIvq6lBy62nuNwjdI1r+XxahQ0SDHhWrLuSF11e2PTL/YLengYyg==
react@18.2.0, react@^18.2.0:
version "18.2.0"