1
0
Fork 0

feat: Added studio to monorepo

This commit is contained in:
joostdecock 2025-04-21 18:20:52 +02:00 committed by Joost De Cock
parent c17b58f141
commit 02f841c570
177 changed files with 2467 additions and 2118 deletions

11
.gitignore vendored
View file

@ -35,6 +35,17 @@ sites/*/yarn.lock
# Docusaurus cache # Docusaurus cache
.docusaurus .docusaurus
# Sites get some files from org via the reconfigure script
sites/studio/postcss.config.js
sites/studio/babel.config.mjs
sites/studio/plugins
sites/studio/src/css
sites/studio/designs
sites/studio/docs
sites/studio/src
sites/studio/scripts
sites/studio/static
# Sites prebuild artifacts # Sites prebuild artifacts
sites/*/public/locales/*/*.json sites/*/public/locales/*/*.json
!sites/sde/public/locales/*/*.json !sites/sde/public/locales/*/*.json

View file

@ -211,18 +211,18 @@
- The `@freesewing/i18n` package holds translations in English for where they are needed - The `@freesewing/i18n` package holds translations in English for where they are needed
### studio
#### Added
- Added `@freesewing/studio`, our new development environment
### react ### react
#### Added #### Added
- The `@freesewing/react` package holds shared components, hooks, and context for our React-based frontends - The `@freesewing/react` package holds shared components, hooks, and context for our React-based frontends
### studio
#### Added
- Added `@freesewing/studio`, our new development environment
### utils ### utils
#### Added #### Added

View file

@ -1,5 +1,5 @@
_types: _types:
design: designs:
peer: peer:
'@freesewing/core': &freesewing '{{version}}' '@freesewing/core': &freesewing '{{version}}'
dev: dev:
@ -7,7 +7,7 @@ _types:
'chai': &chai '5.1.1' 'chai': &chai '5.1.1'
'@freesewing/models': *freesewing '@freesewing/models': *freesewing
'@freesewing/plugin-timing': *freesewing '@freesewing/plugin-timing': *freesewing
plugin: plugins:
peer: peer:
'@freesewing/core': *freesewing '@freesewing/core': *freesewing
dev: dev:

View file

@ -4,11 +4,11 @@ _:
tips: 'node ../../scripts/help.mjs' tips: 'node ../../scripts/help.mjs'
lint: "npx eslint 'src/**' 'tests/*.mjs'" lint: "npx eslint 'src/**' 'tests/*.mjs'"
_types: _types:
design: designs:
prettier: "npx prettier --write 'src/*.mjs' 'tests/*.mjs'" prettier: "npx prettier --write 'src/*.mjs' 'tests/*.mjs'"
test: &test 'npx mocha tests/*.test.mjs' test: &test 'npx mocha tests/*.test.mjs'
testci: &testci 'NODE_OPTIONS="--conditions=internal" npx mocha tests/*.test.mjs --reporter ../../tests/reporters/terse.js' testci: &testci 'NODE_OPTIONS="--conditions=internal" npx mocha tests/*.test.mjs --reporter ../../tests/reporters/terse.js'
plugin: plugins:
prettier: "npx prettier --write 'src/*.mjs' 'tests/*.mjs'" prettier: "npx prettier --write 'src/*.mjs' 'tests/*.mjs'"
test: *test test: *test
testci: *testci testci: *testci

View file

@ -1,936 +0,0 @@
{
"aaron": {
"code": "Joost De Cock",
"description": "A FreeSewing pattern for a A-shirt or tank top",
"design": "Joost De Cock",
"difficulty": 2,
"tags": [
"tops",
"underwear"
],
"techniques": [
"hem",
"stretch",
"knit-binding",
"curved-seam"
]
},
"albert": {
"code": "Wouter Van Wageningen",
"description": "A FreeSewing pattern for an apron",
"design": "Wouter Van Wageningen",
"difficulty": 2,
"tags": [
"accessories"
],
"techniques": [
"hem",
"knit-binding",
"curved-seam",
"pocket"
]
},
"bee": {
"code": "bobgeorgethe3rd",
"description": "A FreeSewing pattern for a bikini top",
"design": "PrudenceRabbit",
"difficulty": 3,
"tags": [
"tops",
"swimwear"
],
"techniques": [
"hem",
"stretch",
"curved-seam",
"precision"
]
},
"bella": {
"code": "Joost De Cock",
"description": "A FreeSewing pattern for a womenswear bodice block",
"design": [
"Bella Incognito",
"Joost De Cock"
],
"difficulty": 3,
"tags": [
"blocks",
"tops"
],
"techniques": [
"dart",
"block"
]
},
"benjamin": {
"code": "Wouter Van Wageningen",
"description": "A FreeSewing pattern for a bow tie",
"design": "Wouter Van Wageningen",
"difficulty": 3,
"tags": [
"accessories"
],
"techniques": [
"precision",
"interfacing"
]
},
"bent": {
"code": "Joost De Cock",
"description": "A FreeSewing pattern for a menswear body block with a two-part sleeve",
"design": "Joost De Cock",
"difficulty": 3,
"tags": [
"blocks",
"tops"
],
"techniques": [
"hem",
"curved-seam",
"set-sleeve"
]
},
"bibi": {
"code": "Jonathan Haas",
"description": "A FreeSewing pattern for a knit top body block",
"design": "Jonathan Haas",
"difficulty": 2,
"tags": [
"blocks",
"tops"
],
"techniques": [
"curved-seam",
"hem",
"flat-sleeve"
]
},
"bob": {
"code": "Joost De Cock",
"description": "A FreeSewing pattern for a bib",
"design": "Joost De Cock",
"difficulty": 3,
"tags": [
"accessories",
"infants"
],
"techniques": [
"bias-tape",
"curved-seam",
"snap"
]
},
"bonny": {
"code": "Jonathan Haas",
"description": "A FreeSewing pattern that turns measurements into a body outline",
"design": "Jonathan Haas",
"difficulty": 1,
"tags": [],
"techniques": []
},
"breanna": {
"code": "Joost De Cock",
"description": "A FreeSewing pattern for a basic body block for womenswear",
"design": "Joost De Cock",
"difficulty": 3,
"tags": [
"blocks",
"tops"
],
"techniques": [
"block",
"dart"
]
},
"brian": {
"code": "Joost De Cock",
"description": "A FreeSewing pattern for a basic body block for menswear",
"design": "Joost De Cock",
"difficulty": 3,
"tags": [
"blocks",
"tops"
],
"techniques": [
"block",
"flat-sleeve"
]
},
"bruce": {
"code": "Joost De Cock",
"description": "A FreeSewing pattern for boxer briefs",
"design": "Joost De Cock",
"difficulty": 3,
"tags": [
"bottoms",
"underwear"
],
"techniques": [
"stretch",
"hem",
"curved-seam",
"elastic"
]
},
"carlita": {
"code": "Joost De Cock",
"description": "A FreeSewing pattern for Sherlock Holmes cosplay; Or just a nice long coat",
"design": [
"Anneke Caramin",
"Joost De Cock"
],
"difficulty": 5,
"tags": [
"tops",
"coats"
],
"techniques": [
"hem",
"pocket",
"curved-seam",
"precision",
"set-sleeve",
"welt-pocket",
"lining",
"princess-seam",
"interfacing",
"button"
]
},
"carlton": {
"code": "Joost De Cock",
"description": "A FreeSewing pattern for Sherlock Holmes cosplay; Or just a nice long coat",
"design": [
"Anneke Caramin",
"Joost De Cock"
],
"difficulty": 5,
"tags": [
"tops",
"coats"
],
"techniques": [
"hem",
"pocket",
"curved-seam",
"precision",
"set-sleeve",
"welt-pocket",
"lining",
"interfacing",
"button"
]
},
"cathrin": {
"code": "Joost De Cock",
"description": "A FreeSewing pattern for a underbust corset / waist trainer",
"design": [
"Cathrin Åhlén",
"Joost De Cock"
],
"difficulty": 4,
"tags": [
"tops",
"underwear"
],
"techniques": [
"boning",
"precision",
"curved-seam",
"interfacing"
]
},
"charlie": {
"code": "Joost De Cock",
"description": "A FreeSewing pattern for chino trousers",
"design": "Joost De Cock",
"difficulty": 3,
"tags": [
"bottoms",
"trousers"
],
"techniques": [
"welt-pocket",
"curved-seam",
"interfacing",
"fly",
"zipper",
"button",
"dart",
"hem",
"seam-pocket"
]
},
"cornelius": {
"code": "Wouter Van Wageningen",
"description": "A FreeSewing pattern for cycling breeches, based on the Keystone drafting system",
"design": "Wouter Van Wageningen",
"difficulty": 3,
"tags": [
"bottoms",
"trousers"
],
"techniques": [
"curved-seam",
"fly",
"zipper",
"button",
"pocket"
]
},
"diana": {
"code": "Erica Alcusa Sáez",
"description": "A FreeSewing pattern for a top with a draped neck",
"design": "Erica Alcusa Sáez",
"difficulty": 2,
"tags": [
"tops"
],
"techniques": [
"curved-seam",
"flat-sleeve",
"hem"
]
},
"examples": {
"code": "Joost De Cock",
"description": "A FreeSewing pattern holding examples for our documentation"
},
"florence": {
"code": "Joost De Cock",
"description": "A FreeSewing pattern for a face mask",
"design": "Joost De Cock",
"difficulty": 1,
"tags": [
"accessories"
],
"techniques": [
"curved-seam"
]
},
"florent": {
"code": [
"Quentin Felix",
"Joost De Cock"
],
"description": "A FreeSewing pattern for a flat cap",
"design": "Quentin Felix",
"difficulty": 3,
"tags": [
"accessories",
"hats"
],
"techniques": [
"curved-seam"
]
},
"gozer": {
"code": "Wouter Van Wageningen",
"description": "A FreeSewing pattern for a ghost costume",
"design": "Wouter Van Wageningen",
"difficulty": 1,
"tags": [
"costumes"
],
"techniques": [
"hem"
]
},
"hi": {
"code": "Wouter Van Wageningen",
"description": "A FreeSewing pattern for a shark plush toy",
"design": "Wouter Van Wageningen",
"difficulty": 4,
"tags": [
"accessories",
"toys"
],
"techniques": [
"curved-seam",
"dart"
]
},
"holmes": {
"code": [
"Erica Alcusa Sáez",
"bobgeorgethe3rd"
],
"description": "A FreeSewing pattern for a Sherlock Holmes hat",
"design": "Erica Alcusa Sáez",
"difficulty": 3,
"tags": [
"accessories",
"hats"
],
"techniques": [
"curved-seam",
"lining"
]
},
"hortensia": {
"code": "Wouter Van Wageningen",
"description": "A FreeSewing pattern for a handbag",
"design": [
"Stoffsuchti",
"Wouter Van Wageningen"
],
"difficulty": 3,
"tags": [
"accessories",
"bags"
],
"techniques": [
"curved-seam",
"precision",
"lining",
"zipper"
]
},
"huey": {
"code": "Joost De Cock",
"description": "A FreeSewing pattern for a zip-up hoodie",
"design": "Joost De Cock",
"difficulty": 3,
"tags": [
"tops"
],
"techniques": [
"curved-seam",
"pocket",
"zipper",
"ribbing",
"flat-sleeve"
]
},
"hugo": {
"code": "Joost De Cock",
"description": "A FreeSewing pattern for a hooded jumper with raglan sleeves",
"design": "Joost De Cock",
"difficulty": 3,
"tags": [
"tops"
],
"techniques": [
"curved-seam",
"pocket",
"ribbing",
"raglan-sleeve"
]
},
"jaeger": {
"code": "Joost De Cock",
"description": "A FreeSewing pattern for a sport coat style jacket",
"design": "Joost De Cock",
"difficulty": 5,
"tags": [
"tops",
"coats"
],
"techniques": [
"hem",
"pocket",
"curved-seam",
"precision",
"set-sleeve",
"welt-pocket",
"lining",
"interfacing",
"button"
]
},
"jane": {
"code": "SeaZeeZee",
"description": "A FreeSewing pattern for a 1790s shift",
"design": "SeaZeeZee",
"difficulty": 2,
"tags": [
"tops",
"historical",
"underwear"
],
"techniques": [
"hem"
]
},
"legend": {
"code": "Joost De Cock",
"description": "A FreeSewing pattern to document pattern notation"
},
"lucy": {
"code": "SeaZeeZee",
"description": "A FreeSewing pattern for a historical tie-on pocket",
"design": "SeaZeeZee",
"difficulty": 2,
"tags": [
"accessories",
"historical",
"bags"
],
"techniques": [
"curved-seam"
]
},
"lumina": {
"code": "Wouter Van Wageningen",
"description": "A FreeSewing pattern for leggings",
"design": "Wouter Van Wageningen",
"difficulty": 3,
"tags": [
"bottoms",
"trousers"
],
"techniques": [
"stretch",
"curved-seam",
"elastic"
]
},
"lumira": {
"code": "Wouter Van Wageningen",
"description": "A FreeSewing pattern for leggings",
"design": "Wouter Van Wageningen",
"difficulty": 3,
"tags": [
"bottoms",
"trousers"
],
"techniques": [
"stretch",
"curved-seam",
"elastic"
]
},
"lunetius": {
"code": "Rika Tamaike",
"description": "A FreeSewing pattern for a lacerna, a historical Roman cloak",
"design": "Rika Tamaike",
"difficulty": 1,
"tags": [
"tops",
"coats",
"historical"
],
"techniques": [
"hem"
]
},
"magde": {
"code": "clegganator259",
"description": "A FreeSewing pattern for a bike messenger bag",
"design": "clegganator259",
"difficulty": 3,
"tags": [
"accessories",
"bags"
],
"techniques": []
},
"noble": {
"code": "Wouter Van Wageningen",
"description": "A FreeSewing pattern for a princess seam bodice block",
"design": "Wouter Van Wageningen",
"difficulty": 3,
"tags": [
"blocks",
"tops"
],
"techniques": [
"block",
"curved-seam",
"precision",
"princess-seam"
]
},
"octoplushy": {
"code": "Wouter Van Wageningen",
"description": "A FreeSewing pattern for an octopus plushy toy",
"design": "Wouter Van Wageningen",
"difficulty": 4,
"tags": [
"accessories",
"toys"
],
"techniques": [
"curved-seam",
"precision"
]
},
"onyx": {
"code": "Thrunic",
"description": "A FreeSewing pattern for one-piece garments",
"design": "Thrunic",
"difficulty": 4,
"tags": [
"swimwear",
"pajamas",
"onePiece"
],
"techniques": [
"hem",
"curved-seam",
"stretch",
"lining",
"zipper",
"ribbing"
]
},
"opal": {
"code": "Thrunic",
"description": "A FreeSewing pattern for overalls",
"design": "Thrunic",
"difficulty": 3,
"tags": [
"overalls",
"onePiece"
],
"techniques": [
"flat-felled-seam",
"hem",
"curved-seam",
"button",
"pocket"
]
},
"otis": {
"code": "Wouter Van Wageningen",
"description": "A FreeSewing pattern for a baby romper",
"design": "Wouter Van Wageningen",
"difficulty": 2,
"tags": [],
"techniques": []
},
"paco": {
"code": "Joost De Cock",
"description": "A FreeSewing pattern for summer pants",
"design": "Joost De Cock",
"difficulty": 3,
"tags": [
"bottoms",
"trousers"
],
"techniques": [
"elastic",
"curved-seam",
"pocket",
"welt-pocket",
"hem"
]
},
"penelope": {
"code": "Wouter Van Wageningen",
"description": "A FreeSewing pattern for a pencil skirt",
"design": "Wouter Van Wageningen",
"difficulty": 3,
"tags": [
"bottoms",
"skirts"
],
"techniques": [
"hem",
"curved-seam",
"precision",
"zipper"
]
},
"plugintest": {
"code": "Joost De Cock",
"description": "A FreeSewing pattern to test (y)our plugins"
},
"rendertest": {
"code": "Joost De Cock",
"description": "A FreeSewing pattern to test (y)our render engine our CSS"
},
"sandy": {
"code": [
"Erica Alcusa Sáez",
"Joost De Cock"
],
"description": "A FreeSewing pattern for a circle skirt",
"design": "Erica Alcusa Sáez",
"difficulty": 3,
"tags": [
"bottoms",
"skirts"
],
"techniques": [
"curved-seam",
"button",
"hem"
]
},
"shelly": {
"code": "Thrunic",
"description": "A FreeSewing pattern for a raglan shirt, perfect for swimshirts",
"design": "Thrunic",
"difficulty": 2,
"tags": [
"tops",
"swimwear"
],
"techniques": [
"hem",
"stretch",
"curved-seam",
"raglan-sleeve"
]
},
"shin": {
"code": "Joost De Cock",
"description": "A FreeSewing pattern for swim trunks",
"design": "Joost De Cock",
"difficulty": 2,
"tags": [
"bottoms",
"swimwear"
],
"techniques": [
"hem",
"stretch",
"curved-seam",
"elastic"
]
},
"simon": {
"code": "Joost De Cock",
"description": "A FreeSewing pattern for a button down shirt",
"design": "Joost De Cock",
"difficulty": 4,
"tags": [
"tops"
],
"techniques": [
"hem",
"button",
"interfacing",
"curved-seam",
"flat-felled-seam",
"flat-sleeve"
]
},
"simone": {
"code": "Joost De Cock",
"description": "A FreeSewing pattern for a button down shirt (Simone = Simon for people with breasts)",
"design": "Joost De Cock",
"difficulty": 4,
"tags": [
"tops"
],
"techniques": [
"hem",
"button",
"interfacing",
"curved-seam",
"flat-felled-seam",
"flat-sleeve"
]
},
"skully": {
"code": "Wouter Van Wageningen",
"description": "A FreeSewing pattern for skully, our logo, a plushy toy",
"design": "Wouter Van Wageningen",
"difficulty": 4,
"tags": [
"accessories",
"toys"
],
"techniques": [
"curved-seam",
"precision"
]
},
"sven": {
"code": "Joost De Cock",
"description": "A FreeSewing pattern for a straightforward sweater",
"design": "Joost De Cock",
"difficulty": 3,
"tags": [
"tops"
],
"techniques": [
"curved-seam",
"flat-sleeve",
"ribbing"
]
},
"tamiko": {
"code": "Joost De Cock",
"description": "A FreeSewing pattern for a zero-waste top",
"design": "Joost De Cock",
"difficulty": 1,
"tags": [
"tops"
],
"techniques": [
"curved-seam"
]
},
"teagan": {
"code": "Joost De Cock",
"description": "A FreeSewing pattern for a T-shirt",
"design": "Joost De Cock",
"difficulty": 2,
"tags": [
"tops"
],
"techniques": [
"curved-seam",
"hem",
"flat-sleeve",
"knit-band"
]
},
"tiberius": {
"code": "Rika Tamaike",
"description": "A FreeSewing pattern for a tunica, a historical Roman tunic",
"design": "Rika Tamaike",
"difficulty": 1,
"tags": [
"tops",
"historical"
],
"techniques": []
},
"titan": {
"code": "Joost De Cock",
"description": "A FreeSewing pattern for a unisex trouser block",
"design": [
"Debra Bean",
"Joost De Cock"
],
"difficulty": 3,
"tags": [
"blocks",
"bottoms"
],
"techniques": []
},
"trayvon": {
"code": "Joost De Cock",
"description": "A FreeSewing pattern for a tie",
"design": "Joost De Cock",
"difficulty": 2,
"tags": [
"accessories"
],
"techniques": [
"precision",
"lining"
]
},
"tristan": {
"code": "Wouter van Wageningen",
"description": "A FreeSewing pattern for a fitted top with prince(ss) seams",
"design": "Natalia Sayang",
"difficulty": 3,
"tags": [
"tops"
],
"techniques": [
"curved-seam",
"precision"
]
},
"uma": {
"code": "Joost De Cock",
"description": "A FreeSewing pattern for a basic, highly-customizable underwear pattern",
"design": "Joost De Cock",
"difficulty": 2,
"tags": [
"bottoms",
"underwear"
],
"techniques": [
"elastic",
"curved-seam"
]
},
"umbra": {
"code": ["Joost De Cock", "Jonathan Haas"],
"description": "A FreeSewing pattern for a basic, highly-customizable underwear pattern",
"design": ["Joost De Cock", "Jonathan Haas"],
"difficulty": 2,
"tags": [
"bottoms",
"underwear"
],
"techniques": [
"elastic",
"curved-seam"
]
},
"wahid": {
"code": "Joost De Cock",
"description": "A FreeSewing pattern for a classic fitted waistcoat",
"design": "Joost De Cock",
"difficulty": 4,
"tags": [
"tops"
],
"techniques": [
"curved-seam",
"hem",
"interfacing",
"lining",
"welt-pocket",
"button"
]
},
"walburga": {
"code": "Rika Tamaike",
"description": "A FreeSewing pattern for a wappenrock (tabard/surcoat), a historical European/medieval (ish) garment",
"design": "Rika Tamaike",
"difficulty": 1,
"tags": [
"bottoms",
"historical"
],
"techniques": [
"hem"
]
},
"waralee": {
"code": "Wouter Van Wageningen",
"description": "A FreeSewing pattern for wrap pants",
"design": "Wouter Van Wageningen",
"difficulty": 2,
"tags": [
"bottoms",
"trousers"
],
"techniques": [
"curved-seam",
"hem",
"welt-pocket"
]
},
"yuri": {
"code": "Hellgy",
"description": "A FreeSewing pattern for a fancy zipless sweater based on the Huey hoodie",
"design": "Biou",
"difficulty": 3,
"tags": [
"tops"
],
"techniques": [
"curved-seam",
"flat-sleeve",
"hem",
"button"
]
},
"lily": {
"code": ["Anna Puk", "Joost De Cock"],
"description": "A FreeSewing pattern for basic leggings",
"design": "Anna Puk",
"difficulty": 2,
"tags": [
"bottoms"
],
"techniques": [
"elastic",
"curved-seam",
"hem"
]
}
}

View file

@ -1,41 +0,0 @@
import designs from './designs.json' assert { type: 'json' }
import packages from './packages.json' assert { type: 'json' }
import plugins from './plugins.json' assert { type: 'json' }
// Helper method to construct summary objects
const unpack = (obj, folder) =>
Object.fromEntries(
Object.keys(obj).map((name) => [
name,
{ name, folder, type: folder.slice(0, -1), description: obj[name] },
])
)
// Helper method to construct summary objects for designs
const unpackDesigns = (obj, folder) =>
Object.fromEntries(
Object.keys(obj).map((name) => [
name,
{ name, folder, type: folder.slice(0, -1), ...obj[name] },
])
)
// Re-Export imported JSON
export { designs, packages, plugins }
// All software
export const software = {
...unpackDesigns(designs, 'designs'),
...unpack(plugins, 'plugins'),
...unpack(packages, 'packages'),
}
// All software published on NPM
export const publishedSoftware = {
...unpackDesigns(designs, 'designs'),
...unpack(plugins, 'plugins'),
...unpack(packages, 'packages'),
}
export const publishedTypes = ['designs', 'packages', 'plugins']
export const types = publishedTypes

View file

@ -1,12 +0,0 @@
{
"collection": "All FreeSewing designs bundles into one pacakge, our collection",
"config": "Various configurations for FreeSewing",
"core": "A library for creating made-to-measure sewing patterns",
"i18n": "Translation for the FreeSewing project",
"models": "Body measurements data for a range of default sizes",
"studio": "Initializer package for a the FreeSewing design studio: npx @freesewing/studio",
"prettier-config": "FreeSewing's shared configuration for prettier",
"react": "React components, hooks and context by/for FreeSewing",
"snapseries": "A series of common sizes for elastics and other series to be used with snapped percentage options",
"utils": "A number of utilities, typically used by FreeSewing frontend code"
}

View file

@ -1,19 +0,0 @@
{
"core-plugins": "An umbrella package of essential plugins that are bundled with FreeSewing's core library",
"plugin-annotations": "A FreeSewing plugin that provides pattern annotations",
"plugin-bin-pack": "A FreeSewing plugin that adds a bin-pack algorithm to the core library",
"plugin-bust": "A FreeSewing plugin that helps with bust-adjusting menswear patterns",
"plugin-flip": "A FreeSewing plugin to flip parts horizontally",
"plugin-gore": "A FreeSewing plugin to generate gores for a semi-sphere or dome",
"plugin-i18n": "A FreeSewing plugin for pattern translation",
"plugin-measurements": "A FreeSewing plugin that adds additional measurements that can be calculated from existing ones",
"plugin-mirror": "A FreeSewing plugin to mirror points or paths",
"plugin-ringsector": "A FreeSewing plugin to draft a ring sector (think part of a donut)",
"plugin-round": "A FreeSewing plugin to round corners",
"plugin-path-utils": "A FreeSewing plugin that adds various path helper macros",
"plugin-sprinkle": "A FreeSewing plugin to bulk-add snippets to your pattern",
"plugin-svgattr": "A FreeSewing plugin to set SVG attributes",
"plugin-theme": "A FreeSewing plugin that provides a default theme",
"plugin-timing": "A FreeSewing plugin to record the time it takes to draft your pattern parts",
"plugin-versionfree-svg": "A FreeSewing plugin to keep version info out of your SVG to allow easy diffs across versions"
}

View file

@ -0,0 +1,9 @@
{{{ designImports }}}
export const designs = {
{{ designList }}
}
export const useDesign = (design) => (designs[design] ? designs[design] : false)
export const collection = Object.keys(designs)

View file

@ -0,0 +1,72 @@
// Designs
{{{ designImports }}}
// Translations
import { i18n as translations } from './i18n.mjs'
// Examples
import { designExampleIds, designExampleHrefs } from './examples.mjs'
/*
* Export the designs themselves
*/
export const designs = {
{{ designList }}
}
/*
* Export a list of names that make up the FreeSewing collection
*/
export const collection = Object.keys(designs)
/*
* Create various helper exports to get info about the collection
*/
export const requiredMeasurements = {}
export const optionalMeasurements = {}
export const measurements = {}
export const about = {}
const _tags = new Set()
const _techniques = new Set()
const _devs = new Set()
const _dess = new Set()
for (const design in designs) {
requiredMeasurements[design] = designs[design].patternConfig.measurements
optionalMeasurements[design] = designs[design].patternConfig.optionalMeasurements
measurements[design] = [
...designs[design].patternConfig.measurements,
...designs[design].patternConfig.optionalMeasurements,
]
about[design] = { ...designs[design].designConfig.data }
if (about[design].tags) _tags.add(...about[design].tags)
if (about[design].techniques) _techniques.add(...about[design].techniques)
if (Array.isArray(about[design].code)) _devs.add(...about[design].code)
else _devs.add(about[design].code)
if (Array.isArray(about[design].design)) _dess.add(...about[design].design)
else _dess.add(about[design].design)
}
export const tags = Array.from(_tags)
.filter((t) => (t ? true : false))
.sort()
export const techniques = Array.from(_techniques)
.filter((t) => (t ? true : false))
.sort()
export const developers = Array.from(_devs)
.filter((t) => (t ? true : false))
.sort()
export const designers = Array.from(_dess)
.filter((t) => (t ? true : false))
.sort()
/*
* Export the translations
*/
export const i18n = translations
/*
* These are examples
*/
export const examples = {
id: designExampleIds,
href: designExampleHrefs,
}

