diff --git a/config/software/designs.json b/config/software/designs.json index 89864732146..d4939d442f0 100644 --- a/config/software/designs.json +++ b/config/software/designs.json @@ -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", diff --git a/designs/gozer/CHANGELOG.md b/designs/gozer/CHANGELOG.md new file mode 100644 index 00000000000..75e9b067844 --- /dev/null +++ b/designs/gozer/CHANGELOG.md @@ -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. + diff --git a/designs/gozer/README.md b/designs/gozer/README.md new file mode 100644 index 00000000000..de44fcfc4ac --- /dev/null +++ b/designs/gozer/README.md @@ -0,0 +1,143 @@ +![FreeSewing](https://static.freesewing.org/banner.png) +

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

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

+ +# @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/# 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). + diff --git a/designs/gozer/build.mjs b/designs/gozer/build.mjs new file mode 100644 index 00000000000..99ace216bc8 --- /dev/null +++ b/designs/gozer/build.mjs @@ -0,0 +1,35 @@ +/* This script will build the package with esbuild */ +import esbuild from 'esbuild' +import pkg from './package.json' assert { type: 'json' } + +// Create banner based on package info +const banner = `/** + * ${pkg.name} | v${pkg.version} + * ${pkg.description} + * (c) ${new Date().getFullYear()} ${pkg.author} + * @license ${pkg.license} + */` + +// Shared esbuild options +const options = { + banner: { js: banner }, + bundle: true, + entryPoints: ['src/index.mjs'], + format: 'esm', + outfile: 'dist/index.mjs', + external: ['@freesewing'], + metafile: process.env.VERBOSE ? true : false, + minify: process.env.NO_MINIFY ? false : true, + sourcemap: true, +} + +// Let esbuild generate the build +const build = async () => { + const result = await esbuild.build(options).catch(() => process.exit(1)) + + if (process.env.VERBOSE) { + const info = await esbuild.analyzeMetafile(result.metafile) + console.log(info) + } +} +build() diff --git a/designs/gozer/data.mjs b/designs/gozer/data.mjs new file mode 100644 index 00000000000..9aeca4b6d73 --- /dev/null +++ b/designs/gozer/data.mjs @@ -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 } diff --git a/designs/gozer/i18n/de.json b/designs/gozer/i18n/de.json new file mode 100644 index 00000000000..51ffe6da861 --- /dev/null +++ b/designs/gozer/i18n/de.json @@ -0,0 +1,7 @@ +{ + "t": "Gozer", + "d": "A FreeSewing pattern that needs a description", + "p": { }, + "s": { }, + "o": { } +} diff --git a/designs/gozer/i18n/en.json b/designs/gozer/i18n/en.json new file mode 100644 index 00000000000..246e78dbffa --- /dev/null +++ b/designs/gozer/i18n/en.json @@ -0,0 +1,9 @@ +{ + "t": "Gozer", + "d": "A FreeSewing pattern for a Halloween costume", + "p": { + "ghost": "ghost" + }, + "s": { }, + "o": { } +} diff --git a/designs/gozer/i18n/es.json b/designs/gozer/i18n/es.json new file mode 100644 index 00000000000..51ffe6da861 --- /dev/null +++ b/designs/gozer/i18n/es.json @@ -0,0 +1,7 @@ +{ + "t": "Gozer", + "d": "A FreeSewing pattern that needs a description", + "p": { }, + "s": { }, + "o": { } +} diff --git a/designs/gozer/i18n/fr.json b/designs/gozer/i18n/fr.json new file mode 100644 index 00000000000..51ffe6da861 --- /dev/null +++ b/designs/gozer/i18n/fr.json @@ -0,0 +1,7 @@ +{ + "t": "Gozer", + "d": "A FreeSewing pattern that needs a description", + "p": { }, + "s": { }, + "o": { } +} diff --git a/designs/gozer/i18n/index.mjs b/designs/gozer/i18n/index.mjs new file mode 100644 index 00000000000..36aac928b67 --- /dev/null +++ b/designs/gozer/i18n/index.mjs @@ -0,0 +1,8 @@ +import en from './en.json' assert { type: 'json' } +import de from './de.json' assert { type: 'json' } +import es from './es.json' assert { type: 'json' } +import fr from './fr.json' assert { type: 'json' } +import nl from './nl.json' assert { type: 'json' } +import uk from './uk.json' assert { type: 'json' } + +export const i18n = { en, de, es, fr, nl, uk } diff --git a/designs/gozer/i18n/nl.json b/designs/gozer/i18n/nl.json new file mode 100644 index 00000000000..51ffe6da861 --- /dev/null +++ b/designs/gozer/i18n/nl.json @@ -0,0 +1,7 @@ +{ + "t": "Gozer", + "d": "A FreeSewing pattern that needs a description", + "p": { }, + "s": { }, + "o": { } +} diff --git a/designs/gozer/i18n/uk.json b/designs/gozer/i18n/uk.json new file mode 100644 index 00000000000..51ffe6da861 --- /dev/null +++ b/designs/gozer/i18n/uk.json @@ -0,0 +1,7 @@ +{ + "t": "Gozer", + "d": "A FreeSewing pattern that needs a description", + "p": { }, + "s": { }, + "o": { } +} diff --git a/designs/gozer/package.json b/designs/gozer/package.json new file mode 100644 index 00000000000..e958cacc86e --- /dev/null +++ b/designs/gozer/package.json @@ -0,0 +1,73 @@ +{ + "name": "@freesewing/gozer", + "version": "3.0.0", + "description": "A FreeSewing pattern for a ghost costume", + "author": "Joost De Cock (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" + } +} diff --git a/designs/gozer/src/ghost.mjs b/designs/gozer/src/ghost.mjs new file mode 100644 index 00000000000..91b79e98149 --- /dev/null +++ b/designs/gozer/src/ghost.mjs @@ -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 + }, +} diff --git a/designs/gozer/src/index.mjs b/designs/gozer/src/index.mjs new file mode 100644 index 00000000000..e7eaddaa418 --- /dev/null +++ b/designs/gozer/src/index.mjs @@ -0,0 +1,16 @@ +// + +import { Design } from '@freesewing/core' +import { i18n } from '../i18n/index.mjs' +import { data } from '../data.mjs' +// Parts +import { ghost } from './ghost.mjs' + +// Create new design +const Gozer = new Design({ + data, + parts: [ghost], +}) + +// Named exports +export { ghost, i18n, Gozer } diff --git a/designs/gozer/tests/shared.test.mjs b/designs/gozer/tests/shared.test.mjs new file mode 100644 index 00000000000..7d3887720d8 --- /dev/null +++ b/designs/gozer/tests/shared.test.mjs @@ -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) diff --git a/designs/waralee/i18n/en.json b/designs/waralee/i18n/en.json index 46c7e2cc1f0..1d6b9cde8b5 100644 --- a/designs/waralee/i18n/en.json +++ b/designs/waralee/i18n/en.json @@ -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." } } } diff --git a/designs/waralee/src/backpocket.mjs b/designs/waralee/src/backpocket.mjs index bc34ed6615c..5070c8b1973 100644 --- a/designs/waralee/src/backpocket.mjs +++ b/designs/waralee/src/backpocket.mjs @@ -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 + }, } diff --git a/designs/waralee/src/cutout.mjs b/designs/waralee/src/cutout.mjs index b89c866e5e5..28c88d0348c 100644 --- a/designs/waralee/src/cutout.mjs +++ b/designs/waralee/src/cutout.mjs @@ -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 + }, } diff --git a/designs/waralee/src/facings.mjs b/designs/waralee/src/facings.mjs index 8ccf86c7caa..f7ce9e62f32 100644 --- a/designs/waralee/src/facings.mjs +++ b/designs/waralee/src/facings.mjs @@ -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), } diff --git a/designs/waralee/src/index.mjs b/designs/waralee/src/index.mjs index 34b4867de59..f0254229a8c 100644 --- a/designs/waralee/src/index.mjs +++ b/designs/waralee/src/index.mjs @@ -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, diff --git a/designs/waralee/src/mini.mjs b/designs/waralee/src/mini.mjs index e1524d8bfc6..ee9a2ca3dd9 100644 --- a/designs/waralee/src/mini.mjs +++ b/designs/waralee/src/mini.mjs @@ -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 + }, } diff --git a/designs/waralee/src/options.mjs b/designs/waralee/src/options.mjs deleted file mode 100644 index 437459ffe31..00000000000 --- a/designs/waralee/src/options.mjs +++ /dev/null @@ -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' } diff --git a/designs/waralee/src/pants.mjs b/designs/waralee/src/pants.mjs index 4f7f0b5dcc4..83c9a116216 100644 --- a/designs/waralee/src/pants.mjs +++ b/designs/waralee/src/pants.mjs @@ -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 + }, } diff --git a/designs/waralee/src/pantsproto.mjs b/designs/waralee/src/pantsproto.mjs index d99283795ab..f8e6e56b219 100644 --- a/designs/waralee/src/pantsproto.mjs +++ b/designs/waralee/src/pantsproto.mjs @@ -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() + }, } diff --git a/designs/waralee/src/pocket.mjs b/designs/waralee/src/pocket.mjs index d797eaf5eea..3fe4316d548 100644 --- a/designs/waralee/src/pocket.mjs +++ b/designs/waralee/src/pocket.mjs @@ -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 + }, } diff --git a/designs/waralee/src/waistband.mjs b/designs/waralee/src/waistband.mjs index 21ed4753781..5b0dc0237fd 100644 --- a/designs/waralee/src/waistband.mjs +++ b/designs/waralee/src/waistband.mjs @@ -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 } diff --git a/markdown/org/docs/designs/gozer/cutting/en.md b/markdown/org/docs/designs/gozer/cutting/en.md new file mode 100644 index 00000000000..1578525ee18 --- /dev/null +++ b/markdown/org/docs/designs/gozer/cutting/en.md @@ -0,0 +1,6 @@ +--- +title: "Gozer the ghost: Cutting Instructions" +--- + +- **Color 1; Traditionally white** + - Cut **1 Body** diff --git a/markdown/org/docs/designs/gozer/en.md b/markdown/org/docs/designs/gozer/en.md new file mode 100644 index 00000000000..092973a5b4d --- /dev/null +++ b/markdown/org/docs/designs/gozer/en.md @@ -0,0 +1,6 @@ +--- +title: Gozer the ghost +--- + + + diff --git a/markdown/org/docs/designs/gozer/fabric/en.md b/markdown/org/docs/designs/gozer/fabric/en.md new file mode 100644 index 00000000000..9d42741e68c --- /dev/null +++ b/markdown/org/docs/designs/gozer/fabric/en.md @@ -0,0 +1,7 @@ +--- +title: "Gozer the ghost: Fabric Options" +--- + +## Main Fabric + +Traditionally, white sheets are used. \ No newline at end of file diff --git a/markdown/org/docs/designs/gozer/instructions/en.md b/markdown/org/docs/designs/gozer/instructions/en.md new file mode 100644 index 00000000000..49538720737 --- /dev/null +++ b/markdown/org/docs/designs/gozer/instructions/en.md @@ -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. diff --git a/markdown/org/docs/designs/gozer/measurements/en.md b/markdown/org/docs/designs/gozer/measurements/en.md new file mode 100644 index 00000000000..d8c916e168b --- /dev/null +++ b/markdown/org/docs/designs/gozer/measurements/en.md @@ -0,0 +1,5 @@ +--- +title: "Gozer the ghost: Required Measurements" +--- + + \ No newline at end of file diff --git a/markdown/org/docs/designs/gozer/needs/en.md b/markdown/org/docs/designs/gozer/needs/en.md new file mode 100644 index 00000000000..4babe41b631 --- /dev/null +++ b/markdown/org/docs/designs/gozer/needs/en.md @@ -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 + diff --git a/markdown/org/docs/designs/gozer/notes/en.md b/markdown/org/docs/designs/gozer/notes/en.md new file mode 100644 index 00000000000..5b00af821c8 --- /dev/null +++ b/markdown/org/docs/designs/gozer/notes/en.md @@ -0,0 +1,6 @@ +--- +title: "Gozer the ghost: Designer Notes" +--- + +The designer, nor FreeSewing, are liable for anything that follows the use of this pattern. You've been warned. + diff --git a/markdown/org/docs/designs/waralee/options/legshortening/de.md b/markdown/org/docs/designs/waralee/options/legshortening/de.md deleted file mode 100644 index a58aa383273..00000000000 --- a/markdown/org/docs/designs/waralee/options/legshortening/de.md +++ /dev/null @@ -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") diff --git a/markdown/org/docs/designs/waralee/options/legshortening/en.md b/markdown/org/docs/designs/waralee/options/legshortening/en.md deleted file mode 100644 index 9637ceb99ec..00000000000 --- a/markdown/org/docs/designs/waralee/options/legshortening/en.md +++ /dev/null @@ -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. - - - - diff --git a/markdown/org/docs/designs/waralee/options/legshortening/es.md b/markdown/org/docs/designs/waralee/options/legshortening/es.md deleted file mode 100644 index cb3e67c3769..00000000000 --- a/markdown/org/docs/designs/waralee/options/legshortening/es.md +++ /dev/null @@ -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") diff --git a/markdown/org/docs/designs/waralee/options/legshortening/fr.md b/markdown/org/docs/designs/waralee/options/legshortening/fr.md deleted file mode 100644 index bc201aee7b4..00000000000 --- a/markdown/org/docs/designs/waralee/options/legshortening/fr.md +++ /dev/null @@ -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") diff --git a/markdown/org/docs/designs/waralee/options/legshortening/nl.md b/markdown/org/docs/designs/waralee/options/legshortening/nl.md deleted file mode 100644 index 86dfd4626db..00000000000 --- a/markdown/org/docs/designs/waralee/options/legshortening/nl.md +++ /dev/null @@ -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") diff --git a/markdown/org/docs/designs/waralee/options/legshortening/uk.md b/markdown/org/docs/designs/waralee/options/legshortening/uk.md deleted file mode 100644 index 1f20fcf7959..00000000000 --- a/markdown/org/docs/designs/waralee/options/legshortening/uk.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: "Довжина штанин" ---- - -Від цього залежить, якої довжини будуть штани. Це фактор вимірювання швів. Чим більше значення, тим більше буде віднято від довжини. - -## Вплив цієї опції на шаблон - -![На цьому зображенні показано вплив цієї опції шляхом накладання декількох варіантів, які мають різне значення для цієї опції](waralee_legshortening_sample.svg "Вплив цієї опції на шаблон") diff --git a/markdown/org/docs/designs/waralee/options/legsize/en.md b/markdown/org/docs/designs/waralee/options/legsize/en.md new file mode 100644 index 00000000000..849a8993a4c --- /dev/null +++ b/markdown/org/docs/designs/waralee/options/legsize/en.md @@ -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. + + + + diff --git a/markdown/org/showcase/breanna-dress-by-andrea-cretu/en.md b/markdown/org/showcase/breanna-dress-by-andrea-cretu/en.md new file mode 100644 index 00000000000..d60d5eb7fae --- /dev/null +++ b/markdown/org/showcase/breanna-dress-by-andrea-cretu/en.md @@ -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). + diff --git a/markdown/org/showcase/four-versions-of-otis-and-a-bonus-bob/en.md b/markdown/org/showcase/four-versions-of-otis-and-a-bonus-bob/en.md new file mode 100644 index 00000000000..771073a3a20 --- /dev/null +++ b/markdown/org/showcase/four-versions-of-otis-and-a-bonus-bob/en.md @@ -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 (don’t 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") + diff --git a/markdown/org/showcase/simone-by-gaelle/en.md b/markdown/org/showcase/simone-by-gaelle/en.md new file mode 100644 index 00000000000..366b654f25b --- /dev/null +++ b/markdown/org/showcase/simone-by-gaelle/en.md @@ -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") + diff --git a/sites/backend/package.json b/sites/backend/package.json index be6f9c86d32..b32f363d2a4 100644 --- a/sites/backend/package.json +++ b/sites/backend/package.json @@ -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", diff --git a/sites/dev/package.json b/sites/dev/package.json index 04c5aea7787..41d5214e5a3 100644 --- a/sites/dev/package.json +++ b/sites/dev/package.json @@ -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", diff --git a/sites/lab/hooks/use-design.mjs b/sites/lab/hooks/use-design.mjs index a458be92ca1..7d120a9c25f 100644 --- a/sites/lab/hooks/use-design.mjs +++ b/sites/lab/hooks/use-design.mjs @@ -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, diff --git a/sites/lab/package.json b/sites/lab/package.json index 21bef5d73ac..59863c55cf9 100644 --- a/sites/lab/package.json +++ b/sites/lab/package.json @@ -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", diff --git a/sites/lab/pages/account/patterns/gozer/[id]/edit.mjs b/sites/lab/pages/account/patterns/gozer/[id]/edit.mjs new file mode 100644 index 00000000000..dd37081ced8 --- /dev/null +++ b/sites/lab/pages/account/patterns/gozer/[id]/edit.mjs @@ -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 }) => ( + +) + +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 + + {pattern ? ( + + ) : ( +
+

{t('account:oneMomentPLease')}

+ +
+ )} +
+ ) +} + +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', + } +} diff --git a/sites/lab/pages/account/patterns/skully/[id]/edit.mjs b/sites/lab/pages/account/patterns/skully/[id]/edit.mjs new file mode 100644 index 00000000000..c2e21bc495d --- /dev/null +++ b/sites/lab/pages/account/patterns/skully/[id]/edit.mjs @@ -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 }) => ( + +) + +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 + + {pattern ? ( + + ) : ( +
+

{t('account:oneMomentPLease')}

+ +
+ )} +
+ ) +} + +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', + } +} diff --git a/sites/lab/pages/new/gozer.mjs b/sites/lab/pages/new/gozer.mjs new file mode 100644 index 00000000000..617cd503546 --- /dev/null +++ b/sites/lab/pages/new/gozer.mjs @@ -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 }) => ( + + + +) + +export default NewGozerPage + +export async function getStaticProps({ locale }) { + return { + props: { + ...(await serverSideTranslations(locale, ns)), + page: { + locale, + path: ['new', 'gozer'], + title: 'Gozer', + }, + }, + } +} diff --git a/sites/lab/pages/new/skully.mjs b/sites/lab/pages/new/skully.mjs new file mode 100644 index 00000000000..a9168a7d1fe --- /dev/null +++ b/sites/lab/pages/new/skully.mjs @@ -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 }) => ( + + + +) + +export default NewSkullyPage + +export async function getStaticProps({ locale }) { + return { + props: { + ...(await serverSideTranslations(locale, ns)), + page: { + locale, + path: ['new', 'skully'], + title: 'Skully', + }, + }, + } +} diff --git a/sites/org/hooks/use-design.mjs b/sites/org/hooks/use-design.mjs index 7a974cd89c3..21cc71e204b 100644 --- a/sites/org/hooks/use-design.mjs +++ b/sites/org/hooks/use-design.mjs @@ -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, diff --git a/sites/org/package.json b/sites/org/package.json index 5a67dc3af37..3dc944ea9d6 100644 --- a/sites/org/package.json +++ b/sites/org/package.json @@ -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", diff --git a/sites/org/pages/account/patterns/gozer/[id]/edit.mjs b/sites/org/pages/account/patterns/gozer/[id]/edit.mjs new file mode 100644 index 00000000000..dd37081ced8 --- /dev/null +++ b/sites/org/pages/account/patterns/gozer/[id]/edit.mjs @@ -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 }) => ( + +) + +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 + + {pattern ? ( + + ) : ( +
+

{t('account:oneMomentPLease')}