View file

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

View file

@ -17,7 +17,7 @@
".": "./src/index.mjs" ".": "./src/index.mjs"
}, },
"scripts": { "scripts": {
"testonly": "BABEL_ENV=production ../../node_modules/.bin/_mocha tests/*.test.js --require @babel/register", "test": "npx mocha tests/*.test.mjs",
"publish": "npm publish --access public" "publish": "npm publish --access public"
}, },
"peerDependencies": {}, "peerDependencies": {},

View file

@ -0,0 +1,6 @@
{
"id": "plugin-{{ name }}",
"description": "A FreeSewing plugin that lacks a description",
"version": "4.0.0-rc.8"
}

View file

@ -1,21 +1,23 @@
import { name, version } from '../data.mjs' import about from '../about.json' with { type: 'json' }
/*
* This is plugin-{{ name }}
*
* This skeleton file was auto-generated.
* For help on writing plugins, see the plugin guide at:
* https://freesewing.dev/guides/plugins/
*/
export const plugin = { export const plugin = {
name, name: about.id,
version, version: about.version,
macros: { hooks: { },
{{name}}: function (so, {points, paths, Path}) { //Example shorthand, you may wish to add other elements like utils macros: { },
const defaults = { store: [ ],
//note these are common examples and can be removed
scale: 1,
rotation: 0,
}
so = { ...defaults, ...so }
//write plugin here
},
},
} }
// More specifically named exports /*
* More specifically named exports
*/
export const {{name}}Plugin = plugin export const {{name}}Plugin = plugin
export const plugin{{capitalized_name}} = plugin export const plugin{{capitalized_name}} = plugin

View file

@ -62,4 +62,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -60,4 +60,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -61,4 +61,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -60,4 +60,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -60,4 +60,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -62,4 +62,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -60,4 +60,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -60,4 +60,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -60,4 +60,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -61,4 +61,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -61,4 +61,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -60,4 +60,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -64,4 +64,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -63,4 +63,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -60,4 +60,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -62,4 +62,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -60,4 +60,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -62,4 +62,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -0,0 +1,5 @@
{
"id": "examples",
"version": "4.0.0",
"description": "A FreeSewing pattern holding examples for our documentation"
}

View file

@ -56,4 +56,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -60,4 +60,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -60,4 +60,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -60,4 +60,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -60,4 +60,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -63,4 +63,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -60,4 +60,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -62,4 +62,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -62,4 +62,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -63,4 +63,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -60,4 +60,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -0,0 +1,5 @@
{
"id": "legend",
"description": "A FreeSewing pattern to document pattern notation",
"version": "4.0.0"
}

View file

@ -60,4 +60,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -62,4 +62,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -60,4 +60,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -60,4 +60,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -60,4 +60,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -60,4 +60,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -9,5 +9,6 @@
"accessories", "accessories",
"bags" "bags"
], ],
"techniques": [] "techniques": [],
} "version": "4.0.0"
}