+ +
+ )} +
+ ) +} + +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', + } +} diff --git a/sites/org/pages/new/gozer.mjs b/sites/org/pages/new/gozer.mjs new file mode 100644 index 00000000000..617cd503546 --- /dev/null +++ b/sites/org/pages/new/gozer.mjs @@ -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 }) => ( + + + +) + +export default NewGozerPage + +export async function getStaticProps({ locale }) { + return { + props: { + ...(await serverSideTranslations(locale, ns)), + page: { + locale, + path: ['new', 'gozer'], + title: 'Gozer', + }, + }, + } +} diff --git a/sites/sde/package.json b/sites/sde/package.json index d3d76638ccf..87677d8cfc0 100644 --- a/sites/sde/package.json +++ b/sites/sde/package.json @@ -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", diff --git a/sites/shared/i18n/designs.mjs b/sites/shared/i18n/designs.mjs index 29b734e31e4..1d1447e4b1c 100644 --- a/sites/shared/i18n/designs.mjs +++ b/sites/shared/i18n/designs.mjs @@ -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, diff --git a/sites/shared/package.json b/sites/shared/package.json index 74619f0f7a6..813739ac648 100644 --- a/sites/shared/package.json +++ b/sites/shared/package.json @@ -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", diff --git a/sites/shared/prebuild/data/design-measurements.mjs b/sites/shared/prebuild/data/design-measurements.mjs index 3871dfb8247..4896da415c2 100644 --- a/sites/shared/prebuild/data/design-measurements.mjs +++ b/sites/shared/prebuild/data/design-measurements.mjs @@ -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 measurements = {"aaron":["biceps","chest","hpsToBust","hpsToWaistBack","neck","shoulderToShoulder","shoulderSlope","waistToArmpit","waistToHips","hips"],"albert":["chest","hpsToWaistBack","waist","waistToKnee","hips"],"bee":["highBust","chest","underbust","waist","waistBack","bustSpan","neck","hpsToBust","hpsToWaistFront","hpsToWaistBack","shoulderToShoulder","shoulderSlope","bustPointToUnderbust"],"bella":["highBust","chest","underbust","waist","waistBack","bustSpan","neck","hpsToBust","hpsToWaistFront","hpsToWaistBack","shoulderToShoulder","shoulderSlope"],"benjamin":["neck"],"bent":["biceps","chest","hpsToBust","hpsToWaistBack","neck","shoulderToShoulder","shoulderSlope","waistToArmpit","waistToHips","shoulderToElbow","shoulderToWrist","wrist"],"bob":[],"breanna":["biceps","bustFront","bustSpan","highBust","highBustFront","hpsToBust","hpsToWaistBack","hpsToWaistFront","waist","waistToHips","neck","shoulderToShoulder","shoulderSlope","shoulderToWrist","wrist"],"brian":["biceps","chest","hpsToBust","hpsToWaistBack","neck","shoulderToShoulder","shoulderSlope","waistToArmpit","waistToHips","shoulderToWrist","wrist"],"bruce":["hips","upperLeg","waistToHips","waistToUpperLeg"],"carlita":["biceps","chest","hpsToBust","hpsToWaistBack","neck","shoulderToShoulder","shoulderSlope","waistToArmpit","waistToHips","waist","waistToFloor","waistToSeat","seat","highBust","bustSpan","shoulderToElbow","shoulderToWrist","wrist"],"carlton":["biceps","chest","hpsToBust","hpsToWaistBack","neck","shoulderToShoulder","shoulderSlope","waistToArmpit","waistToHips","waist","waistToFloor","waistToSeat","seat","shoulderToElbow","shoulderToWrist","wrist"],"cathrin":["underbust","waist","hips","waistToUnderbust","waistToHips"],"charlie":["crossSeam","crossSeamFront","knee","seat","seatBack","waist","waistBack","waistToFloor","waistToKnee","waistToHips","waistToSeat","waistToUpperLeg"],"cornelius":["waist","hips","inseam","seat","waistToKnee","waistToHips","waistToFloor","knee"],"diana":["biceps","chest","hpsToBust","hpsToWaistBack","neck","shoulderToShoulder","shoulderSlope","waistToArmpit","waistToHips","hips","waist","shoulderToWrist","wrist"],"examples":["head"],"florence":["head"],"florent":["head"],"hi":[],"holmes":["head"],"hortensia":[],"huey":["biceps","chest","hpsToBust","hpsToWaistBack","neck","shoulderToShoulder","shoulderSlope","waistToArmpit","waistToHips","hips","shoulderToWrist","wrist","head"],"hugo":["biceps","chest","hpsToBust","hpsToWaistBack","neck","shoulderToShoulder","shoulderSlope","waistToArmpit","waistToHips","hips","shoulderToWrist","wrist","head"],"jaeger":["biceps","chest","hpsToBust","hpsToWaistBack","neck","shoulderToShoulder","shoulderSlope","waistToArmpit","waistToHips","hips","waist","shoulderToElbow","shoulderToWrist","wrist"],"legend":[],"lucy":[],"lunetius":["waistToKnee","waistToUpperLeg","waistToFloor","hpsToWaistBack","neck","shoulderToShoulder","shoulderToElbow","waistToHips"],"magde":[],"noble":["highBust","chest","underbust","waist","waistBack","bustSpan","neck","hpsToBust","hpsToWaistFront","hpsToWaistBack","shoulderToShoulder","shoulderSlope"],"octoplushy":[],"paco":["crossSeam","crossSeamFront","knee","seat","seatBack","waist","waistBack","waistToFloor","waistToKnee","waistToHips","waistToSeat","waistToUpperLeg","heel"],"penelope":["waist","seat","waistToHips","waistToSeat","waistToKnee"],"plugintest":["seat","seatBack","waist","waistBack","crossSeam","crossSeamFront"],"rendertest":[],"sandy":["waist","waistToFloor","waistToHips","hips"],"shelly":["neck","chest","hips","waistToHips","hpsToWaistBack","waistToArmpit","biceps","wrist","shoulderToWrist"],"shin":["hips","upperLeg","waistToUpperLeg","waistToHips"],"simon":["biceps","chest","hpsToBust","hpsToWaistBack","neck","shoulderToShoulder","shoulderSlope","waistToArmpit","waistToHips","waist","hips","shoulderToWrist","wrist"],"simone":["biceps","chest","hpsToBust","hpsToWaistBack","neck","shoulderToShoulder","shoulderSlope","waistToArmpit","waistToHips","waist","hips","highBust","bustSpan","shoulderToWrist","wrist"],"skully":[],"sven":["biceps","chest","hpsToBust","hpsToWaistBack","neck","shoulderToShoulder","shoulderSlope","waistToArmpit","waistToHips","hips","waist","shoulderToWrist","wrist"],"tamiko":["shoulderToShoulder","chest","hpsToWaistBack","shoulderSlope","waistToHips"],"teagan":["biceps","chest","hpsToBust","hpsToWaistBack","neck","shoulderToShoulder","shoulderSlope","waistToArmpit","waistToHips","hips","waist"],"tiberius":["head","shoulderToElbow","shoulderToShoulder","biceps","hpsToWaistBack","waistToKnee","waist","chest","seat","hips","waistToFloor","waistToUpperLeg"],"titan":["crossSeam","crossSeamFront","knee","seat","seatBack","waist","waistBack","waistToFloor","waistToKnee","waistToHips","waistToSeat","waistToUpperLeg"],"trayvon":["hpsToWaistBack","waistToHips","neck"],"uma":["waist","seat","waistToSeat","waistToUpperLeg"],"wahid":["biceps","chest","hpsToBust","hpsToWaistBack","neck","shoulderToShoulder","shoulderSlope","waistToArmpit","waistToHips","hips","waist"],"walburga":["head","shoulderToShoulder","hpsToWaistBack","waistToKnee","waistToHips","waistToFloor","waistToUpperLeg","neck"],"waralee":["seat","inseam","crotchDepth","waistToHips"],"yuri":["biceps","chest","hpsToBust","hpsToWaistBack","neck","shoulderToShoulder","shoulderSlope","waistToArmpit","waistToHips","hips","shoulderToWrist","wrist","head"],"otis":["waist"]} +export const measurements = {"aaron":["biceps","chest","hpsToBust","hpsToWaistBack","neck","shoulderToShoulder","shoulderSlope","waistToArmpit","waistToHips","hips"],"albert":["chest","hpsToWaistBack","waist","waistToKnee","hips"],"bee":["highBust","chest","underbust","waist","waistBack","bustSpan","neck","hpsToBust","hpsToWaistFront","hpsToWaistBack","shoulderToShoulder","shoulderSlope","bustPointToUnderbust"],"bella":["highBust","chest","underbust","waist","waistBack","bustSpan","neck","hpsToBust","hpsToWaistFront","hpsToWaistBack","shoulderToShoulder","shoulderSlope"],"benjamin":["neck"],"bent":["biceps","chest","hpsToBust","hpsToWaistBack","neck","shoulderToShoulder","shoulderSlope","waistToArmpit","waistToHips","shoulderToElbow","shoulderToWrist","wrist"],"bob":[],"breanna":["biceps","bustFront","bustSpan","highBust","highBustFront","hpsToBust","hpsToWaistBack","hpsToWaistFront","waist","waistToHips","neck","shoulderToShoulder","shoulderSlope","shoulderToWrist","wrist"],"brian":["biceps","chest","hpsToBust","hpsToWaistBack","neck","shoulderToShoulder","shoulderSlope","waistToArmpit","waistToHips","shoulderToWrist","wrist"],"bruce":["hips","upperLeg","waistToHips","waistToUpperLeg"],"carlita":["biceps","chest","hpsToBust","hpsToWaistBack","neck","shoulderToShoulder","shoulderSlope","waistToArmpit","waistToHips","waist","waistToFloor","waistToSeat","seat","highBust","bustSpan","shoulderToElbow","shoulderToWrist","wrist"],"carlton":["biceps","chest","hpsToBust","hpsToWaistBack","neck","shoulderToShoulder","shoulderSlope","waistToArmpit","waistToHips","waist","waistToFloor","waistToSeat","seat","shoulderToElbow","shoulderToWrist","wrist"],"cathrin":["underbust","waist","hips","waistToUnderbust","waistToHips"],"charlie":["crossSeam","crossSeamFront","knee","seat","seatBack","waist","waistBack","waistToFloor","waistToKnee","waistToHips","waistToSeat","waistToUpperLeg"],"cornelius":["waist","hips","inseam","seat","waistToKnee","waistToHips","waistToFloor","knee"],"diana":["biceps","chest","hpsToBust","hpsToWaistBack","neck","shoulderToShoulder","shoulderSlope","waistToArmpit","waistToHips","hips","waist","shoulderToWrist","wrist"],"examples":["head"],"florence":["head"],"florent":["head"],"gozer":["hpsToWaistBack","waistToFloor","head"],"hi":[],"holmes":["head"],"hortensia":[],"huey":["biceps","chest","hpsToBust","hpsToWaistBack","neck","shoulderToShoulder","shoulderSlope","waistToArmpit","waistToHips","hips","shoulderToWrist","wrist","head"],"hugo":["biceps","chest","hpsToBust","hpsToWaistBack","neck","shoulderToShoulder","shoulderSlope","waistToArmpit","waistToHips","hips","shoulderToWrist","wrist","head"],"jaeger":["biceps","chest","hpsToBust","hpsToWaistBack","neck","shoulderToShoulder","shoulderSlope","waistToArmpit","waistToHips","hips","waist","shoulderToElbow","shoulderToWrist","wrist"],"legend":[],"lucy":[],"lunetius":["waistToKnee","waistToUpperLeg","waistToFloor","hpsToWaistBack","neck","shoulderToShoulder","shoulderToElbow","waistToHips"],"magde":[],"noble":["highBust","chest","underbust","waist","waistBack","bustSpan","neck","hpsToBust","hpsToWaistFront","hpsToWaistBack","shoulderToShoulder","shoulderSlope"],"octoplushy":[],"paco":["crossSeam","crossSeamFront","knee","seat","seatBack","waist","waistBack","waistToFloor","waistToKnee","waistToHips","waistToSeat","waistToUpperLeg","heel"],"penelope":["waist","seat","waistToHips","waistToSeat","waistToKnee"],"plugintest":["seat","seatBack","waist","waistBack","crossSeam","crossSeamFront"],"rendertest":[],"sandy":["waist","waistToFloor","waistToHips","hips"],"shelly":["neck","chest","hips","waistToHips","hpsToWaistBack","waistToArmpit","biceps","wrist","shoulderToWrist"],"shin":["hips","upperLeg","waistToUpperLeg","waistToHips"],"simon":["biceps","chest","hpsToBust","hpsToWaistBack","neck","shoulderToShoulder","shoulderSlope","waistToArmpit","waistToHips","waist","hips","shoulderToWrist","wrist"],"simone":["biceps","chest","hpsToBust","hpsToWaistBack","neck","shoulderToShoulder","shoulderSlope","waistToArmpit","waistToHips","waist","hips","highBust","bustSpan","shoulderToWrist","wrist"],"skully":[],"sven":["biceps","chest","hpsToBust","hpsToWaistBack","neck","shoulderToShoulder","shoulderSlope","waistToArmpit","waistToHips","hips","waist","shoulderToWrist","wrist"],"tamiko":["shoulderToShoulder","chest","hpsToWaistBack","shoulderSlope","waistToHips"],"teagan":["biceps","chest","hpsToBust","hpsToWaistBack","neck","shoulderToShoulder","shoulderSlope","waistToArmpit","waistToHips","hips","waist"],"tiberius":["head","shoulderToElbow","shoulderToShoulder","biceps","hpsToWaistBack","waistToKnee","waist","chest","seat","hips","waistToFloor","waistToUpperLeg"],"titan":["crossSeam","crossSeamFront","knee","seat","seatBack","waist","waistBack","waistToFloor","waistToKnee","waistToHips","waistToSeat","waistToUpperLeg"],"trayvon":["hpsToWaistBack","waistToHips","neck"],"uma":["waist","seat","waistToSeat","waistToUpperLeg"],"wahid":["biceps","chest","hpsToBust","hpsToWaistBack","neck","shoulderToShoulder","shoulderSlope","waistToArmpit","waistToHips","hips","waist"],"walburga":["head","shoulderToShoulder","hpsToWaistBack","waistToKnee","waistToHips","waistToFloor","waistToUpperLeg","neck"],"waralee":["seat","inseam","crotchDepth","waistToHips"],"yuri":["biceps","chest","hpsToBust","hpsToWaistBack","neck","shoulderToShoulder","shoulderSlope","waistToArmpit","waistToHips","hips","shoulderToWrist","wrist","head"],"otis":["waist"]} diff --git a/sites/shared/prebuild/data/design-options.mjs b/sites/shared/prebuild/data/design-options.mjs index 15cdf6aad9b..5f05f146987 100644 --- a/sites/shared/prebuild/data/design-options.mjs +++ b/sites/shared/prebuild/data/design-options.mjs @@ -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 options = {"aaron":{"brianFitSleeve":false,"brianFitCollar":false,"collarFactor":4.8,"bicepsEase":0.05,"chestEase":{"pct":8,"min":0,"max":20,"menu":"style"},"collarEase":0,"cuffEase":0,"draftForHighBust":{"bool":false,"menu":"fit"},"shoulderEase":0,"lengthBonus":{"pct":10,"min":-20,"max":60,"menu":"style"},"s3Collar":0,"s3Armhole":0,"acrossBackFactor":0.97,"armholeDepth":{"pct":2,"min":-10,"max":50},"armholeDepthFactor":0.6,"backNeckCutout":0.05,"frontArmholeDeeper":0,"shoulderSlopeReduction":0,"legacyArmholeDepth":{"bool":false,"menu":"advanced"},"hipsEase":{"pct":8,"min":0,"max":20,"menu":"fit"},"stretchFactor":{"pct":5,"min":0,"max":15,"menu":"fit"},"armholeDrop":{"pct":10,"min":0,"max":75,"menu":"style"},"necklineBend":{"pct":100,"min":40,"max":100,"menu":"style"},"necklineDrop":{"pct":20,"min":10,"max":35,"menu":"style"},"shoulderStrapWidth":{"pct":15,"min":10,"max":40,"menu":"style"},"shoulderStrapPlacement":{"pct":40,"min":20,"max":80,"menu":"style"},"backlineBend":{"pct":50,"min":25,"max":100,"menu":"style"},"knitBindingWidth":{"pct":600,"min":300,"max":800,"menu":"style"}},"albert":{"backOpening":{"pct":10,"min":0,"max":25,"menu":"fit"},"bibWidth":{"pct":100,"min":50,"max":125,"menu":"style"},"bibLength":{"pct":75,"min":0,"max":90,"menu":"style"},"lengthBonus":{"pct":0,"min":-20,"max":25,"menu":"style"},"chestDepth":{"pct":22,"min":15,"max":90,"menu":"fit"},"strapWidth":{"pct":60,"min":20,"max":100,"menu":"style"}},"bee":{"acrossBackFactor":0.925,"shoulderSlopeBack":1.23,"neckWidthBack":0.197,"neckWidthFront":0.17,"backDartLocation":0.145,"backCenterWaistReduction":0.35,"collarFactor":0.19,"bustSpanEase":{"pct":10,"min":0,"max":20,"menu":"fit"},"chestEase":{"pct":11,"min":5,"max":20,"menu":"fit"},"fullChestEaseReduction":{"pct":4,"min":0,"max":8,"menu":"fit"},"shoulderToShoulderEase":{"pct":-0.5,"min":-1,"max":5,"menu":"fit"},"waistEase":{"pct":5,"min":1,"max":20,"menu":"fit"},"backDartHeight":{"pct":46,"min":38,"max":54,"menu":"advanced"},"bustDartCurve":1,"bustDartLength":1,"waistDartLength":1,"armholeDepth":{"pct":44,"min":38,"max":46,"menu":"advanced"},"backArmholeCurvature":0.63,"backArmholePitchDepth":0.35,"backArmholeSlant":5,"frontArmholeCurvature":0.63,"frontArmholePitchDepth":{"pct":29,"max":31,"min":27,"menu":"advanced"},"backHemSlope":2.5,"backNeckCutout":0.06,"frontShoulderWidth":{"pct":95,"max":98,"min":92,"menu":"advanced"},"highBustWidth":{"pct":86,"max":92,"min":80,"menu":"advanced"},"ties":{"bool":true,"menu":"style"},"crossBackTies":{"bool":false,"menu":"style"},"bandLength":{"pct":85,"min":75,"max":90,"menu":"style"},"neckTieLength":{"pct":80,"min":70,"max":100,"menu":"style"},"neckTieWidth":{"pct":6,"min":2,"max":18,"snap":{"metric":[6,13,19,25,32,38],"imperial":[6.35,12.7,19.05,25.4,31.75,38.1]},"menu":"style"},"reversible":{"bool":false,"menu":"style"},"topDepth":{"pct":54,"min":50,"max":80,"menu":"fit"},"bottomCupDepth":{"pct":8,"min":0,"max":20,"menu":"fit"},"sideDepth":{"pct":20.6,"min":0,"max":30,"menu":"fit"},"sideCurve":{"pct":0,"min":-50,"max":50,"menu":"fit"},"frontCurve":{"pct":0,"min":-50,"max":50,"menu":"fit"},"bellaGuide":{"bool":false,"menu":"fit"},"pointedTieEnds":{"bool":false,"menu":"style"},"duoColorTies":{"bool":false,"menu":"style"},"bandTieWidth":{"pct":3,"min":1,"max":9,"snap":{"metric":[6,13,19,25,32,38],"imperial":[6.35,12.7,19.05,25.4,31.75,38.1]},"menu":"style"},"bandTieLength":{"pct":35,"min":30,"max":50,"menu":"style"}},"bella":{"acrossBackFactor":0.925,"shoulderSlopeBack":1.23,"neckWidthBack":0.197,"neckWidthFront":0.17,"backDartLocation":0.145,"backCenterWaistReduction":0.35,"collarFactor":0.19,"bustSpanEase":{"pct":10,"min":0,"max":20,"menu":"fit"},"chestEase":{"pct":11,"min":5,"max":20,"menu":"fit"},"fullChestEaseReduction":{"pct":4,"min":0,"max":8,"menu":"fit"},"shoulderToShoulderEase":{"pct":-0.5,"min":-1,"max":5,"menu":"fit"},"waistEase":{"pct":5,"min":1,"max":20,"menu":"fit"},"backDartHeight":{"pct":46,"min":38,"max":54,"menu":"darts"},"bustDartCurve":{"pct":100,"min":0,"max":100,"menu":"darts"},"bustDartLength":{"pct":90,"min":75,"max":100,"menu":"darts"},"waistDartLength":{"pct":90,"min":75,"max":95,"menu":"darts"},"armholeDepth":{"pct":44,"min":38,"max":46,"menu":"armhole"},"backArmholeCurvature":{"pct":63,"min":50,"max":85,"menu":"armhole"},"backArmholePitchDepth":{"pct":35,"max":40,"min":30,"menu":"armhole"},"backArmholeSlant":{"deg":5,"min":1,"max":9,"menu":"armhole"},"frontArmholeCurvature":{"pct":63,"min":50,"max":85,"menu":"armhole"},"frontArmholePitchDepth":{"pct":29,"max":31,"min":27,"menu":"armhole"},"backHemSlope":{"deg":2.5,"min":0,"max":5,"menu":"advanced"},"backNeckCutout":{"pct":6,"min":3,"max":9,"menu":"advanced"},"frontShoulderWidth":{"pct":95,"max":98,"min":92,"menu":"advanced"},"highBustWidth":{"pct":86,"max":92,"min":80,"menu":"advanced"}},"benjamin":{"transitionLength":2,"bandLength":0.17,"adjustmentRibbonWidth":20,"collarEase":{"pct":3,"min":0,"max":6,"menu":"fit"},"adjustmentRibbon":{"bool":false,"menu":"fit"},"tipWidth":{"pct":15,"min":0,"max":20,"menu":"style"},"knotWidth":{"pct":7,"min":5,"max":10,"menu":"style"},"bowLength":{"pct":28,"min":23,"max":33,"menu":"style"},"bowStyle":{"dflt":"butterfly","list":["diamond","butterfly","square","widesquare"],"menu":"style"},"endStyle":{"dflt":"straight","list":["straight","pointed","rounded"],"menu":"style"},"collarBandHeight":{"pct":6,"min":5,"max":8,"menu":"style"}},"bent":{"brianFitSleeve":true,"brianFitCollar":true,"collarFactor":4.8,"bicepsEase":{"pct":20,"min":10,"max":40,"menu":"fit"},"chestEase":{"pct":8,"min":-4,"max":20,"menu":"fit"},"collarEase":{"pct":3.5,"min":0,"max":10,"menu":"fit"},"cuffEase":{"pct":40,"min":2,"max":100,"menu":"fit"},"draftForHighBust":{"bool":false},"shoulderEase":{"pct":0,"min":-2,"max":6,"menu":"fit"},"lengthBonus":{"pct":0,"min":-4,"max":60,"menu":"fit"},"s3Collar":{"pct":0,"min":-100,"max":100,"menu":"style"},"s3Armhole":{"pct":0,"min":-100,"max":100,"menu":"style"},"acrossBackFactor":{"pct":97,"min":93,"max":100,"menu":"advanced"},"armholeDepth":{"pct":5,"min":-10,"max":50},"armholeDepthFactor":{"pct":60,"min":50,"max":70},"backNeckCutout":{"pct":5,"min":2,"max":8,"menu":"advanced"},"frontArmholeDeeper":{"pct":0.5,"min":0,"max":1.5,"menu":"advanced"},"shoulderSlopeReduction":{"pct":0,"min":0,"max":80,"menu":"advanced"},"legacyArmholeDepth":{"bool":false,"menu":"advanced"},"sleeveLengthBonus":{"pct":0,"min":-20,"max":15,"menu":"fit"},"sleeveBend":{"deg":10,"min":0,"max":20,"menu":"fit"},"sleevecapHeight":{"pct":45,"min":40,"max":60,"menu":"advanced"},"sleevecapEase":{"pct":1,"min":0,"max":10,"menu":"advanced"}},"bob":{"neckRatio":{"pct":80,"min":70,"max":90,"menu":"fit"},"widthRatio":{"pct":45,"min":35,"max":55,"menu":"fit"},"lengthRatio":{"pct":75,"min":55,"max":85,"menu":"fit"},"headSize":{"pct":100,"min":10,"max":200,"snap":5,"menu":"size"}},"breanna":{"collarFactor":4.8,"armholeDepthBase":0.6,"shoulderSeamLength":0.95,"sleeveWidthGuarantee":0.9,"breannaFitSleeve":true,"breannaFitCollar":true,"shoulderDart":{"bool":false,"menu":"fit"},"waistDart":{"bool":true,"menu":"fit"},"primaryBustDart":{"list":["06:00","07:00","08:00","09:00","10:00","11:00","11:30","12:00","12:30","13:00","13:30","14:00","15:00","16:00","17:00"],"dflt":"06:00","doNotTranslate":true,"menu":"style"},"secondaryBustDart":{"list":["none","06:00","07:00","08:00","09:00","10:00","11:00","11:30","12:00","12:30","13:00","13:30","14:00","15:00","16:00","17:00"],"dflt":"13:30","doNotTranslate":true,"menu":"style"},"acrossBackFactor":{"pct":96,"min":93,"max":100,"menu":"advanced"},"armholeDepthFactor":{"pct":100,"min":80,"max":120,"menu":"advanced"},"backNeckCutout":{"pct":5,"min":2,"max":8,"menu":"advanced"},"bicepsEase":{"pct":15,"min":0,"max":50,"menu":"fit"},"shoulderDartSize":{"pct":7,"min":4,"max":10},"shoulderDartLength":{"pct":85,"min":60,"max":100},"waistDartSize":{"pct":10,"min":4,"max":15},"waistDartLength":{"pct":85,"min":60,"max":100},"verticalEase":{"pct":2,"min":0,"max":8,"menu":"fit"},"frontArmholeDeeper":{"pct":1,"min":0,"max":5,"menu":"advanced"},"shoulderEase":{"pct":0,"min":0,"max":4,"menu":"fit"},"collarEase":{"pct":3.5,"min":0,"max":10,"menu":"fit"},"chestEase":{"pct":10,"min":5,"max":20,"menu":"fit"},"waistEase":{"pct":10,"min":5,"max":20,"menu":"fit"},"primaryBustDartShaping":{"pct":50,"min":25,"max":75,"menu":"style"},"primaryBustDartLength":{"pct":85,"min":65,"max":95,"menu":"style"},"secondaryBustDartLength":{"pct":85,"min":65,"max":95,"menu":"style"},"shoulderSlopeReduction":{"pct":0,"min":0,"max":100,"menu":"advanced"},"frontScyeDart":{"pct":25,"min":0,"max":45,"menu":"fit"},"sleevecapEase":{"pct":0.5,"min":0,"max":2.5,"menu":"advanced.sleevecap"},"sleevecapTopFactorX":{"pct":50,"min":25,"max":75,"menu":"advanced.sleevecap"},"sleevecapTopFactorY":{"pct":110,"min":35,"max":165,"menu":"advanced.sleevecap"},"sleevecapBackFactorX":{"pct":45,"min":35,"max":55,"menu":"advanced.sleevecap"},"sleevecapBackFactorY":{"pct":33,"min":30,"max":65,"menu":"advanced.sleevecap"},"sleevecapFrontFactorX":{"pct":55,"min":35,"max":65,"menu":"advanced.sleevecap"},"sleevecapFrontFactorY":{"pct":33,"min":30,"max":65,"menu":"advanced.sleevecap"},"sleevecapQ1Offset":{"pct":3,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ2Offset":{"pct":5.5,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ3Offset":{"pct":4.5,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ4Offset":{"pct":1,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ1Spread1":{"pct":10,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ1Spread2":{"pct":12.5,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ2Spread1":{"pct":12.5,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ2Spread2":{"pct":12.5,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ3Spread1":{"pct":12.5,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ3Spread2":{"pct":8,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ4Spread1":{"pct":7,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ4Spread2":{"pct":7,"min":4,"max":20,"menu":"advanced.sleevecap"},"cuffEase":{"pct":20,"min":0,"max":50,"menu":"fit"},"sleeveLengthBonus":{"pct":0,"min":-40,"max":10,"menu":"style"}},"brian":{"brianFitSleeve":true,"brianFitCollar":true,"collarFactor":4.8,"bicepsEase":{"pct":15,"min":0,"max":50,"menu":"fit"},"chestEase":{"pct":15,"min":-4,"max":35,"menu":"fit"},"collarEase":{"pct":5,"min":0,"max":10,"menu":"fit"},"cuffEase":{"pct":20,"min":0,"max":200,"menu":"fit"},"draftForHighBust":{"bool":false},"shoulderEase":{"pct":0,"min":-2,"max":6,"menu":"fit"},"lengthBonus":{"pct":0,"min":-4,"max":60,"menu":"style"},"s3Collar":{"pct":0,"min":-100,"max":100,"menu":"style"},"s3Armhole":{"pct":0,"min":-100,"max":100,"menu":"style"},"acrossBackFactor":{"pct":98,"min":93,"max":100,"menu":"advanced"},"armholeDepth":{"pct":2,"min":-10,"max":50},"armholeDepthFactor":{"pct":55,"min":50,"max":70},"backNeckCutout":{"pct":5,"min":2,"max":8,"menu":"advanced"},"frontArmholeDeeper":{"pct":0.2,"min":0,"max":0.5,"menu":"advanced"},"shoulderSlopeReduction":{"pct":0,"min":0,"max":80,"menu":"advanced"},"legacyArmholeDepth":{"bool":false,"menu":"advanced"},"sleevecapEase":{"pct":0,"min":0,"max":10,"menu":"advanced.sleevecap"},"sleevecapTopFactorX":{"pct":50,"min":25,"max":75,"menu":"advanced.sleevecap"},"sleevecapTopFactorY":{"pct":45,"min":35,"max":125,"menu":"advanced.sleevecap"},"sleevecapBackFactorX":{"pct":60,"min":35,"max":65,"menu":"advanced.sleevecap"},"sleevecapBackFactorY":{"pct":33,"min":30,"max":65,"menu":"advanced.sleevecap"},"sleevecapFrontFactorX":{"pct":55,"min":35,"max":65,"menu":"advanced.sleevecap"},"sleevecapFrontFactorY":{"pct":33,"min":30,"max":65,"menu":"advanced.sleevecap"},"sleevecapQ1Offset":{"pct":1.7,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ2Offset":{"pct":3.5,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ3Offset":{"pct":2.5,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ4Offset":{"pct":1,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ1Spread1":{"pct":10,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ1Spread2":{"pct":15,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ2Spread1":{"pct":15,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ2Spread2":{"pct":10,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ3Spread1":{"pct":10,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ3Spread2":{"pct":8,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ4Spread1":{"pct":7,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ4Spread2":{"pct":6.3,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleeveWidthGuarantee":{"pct":90,"min":25,"max":100,"menu":"advanced"},"sleeveLengthBonus":{"pct":0,"min":-40,"max":10,"menu":"style"}},"bruce":{"hipRatioFront":0.245,"hipRatioBack":0.315,"legRatioInset":0.3,"legRatioBack":0.32,"gussetRatio":0.0666,"gussetInsetRatio":0.6,"heightRatioInset":0.65,"bulge":{"deg":20,"min":0,"max":40,"menu":"fit"},"legBonus":{"pct":0,"min":-10,"max":20,"menu":"style"},"rise":{"pct":10,"min":0,"max":25,"menu":"style"},"stretch":{"pct":15,"min":5,"max":25,"menu":"fit"},"legStretch":{"pct":40,"min":25,"max":45,"menu":"fit"},"backRise":{"pct":5,"min":0,"max":10,"menu":"fit"}},"carlita":{"brianFitSleeve":true,"brianFitCollar":true,"collarFactor":4.8,"bicepsEase":{"pct":20,"min":0,"max":50,"menu":"fit"},"chestEase":{"pct":10,"min":5,"max":20,"menu":"fit"},"collarEase":0.145,"cuffEase":{"pct":60,"min":30,"max":100,"menu":"fit"},"draftForHighBust":true,"shoulderEase":{"pct":0,"min":-2,"max":6,"menu":"fit"},"lengthBonus":0,"s3Collar":{"pct":0,"min":-100,"max":100,"menu":"style"},"s3Armhole":{"pct":0,"min":-100,"max":100,"menu":"style"},"acrossBackFactor":{"pct":97,"min":93,"max":100,"menu":"fit"},"armholeDepth":{"pct":5,"min":-10,"max":50},"armholeDepthFactor":{"pct":65,"min":50,"max":70,"menu":"fit"},"backNeckCutout":{"pct":5,"min":2,"max":8,"menu":"advanced"},"frontArmholeDeeper":{"pct":0.5,"min":0,"max":1.5,"menu":"advanced"},"shoulderSlopeReduction":{"pct":12,"min":0,"max":80,"menu":"advanced"},"legacyArmholeDepth":{"bool":false,"menu":"advanced"},"buttonSpacingHorizontal":{"pct":43.5,"min":15,"max":60,"menu":"style"},"length":{"pct":69,"min":35,"max":100,"menu":"style"},"lapelReduction":{"pct":5,"min":0,"max":10,"menu":"advanced"},"frontOverlap":{"pct":1.5,"min":1,"max":2,"menu":"advanced"},"pocketPlacementHorizontal":{"pct":11,"min":5,"max":20,"menu":"pockets"},"pocketPlacementVertical":{"pct":6,"min":5,"max":60,"menu":"pockets"},"pocketWidth":{"pct":95,"min":70,"max":120,"menu":"pockets"},"pocketHeight":{"pct":15,"min":0,"max":40,"menu":"pockets"},"pocketRadius":{"pct":20,"min":0,"max":50,"menu":"pockets"},"pocketFlapRadius":{"pct":15,"min":0,"max":50,"menu":"pockets"},"chestPocketPlacement":{"pct":55,"min":30,"max":65,"menu":"pockets"},"chestPocketAngle":0,"chestPocketHeight":{"pct":60,"min":40,"max":80,"menu":"pockets"},"chestPocketWidth":{"pct":25,"min":15,"max":50,"menu":"pockets"},"innerPocketPlacement":{"pct":53,"min":42,"max":62,"menu":"pockets"},"innerPocketWidth":{"pct":50,"min":45,"max":65,"menu":"pockets"},"waistEase":{"pct":14,"min":8,"max":25,"menu":"fit"},"seatEase":{"pct":14,"min":8,"max":25,"menu":"fit"},"innerPocketWeltHeight":{"pct":3.5,"min":2.5,"max":5,"menu":"pockets"},"contour":{"pct":50,"min":25,"max":75,"menu":"advanced"},"backPleat":0.048,"beltWidth":{"pct":15,"min":10,"max":20,"menu":"style"},"sleeveLengthBonus":{"pct":7,"min":0,"max":20,"menu":"fit"},"sleeveBend":{"deg":10,"min":0,"max":20,"menu":"fit"},"sleevecapHeight":{"pct":45,"min":40,"max":60,"menu":"advanced"},"sleevecapEase":{"pct":1,"min":0,"max":10,"menu":"advanced"},"cuffLength":{"pct":15,"min":10,"max":20,"menu":"style"},"chestShapingMax":5,"collarHeight":{"pct":9.6,"min":8,"max":11,"menu":"collar"},"collarFlare":{"pct":20,"min":0,"max":40,"menu":"collar"},"collarSpread":{"deg":4,"min":2,"max":6,"menu":"collar"},"innerPocketDepth":{"pct":110,"min":75,"max":140,"menu":"pockets"}},"carlton":{"brianFitSleeve":true,"brianFitCollar":true,"collarFactor":4.8,"bicepsEase":{"pct":20,"min":0,"max":50,"menu":"fit"},"chestEase":{"pct":10,"min":5,"max":20,"menu":"fit"},"collarEase":0.145,"cuffEase":{"pct":60,"min":30,"max":100,"menu":"fit"},"draftForHighBust":{"bool":false,"menu":"fit"},"shoulderEase":{"pct":0,"min":-2,"max":6,"menu":"fit"},"lengthBonus":0,"s3Collar":{"pct":0,"min":-100,"max":100,"menu":"style"},"s3Armhole":{"pct":0,"min":-100,"max":100,"menu":"style"},"acrossBackFactor":{"pct":97,"min":93,"max":100,"menu":"fit"},"armholeDepth":{"pct":5,"min":-10,"max":50},"armholeDepthFactor":{"pct":65,"min":50,"max":70,"menu":"fit"},"backNeckCutout":{"pct":5,"min":2,"max":8,"menu":"advanced"},"frontArmholeDeeper":{"pct":0.5,"min":0,"max":1.5,"menu":"advanced"},"shoulderSlopeReduction":{"pct":12,"min":0,"max":80,"menu":"advanced"},"legacyArmholeDepth":{"bool":false,"menu":"advanced"},"buttonSpacingHorizontal":{"pct":43.5,"min":15,"max":60,"menu":"style"},"length":{"pct":69,"min":35,"max":100,"menu":"style"},"lapelReduction":{"pct":5,"min":0,"max":10,"menu":"advanced"},"frontOverlap":{"pct":1.5,"min":1,"max":2,"menu":"advanced"},"pocketPlacementHorizontal":{"pct":11,"min":5,"max":20,"menu":"pockets"},"pocketPlacementVertical":{"pct":6,"min":5,"max":60,"menu":"pockets"},"pocketWidth":{"pct":95,"min":70,"max":120,"menu":"pockets"},"pocketHeight":{"pct":15,"min":0,"max":40,"menu":"pockets"},"pocketRadius":{"pct":20,"min":0,"max":50,"menu":"pockets"},"pocketFlapRadius":{"pct":15,"min":0,"max":50,"menu":"pockets"},"chestPocketPlacement":{"pct":55,"min":30,"max":65,"menu":"pockets"},"chestPocketAngle":{"deg":4,"min":0,"max":6,"menu":"pockets"},"chestPocketHeight":{"pct":60,"min":40,"max":80,"menu":"pockets"},"chestPocketWidth":{"pct":25,"min":15,"max":50,"menu":"pockets"},"innerPocketPlacement":{"pct":53,"min":42,"max":62,"menu":"pockets"},"innerPocketWidth":{"pct":50,"min":45,"max":65,"menu":"pockets"},"waistEase":{"pct":14,"min":8,"max":25,"menu":"fit"},"seatEase":{"pct":14,"min":8,"max":25,"menu":"fit"},"innerPocketWeltHeight":{"pct":3.5,"min":2.5,"max":5,"menu":"pockets"},"backPleat":0.048,"beltWidth":{"pct":15,"min":10,"max":20,"menu":"style"},"sleeveLengthBonus":{"pct":7,"min":0,"max":20,"menu":"fit"},"sleeveBend":{"deg":10,"min":0,"max":20,"menu":"fit"},"sleevecapHeight":{"pct":45,"min":40,"max":60,"menu":"advanced"},"sleevecapEase":{"pct":1,"min":0,"max":10,"menu":"advanced"},"cuffLength":{"pct":15,"min":10,"max":20,"menu":"style"},"chestShapingMax":5,"collarHeight":{"pct":9.6,"min":8,"max":11,"menu":"collar"},"collarFlare":{"pct":20,"min":0,"max":40,"menu":"collar"},"collarSpread":{"deg":4,"min":2,"max":6,"menu":"collar"},"innerPocketDepth":{"pct":110,"min":75,"max":140,"menu":"pockets"}},"cathrin":{"waistReduction":{"pct":10,"min":2,"max":20,"menu":"fit"},"panels":{"list":["11","13"],"dflt":"13","menu":"fit"},"backOpening":{"pct":4,"min":3,"max":10,"menu":"style"},"backRise":{"pct":15,"min":1,"max":25,"menu":"style"},"backDrop":{"pct":2,"min":0,"max":5,"menu":"style"},"frontRise":{"pct":4,"min":0.1,"max":8,"menu":"style"},"frontDrop":{"pct":5,"min":0,"max":10,"menu":"style"},"hipRise":{"pct":5,"min":0,"max":15,"menu":"style"}},"charlie":{"fitCrossSeam":true,"fitCrossSeamFront":true,"fitCrossSeamBack":true,"fitGuides":false,"waistEase":{"pct":1,"min":0,"max":5,"menu":"fit"},"seatEase":{"pct":5,"min":0,"max":10,"menu":"fit"},"kneeEase":{"pct":15,"min":10,"max":30,"menu":"fit"},"waistHeight":{"pct":-4,"min":-15,"max":40,"menu":"style"},"lengthBonus":{"pct":2,"min":-20,"max":10,"menu":"style"},"crotchDrop":{"pct":2,"min":0,"max":15,"menu":"style"},"fitKnee":true,"legBalance":{"pct":57.5,"min":52.5,"max":62.5,"menu":"advanced"},"crossSeamCurveStart":{"pct":85,"min":60,"max":100,"menu":"advanced"},"crossSeamCurveBend":{"pct":65,"min":45,"max":85,"menu":"advanced"},"crossSeamCurveAngle":{"deg":12,"min":0,"max":20,"menu":"advanced"},"crotchSeamCurveStart":{"pct":80,"min":60,"max":95,"menu":"advanced"},"crotchSeamCurveBend":{"pct":80,"min":45,"max":100,"menu":"advanced"},"crotchSeamCurveAngle":{"deg":25,"min":0,"max":35,"menu":"advanced"},"waistBalance":{"pct":55,"min":30,"max":90,"menu":"advanced"},"grainlinePosition":{"pct":50,"min":30,"max":60,"menu":"advanced"},"waistbandWidth":{"pct":3,"min":1,"max":6,"snap":{"metric":[3.5,5,10,12,20,25,30,40,50,60,80,100,120],"imperial":[3.175,6.35,9.524999999999999,12.7,15.875,19.049999999999997,25.4,31.75,38.099999999999994,44.449999999999996,50.8,76.19999999999999,101.6,127]},"menu":"style"},"waistbandReduction":0.25,"waistbandFactor":0.1,"frontPocketSlantDepth":{"pct":85,"min":70,"max":100,"menu":"pockets.frontpockets"},"frontPocketSlantWidth":{"pct":25,"min":15,"max":35,"menu":"pockets.frontpockets"},"frontPocketSlantRound":{"pct":30,"min":5,"max":50,"menu":"pockets.frontpockets"},"frontPocketSlantBend":{"pct":25,"min":5,"max":50,"menu":"pockets.frontpockets"},"frontPocketWidth":{"pct":55,"min":45,"max":65,"menu":"pockets.frontpockets"},"frontPocketDepth":{"pct":100,"min":85,"max":110,"menu":"pockets.frontpockets"},"frontPocketFacing":{"pct":45,"min":25,"max":65,"menu":"pockets.frontpockets"},"flyCurve":{"pct":72,"min":50,"max":100,"menu":"advanced.fly"},"flyLength":{"pct":45,"min":30,"max":60,"menu":"advanced.fly"},"flyWidth":{"pct":15,"min":10,"max":20,"menu":"advanced.fly"},"backPocketVerticalPlacement":{"pct":24,"min":18,"max":30,"menu":"pockets.backpockets"},"backPocketHorizontalPlacement":{"pct":55,"min":48,"max":62,"menu":"pockets.backpockets"},"backPocketWidth":{"pct":55,"min":50,"max":60,"menu":"pockets.backpockets"},"backPocketDepth":{"pct":60,"min":40,"max":80,"menu":"pockets.backpockets"},"backPocketFacing":{"bool":true,"menu":"pockets.backpockets"},"waistbandCurve":{"pct":0,"min":0,"max":35,"menu":"fit"},"beltLoops":{"count":8,"min":6,"max":12,"menu":"advanced"}},"cornelius":{"pctAtoO":0.5,"pctAtoC":0.25,"pctUtoA":0.25,"pctJtoA":0.25,"pctSeatAdjustment":0.5,"ventLength":{"pct":70,"min":25,"max":110,"menu":"style"},"fullness":{"pct":0,"min":0,"max":55,"menu":"fit"},"waistbandBelowWaist":{"pct":5,"min":0,"max":15,"menu":"style"},"waistReduction":{"pct":1,"min":-2,"max":10,"menu":"fit"},"bandBelowKnee":{"pct":25,"min":15,"max":50,"menu":"advanced"},"pctZtoR":0.35,"pctRtoZin":0.75,"pctRtoZup":0.25,"pctRtoKin":0.75,"pctRtoKdown":0.25,"pctKtoRout":0.15,"pctKtoRup":0.25,"pctKtoH":0.7,"flyWidth":{"pct":0.38,"min":0.2,"max":0.6,"menu":"style"},"kneeToBelow":{"pct":94,"min":85,"max":110,"menu":"advanced"},"cuffWidth":{"pct":0,"min":-50,"max":150,"menu":"style"},"cuffStyle":{"dflt":"elegant","list":["traditional","elegant","keystone"],"menu":"style"}},"diana":{"brianFitSleeve":true,"brianFitCollar":true,"collarFactor":5,"bicepsEase":{"pct":0,"min":-5,"max":50,"menu":"fit"},"chestEase":{"pct":0,"min":-10,"max":20,"menu":"fit"},"collarEase":0,"cuffEase":{"pct":20,"min":0,"max":30,"menu":"fit"},"draftForHighBust":{"bool":false,"menu":"fit"},"shoulderEase":{"pct":0,"min":-2,"max":6,"menu":"fit"},"lengthBonus":{"pct":0,"min":0,"max":50,"menu":"fit"},"s3Collar":0,"s3Armhole":0,"acrossBackFactor":{"pct":97,"min":93,"max":100,"menu":"advanced"},"armholeDepth":{"pct":0,"min":0,"max":20,"menu":"advanced"},"armholeDepthFactor":{"pct":55,"min":50,"max":70,"menu":"advanced"},"backNeckCutout":0.05,"frontArmholeDeeper":{"pct":0,"min":0,"max":1.5,"menu":"advanced"},"shoulderSlopeReduction":0,"legacyArmholeDepth":{"bool":false,"menu":"advanced"},"drapeAngle":{"deg":20,"min":10,"max":30,"menu":"style"},"sleeveLengthBonus":{"pct":0,"min":-40,"max":10,"menu":"fit"},"shoulderSeamLength":{"pct":35,"min":0.1,"max":60,"menu":"style"},"waistEase":{"pct":0,"min":-10,"max":20,"menu":"fit"},"hipsEase":{"pct":0,"min":-10,"max":20,"menu":"fit"},"sleevecapEase":{"pct":0,"min":0,"max":10,"menu":"advanced.sleevecap"},"sleevecapTopFactorX":{"pct":50,"min":25,"max":75,"menu":"advanced.sleevecap"},"sleevecapTopFactorY":{"pct":100,"min":35,"max":165,"menu":"advanced.sleevecap"},"sleevecapBackFactorX":{"pct":60,"min":35,"max":65,"menu":"advanced.sleevecap"},"sleevecapBackFactorY":{"pct":33,"min":30,"max":65,"menu":"advanced.sleevecap"},"sleevecapFrontFactorX":{"pct":55,"min":35,"max":65,"menu":"advanced.sleevecap"},"sleevecapFrontFactorY":{"pct":33,"min":30,"max":65,"menu":"advanced.sleevecap"},"sleevecapQ1Offset":{"pct":3,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ2Offset":{"pct":5.5,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ3Offset":{"pct":4.5,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ4Offset":{"pct":1,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ1Spread1":{"pct":6,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ1Spread2":{"pct":15,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ2Spread1":{"pct":15,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ2Spread2":{"pct":10,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ3Spread1":{"pct":10,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ3Spread2":{"pct":8,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ4Spread1":{"pct":7,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ4Spread2":{"pct":7,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleeveWidthGuarantee":{"pct":90,"min":25,"max":100,"menu":"advanced"}},"examples":{"size":{"pct":50,"min":5,"max":100,"menu":"stack"},"x":{"pct":0,"min":-100,"max":100,"menu":"stack"},"y":{"pct":0,"min":-100,"max":100,"menu":"stack"},"stackIt":{"dflt":"Do stack","list":["Do stack","Do not stack"],"menu":"stack"}},"florence":{"length":{"pct":40,"min":35,"max":45,"menu":"fit"},"height":{"pct":26,"min":23,"max":29,"menu":"fit"},"curve":{"pct":12.5,"min":10,"max":15,"menu":"fit"}},"florent":{"topSide":0.8,"brim":0,"headEase":{"pct":2,"min":0,"max":5,"menu":"fit"}},"hi":{"length":1000,"size":{"pct":100,"min":5,"max":500,"menu":"style"},"nosePointiness":{"pct":0,"min":-5,"max":10,"menu":"style"},"aggressive":{"bool":false,"menu":"style"},"hungry":{"pct":50,"min":0,"max":100,"menu":"style"}},"holmes":{"headEase":{"pct":3,"min":0,"max":9,"snap":{"metric":[6,13,19,25,32,38,44,50],"imperial":[6.35,12.7,19.05,25.4,31.75,38.1,44.45,50.8]},"menu":"fit"},"lengthRatio":{"pct":55,"min":40,"max":60,"menu":"style"},"gores":{"count":6,"min":4,"max":20,"menu":"style"},"visorAngle":{"deg":45,"min":10,"max":90,"menu":"style"},"visorWidth":{"pct":5,"min":1,"max":17,"snap":5,"menu":"style"},"visorLength":{"pct":100,"min":80,"max":150,"menu":"advanced"},"earLength":{"pct":100,"min":80,"max":150,"menu":"style"},"earWidth":{"pct":100,"min":80,"max":150,"menu":"style"},"buttonhole":{"bool":false,"menu":"style"}},"hortensia":{"width":230,"height":330,"size":{"pct":50,"min":20,"max":200,"menu":"style"},"zipperSize":{"dflt":"#5","list":["#3","#4","#4.5","#5","#6","#8","#10","invisible"],"menu":"style"},"minHandleSpaceWidth":80,"maxHandleSpaceWidth":250,"pctHandleSpace":50,"pctHandleVert":42,"handleWidth":{"pct":8.6,"min":4,"max":25,"menu":"style"},"strapLength":{"pct":160,"min":75,"max":250,"menu":"style"}},"huey":{"brianFitSleeve":true,"brianFitCollar":true,"collarFactor":4.8,"bicepsEase":{"pct":15,"min":0,"max":50,"menu":"fit"},"chestEase":{"pct":15,"min":-4,"max":35,"menu":"fit"},"collarEase":{"pct":5,"min":0,"max":10,"menu":"fit"},"cuffEase":{"pct":20,"min":0,"max":200,"menu":"fit"},"draftForHighBust":{"bool":false},"shoulderEase":{"pct":0,"min":-2,"max":6,"menu":"fit"},"lengthBonus":{"pct":0,"min":-4,"max":60,"menu":"style"},"s3Collar":{"pct":0,"min":-100,"max":100,"menu":"style"},"s3Armhole":{"pct":0,"min":-100,"max":100,"menu":"style"},"acrossBackFactor":{"pct":98,"min":93,"max":100,"menu":"advanced"},"armholeDepth":{"pct":2,"min":-10,"max":50},"armholeDepthFactor":{"pct":55,"min":50,"max":70},"backNeckCutout":{"pct":5,"min":2,"max":8,"menu":"advanced"},"frontArmholeDeeper":{"pct":0.2,"min":0,"max":0.5,"menu":"advanced"},"shoulderSlopeReduction":{"pct":0,"min":0,"max":80,"menu":"advanced"},"legacyArmholeDepth":{"bool":false,"menu":"advanced"},"ribbing":{"bool":true,"menu":"style"},"ribbingHeight":{"pct":10,"min":5,"max":15,"menu":"style"},"hipsEase":{"pct":8,"min":4,"max":12,"menu":"fit"},"pocket":{"bool":true,"menu":"style"},"pocketHeight":{"pct":30,"min":25,"max":35,"menu":"style"},"pocketWidth":{"pct":60,"min":50,"max":70,"menu":"style"},"sleevecapEase":{"pct":0,"min":0,"max":10,"menu":"advanced.sleevecap"},"sleevecapTopFactorX":{"pct":50,"min":25,"max":75,"menu":"advanced.sleevecap"},"sleevecapTopFactorY":{"pct":45,"min":35,"max":125,"menu":"advanced.sleevecap"},"sleevecapBackFactorX":{"pct":60,"min":35,"max":65,"menu":"advanced.sleevecap"},"sleevecapBackFactorY":{"pct":33,"min":30,"max":65,"menu":"advanced.sleevecap"},"sleevecapFrontFactorX":{"pct":55,"min":35,"max":65,"menu":"advanced.sleevecap"},"sleevecapFrontFactorY":{"pct":33,"min":30,"max":65,"menu":"advanced.sleevecap"},"sleevecapQ1Offset":{"pct":1.7,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ2Offset":{"pct":3.5,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ3Offset":{"pct":2.5,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ4Offset":{"pct":1,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ1Spread1":{"pct":10,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ1Spread2":{"pct":15,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ2Spread1":{"pct":15,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ2Spread2":{"pct":10,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ3Spread1":{"pct":10,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ3Spread2":{"pct":8,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ4Spread1":{"pct":7,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ4Spread2":{"pct":6.3,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleeveWidthGuarantee":{"pct":90,"min":25,"max":100,"menu":"advanced"},"sleeveLengthBonus":{"pct":0,"min":-40,"max":10,"menu":"style"},"hoodHeight":{"pct":59,"min":55,"max":65,"menu":"style"},"hoodCutback":{"pct":10,"min":5,"max":15,"menu":"style"},"hoodClosure":{"pct":13.5,"min":10,"max":15,"menu":"style"},"hoodDepth":{"pct":8.5,"min":5,"max":12,"menu":"style"},"hoodAngle":{"deg":5,"min":2,"max":8,"menu":"style"},"ribbingStretch":{"pct":15,"min":0,"max":30,"menu":"fit"}},"hugo":{"brianFitSleeve":true,"brianFitCollar":true,"collarFactor":4.8,"bicepsEase":{"pct":15,"min":0,"max":50,"menu":"fit"},"chestEase":{"pct":8,"min":4,"max":20,"menu":"fit"},"collarEase":0.05,"cuffEase":{"pct":20,"min":10,"max":50,"menu":"fit"},"draftForHighBust":{"bool":false,"menu":"fit"},"shoulderEase":0,"lengthBonus":{"pct":10,"min":0,"max":20,"menu":"style"},"s3Collar":0,"s3Armhole":0,"acrossBackFactor":{"pct":98,"min":93,"max":100,"menu":"advanced"},"armholeDepth":{"pct":2,"min":-10,"max":50},"armholeDepthFactor":0.5,"backNeckCutout":{"pct":5,"min":2,"max":8,"menu":"advanced"},"frontArmholeDeeper":0,"shoulderSlopeReduction":0,"legacyArmholeDepth":{"bool":false,"menu":"advanced"},"hipsEase":{"pct":12,"min":4,"max":20,"menu":"fit"},"ribbingHeight":{"pct":10,"min":4,"max":20,"menu":"style"},"pocketWidth":{"pct":50,"min":35,"max":65,"menu":"style"},"sleevecapEase":0,"sleevecapTopFactorX":0.5,"sleevecapTopFactorY":0.45,"sleevecapBackFactorX":0.6,"sleevecapBackFactorY":0.33,"sleevecapFrontFactorX":0.55,"sleevecapFrontFactorY":0.33,"sleevecapQ1Offset":0.017,"sleevecapQ2Offset":0.035,"sleevecapQ3Offset":0.025,"sleevecapQ4Offset":0.01,"sleevecapQ1Spread1":0.1,"sleevecapQ1Spread2":0.15,"sleevecapQ2Spread1":0.15,"sleevecapQ2Spread2":0.1,"sleevecapQ3Spread1":0.1,"sleevecapQ3Spread2":0.08,"sleevecapQ4Spread1":0.07,"sleevecapQ4Spread2":0.063,"sleeveWidthGuarantee":0.9,"sleeveLengthBonus":{"pct":2,"min":0,"max":10,"menu":"style"},"ribbingStretch":{"pct":5,"min":0,"max":10,"menu":"fit"}},"jaeger":{"brianFitSleeve":true,"brianFitCollar":true,"collarFactor":4.8,"bicepsEase":{"pct":15,"min":0,"max":50,"menu":"fit"},"chestEase":{"pct":15,"min":-4,"max":35,"menu":"fit"},"collarEase":{"pct":5,"min":0,"max":10,"menu":"fit"},"cuffEase":{"pct":20,"min":0,"max":200,"menu":"fit"},"draftForHighBust":{"bool":false},"shoulderEase":{"pct":0,"min":-2,"max":6,"menu":"fit"},"lengthBonus":{"pct":19,"min":10,"max":25,"menu":"fit"},"s3Collar":0,"s3Armhole":0,"acrossBackFactor":{"pct":98,"min":93,"max":100,"menu":"advanced"},"armholeDepth":{"pct":2,"min":-10,"max":50},"armholeDepthFactor":{"pct":55,"min":50,"max":70},"backNeckCutout":{"pct":5,"min":2,"max":8,"menu":"advanced"},"frontArmholeDeeper":{"pct":0.2,"min":0,"max":0.5,"menu":"advanced"},"shoulderSlopeReduction":{"pct":0,"min":0,"max":80,"menu":"advanced"},"legacyArmholeDepth":{"bool":false,"menu":"advanced"},"centerBackDart":{"pct":0.5,"min":0,"max":1.5,"menu":"fit"},"hipsEase":{"pct":12,"min":8,"max":20,"menu":"fit"},"waistEase":{"pct":14,"min":8,"max":25,"menu":"fit"},"rollLineCollarHeight":{"pct":6,"min":5,"max":9,"menu":"collar"},"reduceWaistStandardFraction":0.08,"reduceWaistDartFraction":0.05,"reduceHipsStandardFraction":0.1,"centerFrontHemDrop":{"pct":2,"min":0,"max":4,"menu":"style"},"frontPocketPlacement":{"pct":75,"min":65,"max":85,"menu":"pockets"},"frontPocketWidth":{"pct":68,"min":55,"max":75,"menu":"pockets"},"frontPocketDepth":{"pct":110,"min":80,"max":130,"menu":"pockets"},"frontPocketRadius":{"pct":10,"min":0,"max":50,"menu":"pockets"},"frontDartPlacement":{"pct":55,"min":45,"max":60,"menu":"advanced"},"sideFrontPlacement":{"pct":85,"min":80,"max":90,"menu":"advanced"},"frontOverlap":{"pct":1.5,"min":1,"max":2,"menu":"advanced"},"innerPocketPlacement":{"pct":52,"min":42,"max":62,"menu":"pockets"},"innerPocketWidth":{"pct":50,"min":45,"max":65,"menu":"pockets"},"innerPocketDepth":{"pct":110,"min":75,"max":140,"menu":"pockets"},"innerPocketWeltHeight":{"pct":3.5,"min":2.5,"max":5,"menu":"pockets"},"frontCutawayAngle":{"deg":2.5,"min":1,"max":4,"menu":"style"},"frontCutawayStart":{"pct":30,"min":10,"max":70,"menu":"style"},"frontCutawayEnd":{"pct":40,"min":10,"max":40,"menu":"style"},"hemRadius":{"pct":100,"min":35,"max":100,"menu":"style"},"chestPocketDepth":{"pct":110,"min":70,"max":150,"menu":"pockets"},"chestPocketWidth":{"pct":37,"min":30,"max":45,"menu":"pockets"},"chestPocketPlacement":{"pct":52,"min":40,"max":60,"menu":"pockets"},"chestPocketAngle":{"deg":2.5,"min":0,"max":7,"menu":"pockets"},"chestPocketWeltSize":{"pct":17.5,"min":10,"max":25,"menu":"pockets"},"lapelStart":{"pct":10,"min":0,"max":35,"menu":"style"},"collarHeight":{"pct":9,"min":7,"max":10,"menu":"collar"},"collarNotchDepth":{"pct":15,"min":15,"max":50,"menu":"collar"},"collarNotchAngle":{"deg":45,"min":30,"max":60,"menu":"collar"},"collarNotchReturn":{"pct":100,"min":50,"max":100,"menu":"collar"},"chestShaping":{"pct":30,"min":0,"max":100,"menu":"advanced"},"buttons":{"list":["1","2","3"],"dflt":"2","menu":"style"},"buttonLength":{"pct":30,"min":30,"max":60,"menu":"style"},"chestShapingMax":5,"lapelReduction":{"pct":5,"min":0,"max":10,"menu":"style"},"backVent":{"count":1,"min":0,"max":2,"menu":"style"},"backVentLength":{"pct":35,"min":15,"max":100,"menu":"style"},"collarSpread":{"deg":13,"min":5,"max":35,"menu":"collar"},"collarRoll":{"pct":5,"min":0,"max":10,"menu":"collar"},"pocketFoldover":{"pct":25,"min":15,"max":35,"menu":"pockets"},"sleeveLengthBonus":{"pct":0,"min":-20,"max":15,"menu":"fit"},"sleeveBend":{"deg":10,"min":0,"max":20,"menu":"fit"},"sleevecapHeight":{"pct":45,"min":40,"max":60,"menu":"advanced"},"sleevecapEase":{"pct":1,"min":0,"max":10,"menu":"advanced"},"sleeveVentLength":{"pct":35,"min":25,"max":55,"menu":"sleeves"},"sleeveVentWidth":{"pct":18,"min":10,"max":26,"menu":"sleeves"}},"legend":{},"lucy":{"width":{"pct":50,"min":30,"max":100,"menu":"style"},"length":{"pct":50,"min":30,"max":100,"menu":"style"},"edge":{"pct":25,"min":20,"max":50,"menu":"style"}},"lunetius":{"lengthRatio":{"pct":105,"min":60,"max":130,"menu":"style"},"widthRatio":{"pct":100,"min":50,"max":130,"menu":"style"},"length":{"list":["toKnee","toBelowKnee","toHips","toUpperLeg","toFloor"],"dflt":"toBelowKnee","menu":"style"}},"magde":{"size":{"pct":100,"min":15,"max":200,"menu":"style"},"taperRatio":{"pct":60,"min":50,"max":100,"menu":"style"},"flapHeightRatio":{"pct":83,"min":60,"max":100,"menu":"style"},"openingRatio":{"pct":66,"min":30,"max":90,"menu":"style"},"onePieceLid":{"bool":false,"menu":"style"},"useCommonWebbingSizes":{"bool":true,"menu":"style"}},"noble":{"acrossBackFactor":0.925,"shoulderSlopeBack":1.23,"neckWidthBack":0.197,"neckWidthFront":0.17,"backDartLocation":0.145,"backCenterWaistReduction":0.35,"collarFactor":0.19,"bustSpanEase":{"pct":0,"min":-5,"max":20,"menu":"fit"},"chestEase":{"pct":11,"min":5,"max":20,"menu":"fit"},"fullChestEaseReduction":{"pct":4,"min":0,"max":8,"menu":"fit"},"shoulderToShoulderEase":{"pct":-0.5,"min":-1,"max":5,"menu":"fit"},"waistEase":{"pct":5,"min":1,"max":20,"menu":"fit"},"backDartHeight":{"pct":46,"min":38,"max":54,"menu":"darts"},"bustDartCurve":1,"bustDartLength":0.9,"waistDartLength":{"pct":90,"min":75,"max":95,"menu":"darts"},"armholeDepth":{"pct":44,"min":38,"max":46,"menu":"armhole"},"backArmholeCurvature":{"pct":63,"min":50,"max":85,"menu":"armhole"},"backArmholePitchDepth":{"pct":35,"max":40,"min":30,"menu":"armhole"},"backArmholeSlant":{"deg":5,"min":1,"max":9,"menu":"armhole"},"frontArmholeCurvature":{"pct":63,"min":50,"max":85,"menu":"armhole"},"frontArmholePitchDepth":{"pct":29,"max":31,"min":27,"menu":"armhole"},"backHemSlope":{"deg":2.5,"min":0,"max":5,"menu":"advanced"},"backNeckCutout":{"pct":6,"min":3,"max":9,"menu":"advanced"},"frontShoulderWidth":{"pct":95,"max":98,"min":92,"menu":"advanced"},"highBustWidth":{"pct":86,"max":92,"min":80,"menu":"advanced"},"armholeDartPosition":{"pct":50,"min":10,"max":90},"dartPosition":{"dflt":"shoulder","list":["shoulder","armhole"],"menu":"darts"},"shoulderDartPosition":{"pct":50,"min":10,"max":90},"shoulderToShoulderCorrection":0.995,"upperDartLength":{"pct":90,"min":80,"max":95,"menu":"darts"}},"octoplushy":{"sizeConstant":200,"size":{"pct":100,"min":5,"max":500,"menu":"style"},"type":{"dflt":"octoplushy","list":["octoplushy","octopus","squid"],"menu":"style"},"armWidth":{"pct":15,"min":10,"max":30,"menu":"style"},"armLength":{"pct":200,"min":100,"max":500,"menu":"style"},"neckWidth":{"pct":25,"min":25,"max":45,"menu":"style"},"armTaper":{"pct":25,"min":0,"max":50,"menu":"style"},"bottomTopArmRatio":{"pct":57,"min":25,"max":75,"menu":"style"},"bottomArmReduction":{"pct":90,"min":75,"max":125},"bottomArmReductionPlushy":{"pct":80,"min":75,"max":125}},"paco":{"fitCrossSeam":true,"fitCrossSeamFront":true,"fitCrossSeamBack":true,"fitGuides":false,"waistEase":{"pct":2,"min":0,"max":10,"menu":"fit"},"seatEase":{"pct":5,"min":0,"max":15,"menu":"fit"},"kneeEase":0.06,"waistHeight":{"pct":5,"min":0,"max":100,"menu":"style"},"lengthBonus":{"pct":0,"min":-15,"max":10,"menu":"style"},"crotchDrop":{"pct":2,"min":0,"max":10,"menu":"style"},"fitKnee":false,"legBalance":{"pct":57.5,"min":52.5,"max":62.5,"menu":"advanced"},"crossSeamCurveStart":{"pct":85,"min":60,"max":100,"menu":"advanced"},"crossSeamCurveBend":{"pct":65,"min":45,"max":85,"menu":"advanced"},"crossSeamCurveAngle":{"deg":12,"min":0,"max":20,"menu":"advanced"},"crotchSeamCurveStart":{"pct":80,"min":60,"max":95,"menu":"advanced"},"crotchSeamCurveBend":{"pct":80,"min":45,"max":100,"menu":"advanced"},"crotchSeamCurveAngle":{"deg":25,"min":0,"max":35,"menu":"advanced"},"waistBalance":{"pct":60,"min":30,"max":90,"menu":"advanced"},"grainlinePosition":{"pct":45,"min":30,"max":60,"menu":"advanced"},"waistbandWidth":{"pct":3,"min":1,"max":6,"snap":{"metric":[3.5,5,10,12,20,25,30,40,50,60,80,100,120],"imperial":[3.175,6.35,9.524999999999999,12.7,15.875,19.049999999999997,25.4,31.75,38.099999999999994,44.449999999999996,50.8,76.19999999999999,101.6,127]},"menu":"elastic"},"titanPaperless":false,"frontPocketHeelRatio":0.4,"backPocketWaistRatio":0.4,"backPocketHeightRatio":0.4,"backPocketWidthRatio":0.37,"waistbandHeight":0,"elasticatedCuff":{"bool":true,"menu":"style"},"ankleElastic":{"pct":5,"min":1,"max":13,"snap":{"metric":[3.5,5,10,12,20,25,30,40,50,60,80,100,120],"imperial":[3.175,6.35,9.524999999999999,12.7,15.875,19.049999999999997,25.4,31.75,38.099999999999994,44.449999999999996,50.8,76.19999999999999,101.6,127]},"menu":"elastic"},"heelEase":{"pct":5,"min":0,"max":50,"menu":"elastic"},"frontPockets":{"bool":true,"menu":"pockets"},"backPockets":{"bool":false,"menu":"pockets"},"frontPocketFlapSize":{"pct":3,"min":3,"max":3,"snap":{"metric":1,"imperial":0.79375},"menu":false},"weltFactor":0.15},"penelope":{"dartMaximumDifference":0.344,"dartMinimumDifference":0.2,"dartMinimumWidth":0.006888,"dartSideMinimum":10,"dartBackControl1":0.114,"dartBackControl2":5,"dartBackControl3":4,"curvePlacement":2.4,"dart2offset":32,"dart2factor":0.8,"hipCurveDividerDown":40,"hipCurveDividerUp":3,"sideSeamShiftPercentage":0.006,"backVentWidth":0.1,"paperlessOffset":15,"curvedDartControlAngle":2,"curvedDartTopControlOffset":0.2,"curvedDartBottomControlOffset":0.4,"curvedDarts":{"bool":true,"menu":"style"},"lengthBonus":{"pct":0,"min":-50,"max":50,"menu":"style"},"hemBonus":{"pct":0,"min":-35,"max":0,"menu":"style"},"hem":{"pct":2,"min":0,"max":5,"menu":"style"},"backVent":{"bool":true,"menu":"style"},"backVentLength":{"pct":40,"min":5,"max":70},"zipperLocation":{"dflt":"backSeam","list":["backSeam","sideSeam"],"menu":"style"},"nrOfDarts":{"count":2,"min":1,"max":2,"menu":"style"},"seatEase":{"pct":1,"min":0,"max":8,"menu":"fit"},"waistEase":{"pct":1,"min":0,"max":8,"menu":"fit"},"backDartDepthFactor":{"pct":50,"min":35,"max":70,"menu":"advanced"},"frontDartDepthFactor":{"pct":45,"min":30,"max":65,"menu":"advanced"},"dartToSideSeamFactor":{"pct":50,"min":30,"max":70,"menu":"advanced"},"waistband":{"bool":true,"menu":"style"},"waistbandWidth":{"pct":10,"min":5,"max":20},"waistbandOverlap":{"pct":3.5,"min":0,"max":10}},"plugintest":{"plugin":{"dflt":"all","list":["all","annotations","flip","gore","i18n","measurements","mirror","round","sprinkle","title","versionfreeSvg"],"menu":"tests"},"bannerDy":{"count":-1,"min":-15,"max":15,"menu":"annotations.banner"},"bannerSpaces":{"count":10,"min":0,"max":20,"menu":"annotations.banner"},"bannerRepeat":{"count":10,"min":1,"max":20,"menu":"annotations.banner"},"bartackLength":{"count":15,"min":2,"max":100,"menu":"annotations.bartack"},"bartackAngle":{"count":0,"min":-360,"max":360,"menu":"annotations.bartack"},"bartackDensity":{"count":3,"min":1,"max":5,"menu":"annotations.bartack"},"bartackWidth":{"count":3,"min":1,"max":5,"menu":"annotations.bartack"},"bartackStart":{"pct":25,"min":0,"max":100,"menu":"annotations.bartack"},"bartackEnd":{"pct":75,"min":0,"max":100,"menu":"annotations.bartack"},"crossboxText":{"bool":true,"menu":"annotations.crossboxText"},"cutonfoldMargin":{"pct":5,"min":0,"max":25,"menu":"annotations.cutonfold"},"cutonfoldOffset":{"count":15,"min":0,"max":100,"menu":"annotations.cutonfold"},"cutonfoldGrainline":{"bool":false,"menu":"annotations.cutonfold"},"dimensionsCustomText":{"bool":false,"menu":"annotations.dimensions"},"dimensionsEndMarker":{"bool":true,"menu":"annotations.dimensions"},"dimensionsStartMarker":{"bool":true,"menu":"annotations.dimensions"},"logoScale":{"pct":100,"min":10,"max":200,"menu":"annotations.logo"},"logoRotate":{"deg":0,"min":-360,"max":360,"menu":"annotations.logo"},"pleatMargin":{"count":35,"min":0,"max":50,"menu":"annotations.pleat"},"pleatReverse":{"bool":false,"menu":"annotations.pleat"},"scaleboxRotation":{"deg":0,"min":0,"max":360,"menu":"annotations.scalebox"},"scaleboxText":{"dflt":"default","list":["default","custom","suppress"],"menu":"annotations.scalebox"},"sewtogetherHinge":{"bool":true,"menu":"annotations.sewtogether"},"sewtogetherMiddle":{"bool":false,"menu":"annotations.sewtogether"},"titleNr":{"count":1,"min":0,"max":100,"menu":"annotations.title"},"titleTitle":{"bool":true,"menu":"annotations.title"},"titleMeta":{"bool":true,"menu":"annotations.title"},"titleScale":{"pct":100,"min":10,"max":200,"menu":"annotations.title"},"titleRotate":{"deg":0,"min":-360,"max":360,"menu":"annotations.title"},"snippetScale":{"pct":100,"min":10,"max":200,"menu":"annotations.snippets"},"snippetRotation":{"deg":0,"min":-360,"max":360,"menu":"annotations.snippets"},"flipAxis":{"dflt":"x","list":["x","y"],"menu":"flip"},"goreRadius":{"count":20,"min":10,"max":30,"menu":"gore"},"goreGoreNumber":{"count":6,"min":4,"max":8,"menu":"gore"},"goreExtraLength":{"count":10,"min":0,"max":20,"menu":"gore"},"mirrorLine":{"dflt":"a","list":["a","b","none"],"menu":"mirror"},"mirrorClone":{"bool":true,"menu":"mirror"},"roundRadius":{"count":10,"min":0,"max":50,"menu":"round"},"roundHide":{"bool":false,"menu":"round"},"sprinkleScale":{"pct":100,"min":10,"max":200,"menu":"sprinkle"},"sprinkleRotate":{"deg":0,"min":-360,"max":360,"menu":"sprinkle"},"sprinkleSnippet":{"dflt":"bnotch","list":["notch","bnotch","button","buttonhole","buttonhole-start","buttonhole-end","snap-stud","snap-socket","logo"],"menu":"sprinkle"}},"rendertest":{"width":{"mm":200,"min":50,"max":500,"testIgnore":false},"only":{"menu":"show","dflt":"false","list":["false","circles","colors","widths","styles","combos","text","snippets","macros"]}},"sandy":{"minimumOverlap":15,"seamlessFullCircle":{"bool":false,"menu":"construction"},"waistbandWidth":{"pct":4,"min":1,"max":8,"snap":{"metric":[3.5,5,10,12,20,25,30,40,50,60,80,100,120],"imperial":[3.175,6.35,9.524999999999999,12.7,15.875,19.049999999999997,25.4,31.75,38.099999999999994,44.449999999999996,50.8,76.19999999999999,101.6,127]},"menu":"style"},"waistbandPosition":{"pct":50,"min":0,"max":100,"menu":"fit"},"lengthBonus":{"pct":50,"min":10,"max":100,"menu":"style"},"circleRatio":{"pct":50,"min":20,"max":100,"menu":"style"},"waistbandOverlap":{"pct":3,"min":0,"max":15,"menu":"style"},"gathering":{"pct":0,"min":0,"max":200,"menu":"style"},"hemWidth":{"pct":2,"min":1,"max":10,"menu":"construction"},"waistbandShape":{"list":["straight","curved"],"dflt":"straight","menu":"fit"}},"shelly":{"neckEase":{"pct":50,"min":-30,"max":150,"menu":"fit"},"chestEase":{"pct":0,"min":-40,"max":50,"menu":"fit"},"straightSides":{"bool":true,"menu":"advanced"},"hipsEase":{"pct":0,"min":-30,"max":75,"menu":"advanced"},"bodyLength":{"pct":120,"min":20,"max":300,"menu":"style"},"neckBalance":{"pct":40,"min":0,"max":80,"menu":"fit"},"raglanScoopLength":{"pct":20,"min":0,"max":50,"menu":"advanced"},"raglanScoopMagnitude":{"pct":6,"min":0,"max":20,"menu":"advanced"},"hemWidth":{"pct":200,"min":0,"max":800,"menu":"construction"},"sideShape":{"pct":0,"min":-20,"max":20,"menu":"advanced"},"armholeTweakFactor":1.1,"bicepsPosition":0.2,"sleeveEase":{"pct":0,"min":-30,"max":50,"menu":"fit"},"wristEase":{"pct":0,"min":-30,"max":50,"menu":"fit"},"sleeveLength":{"pct":20,"min":0,"max":125,"menu":"style"},"sleeveHem":{"pct":200,"min":0,"max":800,"menu":"construction"},"neckbandLength":{"pct":80,"min":50,"max":100,"menu":"fit"},"neckbandWidth":{"pct":7.5,"min":0,"max":50,"menu":"fit"}},"shin":{"frontFactor":0.58,"legFrontFactor":0.48,"gussetFactor":0.0714,"angle":10,"elasticWidth":{"pct":10,"min":4,"max":20,"snap":{"metric":[3.5,5,10,12,20,25,30,40,50,60,80,100,120],"imperial":[3.175,6.35,9.524999999999999,12.7,15.875,19.049999999999997,25.4,31.75,38.099999999999994,44.449999999999996,50.8,76.19999999999999,101.6,127]},"menu":"style"},"stretch":{"pct":20,"min":10,"max":30,"menu":"fit"},"bulge":{"pct":2.5,"min":0,"max":5,"menu":"fit"},"legReduction":{"pct":5,"min":0,"max":10,"menu":"fit"},"rise":{"pct":0,"min":0,"max":25,"menu":"style"},"backRise":{"pct":5,"min":0,"max":10,"menu":"fit"}},"simon":{"brianFitSleeve":true,"brianFitCollar":true,"collarFactor":5,"bicepsEase":{"pct":15,"min":0,"max":50,"menu":"fit"},"chestEase":{"pct":15,"min":-4,"max":35,"menu":"fit"},"collarEase":{"pct":2,"min":0,"max":10,"menu":"fit"},"cuffEase":{"pct":20,"min":10,"max":40,"menu":"fit"},"draftForHighBust":{"bool":false},"shoulderEase":{"pct":2,"min":0,"max":15,"menu":"fit"},"lengthBonus":{"pct":25,"min":-4,"max":60,"menu":"fit"},"s3Collar":{"pct":0,"min":-100,"max":100,"menu":"style"},"s3Armhole":{"pct":0,"min":-100,"max":100,"menu":"style"},"acrossBackFactor":{"pct":98,"min":93,"max":100,"menu":"advanced"},"armholeDepth":{"pct":2,"min":-10,"max":50},"armholeDepthFactor":{"pct":55,"min":50,"max":70},"backNeckCutout":{"pct":5,"min":2,"max":8,"menu":"advanced"},"frontArmholeDeeper":{"pct":0.2,"min":0,"max":0.5,"menu":"advanced"},"shoulderSlopeReduction":{"pct":0,"min":0,"max":80,"menu":"advanced"},"legacyArmholeDepth":{"bool":false,"menu":"advanced"},"backDarts":{"list":["auto","never","always"],"dflt":"auto","menu":"style"},"backDartShaping":{"pct":25,"min":5,"max":75,"menu":"advanced"},"boxPleat":{"bool":false,"menu":"style"},"boxPleatFold":{"pct":15,"min":10,"max":20,"menu":"advanced"},"boxPleatWidth":{"pct":7,"min":4,"max":10,"menu":"advanced"},"roundBack":{"pct":0,"min":0,"max":10,"menu":"fit"},"buttonholePlacketWidth":{"pct":8,"min":4,"max":12,"menu":"style.closure"},"buttonholePlacketFoldWidth":{"pct":16,"min":8,"max":24,"menu":"style.closure"},"buttonPlacketWidth":{"pct":5,"min":2,"max":8,"menu":"style.closure"},"hemCurve":{"pct":50,"min":25,"max":100,"menu":"style"},"hemStyle":{"list":["straight","baseball","slashed"],"dflt":"straight","menu":"style"},"hipsEase":{"pct":15,"min":10,"max":35,"menu":"fit"},"yokeHeight":{"pct":70,"min":40,"max":90,"menu":"style"},"sleevePlacketWidth":{"pct":13,"min":8,"max":18,"menu":"style.cuffs"},"waistEase":{"pct":15,"min":10,"max":35,"menu":"fit"},"buttonFreeLength":{"pct":2,"min":0,"max":15,"menu":"style.closure"},"extraTopButton":{"bool":true,"menu":"style.closure"},"separateButtonPlacket":{"bool":false,"menu":"style.closure"},"separateButtonholePlacket":{"bool":false,"menu":"style.closure"},"buttons":{"count":7,"min":4,"max":12,"menu":"style.closure"},"ffsa":{"pct":150,"min":100,"max":200,"menu":"advanced"},"collarAngle":{"deg":85,"min":60,"max":130,"menu":"style.collar"},"collarBend":{"pct":3.5,"min":0,"max":10,"menu":"style.collar"},"collarFlare":{"deg":3.5,"min":0,"max":10,"menu":"style.collar"},"collarGap":{"pct":2.5,"min":0,"max":6,"menu":"style.collar"},"collarRoll":{"pct":3,"min":0,"max":6,"menu":"style.collar"},"collarStandBend":{"deg":3,"min":0,"max":5,"menu":"style.collar"},"collarStandCurve":{"deg":2,"min":0,"max":5,"menu":"style.collar"},"collarStandWidth":{"pct":8,"min":3,"max":13,"menu":"style.collar"},"cuffOverlap":0.15,"barrelCuffNarrowButton":{"bool":true,"menu":"style.cuffs"},"cuffButtonRows":{"count":1,"min":1,"max":2,"menu":"style.cuffs"},"cuffDrape":{"pct":5,"min":0,"max":10,"menu":"style.cuffs"},"cuffLength":{"pct":10,"min":3,"max":15,"menu":"style.cuffs"},"cuffStyle":{"list":["roundedBarrelCuff","angledBarrelCuff","straightBarrelCuff","roundedFrenchCuff","angledFrenchCuff","straightFrenchCuff"],"dflt":"angledBarrelCuff","menu":"style.cuffs"},"buttonPlacketStyle":{"list":["classic","seamless"],"dflt":"classic"},"buttonholePlacketStyle":{"list":["classic","seamless"],"dflt":"seamless"},"sleevecapEase":{"pct":0,"min":0,"max":10,"menu":"advanced.sleevecap"},"sleevecapTopFactorX":{"pct":50,"min":25,"max":75,"menu":"advanced.sleevecap"},"sleevecapTopFactorY":{"pct":45,"min":35,"max":125,"menu":"advanced.sleevecap"},"sleevecapBackFactorX":{"pct":60,"min":35,"max":65,"menu":"advanced.sleevecap"},"sleevecapBackFactorY":{"pct":33,"min":30,"max":65,"menu":"advanced.sleevecap"},"sleevecapFrontFactorX":{"pct":55,"min":35,"max":65,"menu":"advanced.sleevecap"},"sleevecapFrontFactorY":{"pct":33,"min":30,"max":65,"menu":"advanced.sleevecap"},"sleevecapQ1Offset":{"pct":1.7,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ2Offset":{"pct":3.5,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ3Offset":{"pct":2.5,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ4Offset":{"pct":1,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ1Spread1":{"pct":10,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ1Spread2":{"pct":15,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ2Spread1":{"pct":15,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ2Spread2":{"pct":10,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ3Spread1":{"pct":10,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ3Spread2":{"pct":8,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ4Spread1":{"pct":7,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ4Spread2":{"pct":6.3,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleeveWidthGuarantee":{"pct":90,"min":25,"max":100,"menu":"advanced"},"sleeveLengthBonus":{"pct":3.5,"min":-40,"max":10,"menu":"fit"},"sleevePlacketLength":{"pct":25,"min":15,"max":35,"menu":"style.cuffs"},"splitYoke":{"bool":false,"menu":"style"}},"simone":{"brianFitSleeve":true,"brianFitCollar":true,"collarFactor":5,"bicepsEase":{"pct":15,"min":0,"max":50,"menu":"fit"},"chestEase":{"pct":15,"min":-4,"max":35,"menu":"fit"},"collarEase":{"pct":2,"min":0,"max":10,"menu":"fit"},"cuffEase":{"pct":20,"min":10,"max":40,"menu":"fit"},"draftForHighBust":true,"shoulderEase":{"pct":2,"min":0,"max":15,"menu":"fit"},"lengthBonus":{"pct":25,"min":-4,"max":60,"menu":"fit"},"s3Collar":{"pct":0,"min":-100,"max":100,"menu":"style"},"s3Armhole":{"pct":0,"min":-100,"max":100,"menu":"style"},"acrossBackFactor":{"pct":98,"min":93,"max":100,"menu":"advanced"},"armholeDepth":{"pct":2,"min":-10,"max":50},"armholeDepthFactor":{"pct":55,"min":50,"max":70},"backNeckCutout":{"pct":5,"min":2,"max":8,"menu":"advanced"},"frontArmholeDeeper":{"pct":0.2,"min":0,"max":0.5,"menu":"advanced"},"shoulderSlopeReduction":{"pct":0,"min":0,"max":80,"menu":"advanced"},"legacyArmholeDepth":{"bool":false,"menu":"advanced"},"backDarts":{"list":["auto","never","always"],"dflt":"auto","menu":"style"},"backDartShaping":{"pct":25,"min":5,"max":75,"menu":"advanced"},"boxPleat":{"bool":false,"menu":"style"},"boxPleatFold":{"pct":15,"min":10,"max":20,"menu":"advanced"},"boxPleatWidth":{"pct":7,"min":4,"max":10,"menu":"advanced"},"roundBack":{"pct":0,"min":0,"max":10,"menu":"fit"},"buttonholePlacketWidth":{"pct":8,"min":4,"max":12,"menu":"style.closure"},"buttonholePlacketFoldWidth":{"pct":16,"min":8,"max":24,"menu":"style.closure"},"buttonPlacketWidth":{"pct":5,"min":2,"max":8,"menu":"style.closure"},"hemCurve":{"pct":50,"min":25,"max":100,"menu":"style"},"hemStyle":{"list":["straight","baseball","slashed"],"dflt":"straight","menu":"style"},"hipsEase":{"pct":15,"min":10,"max":35,"menu":"fit"},"yokeHeight":{"pct":70,"min":40,"max":90,"menu":"style"},"sleevePlacketWidth":{"pct":13,"min":8,"max":18,"menu":"style.cuffs"},"waistEase":{"pct":15,"min":10,"max":35,"menu":"fit"},"buttonFreeLength":{"pct":2,"min":0,"max":15,"menu":"style.closure"},"extraTopButton":{"bool":true,"menu":"style.closure"},"separateButtonPlacket":{"bool":false,"menu":"style.closure"},"separateButtonholePlacket":{"bool":false,"menu":"style.closure"},"buttons":{"count":7,"min":4,"max":12,"menu":"style.closure"},"ffsa":{"pct":150,"min":100,"max":200,"menu":"advanced"},"minimalDartShaping":5,"bustDartAngle":{"deg":10,"min":0,"max":20,"menu":"advanced"},"bustDartLength":{"pct":80,"min":50,"max":90,"menu":"advanced"},"frontDarts":{"bool":false,"menu":"advanced"},"frontDartLength":{"pct":45,"min":30,"max":60,"menu":"advanced"},"contour":{"pct":50,"min":30,"max":75,"menu":"style"},"bustAlignedButtons":{"dflt":"disabled","list":["even","split","disabled"],"menu":"style.closure"},"collarAngle":{"deg":85,"min":60,"max":130,"menu":"style.collar"},"collarBend":{"pct":3.5,"min":0,"max":10,"menu":"style.collar"},"collarFlare":{"deg":3.5,"min":0,"max":10,"menu":"style.collar"},"collarGap":{"pct":2.5,"min":0,"max":6,"menu":"style.collar"},"collarRoll":{"pct":3,"min":0,"max":6,"menu":"style.collar"},"collarStandBend":{"deg":3,"min":0,"max":5,"menu":"style.collar"},"collarStandCurve":{"deg":2,"min":0,"max":5,"menu":"style.collar"},"collarStandWidth":{"pct":8,"min":3,"max":13,"menu":"style.collar"},"cuffOverlap":0.15,"barrelCuffNarrowButton":{"bool":true,"menu":"style.cuffs"},"cuffButtonRows":{"count":1,"min":1,"max":2,"menu":"style.cuffs"},"cuffDrape":{"pct":5,"min":0,"max":10,"menu":"style.cuffs"},"cuffLength":{"pct":10,"min":3,"max":15,"menu":"style.cuffs"},"cuffStyle":{"list":["roundedBarrelCuff","angledBarrelCuff","straightBarrelCuff","roundedFrenchCuff","angledFrenchCuff","straightFrenchCuff"],"dflt":"angledBarrelCuff","menu":"style.cuffs"},"sleevecapEase":{"pct":0,"min":0,"max":10,"menu":"advanced.sleevecap"},"sleevecapTopFactorX":{"pct":50,"min":25,"max":75,"menu":"advanced.sleevecap"},"sleevecapTopFactorY":{"pct":45,"min":35,"max":125,"menu":"advanced.sleevecap"},"sleevecapBackFactorX":{"pct":60,"min":35,"max":65,"menu":"advanced.sleevecap"},"sleevecapBackFactorY":{"pct":33,"min":30,"max":65,"menu":"advanced.sleevecap"},"sleevecapFrontFactorX":{"pct":55,"min":35,"max":65,"menu":"advanced.sleevecap"},"sleevecapFrontFactorY":{"pct":33,"min":30,"max":65,"menu":"advanced.sleevecap"},"sleevecapQ1Offset":{"pct":1.7,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ2Offset":{"pct":3.5,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ3Offset":{"pct":2.5,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ4Offset":{"pct":1,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ1Spread1":{"pct":10,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ1Spread2":{"pct":15,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ2Spread1":{"pct":15,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ2Spread2":{"pct":10,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ3Spread1":{"pct":10,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ3Spread2":{"pct":8,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ4Spread1":{"pct":7,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ4Spread2":{"pct":6.3,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleeveWidthGuarantee":{"pct":90,"min":25,"max":100,"menu":"advanced"},"sleeveLengthBonus":{"pct":3.5,"min":-40,"max":10,"menu":"fit"},"sleevePlacketLength":{"pct":25,"min":15,"max":35,"menu":"style.cuffs"},"splitYoke":{"bool":false,"menu":"style"},"buttonPlacketStyle":{"list":["classic","seamless"],"dflt":"classic"},"buttonholePlacketStyle":{"list":["classic","seamless"],"dflt":"seamless"}},"skully":{"size":{"pct":75,"min":10,"max":300,"menu":"fit"}},"sven":{"brianFitSleeve":true,"brianFitCollar":true,"collarFactor":4.8,"bicepsEase":{"pct":15,"min":0,"max":50,"menu":"fit"},"chestEase":{"pct":15,"min":-4,"max":35,"menu":"fit"},"collarEase":{"pct":10,"min":5,"max":30,"menu":"fit"},"cuffEase":{"pct":20,"min":0,"max":200,"menu":"fit"},"draftForHighBust":{"bool":false},"shoulderEase":{"pct":0,"min":-2,"max":6,"menu":"fit"},"lengthBonus":{"pct":15,"min":0,"max":30,"menu":"style"},"s3Collar":{"pct":0,"min":-100,"max":100,"menu":"style"},"s3Armhole":{"pct":0,"min":-100,"max":100,"menu":"style"},"acrossBackFactor":{"pct":98,"min":93,"max":100,"menu":"advanced"},"armholeDepth":{"pct":2,"min":-10,"max":50},"armholeDepthFactor":{"pct":55,"min":50,"max":70},"backNeckCutout":{"pct":5,"min":2,"max":8,"menu":"advanced"},"frontArmholeDeeper":{"pct":0.2,"min":0,"max":0.5,"menu":"advanced"},"shoulderSlopeReduction":{"pct":0,"min":0,"max":80,"menu":"advanced"},"legacyArmholeDepth":{"bool":false,"menu":"advanced"},"waistEase":0.08,"sleeveLengthBonus":{"pct":3,"min":0,"max":10,"menu":"style"},"ribbingHeight":{"pct":8,"min":3,"max":15,"menu":"style"},"hipsEase":{"pct":8,"min":-4,"max":20,"menu":"fit"},"ribbing":{"bool":true,"menu":"style"},"sleevecapEase":{"pct":0,"min":0,"max":10,"menu":"advanced.sleevecap"},"sleevecapTopFactorX":{"pct":50,"min":25,"max":75,"menu":"advanced.sleevecap"},"sleevecapTopFactorY":{"pct":45,"min":35,"max":125,"menu":"advanced.sleevecap"},"sleevecapBackFactorX":{"pct":60,"min":35,"max":65,"menu":"advanced.sleevecap"},"sleevecapBackFactorY":{"pct":33,"min":30,"max":65,"menu":"advanced.sleevecap"},"sleevecapFrontFactorX":{"pct":55,"min":35,"max":65,"menu":"advanced.sleevecap"},"sleevecapFrontFactorY":{"pct":33,"min":30,"max":65,"menu":"advanced.sleevecap"},"sleevecapQ1Offset":{"pct":1.7,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ2Offset":{"pct":3.5,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ3Offset":{"pct":2.5,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ4Offset":{"pct":1,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ1Spread1":{"pct":10,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ1Spread2":{"pct":15,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ2Spread1":{"pct":15,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ2Spread2":{"pct":10,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ3Spread1":{"pct":10,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ3Spread2":{"pct":8,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ4Spread1":{"pct":7,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ4Spread2":{"pct":6.3,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleeveWidthGuarantee":{"pct":90,"min":25,"max":100,"menu":"advanced"},"ribbingStretch":{"pct":15,"min":0,"max":30,"menu":"fit"}},"tamiko":{"armholeDepthFactor":{"pct":50,"min":40,"max":60,"menu":"fit"},"chestEase":{"pct":2,"min":1,"max":20,"menu":"fit"},"flare":{"deg":15,"min":-10,"max":30,"menu":"style"},"lengthBonus":{"pct":13,"min":0,"max":60,"menu":"style"},"shoulderseamLength":{"pct":10,"min":5,"max":25,"menu":"style"},"draftForHighBust":{"bool":false,"menu":"fit"}},"teagan":{"brianFitSleeve":true,"brianFitCollar":true,"collarFactor":4.8,"bicepsEase":0.05,"chestEase":{"pct":12,"min":5,"max":25,"menu":"fit"},"collarEase":0,"cuffEase":0,"draftForHighBust":{"bool":false,"menu":"fit"},"shoulderEase":0,"lengthBonus":{"pct":5,"min":-20,"max":60,"menu":"style"},"s3Collar":0,"s3Armhole":0,"acrossBackFactor":{"pct":98,"min":93,"max":100,"menu":"advanced"},"armholeDepth":{"pct":2,"min":-10,"max":50},"armholeDepthFactor":{"pct":55,"min":50,"max":70},"backNeckCutout":{"pct":8,"min":4,"max":12,"menu":"fit"},"frontArmholeDeeper":0.005,"shoulderSlopeReduction":0,"legacyArmholeDepth":{"bool":false,"menu":"advanced"},"sleeveWidthGuarantee":0.85,"sleeveLength":{"pct":30,"min":20,"max":100,"menu":"fit"},"fitWaist":{"bool":false,"menu":"fit"},"waistEase":{"pct":25,"min":8,"max":40},"hipsEase":{"pct":18,"min":8,"max":30,"menu":"fit"},"necklineDepth":{"pct":25,"min":20,"max":40,"menu":"style"},"necklineWidth":{"pct":30,"min":10,"max":50,"menu":"style"},"necklineBend":{"pct":30,"min":0,"max":70,"menu":"style"},"sleevecapEase":{"pct":0,"min":0,"max":10,"menu":"advanced.sleevecap"},"sleevecapTopFactorX":{"pct":50,"min":25,"max":75,"menu":"advanced.sleevecap"},"sleevecapTopFactorY":{"pct":45,"min":35,"max":125,"menu":"advanced.sleevecap"},"sleevecapBackFactorX":{"pct":60,"min":35,"max":65,"menu":"advanced.sleevecap"},"sleevecapBackFactorY":{"pct":33,"min":30,"max":65,"menu":"advanced.sleevecap"},"sleevecapFrontFactorX":{"pct":55,"min":35,"max":65,"menu":"advanced.sleevecap"},"sleevecapFrontFactorY":{"pct":33,"min":30,"max":65,"menu":"advanced.sleevecap"},"sleevecapQ1Offset":{"pct":1.7,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ2Offset":{"pct":3.5,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ3Offset":{"pct":2.5,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ4Offset":{"pct":1,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ1Spread1":{"pct":10,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ1Spread2":{"pct":15,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ2Spread1":{"pct":15,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ2Spread2":{"pct":10,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ3Spread1":{"pct":10,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ3Spread2":{"pct":8,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ4Spread1":{"pct":7,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ4Spread2":{"pct":6.3,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleeveEase":{"pct":15,"min":5,"max":35,"menu":"style"}},"tiberius":{"headRatio":{"pct":100,"min":80,"max":120,"menu":"fit"},"armholeDrop":{"pct":110,"min":100,"max":150,"menu":"fit"},"lengthBonus":{"pct":90,"min":60,"max":130,"menu":"style"},"widthBonus":{"pct":100,"min":50,"max":130,"menu":"style"},"clavi":{"bool":false,"menu":"style.clavi"},"clavusLocation":{"pct":65,"min":50,"max":80,"menu":"style.clavi"},"clavusWidth":{"pct":100,"min":50,"max":150,"menu":"style.clavi"},"length":{"list":["toKnee","toMidLeg","toFloor"],"dflt":"toKnee","menu":"style"},"width":{"list":["toElbow","toShoulder","toMidArm"],"dflt":"toMidArm","menu":"style"},"forceWidth":{"bool":false,"menu":"advanced"}},"titan":{"fitCrossSeam":true,"fitCrossSeamFront":true,"fitCrossSeamBack":true,"fitGuides":true,"waistEase":{"pct":2,"min":0,"max":10,"menu":"fit"},"seatEase":{"pct":2,"min":0,"max":10,"menu":"fit"},"kneeEase":{"pct":6,"min":1,"max":25,"menu":"fit"},"waistHeight":{"pct":100,"min":0,"max":100,"menu":"style"},"lengthBonus":{"pct":2,"min":-20,"max":10,"menu":"style"},"crotchDrop":{"pct":2,"min":0,"max":15,"menu":"style"},"fitKnee":{"bool":false,"menu":"style"},"legBalance":{"pct":57.5,"min":52.5,"max":62.5,"menu":"advanced"},"crossSeamCurveStart":{"pct":85,"min":60,"max":100,"menu":"advanced"},"crossSeamCurveBend":{"pct":65,"min":45,"max":85,"menu":"advanced"},"crossSeamCurveAngle":{"deg":12,"min":0,"max":20,"menu":"advanced"},"crotchSeamCurveStart":{"pct":80,"min":60,"max":95,"menu":"advanced"},"crotchSeamCurveBend":{"pct":80,"min":45,"max":100,"menu":"advanced"},"crotchSeamCurveAngle":{"deg":25,"min":0,"max":35,"menu":"advanced"},"waistBalance":{"pct":60,"min":30,"max":90,"menu":"advanced"},"grainlinePosition":{"pct":45,"min":30,"max":60,"menu":"advanced"},"waistbandWidth":{"pct":3,"min":1,"max":6,"snap":{"metric":[3.5,5,10,12,20,25,30,40,50,60,80,100,120],"imperial":[3.175,6.35,9.524999999999999,12.7,15.875,19.049999999999997,25.4,31.75,38.099999999999994,44.449999999999996,50.8,76.19999999999999,101.6,127]},"menu":"advanced"}},"trayvon":{"tipWidth":{"pct":15,"min":5,"max":35,"snap":{"metric":1,"imperial":0.79375},"menu":"style"},"knotWidth":{"pct":8,"min":4,"max":12,"snap":{"metric":1,"imperial":0.79375},"menu":"style"},"lengthBonus":{"pct":0,"min":-50,"max":50,"menu":"style"}},"uma":{"xStretch":{"pct":15,"min":0,"max":50,"menu":"fit"},"yStretch":{"pct":15,"min":0,"max":50,"menu":"fit"},"gussetWidth":{"pct":15,"min":5,"max":24,"menu":"fit"},"gussetLength":{"pct":12.7,"min":10,"max":16,"menu":"fit"},"gussetPosition":{"pct":70,"min":5,"max":95,"menu":"fit"},"bulge":{"deg":0,"min":0,"max":30,"menu":"fit"},"rise":{"pct":46,"min":30,"max":100,"menu":"style"},"legRise":{"pct":54,"min":5,"max":95,"menu":"style"},"frontDip":{"pct":5,"min":-5,"max":15,"menu":"style"},"frontExposure":{"pct":70,"min":5,"max":100,"menu":"style"},"backDip":{"pct":2.5,"min":-5,"max":15,"menu":"style"},"backExposure":{"pct":30,"min":25,"max":125,"menu":"style"}},"wahid":{"brianFitSleeve":true,"brianFitCollar":true,"collarFactor":4.8,"bicepsEase":{"pct":15,"min":0,"max":50,"menu":false},"chestEase":{"pct":2,"min":1,"max":10,"menu":"fit"},"collarEase":{"pct":5,"min":0,"max":10,"menu":false},"cuffEase":{"pct":20,"min":0,"max":200,"menu":false},"draftForHighBust":{"bool":false},"shoulderEase":{"pct":0,"min":-2,"max":6,"menu":false},"lengthBonus":{"pct":1,"min":0,"max":8,"menu":"fit"},"s3Collar":{"pct":0,"min":-100,"max":100,"menu":false},"s3Armhole":{"pct":0,"min":-100,"max":100,"menu":false},"acrossBackFactor":0.97,"armholeDepth":{"pct":2,"min":-10,"max":50},"armholeDepthFactor":{"pct":70,"min":60,"max":80,"menu":"fit"},"backNeckCutout":{"pct":5,"min":-2,"max":8,"menu":false},"frontArmholeDeeper":0.005,"shoulderSlopeReduction":{"pct":0,"min":0,"max":80,"menu":false},"legacyArmholeDepth":{"bool":false,"menu":"advanced"},"frontOverlap":0.01,"necklineDrop":{"pct":50,"min":35,"max":85,"menu":"style"},"frontStyle":{"dflt":"classic","list":["classic","rounded"],"menu":"style"},"frontInset":{"pct":15,"min":10,"max":20,"menu":"advanced"},"shoulderInset":{"pct":10,"min":0,"max":20,"menu":"advanced"},"neckInset":{"pct":5,"min":0,"max":10,"menu":"advanced"},"hemStyle":{"dflt":"classic","list":["classic","rounded","square"],"menu":"style"},"hemRadius":{"pct":6,"min":2,"max":12,"menu":"style"},"pocketWidth":{"pct":10,"max":15,"min":8,"menu":"style"},"pocketAngle":{"deg":5,"min":0,"max":5,"menu":"advanced"},"pocketLocation":{"pct":35,"min":25,"max":55,"menu":"style"},"frontScyeDart":{"deg":6,"min":0,"max":12,"menu":"fit"},"buttons":{"count":6,"min":4,"max":12,"menu":"style"},"waistEase":{"pct":8,"min":2,"max":15,"menu":"fit"},"hipsEase":{"pct":8,"min":2,"max":15,"menu":"fit"},"backInset":{"pct":15,"min":10,"max":20,"menu":"advanced"},"centerBackDart":{"pct":2,"min":0,"max":5,"menu":"fit"},"backScyeDart":{"deg":2,"min":0,"max":6,"menu":"fit"},"weltHeight":{"pct":12.5,"max":20,"min":10,"menu":"style"}},"walburga":{"headRatio":{"pct":100,"min":80,"max":120,"menu":"fit"},"lengthBonus":{"pct":85,"min":60,"max":130,"menu":"style"},"widthBonus":{"pct":95,"min":50,"max":130,"menu":"style"},"length":{"list":["toKnee","toMidLeg","toFloor"],"dflt":"toKnee","menu":"style"},"neckline":{"bool":true,"menu":"style"},"neckoRatio":{"pct":100,"min":10,"max":190,"menu":"style"}},"waralee":{"backPocket":{"bool":true,"menu":"style"},"backPocketDepth":140,"backPocketHorizontalOffset":0.045,"backPocketSize":0.45,"backPocketVerticalOffset":0.2,"backRaise":{"pct":10,"min":0,"max":25,"menu":"fit"},"backWaistAdjustment":0.3,"crotchBack":{"pct":45,"min":10,"max":70,"menu":"advanced"},"crotchEase":1.08,"crotchFactorBackHor":{"pct":90,"min":10,"max":100,"menu":"advanced"},"crotchFactorBackVer":{"pct":60,"min":20,"max":90,"menu":"advanced"},"crotchFactorFrontHor":{"pct":90,"min":10,"max":100,"menu":"advanced"},"crotchFactorFrontVer":{"pct":30,"min":10,"max":70,"menu":"advanced"},"crotchFront":{"pct":30,"min":10,"max":70,"menu":"advanced"},"fitWaist":{"bool":true,"menu":"fit"},"frontPocket":{"bool":true,"menu":"style"},"frontPocketDepthFactor":1.6,"frontPocketHorizontalOffset":0.18,"frontPocketSize":0.45,"frontPocketStyle":{"dflt":"welt","list":["welt","waistband"],"menu":"style"},"frontPocketVerticalOffset":0.07,"frontWaistAdjustment":0.163,"hemWidth":{"pct":1.75,"min":1,"max":2.5,"menu":"style"},"knotInFront":{"bool":true,"menu":"style"},"legShortening":{"pct":25,"min":-10,"max":50,"menu":"style"},"minimizer":4,"separateWaistband":{"bool":false,"menu":"style"},"showMini":{"bool":true,"menu":"options"},"waistOverlap":{"pct":50,"min":10,"max":100,"menu":"style"},"waistRaise":{"pct":0,"min":-20,"max":40,"menu":"fit"},"waistbandWidth":{"pct":3.5,"min":2,"max":5,"menu":"style"}},"yuri":{"brianFitSleeve":true,"brianFitCollar":true,"collarFactor":4.8,"bicepsEase":{"pct":15,"min":0,"max":50,"menu":"fit"},"chestEase":{"pct":15,"min":-4,"max":35,"menu":"fit"},"collarEase":{"pct":20,"min":10,"max":30,"menu":"fit"},"cuffEase":{"pct":30,"min":20,"max":60,"menu":"fit"},"draftForHighBust":{"bool":false},"shoulderEase":{"pct":0,"min":-2,"max":6,"menu":"fit"},"lengthBonus":{"pct":10,"min":5,"max":15,"menu":"fit"},"s3Collar":{"pct":0,"min":-100,"max":100,"menu":"style"},"s3Armhole":{"pct":0,"min":-100,"max":100,"menu":"style"},"acrossBackFactor":{"pct":98,"min":93,"max":100,"menu":"advanced"},"armholeDepth":{"pct":2,"min":-10,"max":50},"armholeDepthFactor":{"pct":55,"min":50,"max":70},"backNeckCutout":{"pct":5,"min":2,"max":8,"menu":"advanced"},"frontArmholeDeeper":{"pct":0.2,"min":0,"max":0.5,"menu":"advanced"},"shoulderSlopeReduction":{"pct":0,"min":0,"max":80,"menu":"advanced"},"legacyArmholeDepth":{"bool":false,"menu":"advanced"},"sleeveLengthBonus":{"pct":1,"min":0,"max":10,"menu":"fit"},"hipsEase":{"pct":0,"min":0,"max":10,"menu":"fit"},"sleevecapEase":{"pct":0,"min":0,"max":10,"menu":"advanced.sleevecap"},"sleevecapTopFactorX":{"pct":50,"min":25,"max":75,"menu":"advanced.sleevecap"},"sleevecapTopFactorY":{"pct":45,"min":35,"max":125,"menu":"advanced.sleevecap"},"sleevecapBackFactorX":{"pct":60,"min":35,"max":65,"menu":"advanced.sleevecap"},"sleevecapBackFactorY":{"pct":33,"min":30,"max":65,"menu":"advanced.sleevecap"},"sleevecapFrontFactorX":{"pct":55,"min":35,"max":65,"menu":"advanced.sleevecap"},"sleevecapFrontFactorY":{"pct":33,"min":30,"max":65,"menu":"advanced.sleevecap"},"sleevecapQ1Offset":{"pct":1.7,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ2Offset":{"pct":3.5,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ3Offset":{"pct":2.5,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ4Offset":{"pct":1,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ1Spread1":{"pct":10,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ1Spread2":{"pct":15,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ2Spread1":{"pct":15,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ2Spread2":{"pct":10,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ3Spread1":{"pct":10,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ3Spread2":{"pct":8,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ4Spread1":{"pct":7,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ4Spread2":{"pct":6.3,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleeveWidthGuarantee":{"pct":90,"min":25,"max":100,"menu":"advanced"}},"otis":{"ease":{"pct":14,"min":0,"max":30,"menu":"fit"},"snapPlacket":{"pct":5,"min":0,"max":30,"menu":"advanced"},"sleeveType":{"dflt":"short","list":["short","long"],"menu":"style"},"hem":{"pct":10,"min":0,"max":30,"menu":"advanced"},"binding":{"pct":11,"min":2,"max":30,"menu":"advanced"}}} +export const options = {"aaron":{"brianFitSleeve":false,"brianFitCollar":false,"collarFactor":4.8,"bicepsEase":0.05,"chestEase":{"pct":8,"min":0,"max":20,"menu":"style"},"collarEase":0,"cuffEase":0,"draftForHighBust":{"bool":false,"menu":"fit"},"shoulderEase":0,"lengthBonus":{"pct":10,"min":-20,"max":60,"menu":"style"},"s3Collar":0,"s3Armhole":0,"acrossBackFactor":0.97,"armholeDepth":{"pct":2,"min":-10,"max":50},"armholeDepthFactor":0.6,"backNeckCutout":0.05,"frontArmholeDeeper":0,"shoulderSlopeReduction":0,"legacyArmholeDepth":{"bool":false,"menu":"advanced"},"hipsEase":{"pct":8,"min":0,"max":20,"menu":"fit"},"stretchFactor":{"pct":5,"min":0,"max":15,"menu":"fit"},"armholeDrop":{"pct":10,"min":0,"max":75,"menu":"style"},"necklineBend":{"pct":100,"min":40,"max":100,"menu":"style"},"necklineDrop":{"pct":20,"min":10,"max":35,"menu":"style"},"shoulderStrapWidth":{"pct":15,"min":10,"max":40,"menu":"style"},"shoulderStrapPlacement":{"pct":40,"min":20,"max":80,"menu":"style"},"backlineBend":{"pct":50,"min":25,"max":100,"menu":"style"},"knitBindingWidth":{"pct":600,"min":300,"max":800,"menu":"style"}},"albert":{"backOpening":{"pct":10,"min":0,"max":25,"menu":"fit"},"bibWidth":{"pct":100,"min":50,"max":125,"menu":"style"},"bibLength":{"pct":75,"min":0,"max":90,"menu":"style"},"lengthBonus":{"pct":0,"min":-20,"max":25,"menu":"style"},"chestDepth":{"pct":22,"min":15,"max":90,"menu":"fit"},"strapWidth":{"pct":60,"min":20,"max":100,"menu":"style"}},"bee":{"acrossBackFactor":0.925,"shoulderSlopeBack":1.23,"neckWidthBack":0.197,"neckWidthFront":0.17,"backDartLocation":0.145,"backCenterWaistReduction":0.35,"collarFactor":0.19,"bustSpanEase":{"pct":10,"min":0,"max":20,"menu":"fit"},"chestEase":{"pct":11,"min":5,"max":20,"menu":"fit"},"fullChestEaseReduction":{"pct":4,"min":0,"max":8,"menu":"fit"},"shoulderToShoulderEase":{"pct":-0.5,"min":-1,"max":5,"menu":"fit"},"waistEase":{"pct":5,"min":1,"max":20,"menu":"fit"},"backDartHeight":{"pct":46,"min":38,"max":54,"menu":"advanced"},"bustDartCurve":1,"bustDartLength":1,"waistDartLength":1,"armholeDepth":{"pct":44,"min":38,"max":46,"menu":"advanced"},"backArmholeCurvature":0.63,"backArmholePitchDepth":0.35,"backArmholeSlant":5,"frontArmholeCurvature":0.63,"frontArmholePitchDepth":{"pct":29,"max":31,"min":27,"menu":"advanced"},"backHemSlope":2.5,"backNeckCutout":0.06,"frontShoulderWidth":{"pct":95,"max":98,"min":92,"menu":"advanced"},"highBustWidth":{"pct":86,"max":92,"min":80,"menu":"advanced"},"ties":{"bool":true,"menu":"style"},"crossBackTies":{"bool":false,"menu":"style"},"bandLength":{"pct":85,"min":75,"max":90,"menu":"style"},"neckTieLength":{"pct":80,"min":70,"max":100,"menu":"style"},"neckTieWidth":{"pct":6,"min":2,"max":18,"snap":{"metric":[6,13,19,25,32,38],"imperial":[6.35,12.7,19.05,25.4,31.75,38.1]},"menu":"style"},"reversible":{"bool":false,"menu":"style"},"topDepth":{"pct":54,"min":50,"max":80,"menu":"fit"},"bottomCupDepth":{"pct":8,"min":0,"max":20,"menu":"fit"},"sideDepth":{"pct":20.6,"min":0,"max":30,"menu":"fit"},"sideCurve":{"pct":0,"min":-50,"max":50,"menu":"fit"},"frontCurve":{"pct":0,"min":-50,"max":50,"menu":"fit"},"bellaGuide":{"bool":false,"menu":"fit"},"pointedTieEnds":{"bool":false,"menu":"style"},"duoColorTies":{"bool":false,"menu":"style"},"bandTieWidth":{"pct":3,"min":1,"max":9,"snap":{"metric":[6,13,19,25,32,38],"imperial":[6.35,12.7,19.05,25.4,31.75,38.1]},"menu":"style"},"bandTieLength":{"pct":35,"min":30,"max":50,"menu":"style"}},"bella":{"acrossBackFactor":0.925,"shoulderSlopeBack":1.23,"neckWidthBack":0.197,"neckWidthFront":0.17,"backDartLocation":0.145,"backCenterWaistReduction":0.35,"collarFactor":0.19,"bustSpanEase":{"pct":10,"min":0,"max":20,"menu":"fit"},"chestEase":{"pct":11,"min":5,"max":20,"menu":"fit"},"fullChestEaseReduction":{"pct":4,"min":0,"max":8,"menu":"fit"},"shoulderToShoulderEase":{"pct":-0.5,"min":-1,"max":5,"menu":"fit"},"waistEase":{"pct":5,"min":1,"max":20,"menu":"fit"},"backDartHeight":{"pct":46,"min":38,"max":54,"menu":"darts"},"bustDartCurve":{"pct":100,"min":0,"max":100,"menu":"darts"},"bustDartLength":{"pct":90,"min":75,"max":100,"menu":"darts"},"waistDartLength":{"pct":90,"min":75,"max":95,"menu":"darts"},"armholeDepth":{"pct":44,"min":38,"max":46,"menu":"armhole"},"backArmholeCurvature":{"pct":63,"min":50,"max":85,"menu":"armhole"},"backArmholePitchDepth":{"pct":35,"max":40,"min":30,"menu":"armhole"},"backArmholeSlant":{"deg":5,"min":1,"max":9,"menu":"armhole"},"frontArmholeCurvature":{"pct":63,"min":50,"max":85,"menu":"armhole"},"frontArmholePitchDepth":{"pct":29,"max":31,"min":27,"menu":"armhole"},"backHemSlope":{"deg":2.5,"min":0,"max":5,"menu":"advanced"},"backNeckCutout":{"pct":6,"min":3,"max":9,"menu":"advanced"},"frontShoulderWidth":{"pct":95,"max":98,"min":92,"menu":"advanced"},"highBustWidth":{"pct":86,"max":92,"min":80,"menu":"advanced"}},"benjamin":{"transitionLength":2,"bandLength":0.17,"adjustmentRibbonWidth":20,"collarEase":{"pct":3,"min":0,"max":6,"menu":"fit"},"adjustmentRibbon":{"bool":false,"menu":"fit"},"tipWidth":{"pct":15,"min":0,"max":20,"menu":"style"},"knotWidth":{"pct":7,"min":5,"max":10,"menu":"style"},"bowLength":{"pct":28,"min":23,"max":33,"menu":"style"},"bowStyle":{"dflt":"butterfly","list":["diamond","butterfly","square","widesquare"],"menu":"style"},"endStyle":{"dflt":"straight","list":["straight","pointed","rounded"],"menu":"style"},"collarBandHeight":{"pct":6,"min":5,"max":8,"menu":"style"}},"bent":{"brianFitSleeve":true,"brianFitCollar":true,"collarFactor":4.8,"bicepsEase":{"pct":20,"min":10,"max":40,"menu":"fit"},"chestEase":{"pct":8,"min":-4,"max":20,"menu":"fit"},"collarEase":{"pct":3.5,"min":0,"max":10,"menu":"fit"},"cuffEase":{"pct":40,"min":2,"max":100,"menu":"fit"},"draftForHighBust":{"bool":false},"shoulderEase":{"pct":0,"min":-2,"max":6,"menu":"fit"},"lengthBonus":{"pct":0,"min":-4,"max":60,"menu":"fit"},"s3Collar":{"pct":0,"min":-100,"max":100,"menu":"style"},"s3Armhole":{"pct":0,"min":-100,"max":100,"menu":"style"},"acrossBackFactor":{"pct":97,"min":93,"max":100,"menu":"advanced"},"armholeDepth":{"pct":5,"min":-10,"max":50},"armholeDepthFactor":{"pct":60,"min":50,"max":70},"backNeckCutout":{"pct":5,"min":2,"max":8,"menu":"advanced"},"frontArmholeDeeper":{"pct":0.5,"min":0,"max":1.5,"menu":"advanced"},"shoulderSlopeReduction":{"pct":0,"min":0,"max":80,"menu":"advanced"},"legacyArmholeDepth":{"bool":false,"menu":"advanced"},"sleeveLengthBonus":{"pct":0,"min":-20,"max":15,"menu":"fit"},"sleeveBend":{"deg":10,"min":0,"max":20,"menu":"fit"},"sleevecapHeight":{"pct":45,"min":40,"max":60,"menu":"advanced"},"sleevecapEase":{"pct":1,"min":0,"max":10,"menu":"advanced"}},"bob":{"neckRatio":{"pct":80,"min":70,"max":90,"menu":"fit"},"widthRatio":{"pct":45,"min":35,"max":55,"menu":"fit"},"lengthRatio":{"pct":75,"min":55,"max":85,"menu":"fit"},"headSize":{"pct":100,"min":10,"max":200,"snap":5,"menu":"size"}},"breanna":{"collarFactor":4.8,"armholeDepthBase":0.6,"shoulderSeamLength":0.95,"sleeveWidthGuarantee":0.9,"breannaFitSleeve":true,"breannaFitCollar":true,"shoulderDart":{"bool":false,"menu":"fit"},"waistDart":{"bool":true,"menu":"fit"},"primaryBustDart":{"list":["06:00","07:00","08:00","09:00","10:00","11:00","11:30","12:00","12:30","13:00","13:30","14:00","15:00","16:00","17:00"],"dflt":"06:00","doNotTranslate":true,"menu":"style"},"secondaryBustDart":{"list":["none","06:00","07:00","08:00","09:00","10:00","11:00","11:30","12:00","12:30","13:00","13:30","14:00","15:00","16:00","17:00"],"dflt":"13:30","doNotTranslate":true,"menu":"style"},"acrossBackFactor":{"pct":96,"min":93,"max":100,"menu":"advanced"},"armholeDepthFactor":{"pct":100,"min":80,"max":120,"menu":"advanced"},"backNeckCutout":{"pct":5,"min":2,"max":8,"menu":"advanced"},"bicepsEase":{"pct":15,"min":0,"max":50,"menu":"fit"},"shoulderDartSize":{"pct":7,"min":4,"max":10},"shoulderDartLength":{"pct":85,"min":60,"max":100},"waistDartSize":{"pct":10,"min":4,"max":15},"waistDartLength":{"pct":85,"min":60,"max":100},"verticalEase":{"pct":2,"min":0,"max":8,"menu":"fit"},"frontArmholeDeeper":{"pct":1,"min":0,"max":5,"menu":"advanced"},"shoulderEase":{"pct":0,"min":0,"max":4,"menu":"fit"},"collarEase":{"pct":3.5,"min":0,"max":10,"menu":"fit"},"chestEase":{"pct":10,"min":5,"max":20,"menu":"fit"},"waistEase":{"pct":10,"min":5,"max":20,"menu":"fit"},"primaryBustDartShaping":{"pct":50,"min":25,"max":75,"menu":"style"},"primaryBustDartLength":{"pct":85,"min":65,"max":95,"menu":"style"},"secondaryBustDartLength":{"pct":85,"min":65,"max":95,"menu":"style"},"shoulderSlopeReduction":{"pct":0,"min":0,"max":100,"menu":"advanced"},"frontScyeDart":{"pct":25,"min":0,"max":45,"menu":"fit"},"sleevecapEase":{"pct":0.5,"min":0,"max":2.5,"menu":"advanced.sleevecap"},"sleevecapTopFactorX":{"pct":50,"min":25,"max":75,"menu":"advanced.sleevecap"},"sleevecapTopFactorY":{"pct":110,"min":35,"max":165,"menu":"advanced.sleevecap"},"sleevecapBackFactorX":{"pct":45,"min":35,"max":55,"menu":"advanced.sleevecap"},"sleevecapBackFactorY":{"pct":33,"min":30,"max":65,"menu":"advanced.sleevecap"},"sleevecapFrontFactorX":{"pct":55,"min":35,"max":65,"menu":"advanced.sleevecap"},"sleevecapFrontFactorY":{"pct":33,"min":30,"max":65,"menu":"advanced.sleevecap"},"sleevecapQ1Offset":{"pct":3,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ2Offset":{"pct":5.5,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ3Offset":{"pct":4.5,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ4Offset":{"pct":1,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ1Spread1":{"pct":10,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ1Spread2":{"pct":12.5,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ2Spread1":{"pct":12.5,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ2Spread2":{"pct":12.5,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ3Spread1":{"pct":12.5,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ3Spread2":{"pct":8,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ4Spread1":{"pct":7,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ4Spread2":{"pct":7,"min":4,"max":20,"menu":"advanced.sleevecap"},"cuffEase":{"pct":20,"min":0,"max":50,"menu":"fit"},"sleeveLengthBonus":{"pct":0,"min":-40,"max":10,"menu":"style"}},"brian":{"brianFitSleeve":true,"brianFitCollar":true,"collarFactor":4.8,"bicepsEase":{"pct":15,"min":0,"max":50,"menu":"fit"},"chestEase":{"pct":15,"min":-4,"max":35,"menu":"fit"},"collarEase":{"pct":5,"min":0,"max":10,"menu":"fit"},"cuffEase":{"pct":20,"min":0,"max":200,"menu":"fit"},"draftForHighBust":{"bool":false},"shoulderEase":{"pct":0,"min":-2,"max":6,"menu":"fit"},"lengthBonus":{"pct":0,"min":-4,"max":60,"menu":"style"},"s3Collar":{"pct":0,"min":-100,"max":100,"menu":"style"},"s3Armhole":{"pct":0,"min":-100,"max":100,"menu":"style"},"acrossBackFactor":{"pct":98,"min":93,"max":100,"menu":"advanced"},"armholeDepth":{"pct":2,"min":-10,"max":50},"armholeDepthFactor":{"pct":55,"min":50,"max":70},"backNeckCutout":{"pct":5,"min":2,"max":8,"menu":"advanced"},"frontArmholeDeeper":{"pct":0.2,"min":0,"max":0.5,"menu":"advanced"},"shoulderSlopeReduction":{"pct":0,"min":0,"max":80,"menu":"advanced"},"legacyArmholeDepth":{"bool":false,"menu":"advanced"},"sleevecapEase":{"pct":0,"min":0,"max":10,"menu":"advanced.sleevecap"},"sleevecapTopFactorX":{"pct":50,"min":25,"max":75,"menu":"advanced.sleevecap"},"sleevecapTopFactorY":{"pct":45,"min":35,"max":125,"menu":"advanced.sleevecap"},"sleevecapBackFactorX":{"pct":60,"min":35,"max":65,"menu":"advanced.sleevecap"},"sleevecapBackFactorY":{"pct":33,"min":30,"max":65,"menu":"advanced.sleevecap"},"sleevecapFrontFactorX":{"pct":55,"min":35,"max":65,"menu":"advanced.sleevecap"},"sleevecapFrontFactorY":{"pct":33,"min":30,"max":65,"menu":"advanced.sleevecap"},"sleevecapQ1Offset":{"pct":1.7,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ2Offset":{"pct":3.5,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ3Offset":{"pct":2.5,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ4Offset":{"pct":1,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ1Spread1":{"pct":10,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ1Spread2":{"pct":15,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ2Spread1":{"pct":15,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ2Spread2":{"pct":10,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ3Spread1":{"pct":10,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ3Spread2":{"pct":8,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ4Spread1":{"pct":7,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ4Spread2":{"pct":6.3,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleeveWidthGuarantee":{"pct":90,"min":25,"max":100,"menu":"advanced"},"sleeveLengthBonus":{"pct":0,"min":-40,"max":10,"menu":"style"}},"bruce":{"hipRatioFront":0.245,"hipRatioBack":0.315,"legRatioInset":0.3,"legRatioBack":0.32,"gussetRatio":0.0666,"gussetInsetRatio":0.6,"heightRatioInset":0.65,"bulge":{"deg":20,"min":0,"max":40,"menu":"fit"},"legBonus":{"pct":0,"min":-10,"max":20,"menu":"style"},"rise":{"pct":10,"min":0,"max":25,"menu":"style"},"stretch":{"pct":15,"min":5,"max":25,"menu":"fit"},"legStretch":{"pct":40,"min":25,"max":45,"menu":"fit"},"backRise":{"pct":5,"min":0,"max":10,"menu":"fit"}},"carlita":{"brianFitSleeve":true,"brianFitCollar":true,"collarFactor":4.8,"bicepsEase":{"pct":20,"min":0,"max":50,"menu":"fit"},"chestEase":{"pct":10,"min":5,"max":20,"menu":"fit"},"collarEase":0.145,"cuffEase":{"pct":60,"min":30,"max":100,"menu":"fit"},"draftForHighBust":true,"shoulderEase":{"pct":0,"min":-2,"max":6,"menu":"fit"},"lengthBonus":0,"s3Collar":{"pct":0,"min":-100,"max":100,"menu":"style"},"s3Armhole":{"pct":0,"min":-100,"max":100,"menu":"style"},"acrossBackFactor":{"pct":97,"min":93,"max":100,"menu":"fit"},"armholeDepth":{"pct":5,"min":-10,"max":50},"armholeDepthFactor":{"pct":65,"min":50,"max":70,"menu":"fit"},"backNeckCutout":{"pct":5,"min":2,"max":8,"menu":"advanced"},"frontArmholeDeeper":{"pct":0.5,"min":0,"max":1.5,"menu":"advanced"},"shoulderSlopeReduction":{"pct":12,"min":0,"max":80,"menu":"advanced"},"legacyArmholeDepth":{"bool":false,"menu":"advanced"},"buttonSpacingHorizontal":{"pct":43.5,"min":15,"max":60,"menu":"style"},"length":{"pct":69,"min":35,"max":100,"menu":"style"},"lapelReduction":{"pct":5,"min":0,"max":10,"menu":"advanced"},"frontOverlap":{"pct":1.5,"min":1,"max":2,"menu":"advanced"},"pocketPlacementHorizontal":{"pct":11,"min":5,"max":20,"menu":"pockets"},"pocketPlacementVertical":{"pct":6,"min":5,"max":60,"menu":"pockets"},"pocketWidth":{"pct":95,"min":70,"max":120,"menu":"pockets"},"pocketHeight":{"pct":15,"min":0,"max":40,"menu":"pockets"},"pocketRadius":{"pct":20,"min":0,"max":50,"menu":"pockets"},"pocketFlapRadius":{"pct":15,"min":0,"max":50,"menu":"pockets"},"chestPocketPlacement":{"pct":55,"min":30,"max":65,"menu":"pockets"},"chestPocketAngle":0,"chestPocketHeight":{"pct":60,"min":40,"max":80,"menu":"pockets"},"chestPocketWidth":{"pct":25,"min":15,"max":50,"menu":"pockets"},"innerPocketPlacement":{"pct":53,"min":42,"max":62,"menu":"pockets"},"innerPocketWidth":{"pct":50,"min":45,"max":65,"menu":"pockets"},"waistEase":{"pct":14,"min":8,"max":25,"menu":"fit"},"seatEase":{"pct":14,"min":8,"max":25,"menu":"fit"},"innerPocketWeltHeight":{"pct":3.5,"min":2.5,"max":5,"menu":"pockets"},"contour":{"pct":50,"min":25,"max":75,"menu":"advanced"},"backPleat":0.048,"beltWidth":{"pct":15,"min":10,"max":20,"menu":"style"},"sleeveLengthBonus":{"pct":7,"min":0,"max":20,"menu":"fit"},"sleeveBend":{"deg":10,"min":0,"max":20,"menu":"fit"},"sleevecapHeight":{"pct":45,"min":40,"max":60,"menu":"advanced"},"sleevecapEase":{"pct":1,"min":0,"max":10,"menu":"advanced"},"cuffLength":{"pct":15,"min":10,"max":20,"menu":"style"},"chestShapingMax":5,"collarHeight":{"pct":9.6,"min":8,"max":11,"menu":"collar"},"collarFlare":{"pct":20,"min":0,"max":40,"menu":"collar"},"collarSpread":{"deg":4,"min":2,"max":6,"menu":"collar"},"innerPocketDepth":{"pct":110,"min":75,"max":140,"menu":"pockets"}},"carlton":{"brianFitSleeve":true,"brianFitCollar":true,"collarFactor":4.8,"bicepsEase":{"pct":20,"min":0,"max":50,"menu":"fit"},"chestEase":{"pct":10,"min":5,"max":20,"menu":"fit"},"collarEase":0.145,"cuffEase":{"pct":60,"min":30,"max":100,"menu":"fit"},"draftForHighBust":{"bool":false,"menu":"fit"},"shoulderEase":{"pct":0,"min":-2,"max":6,"menu":"fit"},"lengthBonus":0,"s3Collar":{"pct":0,"min":-100,"max":100,"menu":"style"},"s3Armhole":{"pct":0,"min":-100,"max":100,"menu":"style"},"acrossBackFactor":{"pct":97,"min":93,"max":100,"menu":"fit"},"armholeDepth":{"pct":5,"min":-10,"max":50},"armholeDepthFactor":{"pct":65,"min":50,"max":70,"menu":"fit"},"backNeckCutout":{"pct":5,"min":2,"max":8,"menu":"advanced"},"frontArmholeDeeper":{"pct":0.5,"min":0,"max":1.5,"menu":"advanced"},"shoulderSlopeReduction":{"pct":12,"min":0,"max":80,"menu":"advanced"},"legacyArmholeDepth":{"bool":false,"menu":"advanced"},"buttonSpacingHorizontal":{"pct":43.5,"min":15,"max":60,"menu":"style"},"length":{"pct":69,"min":35,"max":100,"menu":"style"},"lapelReduction":{"pct":5,"min":0,"max":10,"menu":"advanced"},"frontOverlap":{"pct":1.5,"min":1,"max":2,"menu":"advanced"},"pocketPlacementHorizontal":{"pct":11,"min":5,"max":20,"menu":"pockets"},"pocketPlacementVertical":{"pct":6,"min":5,"max":60,"menu":"pockets"},"pocketWidth":{"pct":95,"min":70,"max":120,"menu":"pockets"},"pocketHeight":{"pct":15,"min":0,"max":40,"menu":"pockets"},"pocketRadius":{"pct":20,"min":0,"max":50,"menu":"pockets"},"pocketFlapRadius":{"pct":15,"min":0,"max":50,"menu":"pockets"},"chestPocketPlacement":{"pct":55,"min":30,"max":65,"menu":"pockets"},"chestPocketAngle":{"deg":4,"min":0,"max":6,"menu":"pockets"},"chestPocketHeight":{"pct":60,"min":40,"max":80,"menu":"pockets"},"chestPocketWidth":{"pct":25,"min":15,"max":50,"menu":"pockets"},"innerPocketPlacement":{"pct":53,"min":42,"max":62,"menu":"pockets"},"innerPocketWidth":{"pct":50,"min":45,"max":65,"menu":"pockets"},"waistEase":{"pct":14,"min":8,"max":25,"menu":"fit"},"seatEase":{"pct":14,"min":8,"max":25,"menu":"fit"},"innerPocketWeltHeight":{"pct":3.5,"min":2.5,"max":5,"menu":"pockets"},"backPleat":0.048,"beltWidth":{"pct":15,"min":10,"max":20,"menu":"style"},"sleeveLengthBonus":{"pct":7,"min":0,"max":20,"menu":"fit"},"sleeveBend":{"deg":10,"min":0,"max":20,"menu":"fit"},"sleevecapHeight":{"pct":45,"min":40,"max":60,"menu":"advanced"},"sleevecapEase":{"pct":1,"min":0,"max":10,"menu":"advanced"},"cuffLength":{"pct":15,"min":10,"max":20,"menu":"style"},"chestShapingMax":5,"collarHeight":{"pct":9.6,"min":8,"max":11,"menu":"collar"},"collarFlare":{"pct":20,"min":0,"max":40,"menu":"collar"},"collarSpread":{"deg":4,"min":2,"max":6,"menu":"collar"},"innerPocketDepth":{"pct":110,"min":75,"max":140,"menu":"pockets"}},"cathrin":{"waistReduction":{"pct":10,"min":2,"max":20,"menu":"fit"},"panels":{"list":["11","13"],"dflt":"13","menu":"fit"},"backOpening":{"pct":4,"min":3,"max":10,"menu":"style"},"backRise":{"pct":15,"min":1,"max":25,"menu":"style"},"backDrop":{"pct":2,"min":0,"max":5,"menu":"style"},"frontRise":{"pct":4,"min":0.1,"max":8,"menu":"style"},"frontDrop":{"pct":5,"min":0,"max":10,"menu":"style"},"hipRise":{"pct":5,"min":0,"max":15,"menu":"style"}},"charlie":{"fitCrossSeam":true,"fitCrossSeamFront":true,"fitCrossSeamBack":true,"fitGuides":false,"waistEase":{"pct":1,"min":0,"max":5,"menu":"fit"},"seatEase":{"pct":5,"min":0,"max":10,"menu":"fit"},"kneeEase":{"pct":15,"min":10,"max":30,"menu":"fit"},"waistHeight":{"pct":-4,"min":-15,"max":40,"menu":"style"},"lengthBonus":{"pct":2,"min":-20,"max":10,"menu":"style"},"crotchDrop":{"pct":2,"min":0,"max":15,"menu":"style"},"fitKnee":true,"legBalance":{"pct":57.5,"min":52.5,"max":62.5,"menu":"advanced"},"crossSeamCurveStart":{"pct":85,"min":60,"max":100,"menu":"advanced"},"crossSeamCurveBend":{"pct":65,"min":45,"max":85,"menu":"advanced"},"crossSeamCurveAngle":{"deg":12,"min":0,"max":20,"menu":"advanced"},"crotchSeamCurveStart":{"pct":80,"min":60,"max":95,"menu":"advanced"},"crotchSeamCurveBend":{"pct":80,"min":45,"max":100,"menu":"advanced"},"crotchSeamCurveAngle":{"deg":25,"min":0,"max":35,"menu":"advanced"},"waistBalance":{"pct":55,"min":30,"max":90,"menu":"advanced"},"grainlinePosition":{"pct":50,"min":30,"max":60,"menu":"advanced"},"waistbandWidth":{"pct":3,"min":1,"max":6,"snap":{"metric":[3.5,5,10,12,20,25,30,40,50,60,80,100,120],"imperial":[3.175,6.35,9.524999999999999,12.7,15.875,19.049999999999997,25.4,31.75,38.099999999999994,44.449999999999996,50.8,76.19999999999999,101.6,127]},"menu":"style"},"waistbandReduction":0.25,"waistbandFactor":0.1,"frontPocketSlantDepth":{"pct":85,"min":70,"max":100,"menu":"pockets.frontpockets"},"frontPocketSlantWidth":{"pct":25,"min":15,"max":35,"menu":"pockets.frontpockets"},"frontPocketSlantRound":{"pct":30,"min":5,"max":50,"menu":"pockets.frontpockets"},"frontPocketSlantBend":{"pct":25,"min":5,"max":50,"menu":"pockets.frontpockets"},"frontPocketWidth":{"pct":55,"min":45,"max":65,"menu":"pockets.frontpockets"},"frontPocketDepth":{"pct":100,"min":85,"max":110,"menu":"pockets.frontpockets"},"frontPocketFacing":{"pct":45,"min":25,"max":65,"menu":"pockets.frontpockets"},"flyCurve":{"pct":72,"min":50,"max":100,"menu":"advanced.fly"},"flyLength":{"pct":45,"min":30,"max":60,"menu":"advanced.fly"},"flyWidth":{"pct":15,"min":10,"max":20,"menu":"advanced.fly"},"backPocketVerticalPlacement":{"pct":24,"min":18,"max":30,"menu":"pockets.backpockets"},"backPocketHorizontalPlacement":{"pct":55,"min":48,"max":62,"menu":"pockets.backpockets"},"backPocketWidth":{"pct":55,"min":50,"max":60,"menu":"pockets.backpockets"},"backPocketDepth":{"pct":60,"min":40,"max":80,"menu":"pockets.backpockets"},"backPocketFacing":{"bool":true,"menu":"pockets.backpockets"},"waistbandCurve":{"pct":0,"min":0,"max":35,"menu":"fit"},"beltLoops":{"count":8,"min":6,"max":12,"menu":"advanced"}},"cornelius":{"pctAtoO":0.5,"pctAtoC":0.25,"pctUtoA":0.25,"pctJtoA":0.25,"pctSeatAdjustment":0.5,"ventLength":{"pct":70,"min":25,"max":110,"menu":"style"},"fullness":{"pct":0,"min":0,"max":55,"menu":"fit"},"waistbandBelowWaist":{"pct":5,"min":0,"max":15,"menu":"style"},"waistReduction":{"pct":1,"min":-2,"max":10,"menu":"fit"},"bandBelowKnee":{"pct":25,"min":15,"max":50,"menu":"advanced"},"pctZtoR":0.35,"pctRtoZin":0.75,"pctRtoZup":0.25,"pctRtoKin":0.75,"pctRtoKdown":0.25,"pctKtoRout":0.15,"pctKtoRup":0.25,"pctKtoH":0.7,"flyWidth":{"pct":0.38,"min":0.2,"max":0.6,"menu":"style"},"kneeToBelow":{"pct":94,"min":85,"max":110,"menu":"advanced"},"cuffWidth":{"pct":0,"min":-50,"max":150,"menu":"style"},"cuffStyle":{"dflt":"elegant","list":["traditional","elegant","keystone"],"menu":"style"}},"diana":{"brianFitSleeve":true,"brianFitCollar":true,"collarFactor":5,"bicepsEase":{"pct":0,"min":-5,"max":50,"menu":"fit"},"chestEase":{"pct":0,"min":-10,"max":20,"menu":"fit"},"collarEase":0,"cuffEase":{"pct":20,"min":0,"max":30,"menu":"fit"},"draftForHighBust":{"bool":false,"menu":"fit"},"shoulderEase":{"pct":0,"min":-2,"max":6,"menu":"fit"},"lengthBonus":{"pct":0,"min":0,"max":50,"menu":"fit"},"s3Collar":0,"s3Armhole":0,"acrossBackFactor":{"pct":97,"min":93,"max":100,"menu":"advanced"},"armholeDepth":{"pct":0,"min":0,"max":20,"menu":"advanced"},"armholeDepthFactor":{"pct":55,"min":50,"max":70,"menu":"advanced"},"backNeckCutout":0.05,"frontArmholeDeeper":{"pct":0,"min":0,"max":1.5,"menu":"advanced"},"shoulderSlopeReduction":0,"legacyArmholeDepth":{"bool":false,"menu":"advanced"},"drapeAngle":{"deg":20,"min":10,"max":30,"menu":"style"},"sleeveLengthBonus":{"pct":0,"min":-40,"max":10,"menu":"fit"},"shoulderSeamLength":{"pct":35,"min":0.1,"max":60,"menu":"style"},"waistEase":{"pct":0,"min":-10,"max":20,"menu":"fit"},"hipsEase":{"pct":0,"min":-10,"max":20,"menu":"fit"},"sleevecapEase":{"pct":0,"min":0,"max":10,"menu":"advanced.sleevecap"},"sleevecapTopFactorX":{"pct":50,"min":25,"max":75,"menu":"advanced.sleevecap"},"sleevecapTopFactorY":{"pct":100,"min":35,"max":165,"menu":"advanced.sleevecap"},"sleevecapBackFactorX":{"pct":60,"min":35,"max":65,"menu":"advanced.sleevecap"},"sleevecapBackFactorY":{"pct":33,"min":30,"max":65,"menu":"advanced.sleevecap"},"sleevecapFrontFactorX":{"pct":55,"min":35,"max":65,"menu":"advanced.sleevecap"},"sleevecapFrontFactorY":{"pct":33,"min":30,"max":65,"menu":"advanced.sleevecap"},"sleevecapQ1Offset":{"pct":3,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ2Offset":{"pct":5.5,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ3Offset":{"pct":4.5,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ4Offset":{"pct":1,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ1Spread1":{"pct":6,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ1Spread2":{"pct":15,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ2Spread1":{"pct":15,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ2Spread2":{"pct":10,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ3Spread1":{"pct":10,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ3Spread2":{"pct":8,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ4Spread1":{"pct":7,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ4Spread2":{"pct":7,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleeveWidthGuarantee":{"pct":90,"min":25,"max":100,"menu":"advanced"}},"examples":{"size":{"pct":50,"min":5,"max":100,"menu":"stack"},"x":{"pct":0,"min":-100,"max":100,"menu":"stack"},"y":{"pct":0,"min":-100,"max":100,"menu":"stack"},"stackIt":{"dflt":"Do stack","list":["Do stack","Do not stack"],"menu":"stack"}},"florence":{"length":{"pct":40,"min":35,"max":45,"menu":"fit"},"height":{"pct":26,"min":23,"max":29,"menu":"fit"},"curve":{"pct":12.5,"min":10,"max":15,"menu":"fit"}},"florent":{"topSide":0.8,"brim":0,"headEase":{"pct":2,"min":0,"max":5,"menu":"fit"}},"gozer":{},"hi":{"length":1000,"size":{"pct":100,"min":5,"max":500,"menu":"style"},"nosePointiness":{"pct":0,"min":-5,"max":10,"menu":"style"},"aggressive":{"bool":false,"menu":"style"},"hungry":{"pct":50,"min":0,"max":100,"menu":"style"}},"holmes":{"headEase":{"pct":3,"min":0,"max":9,"snap":{"metric":[6,13,19,25,32,38,44,50],"imperial":[6.35,12.7,19.05,25.4,31.75,38.1,44.45,50.8]},"menu":"fit"},"lengthRatio":{"pct":55,"min":40,"max":60,"menu":"style"},"gores":{"count":6,"min":4,"max":20,"menu":"style"},"visorAngle":{"deg":45,"min":10,"max":90,"menu":"style"},"visorWidth":{"pct":5,"min":1,"max":17,"snap":5,"menu":"style"},"visorLength":{"pct":100,"min":80,"max":150,"menu":"advanced"},"earLength":{"pct":100,"min":80,"max":150,"menu":"style"},"earWidth":{"pct":100,"min":80,"max":150,"menu":"style"},"buttonhole":{"bool":false,"menu":"style"}},"hortensia":{"width":230,"height":330,"size":{"pct":50,"min":20,"max":200,"menu":"style"},"zipperSize":{"dflt":"#5","list":["#3","#4","#4.5","#5","#6","#8","#10","invisible"],"menu":"style"},"minHandleSpaceWidth":80,"maxHandleSpaceWidth":250,"pctHandleSpace":50,"pctHandleVert":42,"handleWidth":{"pct":8.6,"min":4,"max":25,"menu":"style"},"strapLength":{"pct":160,"min":75,"max":250,"menu":"style"}},"huey":{"brianFitSleeve":true,"brianFitCollar":true,"collarFactor":4.8,"bicepsEase":{"pct":15,"min":0,"max":50,"menu":"fit"},"chestEase":{"pct":15,"min":-4,"max":35,"menu":"fit"},"collarEase":{"pct":5,"min":0,"max":10,"menu":"fit"},"cuffEase":{"pct":20,"min":0,"max":200,"menu":"fit"},"draftForHighBust":{"bool":false},"shoulderEase":{"pct":0,"min":-2,"max":6,"menu":"fit"},"lengthBonus":{"pct":0,"min":-4,"max":60,"menu":"style"},"s3Collar":{"pct":0,"min":-100,"max":100,"menu":"style"},"s3Armhole":{"pct":0,"min":-100,"max":100,"menu":"style"},"acrossBackFactor":{"pct":98,"min":93,"max":100,"menu":"advanced"},"armholeDepth":{"pct":2,"min":-10,"max":50},"armholeDepthFactor":{"pct":55,"min":50,"max":70},"backNeckCutout":{"pct":5,"min":2,"max":8,"menu":"advanced"},"frontArmholeDeeper":{"pct":0.2,"min":0,"max":0.5,"menu":"advanced"},"shoulderSlopeReduction":{"pct":0,"min":0,"max":80,"menu":"advanced"},"legacyArmholeDepth":{"bool":false,"menu":"advanced"},"ribbing":{"bool":true,"menu":"style"},"ribbingHeight":{"pct":10,"min":5,"max":15,"menu":"style"},"hipsEase":{"pct":8,"min":4,"max":12,"menu":"fit"},"pocket":{"bool":true,"menu":"style"},"pocketHeight":{"pct":30,"min":25,"max":35,"menu":"style"},"pocketWidth":{"pct":60,"min":50,"max":70,"menu":"style"},"sleevecapEase":{"pct":0,"min":0,"max":10,"menu":"advanced.sleevecap"},"sleevecapTopFactorX":{"pct":50,"min":25,"max":75,"menu":"advanced.sleevecap"},"sleevecapTopFactorY":{"pct":45,"min":35,"max":125,"menu":"advanced.sleevecap"},"sleevecapBackFactorX":{"pct":60,"min":35,"max":65,"menu":"advanced.sleevecap"},"sleevecapBackFactorY":{"pct":33,"min":30,"max":65,"menu":"advanced.sleevecap"},"sleevecapFrontFactorX":{"pct":55,"min":35,"max":65,"menu":"advanced.sleevecap"},"sleevecapFrontFactorY":{"pct":33,"min":30,"max":65,"menu":"advanced.sleevecap"},"sleevecapQ1Offset":{"pct":1.7,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ2Offset":{"pct":3.5,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ3Offset":{"pct":2.5,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ4Offset":{"pct":1,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ1Spread1":{"pct":10,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ1Spread2":{"pct":15,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ2Spread1":{"pct":15,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ2Spread2":{"pct":10,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ3Spread1":{"pct":10,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ3Spread2":{"pct":8,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ4Spread1":{"pct":7,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ4Spread2":{"pct":6.3,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleeveWidthGuarantee":{"pct":90,"min":25,"max":100,"menu":"advanced"},"sleeveLengthBonus":{"pct":0,"min":-40,"max":10,"menu":"style"},"hoodHeight":{"pct":59,"min":55,"max":65,"menu":"style"},"hoodCutback":{"pct":10,"min":5,"max":15,"menu":"style"},"hoodClosure":{"pct":13.5,"min":10,"max":15,"menu":"style"},"hoodDepth":{"pct":8.5,"min":5,"max":12,"menu":"style"},"hoodAngle":{"deg":5,"min":2,"max":8,"menu":"style"},"ribbingStretch":{"pct":15,"min":0,"max":30,"menu":"fit"}},"hugo":{"brianFitSleeve":true,"brianFitCollar":true,"collarFactor":4.8,"bicepsEase":{"pct":15,"min":0,"max":50,"menu":"fit"},"chestEase":{"pct":8,"min":4,"max":20,"menu":"fit"},"collarEase":0.05,"cuffEase":{"pct":20,"min":10,"max":50,"menu":"fit"},"draftForHighBust":{"bool":false,"menu":"fit"},"shoulderEase":0,"lengthBonus":{"pct":10,"min":0,"max":20,"menu":"style"},"s3Collar":0,"s3Armhole":0,"acrossBackFactor":{"pct":98,"min":93,"max":100,"menu":"advanced"},"armholeDepth":{"pct":2,"min":-10,"max":50},"armholeDepthFactor":0.5,"backNeckCutout":{"pct":5,"min":2,"max":8,"menu":"advanced"},"frontArmholeDeeper":0,"shoulderSlopeReduction":0,"legacyArmholeDepth":{"bool":false,"menu":"advanced"},"hipsEase":{"pct":12,"min":4,"max":20,"menu":"fit"},"ribbingHeight":{"pct":10,"min":4,"max":20,"menu":"style"},"pocketWidth":{"pct":50,"min":35,"max":65,"menu":"style"},"sleevecapEase":0,"sleevecapTopFactorX":0.5,"sleevecapTopFactorY":0.45,"sleevecapBackFactorX":0.6,"sleevecapBackFactorY":0.33,"sleevecapFrontFactorX":0.55,"sleevecapFrontFactorY":0.33,"sleevecapQ1Offset":0.017,"sleevecapQ2Offset":0.035,"sleevecapQ3Offset":0.025,"sleevecapQ4Offset":0.01,"sleevecapQ1Spread1":0.1,"sleevecapQ1Spread2":0.15,"sleevecapQ2Spread1":0.15,"sleevecapQ2Spread2":0.1,"sleevecapQ3Spread1":0.1,"sleevecapQ3Spread2":0.08,"sleevecapQ4Spread1":0.07,"sleevecapQ4Spread2":0.063,"sleeveWidthGuarantee":0.9,"sleeveLengthBonus":{"pct":2,"min":0,"max":10,"menu":"style"},"ribbingStretch":{"pct":5,"min":0,"max":10,"menu":"fit"}},"jaeger":{"brianFitSleeve":true,"brianFitCollar":true,"collarFactor":4.8,"bicepsEase":{"pct":15,"min":0,"max":50,"menu":"fit"},"chestEase":{"pct":15,"min":-4,"max":35,"menu":"fit"},"collarEase":{"pct":5,"min":0,"max":10,"menu":"fit"},"cuffEase":{"pct":20,"min":0,"max":200,"menu":"fit"},"draftForHighBust":{"bool":false},"shoulderEase":{"pct":0,"min":-2,"max":6,"menu":"fit"},"lengthBonus":{"pct":19,"min":10,"max":25,"menu":"fit"},"s3Collar":0,"s3Armhole":0,"acrossBackFactor":{"pct":98,"min":93,"max":100,"menu":"advanced"},"armholeDepth":{"pct":2,"min":-10,"max":50},"armholeDepthFactor":{"pct":55,"min":50,"max":70},"backNeckCutout":{"pct":5,"min":2,"max":8,"menu":"advanced"},"frontArmholeDeeper":{"pct":0.2,"min":0,"max":0.5,"menu":"advanced"},"shoulderSlopeReduction":{"pct":0,"min":0,"max":80,"menu":"advanced"},"legacyArmholeDepth":{"bool":false,"menu":"advanced"},"centerBackDart":{"pct":0.5,"min":0,"max":1.5,"menu":"fit"},"hipsEase":{"pct":12,"min":8,"max":20,"menu":"fit"},"waistEase":{"pct":14,"min":8,"max":25,"menu":"fit"},"rollLineCollarHeight":{"pct":6,"min":5,"max":9,"menu":"collar"},"reduceWaistStandardFraction":0.08,"reduceWaistDartFraction":0.05,"reduceHipsStandardFraction":0.1,"centerFrontHemDrop":{"pct":2,"min":0,"max":4,"menu":"style"},"frontPocketPlacement":{"pct":75,"min":65,"max":85,"menu":"pockets"},"frontPocketWidth":{"pct":68,"min":55,"max":75,"menu":"pockets"},"frontPocketDepth":{"pct":110,"min":80,"max":130,"menu":"pockets"},"frontPocketRadius":{"pct":10,"min":0,"max":50,"menu":"pockets"},"frontDartPlacement":{"pct":55,"min":45,"max":60,"menu":"advanced"},"sideFrontPlacement":{"pct":85,"min":80,"max":90,"menu":"advanced"},"frontOverlap":{"pct":1.5,"min":1,"max":2,"menu":"advanced"},"innerPocketPlacement":{"pct":52,"min":42,"max":62,"menu":"pockets"},"innerPocketWidth":{"pct":50,"min":45,"max":65,"menu":"pockets"},"innerPocketDepth":{"pct":110,"min":75,"max":140,"menu":"pockets"},"innerPocketWeltHeight":{"pct":3.5,"min":2.5,"max":5,"menu":"pockets"},"frontCutawayAngle":{"deg":2.5,"min":1,"max":4,"menu":"style"},"frontCutawayStart":{"pct":30,"min":10,"max":70,"menu":"style"},"frontCutawayEnd":{"pct":40,"min":10,"max":40,"menu":"style"},"hemRadius":{"pct":100,"min":35,"max":100,"menu":"style"},"chestPocketDepth":{"pct":110,"min":70,"max":150,"menu":"pockets"},"chestPocketWidth":{"pct":37,"min":30,"max":45,"menu":"pockets"},"chestPocketPlacement":{"pct":52,"min":40,"max":60,"menu":"pockets"},"chestPocketAngle":{"deg":2.5,"min":0,"max":7,"menu":"pockets"},"chestPocketWeltSize":{"pct":17.5,"min":10,"max":25,"menu":"pockets"},"lapelStart":{"pct":10,"min":0,"max":35,"menu":"style"},"collarHeight":{"pct":9,"min":7,"max":10,"menu":"collar"},"collarNotchDepth":{"pct":15,"min":15,"max":50,"menu":"collar"},"collarNotchAngle":{"deg":45,"min":30,"max":60,"menu":"collar"},"collarNotchReturn":{"pct":100,"min":50,"max":100,"menu":"collar"},"chestShaping":{"pct":30,"min":0,"max":100,"menu":"advanced"},"buttons":{"list":["1","2","3"],"dflt":"2","menu":"style"},"buttonLength":{"pct":30,"min":30,"max":60,"menu":"style"},"chestShapingMax":5,"lapelReduction":{"pct":5,"min":0,"max":10,"menu":"style"},"backVent":{"count":1,"min":0,"max":2,"menu":"style"},"backVentLength":{"pct":35,"min":15,"max":100,"menu":"style"},"collarSpread":{"deg":13,"min":5,"max":35,"menu":"collar"},"collarRoll":{"pct":5,"min":0,"max":10,"menu":"collar"},"pocketFoldover":{"pct":25,"min":15,"max":35,"menu":"pockets"},"sleeveLengthBonus":{"pct":0,"min":-20,"max":15,"menu":"fit"},"sleeveBend":{"deg":10,"min":0,"max":20,"menu":"fit"},"sleevecapHeight":{"pct":45,"min":40,"max":60,"menu":"advanced"},"sleevecapEase":{"pct":1,"min":0,"max":10,"menu":"advanced"},"sleeveVentLength":{"pct":35,"min":25,"max":55,"menu":"sleeves"},"sleeveVentWidth":{"pct":18,"min":10,"max":26,"menu":"sleeves"}},"legend":{},"lucy":{"width":{"pct":50,"min":30,"max":100,"menu":"style"},"length":{"pct":50,"min":30,"max":100,"menu":"style"},"edge":{"pct":25,"min":20,"max":50,"menu":"style"}},"lunetius":{"lengthRatio":{"pct":105,"min":60,"max":130,"menu":"style"},"widthRatio":{"pct":100,"min":50,"max":130,"menu":"style"},"length":{"list":["toKnee","toBelowKnee","toHips","toUpperLeg","toFloor"],"dflt":"toBelowKnee","menu":"style"}},"magde":{"size":{"pct":100,"min":15,"max":200,"menu":"style"},"taperRatio":{"pct":60,"min":50,"max":100,"menu":"style"},"flapHeightRatio":{"pct":83,"min":60,"max":100,"menu":"style"},"openingRatio":{"pct":66,"min":30,"max":90,"menu":"style"},"onePieceLid":{"bool":false,"menu":"style"},"useCommonWebbingSizes":{"bool":true,"menu":"style"}},"noble":{"acrossBackFactor":0.925,"shoulderSlopeBack":1.23,"neckWidthBack":0.197,"neckWidthFront":0.17,"backDartLocation":0.145,"backCenterWaistReduction":0.35,"collarFactor":0.19,"bustSpanEase":{"pct":0,"min":-5,"max":20,"menu":"fit"},"chestEase":{"pct":11,"min":5,"max":20,"menu":"fit"},"fullChestEaseReduction":{"pct":4,"min":0,"max":8,"menu":"fit"},"shoulderToShoulderEase":{"pct":-0.5,"min":-1,"max":5,"menu":"fit"},"waistEase":{"pct":5,"min":1,"max":20,"menu":"fit"},"backDartHeight":{"pct":46,"min":38,"max":54,"menu":"darts"},"bustDartCurve":1,"bustDartLength":0.9,"waistDartLength":{"pct":90,"min":75,"max":95,"menu":"darts"},"armholeDepth":{"pct":44,"min":38,"max":46,"menu":"armhole"},"backArmholeCurvature":{"pct":63,"min":50,"max":85,"menu":"armhole"},"backArmholePitchDepth":{"pct":35,"max":40,"min":30,"menu":"armhole"},"backArmholeSlant":{"deg":5,"min":1,"max":9,"menu":"armhole"},"frontArmholeCurvature":{"pct":63,"min":50,"max":85,"menu":"armhole"},"frontArmholePitchDepth":{"pct":29,"max":31,"min":27,"menu":"armhole"},"backHemSlope":{"deg":2.5,"min":0,"max":5,"menu":"advanced"},"backNeckCutout":{"pct":6,"min":3,"max":9,"menu":"advanced"},"frontShoulderWidth":{"pct":95,"max":98,"min":92,"menu":"advanced"},"highBustWidth":{"pct":86,"max":92,"min":80,"menu":"advanced"},"armholeDartPosition":{"pct":50,"min":10,"max":90},"dartPosition":{"dflt":"shoulder","list":["shoulder","armhole"],"menu":"darts"},"shoulderDartPosition":{"pct":50,"min":10,"max":90},"shoulderToShoulderCorrection":0.995,"upperDartLength":{"pct":90,"min":80,"max":95,"menu":"darts"}},"octoplushy":{"sizeConstant":200,"size":{"pct":100,"min":5,"max":500,"menu":"style"},"type":{"dflt":"octoplushy","list":["octoplushy","octopus","squid"],"menu":"style"},"armWidth":{"pct":15,"min":10,"max":30,"menu":"style"},"armLength":{"pct":200,"min":100,"max":500,"menu":"style"},"neckWidth":{"pct":25,"min":25,"max":45,"menu":"style"},"armTaper":{"pct":25,"min":0,"max":50,"menu":"style"},"bottomTopArmRatio":{"pct":57,"min":25,"max":75,"menu":"style"},"bottomArmReduction":{"pct":90,"min":75,"max":125},"bottomArmReductionPlushy":{"pct":80,"min":75,"max":125}},"paco":{"fitCrossSeam":true,"fitCrossSeamFront":true,"fitCrossSeamBack":true,"fitGuides":false,"waistEase":{"pct":2,"min":0,"max":10,"menu":"fit"},"seatEase":{"pct":5,"min":0,"max":15,"menu":"fit"},"kneeEase":0.06,"waistHeight":{"pct":5,"min":0,"max":100,"menu":"style"},"lengthBonus":{"pct":0,"min":-15,"max":10,"menu":"style"},"crotchDrop":{"pct":2,"min":0,"max":10,"menu":"style"},"fitKnee":false,"legBalance":{"pct":57.5,"min":52.5,"max":62.5,"menu":"advanced"},"crossSeamCurveStart":{"pct":85,"min":60,"max":100,"menu":"advanced"},"crossSeamCurveBend":{"pct":65,"min":45,"max":85,"menu":"advanced"},"crossSeamCurveAngle":{"deg":12,"min":0,"max":20,"menu":"advanced"},"crotchSeamCurveStart":{"pct":80,"min":60,"max":95,"menu":"advanced"},"crotchSeamCurveBend":{"pct":80,"min":45,"max":100,"menu":"advanced"},"crotchSeamCurveAngle":{"deg":25,"min":0,"max":35,"menu":"advanced"},"waistBalance":{"pct":60,"min":30,"max":90,"menu":"advanced"},"grainlinePosition":{"pct":45,"min":30,"max":60,"menu":"advanced"},"waistbandWidth":{"pct":3,"min":1,"max":6,"snap":{"metric":[3.5,5,10,12,20,25,30,40,50,60,80,100,120],"imperial":[3.175,6.35,9.524999999999999,12.7,15.875,19.049999999999997,25.4,31.75,38.099999999999994,44.449999999999996,50.8,76.19999999999999,101.6,127]},"menu":"elastic"},"titanPaperless":false,"frontPocketHeelRatio":0.4,"backPocketWaistRatio":0.4,"backPocketHeightRatio":0.4,"backPocketWidthRatio":0.37,"waistbandHeight":0,"elasticatedCuff":{"bool":true,"menu":"style"},"ankleElastic":{"pct":5,"min":1,"max":13,"snap":{"metric":[3.5,5,10,12,20,25,30,40,50,60,80,100,120],"imperial":[3.175,6.35,9.524999999999999,12.7,15.875,19.049999999999997,25.4,31.75,38.099999999999994,44.449999999999996,50.8,76.19999999999999,101.6,127]},"menu":"elastic"},"heelEase":{"pct":5,"min":0,"max":50,"menu":"elastic"},"frontPockets":{"bool":true,"menu":"pockets"},"backPockets":{"bool":false,"menu":"pockets"},"frontPocketFlapSize":{"pct":3,"min":3,"max":3,"snap":{"metric":1,"imperial":0.79375},"menu":false},"weltFactor":0.15},"penelope":{"dartMaximumDifference":0.344,"dartMinimumDifference":0.2,"dartMinimumWidth":0.006888,"dartSideMinimum":10,"dartBackControl1":0.114,"dartBackControl2":5,"dartBackControl3":4,"curvePlacement":2.4,"dart2offset":32,"dart2factor":0.8,"hipCurveDividerDown":40,"hipCurveDividerUp":3,"sideSeamShiftPercentage":0.006,"backVentWidth":0.1,"paperlessOffset":15,"curvedDartControlAngle":2,"curvedDartTopControlOffset":0.2,"curvedDartBottomControlOffset":0.4,"curvedDarts":{"bool":true,"menu":"style"},"lengthBonus":{"pct":0,"min":-50,"max":50,"menu":"style"},"hemBonus":{"pct":0,"min":-35,"max":0,"menu":"style"},"hem":{"pct":2,"min":0,"max":5,"menu":"style"},"backVent":{"bool":true,"menu":"style"},"backVentLength":{"pct":40,"min":5,"max":70},"zipperLocation":{"dflt":"backSeam","list":["backSeam","sideSeam"],"menu":"style"},"nrOfDarts":{"count":2,"min":1,"max":2,"menu":"style"},"seatEase":{"pct":1,"min":0,"max":8,"menu":"fit"},"waistEase":{"pct":1,"min":0,"max":8,"menu":"fit"},"backDartDepthFactor":{"pct":50,"min":35,"max":70,"menu":"advanced"},"frontDartDepthFactor":{"pct":45,"min":30,"max":65,"menu":"advanced"},"dartToSideSeamFactor":{"pct":50,"min":30,"max":70,"menu":"advanced"},"waistband":{"bool":true,"menu":"style"},"waistbandWidth":{"pct":10,"min":5,"max":20},"waistbandOverlap":{"pct":3.5,"min":0,"max":10}},"plugintest":{"plugin":{"dflt":"all","list":["all","annotations","flip","gore","i18n","measurements","mirror","round","sprinkle","title","versionfreeSvg"],"menu":"tests"},"bannerDy":{"count":-1,"min":-15,"max":15,"menu":"annotations.banner"},"bannerSpaces":{"count":10,"min":0,"max":20,"menu":"annotations.banner"},"bannerRepeat":{"count":10,"min":1,"max":20,"menu":"annotations.banner"},"bartackLength":{"count":15,"min":2,"max":100,"menu":"annotations.bartack"},"bartackAngle":{"count":0,"min":-360,"max":360,"menu":"annotations.bartack"},"bartackDensity":{"count":3,"min":1,"max":5,"menu":"annotations.bartack"},"bartackWidth":{"count":3,"min":1,"max":5,"menu":"annotations.bartack"},"bartackStart":{"pct":25,"min":0,"max":100,"menu":"annotations.bartack"},"bartackEnd":{"pct":75,"min":0,"max":100,"menu":"annotations.bartack"},"crossboxText":{"bool":true,"menu":"annotations.crossboxText"},"cutonfoldMargin":{"pct":5,"min":0,"max":25,"menu":"annotations.cutonfold"},"cutonfoldOffset":{"count":15,"min":0,"max":100,"menu":"annotations.cutonfold"},"cutonfoldGrainline":{"bool":false,"menu":"annotations.cutonfold"},"dimensionsCustomText":{"bool":false,"menu":"annotations.dimensions"},"dimensionsEndMarker":{"bool":true,"menu":"annotations.dimensions"},"dimensionsStartMarker":{"bool":true,"menu":"annotations.dimensions"},"logoScale":{"pct":100,"min":10,"max":200,"menu":"annotations.logo"},"logoRotate":{"deg":0,"min":-360,"max":360,"menu":"annotations.logo"},"pleatMargin":{"count":35,"min":0,"max":50,"menu":"annotations.pleat"},"pleatReverse":{"bool":false,"menu":"annotations.pleat"},"scaleboxRotation":{"deg":0,"min":0,"max":360,"menu":"annotations.scalebox"},"scaleboxText":{"dflt":"default","list":["default","custom","suppress"],"menu":"annotations.scalebox"},"sewtogetherHinge":{"bool":true,"menu":"annotations.sewtogether"},"sewtogetherMiddle":{"bool":false,"menu":"annotations.sewtogether"},"titleNr":{"count":1,"min":0,"max":100,"menu":"annotations.title"},"titleTitle":{"bool":true,"menu":"annotations.title"},"titleMeta":{"bool":true,"menu":"annotations.title"},"titleScale":{"pct":100,"min":10,"max":200,"menu":"annotations.title"},"titleRotate":{"deg":0,"min":-360,"max":360,"menu":"annotations.title"},"snippetScale":{"pct":100,"min":10,"max":200,"menu":"annotations.snippets"},"snippetRotation":{"deg":0,"min":-360,"max":360,"menu":"annotations.snippets"},"flipAxis":{"dflt":"x","list":["x","y"],"menu":"flip"},"goreRadius":{"count":20,"min":10,"max":30,"menu":"gore"},"goreGoreNumber":{"count":6,"min":4,"max":8,"menu":"gore"},"goreExtraLength":{"count":10,"min":0,"max":20,"menu":"gore"},"mirrorLine":{"dflt":"a","list":["a","b","none"],"menu":"mirror"},"mirrorClone":{"bool":true,"menu":"mirror"},"roundRadius":{"count":10,"min":0,"max":50,"menu":"round"},"roundHide":{"bool":false,"menu":"round"},"sprinkleScale":{"pct":100,"min":10,"max":200,"menu":"sprinkle"},"sprinkleRotate":{"deg":0,"min":-360,"max":360,"menu":"sprinkle"},"sprinkleSnippet":{"dflt":"bnotch","list":["notch","bnotch","button","buttonhole","buttonhole-start","buttonhole-end","snap-stud","snap-socket","logo"],"menu":"sprinkle"}},"rendertest":{"width":{"mm":200,"min":50,"max":500,"testIgnore":false},"only":{"menu":"show","dflt":"false","list":["false","circles","colors","widths","styles","combos","text","snippets","macros"]}},"sandy":{"minimumOverlap":15,"seamlessFullCircle":{"bool":false,"menu":"construction"},"waistbandWidth":{"pct":4,"min":1,"max":8,"snap":{"metric":[3.5,5,10,12,20,25,30,40,50,60,80,100,120],"imperial":[3.175,6.35,9.524999999999999,12.7,15.875,19.049999999999997,25.4,31.75,38.099999999999994,44.449999999999996,50.8,76.19999999999999,101.6,127]},"menu":"style"},"waistbandPosition":{"pct":50,"min":0,"max":100,"menu":"fit"},"lengthBonus":{"pct":50,"min":10,"max":100,"menu":"style"},"circleRatio":{"pct":50,"min":20,"max":100,"menu":"style"},"waistbandOverlap":{"pct":3,"min":0,"max":15,"menu":"style"},"gathering":{"pct":0,"min":0,"max":200,"menu":"style"},"hemWidth":{"pct":2,"min":1,"max":10,"menu":"construction"},"waistbandShape":{"list":["straight","curved"],"dflt":"straight","menu":"fit"}},"shelly":{"neckEase":{"pct":50,"min":-30,"max":150,"menu":"fit"},"chestEase":{"pct":0,"min":-40,"max":50,"menu":"fit"},"straightSides":{"bool":true,"menu":"advanced"},"hipsEase":{"pct":0,"min":-30,"max":75,"menu":"advanced"},"bodyLength":{"pct":120,"min":20,"max":300,"menu":"style"},"neckBalance":{"pct":40,"min":0,"max":80,"menu":"fit"},"raglanScoopLength":{"pct":20,"min":0,"max":50,"menu":"advanced"},"raglanScoopMagnitude":{"pct":6,"min":0,"max":20,"menu":"advanced"},"hemWidth":{"pct":200,"min":0,"max":800,"menu":"construction"},"sideShape":{"pct":0,"min":-20,"max":20,"menu":"advanced"},"armholeTweakFactor":1.1,"bicepsPosition":0.2,"sleeveEase":{"pct":0,"min":-30,"max":50,"menu":"fit"},"wristEase":{"pct":0,"min":-30,"max":50,"menu":"fit"},"sleeveLength":{"pct":20,"min":0,"max":125,"menu":"style"},"sleeveHem":{"pct":200,"min":0,"max":800,"menu":"construction"},"neckbandLength":{"pct":80,"min":50,"max":100,"menu":"fit"},"neckbandWidth":{"pct":7.5,"min":0,"max":50,"menu":"fit"}},"shin":{"frontFactor":0.58,"legFrontFactor":0.48,"gussetFactor":0.0714,"angle":10,"elasticWidth":{"pct":10,"min":4,"max":20,"snap":{"metric":[3.5,5,10,12,20,25,30,40,50,60,80,100,120],"imperial":[3.175,6.35,9.524999999999999,12.7,15.875,19.049999999999997,25.4,31.75,38.099999999999994,44.449999999999996,50.8,76.19999999999999,101.6,127]},"menu":"style"},"stretch":{"pct":20,"min":10,"max":30,"menu":"fit"},"bulge":{"pct":2.5,"min":0,"max":5,"menu":"fit"},"legReduction":{"pct":5,"min":0,"max":10,"menu":"fit"},"rise":{"pct":0,"min":0,"max":25,"menu":"style"},"backRise":{"pct":5,"min":0,"max":10,"menu":"fit"}},"simon":{"brianFitSleeve":true,"brianFitCollar":true,"collarFactor":5,"bicepsEase":{"pct":15,"min":0,"max":50,"menu":"fit"},"chestEase":{"pct":15,"min":-4,"max":35,"menu":"fit"},"collarEase":{"pct":2,"min":0,"max":10,"menu":"fit"},"cuffEase":{"pct":20,"min":10,"max":40,"menu":"fit"},"draftForHighBust":{"bool":false},"shoulderEase":{"pct":2,"min":0,"max":15,"menu":"fit"},"lengthBonus":{"pct":25,"min":-4,"max":60,"menu":"fit"},"s3Collar":{"pct":0,"min":-100,"max":100,"menu":"style"},"s3Armhole":{"pct":0,"min":-100,"max":100,"menu":"style"},"acrossBackFactor":{"pct":98,"min":93,"max":100,"menu":"advanced"},"armholeDepth":{"pct":2,"min":-10,"max":50},"armholeDepthFactor":{"pct":55,"min":50,"max":70},"backNeckCutout":{"pct":5,"min":2,"max":8,"menu":"advanced"},"frontArmholeDeeper":{"pct":0.2,"min":0,"max":0.5,"menu":"advanced"},"shoulderSlopeReduction":{"pct":0,"min":0,"max":80,"menu":"advanced"},"legacyArmholeDepth":{"bool":false,"menu":"advanced"},"backDarts":{"list":["auto","never","always"],"dflt":"auto","menu":"style"},"backDartShaping":{"pct":25,"min":5,"max":75,"menu":"advanced"},"boxPleat":{"bool":false,"menu":"style"},"boxPleatFold":{"pct":15,"min":10,"max":20,"menu":"advanced"},"boxPleatWidth":{"pct":7,"min":4,"max":10,"menu":"advanced"},"roundBack":{"pct":0,"min":0,"max":10,"menu":"fit"},"buttonholePlacketWidth":{"pct":8,"min":4,"max":12,"menu":"style.closure"},"buttonholePlacketFoldWidth":{"pct":16,"min":8,"max":24,"menu":"style.closure"},"buttonPlacketWidth":{"pct":5,"min":2,"max":8,"menu":"style.closure"},"hemCurve":{"pct":50,"min":25,"max":100,"menu":"style"},"hemStyle":{"list":["straight","baseball","slashed"],"dflt":"straight","menu":"style"},"hipsEase":{"pct":15,"min":10,"max":35,"menu":"fit"},"yokeHeight":{"pct":70,"min":40,"max":90,"menu":"style"},"sleevePlacketWidth":{"pct":13,"min":8,"max":18,"menu":"style.cuffs"},"waistEase":{"pct":15,"min":10,"max":35,"menu":"fit"},"buttonFreeLength":{"pct":2,"min":0,"max":15,"menu":"style.closure"},"extraTopButton":{"bool":true,"menu":"style.closure"},"separateButtonPlacket":{"bool":false,"menu":"style.closure"},"separateButtonholePlacket":{"bool":false,"menu":"style.closure"},"buttons":{"count":7,"min":4,"max":12,"menu":"style.closure"},"ffsa":{"pct":150,"min":100,"max":200,"menu":"advanced"},"collarAngle":{"deg":85,"min":60,"max":130,"menu":"style.collar"},"collarBend":{"pct":3.5,"min":0,"max":10,"menu":"style.collar"},"collarFlare":{"deg":3.5,"min":0,"max":10,"menu":"style.collar"},"collarGap":{"pct":2.5,"min":0,"max":6,"menu":"style.collar"},"collarRoll":{"pct":3,"min":0,"max":6,"menu":"style.collar"},"collarStandBend":{"deg":3,"min":0,"max":5,"menu":"style.collar"},"collarStandCurve":{"deg":2,"min":0,"max":5,"menu":"style.collar"},"collarStandWidth":{"pct":8,"min":3,"max":13,"menu":"style.collar"},"cuffOverlap":0.15,"barrelCuffNarrowButton":{"bool":true,"menu":"style.cuffs"},"cuffButtonRows":{"count":1,"min":1,"max":2,"menu":"style.cuffs"},"cuffDrape":{"pct":5,"min":0,"max":10,"menu":"style.cuffs"},"cuffLength":{"pct":10,"min":3,"max":15,"menu":"style.cuffs"},"cuffStyle":{"list":["roundedBarrelCuff","angledBarrelCuff","straightBarrelCuff","roundedFrenchCuff","angledFrenchCuff","straightFrenchCuff"],"dflt":"angledBarrelCuff","menu":"style.cuffs"},"buttonPlacketStyle":{"list":["classic","seamless"],"dflt":"classic"},"buttonholePlacketStyle":{"list":["classic","seamless"],"dflt":"seamless"},"sleevecapEase":{"pct":0,"min":0,"max":10,"menu":"advanced.sleevecap"},"sleevecapTopFactorX":{"pct":50,"min":25,"max":75,"menu":"advanced.sleevecap"},"sleevecapTopFactorY":{"pct":45,"min":35,"max":125,"menu":"advanced.sleevecap"},"sleevecapBackFactorX":{"pct":60,"min":35,"max":65,"menu":"advanced.sleevecap"},"sleevecapBackFactorY":{"pct":33,"min":30,"max":65,"menu":"advanced.sleevecap"},"sleevecapFrontFactorX":{"pct":55,"min":35,"max":65,"menu":"advanced.sleevecap"},"sleevecapFrontFactorY":{"pct":33,"min":30,"max":65,"menu":"advanced.sleevecap"},"sleevecapQ1Offset":{"pct":1.7,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ2Offset":{"pct":3.5,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ3Offset":{"pct":2.5,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ4Offset":{"pct":1,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ1Spread1":{"pct":10,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ1Spread2":{"pct":15,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ2Spread1":{"pct":15,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ2Spread2":{"pct":10,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ3Spread1":{"pct":10,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ3Spread2":{"pct":8,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ4Spread1":{"pct":7,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ4Spread2":{"pct":6.3,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleeveWidthGuarantee":{"pct":90,"min":25,"max":100,"menu":"advanced"},"sleeveLengthBonus":{"pct":3.5,"min":-40,"max":10,"menu":"fit"},"sleevePlacketLength":{"pct":25,"min":15,"max":35,"menu":"style.cuffs"},"splitYoke":{"bool":false,"menu":"style"}},"simone":{"brianFitSleeve":true,"brianFitCollar":true,"collarFactor":5,"bicepsEase":{"pct":15,"min":0,"max":50,"menu":"fit"},"chestEase":{"pct":15,"min":-4,"max":35,"menu":"fit"},"collarEase":{"pct":2,"min":0,"max":10,"menu":"fit"},"cuffEase":{"pct":20,"min":10,"max":40,"menu":"fit"},"draftForHighBust":true,"shoulderEase":{"pct":2,"min":0,"max":15,"menu":"fit"},"lengthBonus":{"pct":25,"min":-4,"max":60,"menu":"fit"},"s3Collar":{"pct":0,"min":-100,"max":100,"menu":"style"},"s3Armhole":{"pct":0,"min":-100,"max":100,"menu":"style"},"acrossBackFactor":{"pct":98,"min":93,"max":100,"menu":"advanced"},"armholeDepth":{"pct":2,"min":-10,"max":50},"armholeDepthFactor":{"pct":55,"min":50,"max":70},"backNeckCutout":{"pct":5,"min":2,"max":8,"menu":"advanced"},"frontArmholeDeeper":{"pct":0.2,"min":0,"max":0.5,"menu":"advanced"},"shoulderSlopeReduction":{"pct":0,"min":0,"max":80,"menu":"advanced"},"legacyArmholeDepth":{"bool":false,"menu":"advanced"},"backDarts":{"list":["auto","never","always"],"dflt":"auto","menu":"style"},"backDartShaping":{"pct":25,"min":5,"max":75,"menu":"advanced"},"boxPleat":{"bool":false,"menu":"style"},"boxPleatFold":{"pct":15,"min":10,"max":20,"menu":"advanced"},"boxPleatWidth":{"pct":7,"min":4,"max":10,"menu":"advanced"},"roundBack":{"pct":0,"min":0,"max":10,"menu":"fit"},"buttonholePlacketWidth":{"pct":8,"min":4,"max":12,"menu":"style.closure"},"buttonholePlacketFoldWidth":{"pct":16,"min":8,"max":24,"menu":"style.closure"},"buttonPlacketWidth":{"pct":5,"min":2,"max":8,"menu":"style.closure"},"hemCurve":{"pct":50,"min":25,"max":100,"menu":"style"},"hemStyle":{"list":["straight","baseball","slashed"],"dflt":"straight","menu":"style"},"hipsEase":{"pct":15,"min":10,"max":35,"menu":"fit"},"yokeHeight":{"pct":70,"min":40,"max":90,"menu":"style"},"sleevePlacketWidth":{"pct":13,"min":8,"max":18,"menu":"style.cuffs"},"waistEase":{"pct":15,"min":10,"max":35,"menu":"fit"},"buttonFreeLength":{"pct":2,"min":0,"max":15,"menu":"style.closure"},"extraTopButton":{"bool":true,"menu":"style.closure"},"separateButtonPlacket":{"bool":false,"menu":"style.closure"},"separateButtonholePlacket":{"bool":false,"menu":"style.closure"},"buttons":{"count":7,"min":4,"max":12,"menu":"style.closure"},"ffsa":{"pct":150,"min":100,"max":200,"menu":"advanced"},"minimalDartShaping":5,"bustDartAngle":{"deg":10,"min":0,"max":20,"menu":"advanced"},"bustDartLength":{"pct":80,"min":50,"max":90,"menu":"advanced"},"frontDarts":{"bool":false,"menu":"advanced"},"frontDartLength":{"pct":45,"min":30,"max":60,"menu":"advanced"},"contour":{"pct":50,"min":30,"max":75,"menu":"style"},"bustAlignedButtons":{"dflt":"disabled","list":["even","split","disabled"],"menu":"style.closure"},"collarAngle":{"deg":85,"min":60,"max":130,"menu":"style.collar"},"collarBend":{"pct":3.5,"min":0,"max":10,"menu":"style.collar"},"collarFlare":{"deg":3.5,"min":0,"max":10,"menu":"style.collar"},"collarGap":{"pct":2.5,"min":0,"max":6,"menu":"style.collar"},"collarRoll":{"pct":3,"min":0,"max":6,"menu":"style.collar"},"collarStandBend":{"deg":3,"min":0,"max":5,"menu":"style.collar"},"collarStandCurve":{"deg":2,"min":0,"max":5,"menu":"style.collar"},"collarStandWidth":{"pct":8,"min":3,"max":13,"menu":"style.collar"},"cuffOverlap":0.15,"barrelCuffNarrowButton":{"bool":true,"menu":"style.cuffs"},"cuffButtonRows":{"count":1,"min":1,"max":2,"menu":"style.cuffs"},"cuffDrape":{"pct":5,"min":0,"max":10,"menu":"style.cuffs"},"cuffLength":{"pct":10,"min":3,"max":15,"menu":"style.cuffs"},"cuffStyle":{"list":["roundedBarrelCuff","angledBarrelCuff","straightBarrelCuff","roundedFrenchCuff","angledFrenchCuff","straightFrenchCuff"],"dflt":"angledBarrelCuff","menu":"style.cuffs"},"sleevecapEase":{"pct":0,"min":0,"max":10,"menu":"advanced.sleevecap"},"sleevecapTopFactorX":{"pct":50,"min":25,"max":75,"menu":"advanced.sleevecap"},"sleevecapTopFactorY":{"pct":45,"min":35,"max":125,"menu":"advanced.sleevecap"},"sleevecapBackFactorX":{"pct":60,"min":35,"max":65,"menu":"advanced.sleevecap"},"sleevecapBackFactorY":{"pct":33,"min":30,"max":65,"menu":"advanced.sleevecap"},"sleevecapFrontFactorX":{"pct":55,"min":35,"max":65,"menu":"advanced.sleevecap"},"sleevecapFrontFactorY":{"pct":33,"min":30,"max":65,"menu":"advanced.sleevecap"},"sleevecapQ1Offset":{"pct":1.7,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ2Offset":{"pct":3.5,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ3Offset":{"pct":2.5,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ4Offset":{"pct":1,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ1Spread1":{"pct":10,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ1Spread2":{"pct":15,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ2Spread1":{"pct":15,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ2Spread2":{"pct":10,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ3Spread1":{"pct":10,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ3Spread2":{"pct":8,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ4Spread1":{"pct":7,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ4Spread2":{"pct":6.3,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleeveWidthGuarantee":{"pct":90,"min":25,"max":100,"menu":"advanced"},"sleeveLengthBonus":{"pct":3.5,"min":-40,"max":10,"menu":"fit"},"sleevePlacketLength":{"pct":25,"min":15,"max":35,"menu":"style.cuffs"},"splitYoke":{"bool":false,"menu":"style"},"buttonPlacketStyle":{"list":["classic","seamless"],"dflt":"classic"},"buttonholePlacketStyle":{"list":["classic","seamless"],"dflt":"seamless"}},"skully":{"size":{"pct":75,"min":10,"max":300,"menu":"fit"}},"sven":{"brianFitSleeve":true,"brianFitCollar":true,"collarFactor":4.8,"bicepsEase":{"pct":15,"min":0,"max":50,"menu":"fit"},"chestEase":{"pct":15,"min":-4,"max":35,"menu":"fit"},"collarEase":{"pct":10,"min":5,"max":30,"menu":"fit"},"cuffEase":{"pct":20,"min":0,"max":200,"menu":"fit"},"draftForHighBust":{"bool":false},"shoulderEase":{"pct":0,"min":-2,"max":6,"menu":"fit"},"lengthBonus":{"pct":15,"min":0,"max":30,"menu":"style"},"s3Collar":{"pct":0,"min":-100,"max":100,"menu":"style"},"s3Armhole":{"pct":0,"min":-100,"max":100,"menu":"style"},"acrossBackFactor":{"pct":98,"min":93,"max":100,"menu":"advanced"},"armholeDepth":{"pct":2,"min":-10,"max":50},"armholeDepthFactor":{"pct":55,"min":50,"max":70},"backNeckCutout":{"pct":5,"min":2,"max":8,"menu":"advanced"},"frontArmholeDeeper":{"pct":0.2,"min":0,"max":0.5,"menu":"advanced"},"shoulderSlopeReduction":{"pct":0,"min":0,"max":80,"menu":"advanced"},"legacyArmholeDepth":{"bool":false,"menu":"advanced"},"waistEase":0.08,"sleeveLengthBonus":{"pct":3,"min":0,"max":10,"menu":"style"},"ribbingHeight":{"pct":8,"min":3,"max":15,"menu":"style"},"hipsEase":{"pct":8,"min":-4,"max":20,"menu":"fit"},"ribbing":{"bool":true,"menu":"style"},"sleevecapEase":{"pct":0,"min":0,"max":10,"menu":"advanced.sleevecap"},"sleevecapTopFactorX":{"pct":50,"min":25,"max":75,"menu":"advanced.sleevecap"},"sleevecapTopFactorY":{"pct":45,"min":35,"max":125,"menu":"advanced.sleevecap"},"sleevecapBackFactorX":{"pct":60,"min":35,"max":65,"menu":"advanced.sleevecap"},"sleevecapBackFactorY":{"pct":33,"min":30,"max":65,"menu":"advanced.sleevecap"},"sleevecapFrontFactorX":{"pct":55,"min":35,"max":65,"menu":"advanced.sleevecap"},"sleevecapFrontFactorY":{"pct":33,"min":30,"max":65,"menu":"advanced.sleevecap"},"sleevecapQ1Offset":{"pct":1.7,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ2Offset":{"pct":3.5,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ3Offset":{"pct":2.5,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ4Offset":{"pct":1,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ1Spread1":{"pct":10,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ1Spread2":{"pct":15,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ2Spread1":{"pct":15,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ2Spread2":{"pct":10,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ3Spread1":{"pct":10,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ3Spread2":{"pct":8,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ4Spread1":{"pct":7,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ4Spread2":{"pct":6.3,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleeveWidthGuarantee":{"pct":90,"min":25,"max":100,"menu":"advanced"},"ribbingStretch":{"pct":15,"min":0,"max":30,"menu":"fit"}},"tamiko":{"armholeDepthFactor":{"pct":50,"min":40,"max":60,"menu":"fit"},"chestEase":{"pct":2,"min":1,"max":20,"menu":"fit"},"flare":{"deg":15,"min":-10,"max":30,"menu":"style"},"lengthBonus":{"pct":13,"min":0,"max":60,"menu":"style"},"shoulderseamLength":{"pct":10,"min":5,"max":25,"menu":"style"},"draftForHighBust":{"bool":false,"menu":"fit"}},"teagan":{"brianFitSleeve":true,"brianFitCollar":true,"collarFactor":4.8,"bicepsEase":0.05,"chestEase":{"pct":12,"min":5,"max":25,"menu":"fit"},"collarEase":0,"cuffEase":0,"draftForHighBust":{"bool":false,"menu":"fit"},"shoulderEase":0,"lengthBonus":{"pct":5,"min":-20,"max":60,"menu":"style"},"s3Collar":0,"s3Armhole":0,"acrossBackFactor":{"pct":98,"min":93,"max":100,"menu":"advanced"},"armholeDepth":{"pct":2,"min":-10,"max":50},"armholeDepthFactor":{"pct":55,"min":50,"max":70},"backNeckCutout":{"pct":8,"min":4,"max":12,"menu":"fit"},"frontArmholeDeeper":0.005,"shoulderSlopeReduction":0,"legacyArmholeDepth":{"bool":false,"menu":"advanced"},"sleeveWidthGuarantee":0.85,"sleeveLength":{"pct":30,"min":20,"max":100,"menu":"fit"},"fitWaist":{"bool":false,"menu":"fit"},"waistEase":{"pct":25,"min":8,"max":40},"hipsEase":{"pct":18,"min":8,"max":30,"menu":"fit"},"necklineDepth":{"pct":25,"min":20,"max":40,"menu":"style"},"necklineWidth":{"pct":30,"min":10,"max":50,"menu":"style"},"necklineBend":{"pct":30,"min":0,"max":70,"menu":"style"},"sleevecapEase":{"pct":0,"min":0,"max":10,"menu":"advanced.sleevecap"},"sleevecapTopFactorX":{"pct":50,"min":25,"max":75,"menu":"advanced.sleevecap"},"sleevecapTopFactorY":{"pct":45,"min":35,"max":125,"menu":"advanced.sleevecap"},"sleevecapBackFactorX":{"pct":60,"min":35,"max":65,"menu":"advanced.sleevecap"},"sleevecapBackFactorY":{"pct":33,"min":30,"max":65,"menu":"advanced.sleevecap"},"sleevecapFrontFactorX":{"pct":55,"min":35,"max":65,"menu":"advanced.sleevecap"},"sleevecapFrontFactorY":{"pct":33,"min":30,"max":65,"menu":"advanced.sleevecap"},"sleevecapQ1Offset":{"pct":1.7,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ2Offset":{"pct":3.5,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ3Offset":{"pct":2.5,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ4Offset":{"pct":1,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ1Spread1":{"pct":10,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ1Spread2":{"pct":15,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ2Spread1":{"pct":15,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ2Spread2":{"pct":10,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ3Spread1":{"pct":10,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ3Spread2":{"pct":8,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ4Spread1":{"pct":7,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ4Spread2":{"pct":6.3,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleeveEase":{"pct":15,"min":5,"max":35,"menu":"style"}},"tiberius":{"headRatio":{"pct":100,"min":80,"max":120,"menu":"fit"},"armholeDrop":{"pct":110,"min":100,"max":150,"menu":"fit"},"lengthBonus":{"pct":90,"min":60,"max":130,"menu":"style"},"widthBonus":{"pct":100,"min":50,"max":130,"menu":"style"},"clavi":{"bool":false,"menu":"style.clavi"},"clavusLocation":{"pct":65,"min":50,"max":80,"menu":"style.clavi"},"clavusWidth":{"pct":100,"min":50,"max":150,"menu":"style.clavi"},"length":{"list":["toKnee","toMidLeg","toFloor"],"dflt":"toKnee","menu":"style"},"width":{"list":["toElbow","toShoulder","toMidArm"],"dflt":"toMidArm","menu":"style"},"forceWidth":{"bool":false,"menu":"advanced"}},"titan":{"fitCrossSeam":true,"fitCrossSeamFront":true,"fitCrossSeamBack":true,"fitGuides":true,"waistEase":{"pct":2,"min":0,"max":10,"menu":"fit"},"seatEase":{"pct":2,"min":0,"max":10,"menu":"fit"},"kneeEase":{"pct":6,"min":1,"max":25,"menu":"fit"},"waistHeight":{"pct":100,"min":0,"max":100,"menu":"style"},"lengthBonus":{"pct":2,"min":-20,"max":10,"menu":"style"},"crotchDrop":{"pct":2,"min":0,"max":15,"menu":"style"},"fitKnee":{"bool":false,"menu":"style"},"legBalance":{"pct":57.5,"min":52.5,"max":62.5,"menu":"advanced"},"crossSeamCurveStart":{"pct":85,"min":60,"max":100,"menu":"advanced"},"crossSeamCurveBend":{"pct":65,"min":45,"max":85,"menu":"advanced"},"crossSeamCurveAngle":{"deg":12,"min":0,"max":20,"menu":"advanced"},"crotchSeamCurveStart":{"pct":80,"min":60,"max":95,"menu":"advanced"},"crotchSeamCurveBend":{"pct":80,"min":45,"max":100,"menu":"advanced"},"crotchSeamCurveAngle":{"deg":25,"min":0,"max":35,"menu":"advanced"},"waistBalance":{"pct":60,"min":30,"max":90,"menu":"advanced"},"grainlinePosition":{"pct":45,"min":30,"max":60,"menu":"advanced"},"waistbandWidth":{"pct":3,"min":1,"max":6,"snap":{"metric":[3.5,5,10,12,20,25,30,40,50,60,80,100,120],"imperial":[3.175,6.35,9.524999999999999,12.7,15.875,19.049999999999997,25.4,31.75,38.099999999999994,44.449999999999996,50.8,76.19999999999999,101.6,127]},"menu":"advanced"}},"trayvon":{"tipWidth":{"pct":15,"min":5,"max":35,"snap":{"metric":1,"imperial":0.79375},"menu":"style"},"knotWidth":{"pct":8,"min":4,"max":12,"snap":{"metric":1,"imperial":0.79375},"menu":"style"},"lengthBonus":{"pct":0,"min":-50,"max":50,"menu":"style"}},"uma":{"xStretch":{"pct":15,"min":0,"max":50,"menu":"fit"},"yStretch":{"pct":15,"min":0,"max":50,"menu":"fit"},"gussetWidth":{"pct":15,"min":5,"max":24,"menu":"fit"},"gussetLength":{"pct":12.7,"min":10,"max":16,"menu":"fit"},"gussetPosition":{"pct":70,"min":5,"max":95,"menu":"fit"},"bulge":{"deg":0,"min":0,"max":30,"menu":"fit"},"rise":{"pct":46,"min":30,"max":100,"menu":"style"},"legRise":{"pct":54,"min":5,"max":95,"menu":"style"},"frontDip":{"pct":5,"min":-5,"max":15,"menu":"style"},"frontExposure":{"pct":70,"min":5,"max":100,"menu":"style"},"backDip":{"pct":2.5,"min":-5,"max":15,"menu":"style"},"backExposure":{"pct":30,"min":25,"max":125,"menu":"style"}},"wahid":{"brianFitSleeve":true,"brianFitCollar":true,"collarFactor":4.8,"bicepsEase":{"pct":15,"min":0,"max":50,"menu":false},"chestEase":{"pct":2,"min":1,"max":10,"menu":"fit"},"collarEase":{"pct":5,"min":0,"max":10,"menu":false},"cuffEase":{"pct":20,"min":0,"max":200,"menu":false},"draftForHighBust":{"bool":false},"shoulderEase":{"pct":0,"min":-2,"max":6,"menu":false},"lengthBonus":{"pct":1,"min":0,"max":8,"menu":"fit"},"s3Collar":{"pct":0,"min":-100,"max":100,"menu":false},"s3Armhole":{"pct":0,"min":-100,"max":100,"menu":false},"acrossBackFactor":0.97,"armholeDepth":{"pct":2,"min":-10,"max":50},"armholeDepthFactor":{"pct":70,"min":60,"max":80,"menu":"fit"},"backNeckCutout":{"pct":5,"min":-2,"max":8,"menu":false},"frontArmholeDeeper":0.005,"shoulderSlopeReduction":{"pct":0,"min":0,"max":80,"menu":false},"legacyArmholeDepth":{"bool":false,"menu":"advanced"},"frontOverlap":0.01,"necklineDrop":{"pct":50,"min":35,"max":85,"menu":"style"},"frontStyle":{"dflt":"classic","list":["classic","rounded"],"menu":"style"},"frontInset":{"pct":15,"min":10,"max":20,"menu":"advanced"},"shoulderInset":{"pct":10,"min":0,"max":20,"menu":"advanced"},"neckInset":{"pct":5,"min":0,"max":10,"menu":"advanced"},"hemStyle":{"dflt":"classic","list":["classic","rounded","square"],"menu":"style"},"hemRadius":{"pct":6,"min":2,"max":12,"menu":"style"},"pocketWidth":{"pct":10,"max":15,"min":8,"menu":"style"},"pocketAngle":{"deg":5,"min":0,"max":5,"menu":"advanced"},"pocketLocation":{"pct":35,"min":25,"max":55,"menu":"style"},"frontScyeDart":{"deg":6,"min":0,"max":12,"menu":"fit"},"buttons":{"count":6,"min":4,"max":12,"menu":"style"},"waistEase":{"pct":8,"min":2,"max":15,"menu":"fit"},"hipsEase":{"pct":8,"min":2,"max":15,"menu":"fit"},"backInset":{"pct":15,"min":10,"max":20,"menu":"advanced"},"centerBackDart":{"pct":2,"min":0,"max":5,"menu":"fit"},"backScyeDart":{"deg":2,"min":0,"max":6,"menu":"fit"},"weltHeight":{"pct":12.5,"max":20,"min":10,"menu":"style"}},"walburga":{"headRatio":{"pct":100,"min":80,"max":120,"menu":"fit"},"lengthBonus":{"pct":85,"min":60,"max":130,"menu":"style"},"widthBonus":{"pct":95,"min":50,"max":130,"menu":"style"},"length":{"list":["toKnee","toMidLeg","toFloor"],"dflt":"toKnee","menu":"style"},"neckline":{"bool":true,"menu":"style"},"neckoRatio":{"pct":100,"min":10,"max":190,"menu":"style"}},"waralee":{"backPocket":{"bool":true,"menu":"style"},"backPocketDepth":140,"backPocketHorizontalOffset":0.045,"backPocketSize":0.45,"backPocketVerticalOffset":0.2,"backRaise":{"pct":10,"min":0,"max":25,"menu":"fit"},"backWaistAdjustment":0.3,"crotchBack":{"pct":45,"min":10,"max":70,"menu":"advanced"},"crotchEase":1.08,"crotchFactorBackHor":{"pct":90,"min":10,"max":100,"menu":"advanced"},"crotchFactorBackVer":{"pct":60,"min":20,"max":90,"menu":"advanced"},"crotchFactorFrontHor":{"pct":90,"min":10,"max":100,"menu":"advanced"},"crotchFactorFrontVer":{"pct":30,"min":10,"max":70,"menu":"advanced"},"crotchFront":{"pct":30,"min":10,"max":70,"menu":"advanced"},"fitWaist":{"bool":true,"menu":"fit"},"frontPocket":{"bool":true,"menu":"style"},"frontPocketDepthFactor":1.6,"frontPocketHorizontalOffset":0.18,"frontPocketSize":0.45,"frontPocketStyle":{"dflt":"welt","list":["welt","waistband"],"menu":"style"},"frontPocketVerticalOffset":0.07,"frontWaistAdjustment":0.163,"hemWidth":{"pct":1.75,"min":1,"max":2.5,"menu":"style"},"knotInFront":{"bool":true,"menu":"style"},"legShortening":{"pct":25,"min":-10,"max":50,"menu":"style"},"minimizer":4,"separateWaistband":{"bool":false,"menu":"style"},"showMini":{"bool":true,"menu":"options"},"waistOverlap":{"pct":50,"min":10,"max":100,"menu":"style"},"waistRaise":{"pct":0,"min":-20,"max":40,"menu":"fit"},"waistbandWidth":{"pct":3.5,"min":2,"max":5,"menu":"style"}},"yuri":{"brianFitSleeve":true,"brianFitCollar":true,"collarFactor":4.8,"bicepsEase":{"pct":15,"min":0,"max":50,"menu":"fit"},"chestEase":{"pct":15,"min":-4,"max":35,"menu":"fit"},"collarEase":{"pct":20,"min":10,"max":30,"menu":"fit"},"cuffEase":{"pct":30,"min":20,"max":60,"menu":"fit"},"draftForHighBust":{"bool":false},"shoulderEase":{"pct":0,"min":-2,"max":6,"menu":"fit"},"lengthBonus":{"pct":10,"min":5,"max":15,"menu":"fit"},"s3Collar":{"pct":0,"min":-100,"max":100,"menu":"style"},"s3Armhole":{"pct":0,"min":-100,"max":100,"menu":"style"},"acrossBackFactor":{"pct":98,"min":93,"max":100,"menu":"advanced"},"armholeDepth":{"pct":2,"min":-10,"max":50},"armholeDepthFactor":{"pct":55,"min":50,"max":70},"backNeckCutout":{"pct":5,"min":2,"max":8,"menu":"advanced"},"frontArmholeDeeper":{"pct":0.2,"min":0,"max":0.5,"menu":"advanced"},"shoulderSlopeReduction":{"pct":0,"min":0,"max":80,"menu":"advanced"},"legacyArmholeDepth":{"bool":false,"menu":"advanced"},"sleeveLengthBonus":{"pct":1,"min":0,"max":10,"menu":"fit"},"hipsEase":{"pct":0,"min":0,"max":10,"menu":"fit"},"sleevecapEase":{"pct":0,"min":0,"max":10,"menu":"advanced.sleevecap"},"sleevecapTopFactorX":{"pct":50,"min":25,"max":75,"menu":"advanced.sleevecap"},"sleevecapTopFactorY":{"pct":45,"min":35,"max":125,"menu":"advanced.sleevecap"},"sleevecapBackFactorX":{"pct":60,"min":35,"max":65,"menu":"advanced.sleevecap"},"sleevecapBackFactorY":{"pct":33,"min":30,"max":65,"menu":"advanced.sleevecap"},"sleevecapFrontFactorX":{"pct":55,"min":35,"max":65,"menu":"advanced.sleevecap"},"sleevecapFrontFactorY":{"pct":33,"min":30,"max":65,"menu":"advanced.sleevecap"},"sleevecapQ1Offset":{"pct":1.7,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ2Offset":{"pct":3.5,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ3Offset":{"pct":2.5,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ4Offset":{"pct":1,"min":0,"max":7,"menu":"advanced.sleevecap"},"sleevecapQ1Spread1":{"pct":10,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ1Spread2":{"pct":15,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ2Spread1":{"pct":15,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ2Spread2":{"pct":10,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ3Spread1":{"pct":10,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ3Spread2":{"pct":8,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ4Spread1":{"pct":7,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleevecapQ4Spread2":{"pct":6.3,"min":4,"max":20,"menu":"advanced.sleevecap"},"sleeveWidthGuarantee":{"pct":90,"min":25,"max":100,"menu":"advanced"}},"otis":{"ease":{"pct":14,"min":0,"max":30,"menu":"fit"},"snapPlacket":{"pct":5,"min":0,"max":30,"menu":"advanced"},"sleeveType":{"dflt":"short","list":["short","long"],"menu":"style"},"hem":{"pct":10,"min":0,"max":30,"menu":"advanced"},"binding":{"pct":11,"min":2,"max":30,"menu":"advanced"}}} diff --git a/sites/shared/prebuild/data/designs.mjs b/sites/shared/prebuild/data/designs.mjs index a39147aa657..aa0d9a41833 100644 --- a/sites/shared/prebuild/data/designs.mjs +++ b/sites/shared/prebuild/data/designs.mjs @@ -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"] diff --git a/yarn.lock b/yarn.lock index 8217010a772..4de5e5afa0d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -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"