View file

@ -60,4 +60,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -61,4 +61,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -60,4 +60,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -60,4 +60,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -60,4 +60,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -60,4 +60,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -62,4 +62,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -60,4 +60,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -0,0 +1,5 @@
{
"id": "plugintest",
"description": "A FreeSewing pattern to test (y)our plugins",
"version": "4.0.0"
}

View file

@ -71,4 +71,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -0,0 +1,5 @@
{
"id": "rendertest",
"description": "A FreeSewing pattern to test (y)our render engine our CSS",
"version": "4.0.0"
}

View file

@ -60,4 +60,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -63,4 +63,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -32,7 +32,7 @@
# @freesewing/shelly # @freesewing/shelly
A FreeSewing pattern for a raglan shirt, perfect for swimshirts A FreeSewing pattern for a raglan shirt, perfect for swim shirts

View file

@ -1,7 +1,7 @@
{ {
"name": "@freesewing/shelly", "name": "@freesewing/shelly",
"version": "4.0.0", "version": "4.0.0",
"description": "A FreeSewing pattern for a raglan shirt, perfect for swimshirts", "description": "A FreeSewing pattern for a raglan shirt, perfect for swim shirts",
"author": "Thrunic (https://github.com/Thrunic)", "author": "Thrunic (https://github.com/Thrunic)",
"homepage": "https://freesewing.org/", "homepage": "https://freesewing.org/",
"repository": "github:freesewing/freesewing", "repository": "github:freesewing/freesewing",
@ -60,4 +60,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -61,4 +61,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -63,4 +63,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -64,4 +64,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -60,4 +60,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -62,4 +62,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -61,4 +61,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -62,4 +62,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -60,4 +60,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -61,4 +61,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -61,4 +61,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -60,4 +60,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -60,4 +60,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -60,4 +60,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -62,4 +62,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -60,4 +60,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -60,4 +60,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -62,4 +62,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

382
package-lock.json generated
View file

@ -59607,6 +59607,10 @@
"node": ">=4" "node": ">=4"
} }
}, },
"node_modules/studio": {
"resolved": "sites/studio",
"link": true
},
"node_modules/style-mod": { "node_modules/style-mod": {
"version": "4.1.2", "version": "4.1.2",
"resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.2.tgz", "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.2.tgz",
@ -70585,6 +70589,384 @@
"funding": { "funding": {
"url": "https://github.com/sponsors/isaacs" "url": "https://github.com/sponsors/isaacs"
} }
},
"sites/studio": {
"version": "0.0.0",
"dependencies": {
"@docusaurus/core": "^3.7.0",
"@docusaurus/faster": "^3.7.0",
"@docusaurus/preset-classic": "^3.7.0",
"@freesewing/collection": "latest",
"@freesewing/config": "latest",
"@freesewing/core": "latest",
"@freesewing/i18n": "latest",
"@freesewing/plugin-i18n": "latest",
"@freesewing/plugin-theme": "latest",
"@freesewing/plugin-timing": "latest",
"@freesewing/react": "latest",
"@freesewing/snapseries": "latest",
"@freesewing/utils": "latest",
"@mdx-js/react": "^3.0.0",
"lodash": "^4.17.21",
"postcss": "^8.4.47",
"prism-react-renderer": "^2.3.0",
"react": "^19.0.0",
"react-dom": "^19.0.0",
"react-markdown": "^9.0.1",
"remark-smartypants": "^3.0.2"
},
"devDependencies": {
"@docusaurus/module-type-aliases": "^3.7.0",
"@docusaurus/types": "^3.7.0",
"@tailwindcss/postcss": "^4.1.3",
"autoprefixer": "^10.4.20",
"daisyui": "^5.0.19",
"glob": "^11.0.0",
"gray-matter": "^4.0.3",
"postcss": "^8.4.47",
"tailwindcss": "^4.1.3",
"yaml-loader": "^0.8.1"
},
"engines": {
"node": ">=20.0"
}
},
"sites/studio/node_modules/@freesewing/collection": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/@freesewing/collection/-/collection-4.0.0.tgz",
"integrity": "sha512-ozBv1MdcZ3VyJiBxsevK/dIOHTa+Di7m2qfvYPdCa1Io+zMT6RfCdS46gYOp79M9Hf1lLEsKaXV6IPa5P6eCIQ==",
"license": "MIT",
"dependencies": {
"@freesewing/aaron": "4.0.0",
"@freesewing/albert": "4.0.0",
"@freesewing/bee": "4.0.0",
"@freesewing/bella": "4.0.0",
"@freesewing/benjamin": "4.0.0",
"@freesewing/bent": "4.0.0",
"@freesewing/bibi": "4.0.0",
"@freesewing/bob": "4.0.0",
"@freesewing/bonny": "4.0.0",
"@freesewing/breanna": "4.0.0",
"@freesewing/brian": "4.0.0",
"@freesewing/bruce": "4.0.0",
"@freesewing/carlita": "4.0.0",
"@freesewing/carlton": "4.0.0",
"@freesewing/cathrin": "4.0.0",
"@freesewing/charlie": "4.0.0",
"@freesewing/core": "4.0.0",
"@freesewing/core-plugins": "4.0.0",
"@freesewing/cornelius": "4.0.0",
"@freesewing/diana": "4.0.0",
"@freesewing/florence": "4.0.0",
"@freesewing/florent": "4.0.0",
"@freesewing/gozer": "4.0.0",
"@freesewing/hi": "4.0.0",
"@freesewing/holmes": "4.0.0",
"@freesewing/hortensia": "4.0.0",
"@freesewing/huey": "4.0.0",
"@freesewing/hugo": "4.0.0",
"@freesewing/jaeger": "4.0.0",
"@freesewing/jane": "4.0.0",
"@freesewing/lily": "4.0.0",
"@freesewing/lucy": "4.0.0",
"@freesewing/lumina": "4.0.0",
"@freesewing/lumira": "4.0.0",
"@freesewing/lunetius": "4.0.0",
"@freesewing/noble": "4.0.0",
"@freesewing/octoplushy": "4.0.0",
"@freesewing/onyx": "4.0.0",
"@freesewing/opal": "4.0.0",
"@freesewing/otis": "4.0.0",
"@freesewing/paco": "4.0.0",
"@freesewing/penelope": "4.0.0",
"@freesewing/plugin-bust": "4.0.0",
"@freesewing/plugin-flip": "4.0.0",
"@freesewing/sandy": "4.0.0",
"@freesewing/shelly": "4.0.0",
"@freesewing/shin": "4.0.0",
"@freesewing/simon": "4.0.0",
"@freesewing/simone": "4.0.0",
"@freesewing/skully": "4.0.0",
"@freesewing/snapseries": "4.0.0",
"@freesewing/sven": "4.0.0",
"@freesewing/tamiko": "4.0.0",
"@freesewing/teagan": "4.0.0",
"@freesewing/tiberius": "4.0.0",
"@freesewing/titan": "4.0.0",
"@freesewing/trayvon": "4.0.0",
"@freesewing/tristan": "4.0.0",
"@freesewing/uma": "4.0.0",
"@freesewing/umbra": "4.0.0",
"@freesewing/wahid": "4.0.0",
"@freesewing/walburga": "4.0.0",
"@freesewing/waralee": "4.0.0",
"@freesewing/yuri": "4.0.0"
},
"engines": {
"node": ">= 20"
},
"funding": {
"type": "individual",
"url": "https://freesewing.org/patrons/join"
}
},
"sites/studio/node_modules/@freesewing/config": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/@freesewing/config/-/config-4.0.0.tgz",
"integrity": "sha512-VNGs+22BsNyY4grbbca2ml/prMweqNmmO2SO8uwY+8GLPnvVs+0pRgSEciWkGmTTprWsFtLHIz8jCf2u+spZ7g==",
"license": "MIT",
"engines": {
"node": ">= 20"
},
"funding": {
"type": "individual",
"url": "https://freesewing.org/patrons/join"
}
},
"sites/studio/node_modules/@freesewing/core": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/@freesewing/core/-/core-4.0.0.tgz",
"integrity": "sha512-o1CTkyND0ytU7wj9h29G/AuG9pkxZlQ+7hbZx51u9l1UA0Qbvfm627+VEMThdDQalrNam4WN+9mW6OdTZyXr8Q==",
"license": "MIT",
"dependencies": {
"@freesewing/core-plugins": "4.0.0",
"bezier-js": "6.1.4",
"hooks": "0.3.2",
"lodash.clonedeep": "^4.5.0",
"lodash.get": "4.4.2",
"lodash.set": "4.3.2",
"lodash.unset": "4.5.2"
},
"engines": {
"node": ">= 20"
},
"funding": {
"type": "individual",
"url": "https://freesewing.org/patrons/join"
}
},
"sites/studio/node_modules/@freesewing/i18n": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/@freesewing/i18n/-/i18n-4.0.0.tgz",
"integrity": "sha512-jd0LLuSiiGfM5P1EQKW/5tS/nFMpAbXgg22OP9lYTDiHNdPdZ3QFoDGGb1p8dnbI3RBJfkn+ciLTt7R45YOPBg==",
"license": "MIT",
"engines": {
"node": ">= 20"
},
"funding": {
"type": "individual",
"url": "https://freesewing.org/patrons/join"
}
},
"sites/studio/node_modules/@freesewing/plugin-i18n": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/@freesewing/plugin-i18n/-/plugin-i18n-4.0.0.tgz",
"integrity": "sha512-v4DoroyWpkoJNCccQ2saepphySKv91On31eWCW9aj8E3Ps8smcwUd+4kOz+MXZkUpPXOOD7oFhdYhrT4hlGcFg==",
"license": "MIT",
"engines": {
"node": ">= 20"
},
"funding": {
"type": "individual",
"url": "https://freesewing.org/patrons/join"
},
"peerDependencies": {
"@freesewing/core": "4.0.0"
}
},
"sites/studio/node_modules/@freesewing/plugin-theme": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/@freesewing/plugin-theme/-/plugin-theme-4.0.0.tgz",
"integrity": "sha512-USB0sKJphpoicXvFDb/I5K5m8KSSOb8l0wZGbb+KnKkj9zrUSEyJB4EHtGgv1fstelNyjfA8naq0Nq5qgHPJFA==",
"license": "MIT",
"engines": {
"node": ">= 20"
},
"funding": {
"type": "individual",
"url": "https://freesewing.org/patrons/join"
},
"peerDependencies": {
"@freesewing/core": "4.0.0"
}
},
"sites/studio/node_modules/@freesewing/plugin-timing": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/@freesewing/plugin-timing/-/plugin-timing-4.0.0.tgz",
"integrity": "sha512-m4n3Ley+aoScI8vW1uVW/YBjeTZmWCyuixhFC88LU2TjUH/Lm11P6gCTWdbE9IBpA2Zkn65arpRLZrI08GQlnw==",
"license": "MIT",
"engines": {
"node": ">= 20"
},
"funding": {
"type": "individual",
"url": "https://freesewing.org/patrons/join"
},
"peerDependencies": {
"@freesewing/core": "4.0.0"
}
},
"sites/studio/node_modules/@freesewing/react": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/@freesewing/react/-/react-4.0.0.tgz",
"integrity": "sha512-h53FTzj11T9JewkcLm+4B+lN85JqdFMv3HEvbe7l2+C17KYSFQEky9P8Xv613Gq/WzNjzfpOWbr7YIrGdSExSA==",
"license": "MIT",
"dependencies": {
"@codemirror/lang-yaml": "^6.1.2",
"@uiw/react-codemirror": "^4.23.8",
"d3-drag": "3.0.0",
"d3-selection": "3.0.0",
"diff": "^7.0.0",
"echarts": "^5.6.0",
"echarts-for-react": "^3.0.2",
"file-saver": "^2.0.5",
"highlight.js": "^11.11.1",
"html-react-parser": "^5.2.2",
"jotai": "^2.12.1",
"jotai-location": "^0.5.5",
"luxon": "^3.5.0",
"mustache": "^4.2.0",
"pdfkit": "^0.16.0",
"react-diff-viewer-continued": "^4.0.5",
"react-dropzone": "^14.3.5",
"react-zoom-pan-pinch": "^3.7.0",
"svg-to-pdfkit": "^0.1.8",
"use-local-storage-state": "^19.5.0",
"web-worker": "^1.5.0",
"yaml": "^2.7.0"
},
"engines": {
"node": ">= 20"
},
"funding": {
"type": "individual",
"url": "https://freesewing.org/patrons/join"
},
"peerDependencies": {
"react": "^19.0.0"
}
},
"sites/studio/node_modules/@freesewing/snapseries": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/@freesewing/snapseries/-/snapseries-4.0.0.tgz",
"integrity": "sha512-Fqh+Mz22xccDZGqQMpYBgKHnARSe/T1s4JCXUhKPvk0fgMg+5jNFfFUj+qTo9gaJ6qDFZYv1Wts/Smqr5nYIpQ==",
"license": "MIT",
"engines": {
"node": ">= 20"
},
"funding": {
"type": "individual",
"url": "https://freesewing.org/patrons/join"
}
},
"sites/studio/node_modules/@freesewing/utils": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/@freesewing/utils/-/utils-4.0.0.tgz",
"integrity": "sha512-CUqdmCWWoMj/UkONtKAq3rtFbWt8jFZS/DhqjmryJ1m8I4UjPpzXNEekr9gSiiP2RV/AbRHMAFS4sFBPmxia0w==",
"license": "MIT",
"dependencies": {
"lodash": "^4.17.21",
"tlds": "^1.255.0"
},
"engines": {
"node": ">= 20"
},
"funding": {
"type": "individual",
"url": "https://freesewing.org/patrons/join"
}
},
"sites/studio/node_modules/diff": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz",
"integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==",
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.3.1"
}
},
"sites/studio/node_modules/glob": {
"version": "11.0.1",
"resolved": "https://registry.npmjs.org/glob/-/glob-11.0.1.tgz",
"integrity": "sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw==",
"dev": true,
"license": "ISC",
"dependencies": {
"foreground-child": "^3.1.0",
"jackspeak": "^4.0.1",
"minimatch": "^10.0.0",
"minipass": "^7.1.2",
"package-json-from-dist": "^1.0.0",
"path-scurry": "^2.0.0"
},
"bin": {
"glob": "dist/esm/bin.mjs"
},
"engines": {
"node": "20 || >=22"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"sites/studio/node_modules/jackspeak": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.0.tgz",
"integrity": "sha512-9DDdhb5j6cpeitCbvLO7n7J4IxnbM6hoF6O1g4HQ5TfhvvKN8ywDM7668ZhMHRqVmxqhps/F6syWK2KcPxYlkw==",
"dev": true,
"license": "BlueOak-1.0.0",
"dependencies": {
"@isaacs/cliui": "^8.0.2"
},
"engines": {
"node": "20 || >=22"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"sites/studio/node_modules/lru-cache": {
"version": "11.1.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.1.0.tgz",
"integrity": "sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==",
"dev": true,
"license": "ISC",
"engines": {
"node": "20 || >=22"
}
},
"sites/studio/node_modules/minimatch": {
"version": "10.0.1",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz",
"integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==",
"dev": true,
"license": "ISC",
"dependencies": {
"brace-expansion": "^2.0.1"
},
"engines": {
"node": "20 || >=22"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"sites/studio/node_modules/path-scurry": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz",
"integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==",
"dev": true,
"license": "BlueOak-1.0.0",
"dependencies": {
"lru-cache": "^11.0.0",
"minipass": "^7.1.2"
},
"engines": {
"node": "20 || >=22"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
} }
} }
} }

View file

@ -11,12 +11,15 @@
"homepage": "https://freesewing.org/", "homepage": "https://freesewing.org/",
"license": "MIT", "license": "MIT",
"scripts": { "scripts": {
"add": "node --experimental-json-modules --no-warnings scripts/add-software.mjs",
"new": "node --experimental-json-modules --no-warnings scripts/add-software.mjs", "new": "node --experimental-json-modules --no-warnings scripts/add-software.mjs",
"build": "lerna run build:all", "build": "lerna run build:all",
"?": "node scripts/help.mjs", "?": "node scripts/help.mjs",
"tips": "node scripts/help.mjs", "tips": "node scripts/help.mjs",
"org": "cd sites/org && npm run start", "org": "cd sites/org && npm run start",
"eu": "cd sites/org && npm run start",
"dev": "cd sites/dev && npm run start", "dev": "cd sites/dev && npm run start",
"studio": "cd sites/studio && npm run start",
"kickstart": "npm install && husky && npm run tips", "kickstart": "npm install && husky && npm run tips",
"cleanall": "npx nx run-many --target=clean", "cleanall": "npx nx run-many --target=clean",
"test": "npx nx run-many --target=test", "test": "npx nx run-many --target=test",

View file

@ -32,7 +32,7 @@
# @freesewing/collection # @freesewing/collection
All FreeSewing designs bundles into one pacakge, our collection All FreeSewing designs bundled into one package, our collection

View file

@ -0,0 +1,5 @@
{
"id": "collection",
"description": "All FreeSewing designs bundled into one package, our collection",
"version": "4.0.0"
}

View file

@ -1,7 +1,7 @@
{ {
"name": "@freesewing/collection", "name": "@freesewing/collection",
"version": "4.0.0", "version": "4.0.0",
"description": "All FreeSewing designs bundles into one pacakge, our collection", "description": "All FreeSewing designs bundled into one package, our collection",
"author": "Joost De Cock <joost@joost.at> (https://github.com/joostdecock)", "author": "Joost De Cock <joost@joost.at> (https://github.com/joostdecock)",
"homepage": "https://freesewing.org/", "homepage": "https://freesewing.org/",
"repository": "github:freesewing/freesewing", "repository": "github:freesewing/freesewing",
@ -15,7 +15,12 @@
}, },
"keywords": [ "keywords": [
"freesewing", "freesewing",
"freesewing" "design",
"diy",
"fashion",
"made to measure",
"parametric design",
"sewing"
], ],
"type": "module", "type": "module",
"module": "src/index.mjs", "module": "src/index.mjs",
@ -109,4 +114,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -75,6 +75,7 @@ export const designs = {
bent, bent,
bibi, bibi,
bob, bob,
bonny,
breanna, breanna,
brian, brian,
bruce, bruce,

View file

@ -0,0 +1,5 @@
{
"id": "config",
"description": "Various configurations for FreeSewing",
"version": "4.0.0"
}

View file

@ -15,7 +15,12 @@
}, },
"keywords": [ "keywords": [
"freesewing", "freesewing",
"freesewing" "design",
"diy",
"fashion",
"made to measure",
"parametric design",
"sewing"
], ],
"type": "module", "type": "module",
"module": "src/index.mjs", "module": "src/index.mjs",
@ -44,4 +49,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -1,20 +1,5 @@
{ {
"id": "aaron", "id": "core",
"code": "Joost De Cock", "description": "A library for creating made-to-measure sewing patterns",
"name": "Aaron A-shirt", "version": "4.0.0"
"description": "A FreeSewing pattern for a A-shirt or tank top",
"design": "Joost De Cock",
"difficulty": 2,
"tags": [
"tops",
"underwear"
],
"techniques": [
"hem",
"stretch",
"knit-binding",
"curved-seam"
],
"version": "4.0.0-rc.5",
"pkg": "@freesewing/aaron"
} }

View file

@ -70,4 +70,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -32,7 +32,7 @@
# @freesewing/i18n # @freesewing/i18n
Translation for the FreeSewing project English translation for the FreeSewing project

5
packages/i18n/about.json Normal file
View file

@ -0,0 +1,5 @@
{
"id": "i18n",
"description": "English translation for the FreeSewing project",
"version": "4.0.0"
}

View file

@ -1,7 +1,7 @@
{ {
"name": "@freesewing/i18n", "name": "@freesewing/i18n",
"version": "4.0.0", "version": "4.0.0",
"description": "Translation for the FreeSewing project", "description": "English translation for the FreeSewing project",
"author": "Joost De Cock <joost@joost.at> (https://github.com/joostdecock)", "author": "Joost De Cock <joost@joost.at> (https://github.com/joostdecock)",
"homepage": "https://freesewing.org/", "homepage": "https://freesewing.org/",
"repository": "github:freesewing/freesewing", "repository": "github:freesewing/freesewing",
@ -48,4 +48,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

View file

@ -32,7 +32,7 @@
# @freesewing/models # @freesewing/models
Body measurements data for a range of default sizes Body measurements data used to test FreeSewing designs
## Usage ## Usage

View file

@ -0,0 +1,5 @@
{
"id": "models",
"description": "Body measurements data used to test FreeSewing designs",
"version": "4.0.0"
}

View file

@ -1,7 +1,7 @@
{ {
"name": "@freesewing/models", "name": "@freesewing/models",
"version": "4.0.0", "version": "4.0.0",
"description": "Body measurements data for a range of default sizes", "description": "Body measurements data used to test FreeSewing designs",
"author": "Joost De Cock <joost@joost.at> (https://github.com/joostdecock)", "author": "Joost De Cock <joost@joost.at> (https://github.com/joostdecock)",
"homepage": "https://freesewing.org/", "homepage": "https://freesewing.org/",
"repository": "github:freesewing/freesewing", "repository": "github:freesewing/freesewing",
@ -48,4 +48,4 @@
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
} }
} }

Some files were not shown because too many files have changed in this diff Show more