1
0
Fork 0

[breaking]: FreeSewing v4 (#7297)

Refer to the CHANGELOG for all info.

---------

Co-authored-by: Wouter van Wageningen <wouter.vdub@yahoo.com>
Co-authored-by: Josh Munic <jpmunic@gmail.com>
Co-authored-by: Jonathan Haas <haasjona@gmail.com>
This commit is contained in:
Joost De Cock 2025-04-01 16:15:20 +02:00 committed by GitHub
parent d22fbe78d9
commit 51dc1d9732
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6626 changed files with 142053 additions and 150606 deletions

View file

@ -9,7 +9,7 @@ const nodeFiles = [
`**/prebuild.${jsSuffixes}`,
`**/prebuild/**/*.${jsSuffixes}`,
`**/scripts/**/*.${jsSuffixes}`,
`packages/new-design/lib/**/*.${jsSuffixes}`,
`packages/studio/lib/*.${jsSuffixes}`,
`sites/backend/**/*.${jsSuffixes}`,
`sites/*/mdx/**/*.${jsSuffixes}`,
`sites/*/themes/**/*.${jsSuffixes}`,
@ -60,16 +60,6 @@ module.exports = {
'no-console': 'off',
},
},
{
files: frontendFiles,
excludedFiles: nodeFiles,
extends: ['next'],
settings: {
next: {
rootDir: 'sites/dev/',
},
},
},
{
files: [`**/*.${jsSuffixes}{,.mustache}`],
excludedFiles: [].concat(mongoFiles, nodeFiles, frontendFiles),

View file

@ -1,46 +0,0 @@
name: Sync Dependabot Bump
on:
pull_request:
types: [opened, synchronize]
permissions:
contents: write
jobs:
sync:
if: ${{ github.actor == 'dependabot[bot]' }}
name: Sync dependency files
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v3
with:
ref: ${{ github.head_ref }}
- name: Setup Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
- name: Install dependencies
run: |
cd packages/core
npm i --workspaces=false --no-save
cd ../../scripts
npm i --workspaces=false --no-save
cd ../
env:
CI: true
- name: Run Sync Script
run: node ./scripts/sync-dependencies.mjs ${{ github.head_ref }}
- name: Reconfigure
run: node --experimental-json-modules --no-warnings ./scripts/reconfigure.mjs
- name: Bootstrap
run: yarn install
- name: Commit Changes
run: |
git add .
git status
git config user.name github-actions
git config user.email github-actions@github.com
git commit -m "[dependabot skip] chore(deps): bumped ${{ github.head_ref }} changes in config/dependencies.yaml"
git push

58
.gitignore vendored
View file

@ -1,10 +1,12 @@
# See https://help.github.com/ignore-files/ for more about ignoring files.
dump
production.sqlite
.husky
# .env
.env
*.key
*.env
# Plugins
plugins/plugin-theme/src/bundle.css.js
@ -14,16 +16,17 @@ plugins/plugin-theme/css
packages/core/coverage
packages/*/report
# Any NPM or Yarn lock files
# Any Yarn lock files
designs/*/package-lock.json
designs/*/yarn.lock
packages/*/package-lock.json
packages/*/yarn.lock
plugins/*/package-lock.json
plugins/*/yarn.lock
yarn.lock
# NPM lock files for sites (we use yarn)
sites/*/package-lock.json
# Yarn lock files for sites (we use npm)
sites/*/yarn.lock
# Nx cache
.nx/cache
@ -42,26 +45,16 @@ packages/new-design/shared/.gitignore
packages/new-design/lib/banner.mjs
sites/*/public/img/og/*
# Orgdocs prebuild artifacts
sites/orgdocs/src/lib/designs.mjs
sites/orgdocs/src/lib/designinfo.mjs
sites/orgdocs/src/lib/i18n.mjs
sites/orgdocs/docs/designs/*/options/readme.mdx
sites/orgdocs/authors.json
sites/orgdocs/showcase-tags.mjs
# Lab auto-generated content
sites/lab/lib
sites/lab/public/android-chrome-192x192.png
sites/lab/public/android-chrome-384x384.png
sites/lab/public/apple-touch-icon.png
sites/lab/public/browserconfig.xml
sites/lab/public/favicon-16x16.png
sites/lab/public/favicon-32x32.png
sites/lab/public/favicon.ico
sites/lab/public/mstile-150x150.png
sites/lab/public/safari-pinned-tab.svg
sites/lab/public/site.webmanifest
# Org prebuild artifacts
sites/org/src/lib/designs.mjs
sites/org/src/lib/designinfo.mjs
sites/org/src/lib/i18n.mjs
sites/org/docs/designs/*/options/readme.mdx
sites/org/authors.json
sites/org/showcase-tags.mjs
sites/org/design-examples.mjs
sites/org/docs/designs/*.mdx
sites/org/recent-blog-posts.mjs
# sde auto-generated content
sites/sde/public/android-chrome-192x192.png
@ -87,25 +80,15 @@ sites/dev/public/mstile-150x150.png
sites/dev/public/safari-pinned-tab.svg
sites/dev/public/site.webmanifest
# org auto-generated content
sites/org/public/android-chrome-192x192.png
sites/org/public/android-chrome-384x384.png
sites/org/public/apple-touch-icon.png
sites/org/public/browserconfig.xml
sites/org/public/favicon-16x16.png
sites/org/public/favicon-32x32.png
sites/org/public/favicon.ico
sites/org/public/mstile-150x150.png
sites/org/public/safari-pinned-tab.svg
sites/org/public/site.webmanifest
# Node dependencies
node_modules
# Build folders
dist
build
export
# But don't ignore point/dist reference
!/sites/dev/docs/reference/api/point/dist/
# Prebuild files
prebuild/*.json
@ -147,3 +130,6 @@ scripts/verdaccio.sh
# e2e test results
sites/*/playwright-report
# Local Netlify folder
.netlify

View file

@ -1 +1 @@
yarn lint-staged
npx lint-staged

View file

@ -27,4 +27,5 @@ yarn.lock
.all-contributorsrc
.nvmrc
ansible.cfg
sites/shared/prebuild/data/*.mjs
sites/org/docs/docs/designs/*/options/readme.mdx
/.nx/workspace-data

View file

@ -3,6 +3,9 @@
## Unreleased
## 4.0.0 (2024-04-01)
### bibi
#### Changed
@ -133,8 +136,25 @@
- The `withCondition` named export is deprecated and will always return true.
### collection
#### Added
- Added a new `@freesewing/collection` package that bundles all our designs
### config
#### Added
- Added a new `@freesewing/config` package for shared configuration
### core
#### Breaking
- FreeSewing new requires NodeJS 20 (or more recent)
- We removed all but English translations. We still support i18n in our core library and designs, but no longer provide translations
#### Added
- The `Path.rotate()` method was added to the core API.
@ -144,6 +164,30 @@
- Fix an issue when splitting path on start or end point. Fixes
### i18n
#### Added
- The `@freesewing/i18n` package holds translations in English for where they are needed
### studio
#### Added
- Added `@freesewing/studio`, our new development environment
### react
#### Added
- The `@freesewing/react` package holds shared components, hooks, and context for our React-based frontends
### utils
#### Added
- Added a new `@freesewing/utils` package for shared utils
## 3.2.0 (2024-02-11)
@ -225,12 +269,6 @@
- Calling `Path.join` with a second parameter to indicate that the resulting paths most be closed is now deprecated and will be removed in FreeSewing v4.
### react-components
#### Added
- This Pattern component now supports translation of nested arrays of strings, giving you more flexibility to concatenate translated parts of strings
## 3.1.0 (2023-12-26)
@ -424,12 +462,6 @@
- Make Path.split() more robust when handling edge-case. Fixes
- Prevent utils.circlesIntersect() from running sqrt on a negative number. Fixes
### new-design
#### Fixed
- Removed unwanted debug output
## 3.0.0 (2023-09-30)
@ -675,16 +707,6 @@
- Make generatePartTransform a named export
### new-design
#### Changed
- We're now loading content from the main branch by default
#### Fixed
- Add bin entry to package.json
## 2.21.2 (2022-06-30)
@ -1092,8 +1114,24 @@
- Migrated from Rollup to Esbuild for all builds
- The `pctBasedOn()` helper method for pattern config was moved to config-helpers We did not make this a breaking change since it's only used internally.
### i18n
#### Changed
- Migrated from Rollup to Esbuild for all builds
#### Fixed
- Added missing lab namespace for English
### models
#### Changed
- Migrated from Rollup to Esbuild for all builds
### utils
#### Changed
- Migrated from Rollup to Esbuild for all builds
@ -1202,12 +1240,6 @@
- Fix bug in Svg.escapeText() that only escaped the first quote
### backend
#### Fixed
- Mitigate risk of denial-of-service attacks in catch-all route
## 2.20.4 (2022-01-28)
@ -1231,6 +1263,12 @@
## 2.20.2 (2022-01-27)
### i18n
#### Fixed
- Patterns options were always in English due to symlinks being used
## 2.20.1 (2022-01-27)
@ -1559,6 +1597,12 @@
- Added support for `settings.scale`
### i18n
#### Fixed
- Fixed issue that was causing plugin translations to always be in English
## 2.19.9 (2022-01-09)
@ -1991,6 +2035,13 @@
- Pattern.on() is now chainable as it returns the Pattern object
### i18n
#### Fixed
- Fixed bug in resolving of shared pattern options
- Removed optional chaining which broke node v12 support
### snapseries
#### Added
@ -2037,6 +2088,16 @@
- Handle path.offset() of very short curves with control points on the start or end point Closes [#1257](https://github.com/freesewing/freesewing/issues/1257)
### i18n
#### Added
- Added translations for Yuri
#### Fixed
- Added optional chaining so missing options always lead to clear error message
## 2.17.4 (2021-08-20)
@ -2049,6 +2110,18 @@
## 2.17.3 (2021-08-16)
### i18n
#### Added
- New translations
### utils
#### Fixed
- Added missing `bustPointToUnderbust` measurement to `neckstimate`
## 2.17.2 (2021-08-15)
@ -2064,6 +2137,12 @@
- Added new ffsa option to let the user control the extra SA for flat-felled seams Closes [#1251](https://github.com/freesewing/freesewing/issues/1251)
### i18n
#### Added
- Added new ffsa option for simon & simone
### models
#### Added
@ -2185,9 +2264,21 @@
- Fix a bug in `path.shiftAlong` where no point is returned if the distance to shift is a fraction of one step (1/25mm) into a new path segment See [#1140](https://github.com/freesewing/freesewing/issues/1140)
### i18n
#### Changed
- Changed antman references to antperson
## 2.16.2 (2021-05-05)
### i18n
#### Changed
- String updates
## 2.16.1 (2021-05-30)
@ -2395,6 +2486,19 @@
- Changed `department` setting in config in line with new grouping
### i18n
#### Added
- New translations for pattern filter
### utils
#### Changed
- neckstimate now takes an extra `noRound` parameter to return the unrounded value
- measurementDiffers takes an extra `absolute` value that can be set to false to get the non-absolute and non-rounded value
## 2.16.0 (2021-05-24)
@ -2423,6 +2527,12 @@
- Fixed third button not showing up See [#973](https://github.com/freesewing/freesewing/issues/973)
### i18n
#### Changed
- Changes to cfp strings
## 2.15.4 (2021-05-08)
@ -2554,6 +2664,13 @@
- Don't round coordinates internally to avoid path.split misses
### i18n
#### Added
- Added translation for new Titan options
- Added translations for Charlie
## 2.14.0 (2021-03-07)
@ -2569,6 +2686,12 @@
- Replaced grainline indicator on pocket with cut-on-fold indicator
### i18n
#### Added
- Added translations for Cornelius
## 2.13.2 (2021-02-21)
@ -2617,6 +2740,12 @@
- Added missing sleeve notch on yoke
### utils
#### Added
- Pass pattern handle to tiler
## 2.13.0 (2021-02-13)
@ -2670,6 +2799,12 @@
- Make sure roudEnd and roundStart points are always available
### i18n
#### Added
- Translation for Hortensia
## 2.12.1 (2021-01-27)
@ -2794,6 +2929,16 @@
- Removed unused lengthBonus option
### i18n
#### Changed
- New strings for new features
#### Fixed
- Type in Simon title
## 2.10.7 (2020-11-18)
@ -2809,6 +2954,12 @@
## 2.10.5 (2020-11-14)
### i18n
#### Fixed
- Added missing `cty.` translations to non-English language files
## 2.10.4 (2020-11-13)
@ -2871,6 +3022,18 @@
- Added the `info` type to raised events
- Added support for conditional loading of plugins
### i18n
#### Added
- Added translations for plugin-title
- Added translations for teagan
- Added some translations for the UI
#### Fixed
- Replaced a few identical files with symlinks
## 2.8.1 (2020-08-16)
@ -2981,6 +3144,12 @@
- Added a new `debug` setting
- Shorthand now proxies objects to allow debug and raise
### utils
#### Added
- Added backend calls for creating gists/issues on Github
## 2.7.0 (2020-07-12)
@ -3258,6 +3427,13 @@
- [Properly escape quotes in imperial units](https://github.com/freesewing/freesewing/issues/437)
### i18n
#### Changed
- Added translations for Titan
- Removed `Circumference` suffix from measurement names
### models
#### Changed
@ -3266,6 +3442,21 @@
- Ported models to the crotchDepth measurement. See [#425](https://github.com/freesewing/freesewing/issues/425)
- Removed `Circumference` suffix from measurement names
### utils
#### Added
- Added new `isDegMeasurement` method. See [#358](https://github.com/freesewing/freesewing/issues/358)
- `neckStimate` now supports all new measurements. See [#416](https://github.com/freesewing/freesewing/issues/416)
#### Changed
- Changed `neckstimate` to handle new `shoulderSlope` degree measurement. See [#358](https://github.com/freesewing/freesewing/issues/358)
- Changed `neckstimate` to support all new measurements. See [#416](https://github.com/freesewing/freesewing/issues/416)
- Ported `neckstimate` to the crotchDepth measurement. See [#425](https://github.com/freesewing/freesewing/issues/425)
- Removed `Circumference` suffix from measurement names
- Added the `isDegMeasurement` method
## 2.6.0 (2020-05-01)
@ -3310,6 +3501,12 @@
- utils now includes `Bezier` which holds the bezier-js library so you don't need to re-import it
- We no longer set the plugin configuration/data object to fall in `pattern.use()`
### i18n
#### Changed
- Changes to support the renaming of @freesewing/fu to @freesewing/florence
## 2.5.0 (2020-04-05)
@ -3319,9 +3516,21 @@
- Diana is a top with a draped neck
### i18n
#### Added
- title, description, and options for Dianna
## 2.4.6 (2020-03-23)
### i18n
#### Fixed
- Fixed an bug in the i18n package
## 2.4.5 (2020-03-19)
@ -3337,6 +3546,12 @@
- Check whether frontScyeDart option is zero prior to implementing it
### utils
#### Changed
- neckstimate() now returns values rounded to nearest mm
## 2.4.4 (2020-03-15)
@ -3373,12 +3588,30 @@
## 2.4.3 (2020-03-12)
### i18n
#### Added
- Added more translations
## 2.4.2 (2020-03-08)
### i18n
#### Added
- Added more strings
## 2.4.1 (2020-03-04)
### utils
#### Fixed
- [#542](https://github.com/freesewing/freesewing.org/issues/542): Prevent neckstimate from throwing when getting an unexpected measurement
## 2.4.0 (2020-02-29)
@ -3542,12 +3775,34 @@
- Added the `Path.noop()` method
- Added the `Path.insop()` methods
### i18n
#### Added
- Added translations for Breanna
#### Changed
- Added/Updated strings for the 2.2 frontend changes
- Changed `Joost De Cock` to `Joost` because spam filters don't like cock
#### Removed
- Removed the files for homepage translation, and moved that content to markdown
- Removed the files for editor translation, as it is no longer used
### models
#### Changed
- Extended the menswear size range to have 10 different sizes, just like womenswear
### utils
#### Changed
- Neckstimate now uses proportions only
## 2.1.9 (2020-01-18)
@ -3585,6 +3840,12 @@
## 2.1.6 (2019-11-24)
### utils
#### Fixed
- [#317](https://github.com/freesewing/freesewing.org/issues/317): Fixed bug where format was not passed to formatImperial
## 2.1.5 (2019-11-19)
@ -3594,12 +3855,40 @@
## 2.1.3 (2019-10-18)
### i18n
#### Added
- More translated strings
### utils
#### Changed
- Adjusted slope of the shoulderToShoulder measurement in neckstimate data
#### Fixed
- [#250](https://github.com/freesewing/freesewing.org/issues/250): Model page stays empty with pre 2.0 model data: Error: 'neckstimate() requires a valid measurement name as second parameter. (received underBust)'
## 2.1.2 (2019-10-14)
### i18n
#### Fixed
- Fixed issue where symlinks were causing all languages to export English strings
## 2.1.1 (2019-10-13)
### utils
#### Fixed
- Fixed an issue with the formatMm method not adding units
## 2.1.0 (2019-10-06)
@ -3645,6 +3934,23 @@
- The pattern super constructor now sets a `config` property that holds the pattern configuration. This means that unlike before, there is no need to instantiate a pattern to access its config. You can just import the pattern, and it's config property will contain the pattern config.
### i18n
#### Added
- Added translations for Penelope, Waralee, and Simone
### utils
#### Added
- Added backend methods for administration
- Added the resendActivationEmail method to backend
#### Fixed
- Fixed an issue where optionDefault was not handling list options correctly
## 2.0.4 (2019-09-27)
@ -3663,6 +3969,12 @@
- [#106](https://github.com/freesewing/freesewing/issues/106): Fix incorrect hem allowance
### utils
#### Fixed
- Fix measurementDiffers to pass breasts parameter to neckstimate
## 2.0.2 (2019-09-06)
@ -3686,6 +3998,18 @@
- [#102](https://github.com/freesewing/freesewing.org/issues/102): Fixed 'Snippets not defined' error when drafting a seperate button placket
- [#103](https://github.com/freesewing/freesewing.org/issues/103): Fixed 'hemSa not defined' when drafting paperless Simon without seam allowance
### i18n
#### Added
- [#90](https://github.com/freesewing/freesewing/issues/90): Added missing option translations for Benjamin, Florent, Sandy, Shin, and Theo
### utils
#### Fixed
- Removed lingering debug statement in formatImperial
## 2.0.1 (2019-09-01)
@ -3704,6 +4028,12 @@
- [#86](https://github.com/freesewing/freesewing/issues/86): The `seatCircumference` measurement was missing, thus making it unavailable on the website
### utils
#### Added
- The `measurementDiffers` method is new.
## 2.0.0 (2019-08-25)
@ -3877,6 +4207,12 @@
### core
#### Added
- Initial release
### i18n
#### Added
- Initial release
@ -3893,4 +4229,10 @@
- Initial release
### utils
#### Added
- Initial release

View file

@ -24,11 +24,6 @@
><img src="https://img.shields.io/badge/all_contributors-131-pink.svg"
alt="All Contributors"/>
</a></p><p align='center'><a
href="https://twitter.com/freesewing_org"
title="Follow @freesewing_org on Twitter"
><img src="https://img.shields.io/badge/%F3%A0%80%A0-Follow%20us-blue.svg?logo=twitter&logoColor=white&logoWidth=15"
alt="Follow @freesewing_org on Twitter"/>
</a><a
href="https://discord.freesewing.org"
title="Chat with us on Discord"
><img src="https://img.shields.io/discord/698854858052075530?label=Chat%20on%20Discord"
@ -38,11 +33,6 @@
title="Become a FreeSewing Patron"
><img src="https://img.shields.io/badge/%F3%A0%80%A0-Support%20us-blueviolet.svg?logo=cash-app&logoColor=white&logoWidth=15"
alt="Become a FreeSewing Patron"/>
</a><a
href="https://instagram.com/freesewing_org"
title="Follow @freesewing_org on Twitter"
><img src="https://img.shields.io/badge/%F3%A0%80%A0-Follow%20us-E4405F.svg?logo=instagram&logoColor=white&logoWidth=15"
alt="Follow @freesewing_org on Twitter"/>
</a></p>
# FreeSewing
@ -54,7 +44,7 @@
> FreeSewing is an open source project maintained by Joost De Cock and financially supported by the FreeSewing patrons.
>
> If you feel FreeSewing is worthwhile, and you can spend a few coins without
hardship, then you should [join us and become a patron](https://freesewing.org/community/join).
hardship, then you should [join us and become a patron](https://freesewing.eu/patrons/join).
## What am I looking at? 🤔
@ -64,7 +54,7 @@ This repository is the FreeSewing *monorepo* holding all FreeSewing's websites,
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
If you're a maker, checkout [freesewing.eu](https://freesewing.eu/) 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/).
@ -76,7 +66,7 @@ functionality of the platform.
If you have NodeJS installed, you can try it right now by running:
```bash
npx @freesewing/new-design
npx @freesewing/studio
```
Getting started guides are available for:
@ -92,48 +82,46 @@ show you how to create your first parametric design.
To get started with FreeSewing, you can spin up our development environment with:
```bash
npx @freesewing/new-design
npx @freesewing/studio
```
To work with FreeSewing's monorepo, you'll need [NodeJS v18](https://nodejs.org), [lerna](https://lerna.js.org/) and [yarn](https://yarnpkg.com/) on your system.
Once you have those, clone (or fork) this repo and run `yarn kickstart`:
To work with FreeSewing's monorepo, you'll need [NodeJS v20](https://nodejs.org) and [lerna](https://lerna.js.org/) on your system.
Once you have those, clone (or fork) this repo and run `npm run kickstart`:
```bash
git clone git@github.com:freesewing/freesewing.git
git clone git@codeberg.org:freesewing/freesewing.git
cd freesewing
yarn kickstart
npm run kickstart
```
## Links 👩‍💻
**Official channels**
- 🪡 Makers website: [FreeSewing.org](https://freesewing.org)
- 🪡 Makers website: [FreeSewing.eu](https://freesewing.eu)
- 💻 Developers website: [FreeSewing.dev](https://freesewing.dev)
**Social media**
- 📷 Instagram: [@freesewing_org](https://instagram.com/freesewing_org)
- 🐘 Mastodon: [freesewing.social](https://freesewing.social/)
- 🐘 Mastodon: [@freesewing](https://freesewing.social/@freesewing) on [FreeSewing.social](https://freesewing.social/)
- 🐘 Mastodon: [@joost](https://freesewing.social/@joost) on [FreeSewing.social](https://freesewing.social/)
**Places the FreeSewing community hangs out**
- 💬 [Forum](https://forum.freesewing.eu/)
- 💬 [Discord](https://discord.freesewing.org/)
- 💬 [Facebook](https://www.facebook.com/groups/627769821272714/)
- 💬 [Reddit](https://www.reddit.com/r/freesewing/)
## Where to get help 🤯
Check our [support page](https://freesewing.org/support), or use
the [Issues](https://github.com/freesewing/freesewing/issues) &
[Discussions](https://github.com/freesewing/freesewing/discussions) on
[GitHub](https://github.com/freesewing/freesewing).
For [Support](https://freesewing.eu/support), please use the [forum](https://forum.freesewing.eu).
## License: MIT 🤓
© [Joost De Cock](https://github.com/joostdecock).
See [the license file](https://github.com/freesewing/freesewing/blob/develop/LICENSE) for details.
## Contributors ✨
Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 105 KiB

View file

@ -1,80 +0,0 @@
/*
* A list of (documentation) authors.
* The ID is the (future v3) FreeSewing user ID (zero for now)
* The name is what we'll use as display name
*/
export const authors = {
/*
* For these we know their FreeSewing ID and they are ordered by that ID
* Which means new users/contributors will typically go at the bottom
*/
// The dinosaurs
joostdecock: { id: 1, name: 'Joost De Cock' },
mocked: { id: 8, name: 'Unknown (mocked in dev)' },
'Prof. dr. Sorcha Ní Dhubhghaill': { id: 9, name: 'Prof. dr. Sorcha Ní Dhubhghaill' },
woutervdub: { id: 132, name: 'Wouter van Wageningen' },
tangerineshark: { id: 13050, name: 'tangerineshark' },
Zee: { id: 13460, name: 'Zee' },
Natalia: { id: 19867, name: 'Natalia Sayang' },
// The old guard
'Sanne Kalkman': { id: 20343, name: 'Sanne Kalkman' },
bobgeorgethe3rd: { id: 20650, name: 'bobgeorgethe3rd' },
Tríona: { id: 22104, name: 'Tríona' },
starfetch: { id: 22708, name: 'starfetch' },
'Morgan Frost': { id: 23957, name: 'Morgan Frost' },
jackseye: { id: 25383, name: 'jackseye' },
'Nick Dower': { id: 26126, name: 'Nick Dower' },
jgfichte: { id: 26295, name: 'jgfichte' },
'anna-puk': { id: 26981, name: 'Anna Puk' },
'Enoch Riese': { id: 28119, name: 'Enoch Riese' },
benjamesben: { id: 28838, name: 'Benjamin' },
'Joe Schofield': { id: 28809, name: 'Joe Schofield' },
'Vili Sinervä': { id: 31336, name: 'Vili Sinervä' },
Thrunic: { id: 33070, name: 'Thrunic' },
// The new faces
'Paula Vidas': { id: 64919, name: 'Paula Vidas' },
'Jonathan Haas': { id: 71843, name: 'Jonathan Haas' },
/*
* For the folowwing authors, we don't have their FreeSewing ID
* so if they surface, we should try to get it.
* Then again, these are based on git contributions, so it's
* entirely possible that they don't have an account.
* They are all linked to the anonymous user (id 8)
*/
'Annie Kao': { id: 8, name: 'Annie Kao' },
Bart: { id: 8, name: 'Bart' },
'James Bradbury': { id: 8, name: 'James Bradbury' },
'Glenn Matthews': { id: 8, name: 'Glenn Matthews' },
'Raphael Sizemore': { id: 8, name: 'Raphael Sizemore' },
mergerg: { id: 9, name: 'mergerg' },
'Darigov Research': { id: 8, name: 'Darigov Research' },
'Jeroen Hoek': { id: 8, name: 'Jeroen Hoek' },
chri5b: { id: 8, name: 'chri5b' },
'Ivo Bek': { id: 8, name: 'Ivo Bek' },
bijay_d: { id: 8, name: 'bijay_d' },
}
/*
* Maps git commiter name to author for those cases where the
* name in the authors table is different
*/
export const gitToAuthor = {
'Joost De Cock': 'joostdecock',
'Benjamin F': 'benjamesben',
'Benjamin Fan': 'benjamesben',
SeaZeeZee: 'Zee',
'Wouter van Wageningen': 'woutervdub',
'bobgeorgethe3rd@googlemail.com': 'bobgeorgethe3rd',
'70777269+tangerineshark@users.noreply.github.com': 'tangerineshark',
'thijs.assies@gmail.com': 'MA-TATAS',
'Natalia Sayang': 'Natalia',
'109869956+BenJamesBen@users.noreply.github.com': 'benjamesben',
'vili.m.sinerva@gmail.com': 'Vili Sinervä',
'bekivo@gmail.com': 'Ivo Bek',
'paulavidas@gmail.com': 'Paula Vidas',
'104308146+KaerMorhan@users.noreply.github.com': 'Morgan Frost',
}

View file

@ -7,22 +7,14 @@ _all:
link: 'https://opensource.org/licenses/MIT'
img: 'https://img.shields.io/npm/l/{{{fullname}}}.svg?label=License'
alt: 'License: MIT'
deepscan:
link: 'https://deepscan.io/dashboard#view=project&tid=2114&pid=2993&bid=23256'
img: 'https://deepscan.io/api/teams/2114/projects/2993/branches/23256/badge/grade.svg'
alt: 'Code quality on DeepScan'
issues:
link: 'https://github.com/freesewing/freesewing/issues?q=is%3Aissue+is%3Aopen+label%3Apkg%3A{{name}}'
img: 'https://img.shields.io/github/issues/freesewing/freesewing/pkg:{{name}}.svg?label=Issues'
alt: 'Open issues tagged pkg:{{name}}'
contributors:
link: '#contributors-'
img: 'https://img.shields.io/badge/all_contributors-{{ name }}-pink.svg'
alt: 'All Contributors'
_social:
twitter:
link: 'https://twitter.com/freesewing_org'
img: 'https://img.shields.io/badge/%F3%A0%80%A0-Follow%20us-blue.svg?logo=twitter&logoColor=white&logoWidth=15'
forum:
link: 'https://forum.freesewing.org'
img: 'https://img.shields.io/badge/%F3%A0%80%A0-Forum-E4405F.svg?logo=discourse&logoColor=white&logoWidth=15'
alt: 'Follow @freesewing_org on Twitter'
discord:
link: 'https://chat.freesewing.org'
@ -32,7 +24,3 @@ _social:
link: 'https://freesewing.org/patrons/join'
img: 'https://img.shields.io/badge/%F3%A0%80%A0-Support%20us-blueviolet.svg?logo=cash-app&logoColor=white&logoWidth=15'
alt: 'Become a FreeSewing Patron'
instagram:
link: 'https://instagram.com/freesewing_org'
img: 'https://img.shields.io/badge/%F3%A0%80%A0-Follow%20us-E4405F.svg?logo=instagram&logoColor=white&logoWidth=15'
alt: 'Follow @freesewing_org on Twitter'

View file

@ -1,8 +1,32 @@
Unreleased:
Changed:
4.0.0:
date: 2024-04-01
Breaking:
core:
- FreeSewing new requires NodeJS 20 (or more recent)
- We removed all but English translations. We still support i18n in our core library and designs, but no longer provide translations
new-design:
- The `@freesewing/new-design` package is removed, use `@freesewing/studio` instead
Added:
collection:
- Added a new `@freesewing/collection` package that bundles all our designs
config:
- Added a new `@freesewing/config` package for shared configuration
core:
- The `Path.rotate()` method was added to the core API.
- The `Path.circleSegment()` method was added to the core API.
i18n:
- The `@freesewing/i18n` package holds translations in English for where they are needed
react:
- The `@freesewing/react` package holds shared components, hooks, and context for our React-based frontends
studio:
- Added `@freesewing/studio`, our new development environment
utils:
- Added a new `@freesewing/utils` package for shared utils
Changed:
brian:

View file

@ -13,6 +13,9 @@ _types:
dev:
'mocha': *mocha
'chai': *chai
#
# Designs
#
aaron:
peer:
'@freesewing/brian': *freesewing
@ -45,21 +48,6 @@ charlie:
peer:
'@freesewing/titan': *freesewing
'@freesewing/snapseries': *freesewing
core:
_:
'@freesewing/core-plugins': *freesewing
'bezier-js': '6.1.4'
'hooks': '0.3.2'
'lodash.get': &_get '4.4.2'
'lodash.set': &_set '4.3.2'
'lodash.unset': &_unset '4.5.2'
'lodash.clonedeep': '^4.5.0'
dev:
'eslint': &eslint '8.57.0'
'nyc': '17.1.0'
'mocha': *mocha
'chai': *chai
'sinon': &sinon '^18.0.0'
diana:
peer:
'@freesewing/brian': *freesewing
@ -89,15 +77,6 @@ lily:
peer:
'@freesewing/titan': *freesewing
'@freesewing/paco': *freesewing
new-design:
_:
'axios': &axios '1.7.2'
'chalk': '5.3.0'
'execa': '9.2.0'
'mustache': &mustache '4.2.0'
'ora': &ora '8.0.1'
'prompts': '2.4.2'
'recursive-readdir': '2.2.3'
noble:
peer:
'@freesewing/bella': *freesewing
@ -105,12 +84,6 @@ paco:
peer:
'@freesewing/titan': *freesewing
'@freesewing/snapseries': *freesewing
core-plugins:
dev:
'@freesewing/plugin-annotations': *freesewing
'@freesewing/plugin-mirror': *freesewing
'@freesewing/plugin-round': *freesewing
'@freesewing/plugin-sprinkle': *freesewing
plugintest:
peer:
'@freesewing/plugin-annotations': *freesewing
@ -124,24 +97,9 @@ plugintest:
'@freesewing/plugin-sprinkle': *freesewing
'@freesewing/plugin-svgattr': *freesewing
'@freesewing/plugin-theme': *freesewing
react-components:
_:
axios: *axios
html-react-parser: "^5.0.7"
nuqs: "^1.17.6"
react-markdown: "^9.0.1"
use-local-storage-state: "19.1.0"
use-session-storage-state: "^19.0.0"
peer:
react: "^18.2.0"
rehype-jargon:
_:
'unist-util-visit': &unist-util-visit '5.0.0'
'hast-util-from-html': '2.0.1'
rehype-highlight-lines:
_:
'unist-util-remove': '4.0.0'
sandy:
_:
'@freesewing/plugin-ringsector': *freesewing
peer:
'@freesewing/snapseries': *freesewing
shin:
@ -184,266 +142,139 @@ yuri:
'@freesewing/brian': *freesewing
'@freesewing/plugin-bust': *freesewing
# Sites go here
backend:
#
# Plugins
#
core-plugins:
_:
'@aws-sdk/client-sesv2': '3.592.0'
'@prisma/client': &prisma '5.15.0'
'bcryptjs': '2.4.3'
'cors': '2.8.5'
'dotenv': '16.4.5'
'express': '4.19.2'
'js-yaml': &jsyaml '4.1.0'
'lodash.get': *_get
'mustache': *mustache
'otplib': '12.0.1'
'passport': '0.7.0'
'passport-http': '0.3.0'
'passport-jwt': '4.0.1'
'pino': '9.2.0'
'qrcode': '1.5.3'
'swagger-ui-dist': '5.17.10'
'swagger-ui-express': '5.0.0'
'@freesewing/plugin-annotations': *freesewing
'@freesewing/plugin-measurements': *freesewing
'@freesewing/plugin-mirror': *freesewing
'@freesewing/plugin-round': *freesewing
'@freesewing/plugin-sprinkle': *freesewing
'@freesewing/plugin-bin-pack': *freesewing
#
# Packages
#
core:
_:
'@freesewing/core-plugins': *freesewing
'bezier-js': '6.1.4'
'hooks': '0.3.2'
'lodash.get': &_get '4.4.2'
'lodash.set': &_set '4.3.2'
'lodash.unset': &_unset '4.5.2'
'lodash.clonedeep': '^4.5.0'
dev:
'chai': *chai
'chai-http': '5.1.1'
'esbuild': '0.21.3'
'eslint': &eslint '8.57.0'
'nyc': '17.1.0'
'mocha': *mocha
'mocha-steps': '1.3.0'
'nodemon': '3.1.0'
'prisma': *prisma
dev:
'chai': *chai
'sinon': &sinon '^18.0.0'
collection:
_:
'@mdx-js/mdx': &mdx '^3.0.0'
'@mdx-js/react': *mdx
'@mdx-js/runtime': &mdxRuntime '2.0.0-next.9'
'@next/bundle-analyzer': &next '14.2.3'
'@tailwindcss/typography': &tailwindTypography '0.5.13'
'algoliasearch': &algoliasearch '4.23.3'
'daisyui': &daisyui '4.11.1'
'lodash.get': *_get
'lodash.orderby': &_orderby '4.6.0'
'lodash.set': *_set
'next': *next
'react': &react '18.3.1'
'react-copy-to-clipboard': &reactCopyToClipboard '5.1.0'
'react-dom': *react
'react-hotkeys-hook': &reactHotkeysHook '4.5.0'
'react-instantsearch-dom': &reactInstantsearchDom '6.40.4'
'react-instantsearch-hooks-web': &reactInstantsearchHooksWeb '6.47.3'
'react-swipeable': &reactSwipeable '7.0.1'
'react-timeago': &reactTimeago '7.2.0'
'rehype-autolink-headings': &rehypeAutolinkHeadings '7.1.0'
'rehype-highlight': &rehypeHighlight '7.0.0'
'rehype-sanitize': &rehypeSanitize '6.0.0'
'rehype-slug': &rehypeSlug '6.0.0'
'rehype-stringify': &rehypeStringify '10.0.1'
'remark': &remark 15.0.1
# see: https://github.com/npm/cli/issues/2610#issuecomment-1295371753
'remark-copy-linked-files': &remarkCopyLinkedFiles 'git+https://git@github.com/joostdecock/remark-copy-linked-files'
'remark-gfm': &remarkGfm '4.0.0'
'strip-markdown': &stripMarkdown 6.0.0
dev: &nextSiteDevDependencies
'autoprefixer': &autoprefixer '10.4.19'
'js-yaml': &jsYaml '4.1.0'
'postcss': &postcss '8.4.38'
'remark-extract-frontmatter': '3.2.0'
'remark-mdx-frontmatter': &mdxfrontmatter '5.0.0'
'tailwindcss': &tailwindcss '3.4.3'
'yaml-loader': '0.8.1'
lab:
# Designs
'@freesewing/aaron': *freesewing
'@freesewing/albert': *freesewing
'@freesewing/bee': *freesewing
'@freesewing/bella': *freesewing
'@freesewing/benjamin': *freesewing
'@freesewing/bent': *freesewing
'@freesewing/bibi': *freesewing
'@freesewing/bob': *freesewing
'@freesewing/bonny': *freesewing
'@freesewing/breanna': *freesewing
'@freesewing/brian': *freesewing
'@freesewing/bruce': *freesewing
'@freesewing/carlita': *freesewing
'@freesewing/carlton': *freesewing
'@freesewing/cathrin': *freesewing
'@freesewing/charlie': *freesewing
'@freesewing/cornelius': *freesewing
'@freesewing/diana': *freesewing
'@freesewing/florence': *freesewing
'@freesewing/florent': *freesewing
'@freesewing/gozer': *freesewing
'@freesewing/hi': *freesewing
'@freesewing/holmes': *freesewing
'@freesewing/hortensia': *freesewing
'@freesewing/huey': *freesewing
'@freesewing/hugo': *freesewing
'@freesewing/jaeger': *freesewing
'@freesewing/jane': *freesewing
'@freesewing/lily': *freesewing
'@freesewing/lucy': *freesewing
'@freesewing/lumina': *freesewing
'@freesewing/lumira': *freesewing
'@freesewing/lunetius': *freesewing
'@freesewing/noble': *freesewing
'@freesewing/octoplushy': *freesewing
'@freesewing/onyx': *freesewing
'@freesewing/opal': *freesewing
'@freesewing/otis': *freesewing
'@freesewing/paco': *freesewing
'@freesewing/penelope': *freesewing
'@freesewing/sandy': *freesewing
'@freesewing/shelly': *freesewing
'@freesewing/shin': *freesewing
'@freesewing/simon': *freesewing
'@freesewing/simone': *freesewing
'@freesewing/skully': *freesewing
'@freesewing/sven': *freesewing
'@freesewing/tamiko': *freesewing
'@freesewing/teagan': *freesewing
'@freesewing/tiberius': *freesewing
'@freesewing/titan': *freesewing
'@freesewing/trayvon': *freesewing
'@freesewing/tristan': *freesewing
'@freesewing/uma': *freesewing
'@freesewing/umbra': *freesewing
'@freesewing/wahid': *freesewing
'@freesewing/walburga': *freesewing
'@freesewing/waralee': *freesewing
'@freesewing/yuri': *freesewing
# Plugins
'@freesewing/plugin-bust': *freesewing
'@freesewing/plugin-flip': *freesewing
'@freesewing/core-plugins': *freesewing
# Other
'@freesewing/core': *freesewing
'@freesewing/snapseries': *freesewing
studio:
_:
'@mdx-js/mdx': *mdx
'@mdx-js/react': *mdx
'@mdx-js/runtime': *mdxRuntime
'@tailwindcss/typography': *tailwindTypography
'algoliasearch': *algoliasearch
'd3-dispatch': &d3dispatch '3.0.1'
'd3-drag': &d3drag '3.0.0'
'd3-selection': &d3selection '3.0.0'
'daisyui': *daisyui
'i18next': &i18next '23.11.5'
'lodash.get': *_get
'lodash.orderby': *_orderby
'lodash.set': *_set
'next': *next
'next-i18next': &nextI18next '15.3.0'
'ora': *ora
'react': *react
'react-copy-to-clipboard': *reactCopyToClipboard
'react-hotkeys-hook': *reactHotkeysHook
'react-i18next': &reactI18next '14.1.2'
'react-instantsearch-dom': *reactInstantsearchDom
'react-swipeable': *reactSwipeable
'react-timeago': *reactTimeago
'rehype-autolink-headings': *rehypeAutolinkHeadings
'rehype-highlight': *rehypeHighlight
'rehype-sanitize': *rehypeSanitize
'rehype-slug': *rehypeSlug
'rehype-stringify': *rehypeStringify
'remark-copy-linked-files': *remarkCopyLinkedFiles
'remark-gfm': *remarkGfm
'remark-mdx-frontmatter': *mdxfrontmatter
dev:
*nextSiteDevDependencies
org:
chalk: "^5.2.0"
execa: "^9.5.2"
glob: "^11.0.1"
ora: "^8.2.0"
prompts: "^2.4.2"
react:
_:
'@bugsnag/js': &bugsnag 7.23.0
'@bugsnag/plugin-react': 8.1.1
'@mdx-js/mdx': *mdx
'@mdx-js/react': *mdx
'@mdx-js/runtime': *mdxRuntime
"@tailwindcss/nesting": &twnesting "^0.0.0-insiders.565cd3e"
'@tailwindcss/typography': *tailwindTypography
'algoliasearch': *algoliasearch
'react-copy-to-clipboard': *reactCopyToClipboard
'daisyui': *daisyui
'echarts': &echarts 5.5.0
'echarts-for-react': &echartsReact 3.0.2
'jotai': &jotai '2.8.3'
'jotai-location': &jotai-location '0.5.5'
'lodash.get': *_get
'lodash.orderby': *_orderby
'lodash.set': *_set
'luxon': '3.5.0'
'next': *next
'next-i18next': *nextI18next
'ora': *ora
'react': *react
'react-dom': *react
'react-dropzone': &dropzone '14.2.3'
'react-hotkeys-hook': *reactHotkeysHook
"react-i18next": *reactI18next
'react-instantsearch-dom': *reactInstantsearchDom
'react-instantsearch-hooks-web': *reactInstantsearchHooksWeb
'react-swipeable': *reactSwipeable
'react-timeago': *reactTimeago
'react-zoom-pan-pinch': &zoompanpinch '3.4.4'
'rehype-autolink-headings': *rehypeAutolinkHeadings
'rehype-highlight': *rehypeHighlight
'rehype-sanitize': *rehypeSanitize
'rehype-slug': *rehypeSlug
'rehype-stringify': *rehypeStringify
'remark': *remark
'remark-copy-linked-files': *remarkCopyLinkedFiles
'remark-gfm': *remarkGfm
'remark-mdx-frontmatter': *mdxfrontmatter
'strip-markdown': *stripMarkdown
'use-local-storage-state': &use-local-storage-state 19.2.0
'yaml-loader': 0.8.1
dev: *nextSiteDevDependencies
shared:
"@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"
peer:
react: &react "^19.0.0"
utils:
_:
'@next/mdx': *next
'@resvg/resvg-js': '2.6.2'
'@tailwindcss/typography': *tailwindTypography
'Buffer': '0.0.0'
'd3-dispatch': '3.0.1'
'd3-drag': '3.0.0'
'd3-selection': '3.0.0'
'daisyui': *daisyui
'feed': '4.2.2'
'file-saver': &filesaver '2.0.5'
'front-matter': '4.0.2'
'highlight.js': '11.9.0'
'github-slugger': '2.0.0'
'jotai': *jotai
'jotai-location': *jotai-location
'lodash.clonedeep': '4.5.0'
'lodash.debounce': &_debounce '^4.0.8'
'lodash.orderby': *_orderby
'lodash.unset': *_unset
'lodash.get': *_get
'mdast-util-toc': '7.0.1'
'mermaid': '11.3.0'
'ora': *ora
'pdfkit': &pdfkit '0.15.0'
'postcss-for': &postcssfor '2.1.1'
'react': *react
'react-dom': *react
'react-timeago': *reactTimeago
'react-zoom-pan-pinch': *zoompanpinch
'rehype-autolink-headings': *rehypeAutolinkHeadings
'rehype-highlight': *rehypeHighlight
'remark-frontmatter': &remarkfrontmatter '5.0.0'
'remark-mdx-frontmatter': *mdxfrontmatter
"remark-smartypants": &smartypants "3.0.2"
"slugify": &slugify "^1.6.6"
# see: https://github.com/npm/cli/issues/2610#issuecomment-1295371753
'svg-to-pdfkit': &svgtopdfkit 'https://git@github.com/eriese/SVG-to-PDFKit'
'tlds': &rlds '1.252.0'
'to-vfile': '8.0.0'
'unist-util-visit': *unist-util-visit
'use-local-storage-state': *use-local-storage-state
'web-worker': &webworker '1.3.0'
dev:
'recursive-readdir': '^2.2.3'
'html-to-text': '^9.0.5'
sde:
_:
"@freesewing/core": *freesewing
"@freesewing/core-plugins": *freesewing
"@freesewing/brian": *freesewing
"@freesewing/bent": *freesewing
"@freesewing/titan": *freesewing
"@freesewing/bella": *freesewing
"@freesewing/breanna": *freesewing
"@freesewing/plugin-bust": *freesewing
"@freesewing/plugin-timing": *freesewing
"@freesewing/plugin-theme": *freesewing
"@freesewing/plugin-i18n": *freesewing
"@freesewing/snapseries": *freesewing
"@freesewing/react-components": *freesewing
'@mdx-js/mdx': *mdx
'@mdx-js/react': *mdx
'@mdx-js/runtime': *mdxRuntime
"@tailwindcss/nesting": *twnesting
'@tailwindcss/typography': *tailwindTypography
'autoprefixer': *autoprefixer
'axios': *axios
'd3-dispatch': *d3dispatch
'd3-drag': *d3drag
'd3-selection': *d3selection
'daisyui': *daisyui
'echarts': *echarts
'echarts-for-react': *echartsReact
'file-saver': *filesaver
'i18next': *i18next
'jotai': *jotai
'jotai-location': *jotai-location
'js-yaml': *jsyaml
'lodash.debounce': *_debounce
'lodash.get': *_get
'lodash.orderby': *_orderby
'lodash.set': *_set
'mustache': *mustache
"next": *next
'next-i18next': *nextI18next
'pdfkit': *pdfkit
'postcss-for': *postcssfor
"react": *react
"react-dom": *react
'react-copy-to-clipboard': *reactCopyToClipboard
'react-hotkeys-hook': *reactHotkeysHook
"react-i18next": *reactI18next
'react-dropzone': *dropzone
'react-swipeable': *reactSwipeable
'react-timeago': *reactTimeago
'react-zoom-pan-pinch': *zoompanpinch
'remark-gfm': *remarkGfm
'remark-frontmatter': *remarkfrontmatter
'remark-mdx-frontmatter': *mdxfrontmatter
'remark-smartypants': *smartypants
"slugify": *slugify
'svg-to-pdfkit': *svgtopdfkit
'tailwindcss': *tailwindcss
'tlds': *rlds
'use-local-storage-state': *use-local-storage-state
'web-worker': *webworker
lodash: "^4.17.21"
tlds: "^1.255.0"

View file

@ -1,19 +1,11 @@
noNamespace:
- rehype-jargon
- rehype-highlight-lines
customBuild:
- i18n
- new-design
- prettier-config
- core-plugins
- react-components
- rehype-jargon
- rehype-highlight-lines
skipTests:
- theo
packageJson:
backend:
name: backend.freesewing.org
name: backend.freesewing.eu
bee:
author: bobgeorgethe3rd (https://github.com/bobgeorgethe3rd)
benjamin:
@ -30,8 +22,6 @@ packageJson:
author: woutervdub (https://github.com/woutervdub)
holmes:
author: AlfaLyr (https://github.com/alfalyr)
i18n:
private: true
jane:
author: SeaZeeZee (https://github.com/SeaZeeZee)
lab:
@ -44,19 +34,16 @@ packageJson:
author: Starfetch (https://github.com/starfetch)
magde:
author: clegganator259 (https://github.com/clegganator259)
new-design:
studio:
exports: '!'
bin:
new-design: './index.mjs'
studio: './index.mjs'
files:
- README.md
- package.json
- lib/**/*
- shared/**/*
- templates/**/*
- index.mjs
- package.json
- data.mjs
- "lib/"
- "utils/"
- "index.mjs"
- "template/"
- "template/designs/.base/"
module: '!'
noble:
author: woutervdub (https://github.com/woutervdub)
@ -67,26 +54,99 @@ packageJson:
prettier-config:
type: 'module'
exports: { .: './index.json' }
scripts: { build: 'echo "prettier-config: No build required" && exit 0' }
keywords:
- prettier
files:
- index.json
- package.json
react-components:
react:
exports:
".":
"internal": "./src/index.mjs"
"default": "./dist/index.mjs"
# Legacy
"./linedrawings": "./src/linedrawings/index.mjs"
"./pattern": "./src/pattern/index.mjs"
"./xray": "./src/pattern-xray/index.mjs"
# Components
"./components/Account": "./components/Account/index.mjs"
"./components/Admin": "./components/Admin/index.mjs"
"./components/Breadcrumbs": "./components/Breadcrumbs/index.mjs"
"./components/Button": "./components/Button/index.mjs"
"./components/Collection": "./components/Collection/index.mjs"
"./components/Control": "./components/Control/index.mjs"
"./components/CopyToClipboardButton": "./components/CopyToClipboardButton/index.mjs"
"./components/Design": "./components/Design/index.mjs"
"./components/DiffViewer": "./components/DiffViewer/index.mjs"
"./components/Docusaurus": "./components/Docusaurus/index.mjs"
"./components/Echart": "./components/Echart/index.mjs"
"./components/Editor": "./components/Editor/index.mjs"
"./components/Heading": "./components/Heading/index.mjs"
"./components/Highlight": "./components/Highlight/index.mjs"
"./components/Icon": "./components/Icon/index.mjs"
"./components/Input": "./components/Input/index.mjs"
"./components/Json": "./components/Json/index.mjs"
"./components/KeyVal": "./components/KeyVal/index.mjs"
"./components/Layout": "./components/Layout/index.mjs"
"./components/LineDrawing": "./components/LineDrawing/index.mjs"
"./components/Link": "./components/Link/index.mjs"
"./components/Logo": "./components/Logo/index.mjs"
"./components/Markdown": "./components/Markdown/index.mjs"
"./components/Mini": "./components/Mini/index.mjs"
"./components/Modal": "./components/Modal/index.mjs"
"./components/New": "./components/New/index.mjs"
"./components/Newsletter": "./components/Newsletter/index.mjs"
"./components/Null": "./components/Null/index.mjs"
"./components/Number": "./components/Number/index.mjs"
"./components/Pattern": "./components/Pattern/index.mjs"
"./components/Patrons": "./components/Patrons/index.mjs"
"./components/Popout": "./components/Popout/index.mjs"
"./components/Profile": "./components/Profile/index.mjs"
"./components/Role": "./components/Role/index.mjs"
"./components/SignIn": "./components/SignIn/index.mjs"
"./components/SignUp": "./components/SignUp/index.mjs"
"./components/Spinner": "./components/Spinner/index.mjs"
"./components/Stats": "./components/Stats/index.mjs"
"./components/Tab": "./components/Tab/index.mjs"
"./components/Table": "./components/Table/index.mjs"
"./components/Time": "./components/Time/index.mjs"
"./components/Uuid": "./components/Uuid/index.mjs"
"./components/Ux": "./components/Ux/index.mjs"
"./components/Yaml": "./components/Yaml/index.mjs"
"./components/Xray": "./components/Xray/index.mjs"
# Context
"./context/LoadingStatus": "./context/LoadingStatus/index.mjs"
"./context/Modal": "./context/Modal/index.mjs"
# Hooks
"./hooks/useAccount": "./hooks/useAccount/index.mjs"
"./hooks/useBackend": "./hooks/useBackend/index.mjs"
"./hooks/useControl": "./hooks/useControl/index.mjs"
"./hooks/useDesign": "./hooks/useDesign/index.mjs"
"./hooks/useDesignTranslation": "./hooks/useDesignTranslation/index.mjs"
"./hooks/useSelection": "./hooks/useSelection/index.mjs"
"./hooks/useStateObject": "./hooks/useStateObject/index.mjs"
# Lib
"./lib/RestClient": "./lib/RestClient/index.mjs"
"./lib/logoPath": "./components/Logo/path.mjs"
files:
- "components/"
- "context/"
- "hooks/"
- "lib/"
- "README.md"
scripts:
lint: "eslint 'components/**/*.mjs' 'hooks/**/*.mjs' 'lib/**/*.mjs' 'context/**/*.mjs' 'config/**/*.mjs'"
prettier: "npx prettier --write 'components/**/*.mjs' 'hooks/**/*.mjs' 'lib/**/*.mjs' 'context/**/*.mjs' 'config/**/*.mjs'"
rehype-hightlight-lines:
private: true
sandy:
author: AlfaLyr (https://github.com/alfalyr)
shelly:
author: Thrunic (https://github.com/Thrunic)
utils:
exports: '!'
module: "./src/index.mjs"
onyx:
author: Thrunic (https://github.com/Thrunic)
opal:

View file

@ -1 +1 @@
["en", "fr", "es", "de", "nl", "uk"]
["en"]

View file

@ -1,4 +0,0 @@
module.exports = {
models: {},
only: {},
}

View file

@ -1,12 +1,6 @@
_:
build: &build 'node build.mjs'
'build:all': 'yarn build'
clean: 'rimraf dist'
mbuild: &mbuild 'NO_MINIFY=1 node build.mjs'
symlink: 'mkdir -p ./node_modules/@freesewing && cd ./node_modules/@freesewing && ln -s -f ../../../* . && cd -'
test: 'echo "{{name}}: No tests configured. Perhaps you could write some?" && exit 0'
vbuild: &vbuild 'VERBOSE=1 node build.mjs'
lab: 'cd ../../sites/lab && yarn start'
tips: 'node ../../scripts/help.mjs'
lint: "npx eslint 'src/**' 'tests/*.mjs'"
_types:
@ -27,89 +21,38 @@ core:
jsdoc: 'jsdoc -c jsdoc.json -r src'
models:
test: 'npx mocha tests/*.test.mjs'
new-design:
i18n-only: 'SITE="new-design/shared" node --conditions=internal ../../sites/shared/prebuild/i18n-only.mjs'
wbuild: '!'
studio:
lint: "npx eslint 'lib/*.mjs'"
mbuild: '!'
prebuild: 'node --conditions=internal ./prebuild.mjs'
test: '!'
testci: '!'
vbuild: '!'
rehype-highlight-lines:
build: '!'
mbuild: '!'
vbuild: '!'
'build:all': '!'
lint: "npx eslint 'src/*.mjs'"
rehype-jargon:
lint: "npx eslint 'src/*.mjs'"
snapseries:
lint: "npx eslint 'src/*.mjs'"
react-components:
react:
lint: "eslint 'src/**/*.mjs'"
# Sites go here
backend:
build: 'node build.mjs'
clean: 'rimraf dist'
dev: 'nodemon src/index.mjs'
initdb: 'npx prisma db push'
mbuild: *mbuild
newdb: 'node ./scripts/newdb.mjs'
prettier: "npx prettier --write 'src/*.mjs' 'tests/*.mjs'"
rmdb: 'node ./scripts/rmdb.mjs'
test: 'npx mocha --require mocha-steps tests/index.mjs'
vbuild: *vbuild
dev:
build: &nextBuild 'next build'
cibuild: 'yarn build && node scripts/algolia.mjs'
clean: &nextClean 'rimraf prebuild/* && rimraf public/locales/*/* && rimraf public/feeds/* && rimraf ../shared/prebuild/data/*'
dev: &nextDev 'next dev -p 8000'
develop: *nextDev
i18n: "SITE=dev node --conditions=internal ../shared/prebuild/i18n-only.mjs"
lint: &nextLint 'next lint'
prebuild: &sitePrebuild 'node --conditions=internal --experimental-json-modules ./prebuild.mjs'
serve: "pm2 start npm --name 'dev' -- run start"
start: &nextStart 'yarn prebuild && yarn dev'
dev: &docusaurus
build: 'docusaurus build'
dev: 'docusaurus start'
lint: 'docusuaurus lint'
prebuild: 'node --conditions=internal --experimental-json-modules ./prebuild.mjs'
start: 'docusaurus start'
email:
build: 'maizzle build production'
dev: 'maizzle serve'
lab:
build: *nextBuild
cibuild: 'yarn build'
dev: *nextDev
develop: *nextDev
i18n: 'SITE=lab node --conditions=internal ../shared/prebuild/i18n-only.mjs'
lint: *nextLint
prebuild: *sitePrebuild
start: 'cd ../org && yarn prebuild && cd - && yarn prebuild && yarn dev'
org: *docusaurus
sde:
build: *nextBuild
cibuild: 'yarn build'
dev: *nextDev
develop: *nextDev
i18n: 'SITE=sde node --conditions=internal ../shared/prebuild/i18n-only.mjs'
lint: *nextLint
prebuild: *sitePrebuild
start: *nextStart
org:
build: *nextBuild
cibuild: 'yarn build'
clean: *nextClean
dev: *nextDev
develop: *nextDev
i18n: 'SITE=org node --conditions=internal ../shared/prebuild/i18n-only.mjs'
lint: *nextLint
prebuild: *sitePrebuild
start: *nextStart
sanity:
dev: 'sanity dev'
start: 'sanity start'
build: 'sanity build -y'

View file

@ -1,10 +0,0 @@
export const social = {
YouTube: 'https://www.youtube.com/@freesewing',
Discord: 'https://discord.freesewing.org/',
Instagram: 'https://instagram.com/freesewing_org',
Facebook: 'https://www.facebook.com/groups/627769821272714/',
GitHub: 'https://github.com/freesewing',
Reddit: 'https://www.reddit.com/r/freesewing/',
Mastodon: 'https://freesewing.social/@freesewing',
Bluesky: 'https://bsky.app/profile/freesewing.org',
}

View file

@ -4,8 +4,6 @@
"description": "A FreeSewing pattern for a A-shirt or tank top",
"design": "Joost De Cock",
"difficulty": 2,
"lab": true,
"org": true,
"tags": [
"tops",
"underwear"
@ -13,8 +11,8 @@
"techniques": [
"hem",
"stretch",
"knitBinding",
"curvedSeam"
"knit-binding",
"curved-seam"
]
},
"albert": {
@ -22,15 +20,13 @@
"description": "A FreeSewing pattern for an apron",
"design": "Wouter Van Wageningen",
"difficulty": 2,
"lab": true,
"org": true,
"tags": [
"accessories"
],
"techniques": [
"hem",
"knitBinding",
"curvedSeam",
"knit-binding",
"curved-seam",
"pocket"
]
},
@ -39,8 +35,6 @@
"description": "A FreeSewing pattern for a bikini top",
"design": "PrudenceRabbit",
"difficulty": 3,
"lab": true,
"org": true,
"tags": [
"tops",
"swimwear"
@ -48,7 +42,7 @@
"techniques": [
"hem",
"stretch",
"curvedSeam",
"curved-seam",
"precision"
]
},
@ -60,8 +54,6 @@
"Joost De Cock"
],
"difficulty": 3,
"lab": true,
"org": true,
"tags": [
"blocks",
"tops"
@ -76,8 +68,6 @@
"description": "A FreeSewing pattern for a bow tie",
"design": "Wouter Van Wageningen",
"difficulty": 3,
"lab": true,
"org": true,
"tags": [
"accessories"
],
@ -91,16 +81,14 @@
"description": "A FreeSewing pattern for a menswear body block with a two-part sleeve",
"design": "Joost De Cock",
"difficulty": 3,
"lab": true,
"org": true,
"tags": [
"blocks",
"tops"
],
"techniques": [
"hem",
"curvedSeam",
"setSleeve"
"curved-seam",
"set-sleeve"
]
},
"bibi": {
@ -108,16 +96,14 @@
"description": "A FreeSewing pattern for a knit top body block",
"design": "Jonathan Haas",
"difficulty": 2,
"lab": true,
"org": true,
"tags": [
"blocks",
"tops"
],
"techniques": [
"curvedSeam",
"curved-seam",
"hem",
"flatSleeve"
"flat-sleeve"
]
},
"bob": {
@ -125,25 +111,29 @@
"description": "A FreeSewing pattern for a bib",
"design": "Joost De Cock",
"difficulty": 3,
"lab": true,
"org": true,
"tags": [
"accessories",
"infants"
],
"techniques": [
"biasTape",
"curvedSeam",
"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,
"lab": true,
"org": true,
"tags": [
"blocks",
"tops"
@ -158,15 +148,13 @@
"description": "A FreeSewing pattern for a basic body block for menswear",
"design": "Joost De Cock",
"difficulty": 3,
"lab": true,
"org": true,
"tags": [
"blocks",
"tops"
],
"techniques": [
"block",
"flatSleeve"
"flat-sleeve"
]
},
"bruce": {
@ -174,8 +162,6 @@
"description": "A FreeSewing pattern for boxer briefs",
"design": "Joost De Cock",
"difficulty": 3,
"lab": true,
"org": true,
"tags": [
"bottoms",
"underwear"
@ -183,7 +169,7 @@
"techniques": [
"stretch",
"hem",
"curvedSeam",
"curved-seam",
"elastic"
]
},
@ -195,8 +181,6 @@
"Joost De Cock"
],
"difficulty": 5,
"lab": true,
"org": true,
"tags": [
"tops",
"coats"
@ -204,12 +188,12 @@
"techniques": [
"hem",
"pocket",
"curvedSeam",
"curved-seam",
"precision",
"setSleeve",
"weltPocket",
"set-sleeve",
"welt-pocket",
"lining",
"princessSeam",
"princess-seam",
"interfacing",
"button"
]
@ -222,8 +206,6 @@
"Joost De Cock"
],
"difficulty": 5,
"lab": true,
"org": true,
"tags": [
"tops",
"coats"
@ -231,10 +213,10 @@
"techniques": [
"hem",
"pocket",
"curvedSeam",
"curved-seam",
"precision",
"setSleeve",
"weltPocket",
"set-sleeve",
"welt-pocket",
"lining",
"interfacing",
"button"
@ -248,8 +230,6 @@
"Joost De Cock"
],
"difficulty": 4,
"lab": true,
"org": true,
"tags": [
"tops",
"underwear"
@ -257,7 +237,7 @@
"techniques": [
"boning",
"precision",
"curvedSeam",
"curved-seam",
"interfacing"
]
},
@ -266,22 +246,20 @@
"description": "A FreeSewing pattern for chino trousers",
"design": "Joost De Cock",
"difficulty": 3,
"lab": true,
"org": true,
"tags": [
"bottoms",
"trousers"
],
"techniques": [
"weltPocket",
"curvedSeam",
"welt-pocket",
"curved-seam",
"interfacing",
"fly",
"zipper",
"button",
"dart",
"hem",
"seamPocket"
"seam-pocket"
]
},
"cornelius": {
@ -289,14 +267,12 @@
"description": "A FreeSewing pattern for cycling breeches, based on the Keystone drafting system",
"design": "Wouter Van Wageningen",
"difficulty": 3,
"lab": true,
"org": true,
"tags": [
"bottoms",
"trousers"
],
"techniques": [
"curvedSeam",
"curved-seam",
"fly",
"zipper",
"button",
@ -308,35 +284,29 @@
"description": "A FreeSewing pattern for a top with a draped neck",
"design": "Erica Alcusa Sáez",
"difficulty": 2,
"lab": true,
"org": true,
"tags": [
"tops"
],
"techniques": [
"curvedSeam",
"flatSleeve",
"curved-seam",
"flat-sleeve",
"hem"
]
},
"examples": {
"code": "Joost De Cock",
"description": "A FreeSewing pattern holding examples for our documentation",
"lab": false,
"org": false
"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,
"lab": true,
"org": true,
"tags": [
"accessories"
],
"techniques": [
"curvedSeam"
"curved-seam"
]
},
"florent": {
@ -347,14 +317,12 @@
"description": "A FreeSewing pattern for a flat cap",
"design": "Quentin Felix",
"difficulty": 3,
"lab": true,
"org": true,
"tags": [
"accessories",
"hats"
],
"techniques": [
"curvedSeam"
"curved-seam"
]
},
"gozer": {
@ -362,8 +330,6 @@
"description": "A FreeSewing pattern for a ghost costume",
"design": "Wouter Van Wageningen",
"difficulty": 1,
"lab": true,
"org": true,
"tags": [
"costumes"
],
@ -376,14 +342,12 @@
"description": "A FreeSewing pattern for a shark plush toy",
"design": "Wouter Van Wageningen",
"difficulty": 4,
"lab": true,
"org": true,
"tags": [
"accessories",
"toys"
],
"techniques": [
"curvedSeam",
"curved-seam",
"dart"
]
},
@ -395,14 +359,12 @@
"description": "A FreeSewing pattern for a Sherlock Holmes hat",
"design": "Erica Alcusa Sáez",
"difficulty": 3,
"lab": true,
"org": true,
"tags": [
"accessories",
"hats"
],
"techniques": [
"curvedSeam",
"curved-seam",
"lining"
]
},
@ -414,14 +376,12 @@
"Wouter Van Wageningen"
],
"difficulty": 3,
"lab": true,
"org": true,
"tags": [
"accessories",
"bags"
],
"techniques": [
"curvedSeam",
"curved-seam",
"precision",
"lining",
"zipper"
@ -432,17 +392,15 @@
"description": "A FreeSewing pattern for a zip-up hoodie",
"design": "Joost De Cock",
"difficulty": 3,
"lab": true,
"org": true,
"tags": [
"tops"
],
"techniques": [
"curvedSeam",
"curved-seam",
"pocket",
"zipper",
"ribbing",
"flatSleeve"
"flat-sleeve"
]
},
"hugo": {
@ -450,16 +408,14 @@
"description": "A FreeSewing pattern for a hooded jumper with raglan sleeves",
"design": "Joost De Cock",
"difficulty": 3,
"lab": true,
"org": true,
"tags": [
"tops"
],
"techniques": [
"curvedSeam",
"curved-seam",
"pocket",
"ribbing",
"raglanSleeve"
"raglan-sleeve"
]
},
"jaeger": {
@ -467,8 +423,6 @@
"description": "A FreeSewing pattern for a sport coat style jacket",
"design": "Joost De Cock",
"difficulty": 5,
"lab": true,
"org": true,
"tags": [
"tops",
"coats"
@ -476,10 +430,10 @@
"techniques": [
"hem",
"pocket",
"curvedSeam",
"curved-seam",
"precision",
"setSleeve",
"weltPocket",
"set-sleeve",
"welt-pocket",
"lining",
"interfacing",
"button"
@ -490,8 +444,6 @@
"description": "A FreeSewing pattern for a 1790s shift",
"design": "SeaZeeZee",
"difficulty": 2,
"lab": true,
"org": true,
"tags": [
"tops",
"historical",
@ -503,24 +455,20 @@
},
"legend": {
"code": "Joost De Cock",
"description": "A FreeSewing pattern to document pattern notation",
"lab": false,
"org": false
"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,
"lab": true,
"org": true,
"tags": [
"accessories",
"historical",
"bags"
],
"techniques": [
"curvedSeam"
"curved-seam"
]
},
"lumina": {
@ -528,15 +476,13 @@
"description": "A FreeSewing pattern for leggings",
"design": "Wouter Van Wageningen",
"difficulty": 3,
"lab": true,
"org": true,
"tags": [
"bottoms",
"trousers"
],
"techniques": [
"stretch",
"curvedSeam",
"curved-seam",
"elastic"
]
},
@ -545,15 +491,13 @@
"description": "A FreeSewing pattern for leggings",
"design": "Wouter Van Wageningen",
"difficulty": 3,
"lab": true,
"org": true,
"tags": [
"bottoms",
"trousers"
],
"techniques": [
"stretch",
"curvedSeam",
"curved-seam",
"elastic"
]
},
@ -562,8 +506,6 @@
"description": "A FreeSewing pattern for a lacerna, a historical Roman cloak",
"design": "Rika Tamaike",
"difficulty": 1,
"lab": true,
"org": true,
"tags": [
"tops",
"coats",
@ -578,8 +520,6 @@
"description": "A FreeSewing pattern for a bike messenger bag",
"design": "clegganator259",
"difficulty": 3,
"lab": true,
"org": false,
"tags": [
"accessories",
"bags"
@ -591,17 +531,15 @@
"description": "A FreeSewing pattern for a princess seam bodice block",
"design": "Wouter Van Wageningen",
"difficulty": 3,
"lab": true,
"org": true,
"tags": [
"blocks",
"tops"
],
"techniques": [
"block",
"curvedSeam",
"curved-seam",
"precision",
"princessSeam"
"princess-seam"
]
},
"octoplushy": {
@ -609,14 +547,12 @@
"description": "A FreeSewing pattern for an octopus plushy toy",
"design": "Wouter Van Wageningen",
"difficulty": 4,
"lab": true,
"org": true,
"tags": [
"accessories",
"toys"
],
"techniques": [
"curvedSeam",
"curved-seam",
"precision"
]
},
@ -625,8 +561,6 @@
"description": "A FreeSewing pattern for one-piece garments",
"design": "Thrunic",
"difficulty": 4,
"lab": true,
"org": true,
"tags": [
"swimwear",
"pajamas",
@ -634,7 +568,7 @@
],
"techniques": [
"hem",
"curvedSeam",
"curved-seam",
"stretch",
"lining",
"zipper",
@ -646,16 +580,14 @@
"description": "A FreeSewing pattern for overalls",
"design": "Thrunic",
"difficulty": 3,
"lab": true,
"org": true,
"tags": [
"overalls",
"onePiece"
],
"techniques": [
"flatFelledSeam",
"flat-felled-seam",
"hem",
"curvedSeam",
"curved-seam",
"button",
"pocket"
]
@ -665,8 +597,6 @@
"description": "A FreeSewing pattern for a baby romper",
"design": "Wouter Van Wageningen",
"difficulty": 2,
"lab": true,
"org": true,
"tags": [],
"techniques": []
},
@ -675,17 +605,15 @@
"description": "A FreeSewing pattern for summer pants",
"design": "Joost De Cock",
"difficulty": 3,
"lab": true,
"org": true,
"tags": [
"bottoms",
"trousers"
],
"techniques": [
"elastic",
"curvedSeam",
"curved-seam",
"pocket",
"weltPocket",
"welt-pocket",
"hem"
]
},
@ -694,30 +622,24 @@
"description": "A FreeSewing pattern for a pencil skirt",
"design": "Wouter Van Wageningen",
"difficulty": 3,
"lab": true,
"org": true,
"tags": [
"bottoms",
"skirts"
],
"techniques": [
"hem",
"curvedSeam",
"curved-seam",
"precision",
"zipper"
]
},
"plugintest": {
"code": "Joost De Cock",
"description": "A FreeSewing pattern to test (y)our plugins",
"lab": true,
"org": false
"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",
"lab": true,
"org": false
"description": "A FreeSewing pattern to test (y)our render engine our CSS"
},
"sandy": {
"code": [
@ -727,14 +649,12 @@
"description": "A FreeSewing pattern for a circle skirt",
"design": "Erica Alcusa Sáez",
"difficulty": 3,
"lab": true,
"org": true,
"tags": [
"bottoms",
"skirts"
],
"techniques": [
"curvedSeam",
"curved-seam",
"button",
"hem"
]
@ -744,8 +664,6 @@
"description": "A FreeSewing pattern for a raglan shirt, perfect for swimshirts",
"design": "Thrunic",
"difficulty": 2,
"lab": true,
"org": true,
"tags": [
"tops",
"swimwear"
@ -753,8 +671,8 @@
"techniques": [
"hem",
"stretch",
"curvedSeam",
"raglanSleeve"
"curved-seam",
"raglan-sleeve"
]
},
"shin": {
@ -762,8 +680,6 @@
"description": "A FreeSewing pattern for swim trunks",
"design": "Joost De Cock",
"difficulty": 2,
"lab": true,
"org": true,
"tags": [
"bottoms",
"swimwear"
@ -771,7 +687,7 @@
"techniques": [
"hem",
"stretch",
"curvedSeam",
"curved-seam",
"elastic"
]
},
@ -780,8 +696,6 @@
"description": "A FreeSewing pattern for a button down shirt",
"design": "Joost De Cock",
"difficulty": 4,
"lab": true,
"org": true,
"tags": [
"tops"
],
@ -789,9 +703,9 @@
"hem",
"button",
"interfacing",
"curvedSeam",
"flatFelledSeam",
"flatSleeve"
"curved-seam",
"flat-felled-seam",
"flat-sleeve"
]
},
"simone": {
@ -799,8 +713,6 @@
"description": "A FreeSewing pattern for a button down shirt (Simone = Simon for people with breasts)",
"design": "Joost De Cock",
"difficulty": 4,
"lab": true,
"org": true,
"tags": [
"tops"
],
@ -808,9 +720,9 @@
"hem",
"button",
"interfacing",
"curvedSeam",
"flatFelledSeam",
"flatSleeve"
"curved-seam",
"flat-felled-seam",
"flat-sleeve"
]
},
"skully": {
@ -818,14 +730,12 @@
"description": "A FreeSewing pattern for skully, our logo, a plushy toy",
"design": "Wouter Van Wageningen",
"difficulty": 4,
"lab": true,
"org": true,
"tags": [
"accessories",
"toys"
],
"techniques": [
"curvedSeam",
"curved-seam",
"precision"
]
},
@ -834,14 +744,12 @@
"description": "A FreeSewing pattern for a straightforward sweater",
"design": "Joost De Cock",
"difficulty": 3,
"lab": true,
"org": true,
"tags": [
"tops"
],
"techniques": [
"curvedSeam",
"flatSleeve",
"curved-seam",
"flat-sleeve",
"ribbing"
]
},
@ -850,13 +758,11 @@
"description": "A FreeSewing pattern for a zero-waste top",
"design": "Joost De Cock",
"difficulty": 1,
"lab": true,
"org": true,
"tags": [
"tops"
],
"techniques": [
"curvedSeam"
"curved-seam"
]
},
"teagan": {
@ -864,16 +770,14 @@
"description": "A FreeSewing pattern for a T-shirt",
"design": "Joost De Cock",
"difficulty": 2,
"lab": true,
"org": true,
"tags": [
"tops"
],
"techniques": [
"curvedSeam",
"curved-seam",
"hem",
"flatSleeve",
"knitBand"
"flat-sleeve",
"knit-band"
]
},
"tiberius": {
@ -881,8 +785,6 @@
"description": "A FreeSewing pattern for a tunica, a historical Roman tunic",
"design": "Rika Tamaike",
"difficulty": 1,
"lab": true,
"org": true,
"tags": [
"tops",
"historical"
@ -897,8 +799,6 @@
"Joost De Cock"
],
"difficulty": 3,
"lab": true,
"org": true,
"tags": [
"blocks",
"bottoms"
@ -910,8 +810,6 @@
"description": "A FreeSewing pattern for a tie",
"design": "Joost De Cock",
"difficulty": 2,
"lab": true,
"org": true,
"tags": [
"accessories"
],
@ -925,13 +823,11 @@
"description": "A FreeSewing pattern for a fitted top with prince(ss) seams",
"design": "Natalia Sayang",
"difficulty": 3,
"lab": true,
"org": true,
"tags": [
"tops"
],
"techniques": [
"curvedSeam",
"curved-seam",
"precision"
]
},
@ -940,31 +836,27 @@
"description": "A FreeSewing pattern for a basic, highly-customizable underwear pattern",
"design": "Joost De Cock",
"difficulty": 2,
"lab": true,
"org": true,
"tags": [
"bottoms",
"underwear"
],
"techniques": [
"elastic",
"curvedSeam"
"curved-seam"
]
},
"umbra": {
"code": "Joost De Cock, Jonathan Haas",
"code": ["Joost De Cock", "Jonathan Haas"],
"description": "A FreeSewing pattern for a basic, highly-customizable underwear pattern",
"design": "Joost De Cock, Jonathan Haas",
"design": ["Joost De Cock", "Jonathan Haas"],
"difficulty": 2,
"lab": true,
"org": true,
"tags": [
"bottoms",
"underwear"
],
"techniques": [
"elastic",
"curvedSeam"
"curved-seam"
]
},
"wahid": {
@ -972,17 +864,15 @@
"description": "A FreeSewing pattern for a classic fitted waistcoat",
"design": "Joost De Cock",
"difficulty": 4,
"lab": true,
"org": true,
"tags": [
"tops"
],
"techniques": [
"curvedSeam",
"curved-seam",
"hem",
"interfacing",
"lining",
"weltPocket",
"welt-pocket",
"button"
]
},
@ -991,8 +881,6 @@
"description": "A FreeSewing pattern for a wappenrock (tabard/surcoat), a historical European/medieval (ish) garment",
"design": "Rika Tamaike",
"difficulty": 1,
"lab": true,
"org": true,
"tags": [
"bottoms",
"historical"
@ -1006,16 +894,14 @@
"description": "A FreeSewing pattern for wrap pants",
"design": "Wouter Van Wageningen",
"difficulty": 2,
"lab": true,
"org": true,
"tags": [
"bottoms",
"trousers"
],
"techniques": [
"curvedSeam",
"curved-seam",
"hem",
"weltPocket"
"welt-pocket"
]
},
"yuri": {
@ -1023,31 +909,27 @@
"description": "A FreeSewing pattern for a fancy zipless sweater based on the Huey hoodie",
"design": "Biou",
"difficulty": 3,
"lab": true,
"org": true,
"tags": [
"tops"
],
"techniques": [
"curvedSeam",
"flatSleeve",
"curved-seam",
"flat-sleeve",
"hem",
"button"
]
},
"lily": {
"code": "Anna Puk, Joost De Cock",
"code": ["Anna Puk", "Joost De Cock"],
"description": "A FreeSewing pattern for basic leggings",
"design": "Anna Puk",
"difficulty": 2,
"lab": true,
"org": true,
"tags": [
"bottoms"
],
"techniques": [
"elastic",
"curvedSeam",
"curved-seam",
"hem"
]
}

View file

@ -1,10 +1,12 @@
{
"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",
"new-design": "Initializer package for a new FreeSewing design: npx @freesewing/new-design",
"studio": "Initializer package for a the FreeSewing design studio: npx @freesewing/studio",
"prettier-config": "FreeSewing's shared configuration for prettier",
"react-components": "React components by/for FreeSewing",
"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",
"rehype-jargon": "A Rehype plugin for jargon terms",
"rehype-highlight-lines": "A Rehype plugin to add highlighted lines to code blocks"
"utils": "A number of utilities, typically used by FreeSewing frontend code"
}

View file

@ -1,35 +0,0 @@
/* 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()

View file

@ -4,7 +4,7 @@
// Dollar signs are allowed in EcmaScript identifier names,
// which is helpful when running unrendered Mustache templates through eslint.
//}}{{=$$ $$=}}
import { $$Name$$, i18n } from '../src/index.mjs'
import { $$Name$$, about, i18n } from '../src/index.mjs'
// Shared tests
import { testPatternConfig } from '../../../tests/designs/config.mjs'
@ -13,7 +13,7 @@ import { testPatternDrafting } from '../../../tests/designs/drafting.mjs'
import { testPatternSampling } from '../../../tests/designs/sampling.mjs'
// Test config
testPatternConfig($$Name$$)
testPatternConfig($$Name$$, about)
// Test translation
testPatternI18n($$Name$$, i18n)

View file

@ -1,8 +1,3 @@
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' }
import en from './en.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk }
export const i18n = { en }

View file

@ -2,11 +2,11 @@
"name": "{{name}}",
"version": "0.0.1",
"description": "{{description}}",
"author": "Joost De Cock <joost@joost.at> (https://github.com/joostdecock)",
"homepage": "https://freesewing.org/",
"repository": "github:freesewing/freesewing",
"author": "Joost De Cock <joost@joost.at> (https://codeberg.org/joostdecock)",
"homepage": "https://freesewing.eu/",
"repository": "https://codeberg.org/freesewing/freesewing",
"license": "MIT",
"main": "dist/index.mjs",
"main": "src/index.mjs",
"module": "dist/index.mjs",
"scripts": {}
}

View file

@ -3,7 +3,7 @@
import chai from 'chai'
import models from '@freesewing/models'
import patterns from '@freesewing/pattern-info'
import Pattern from './dist/index.mjs'
import Pattern from './src/index.mjs'
// Shared tests
import { testPatternConfig } from '../../../tests/patterns/config.mjs'

View file

@ -12,28 +12,23 @@
},
"keywords": ["freesewing"],
"type": "module",
"module": "dist/index.mjs",
"module": "src/index.mjs",
"exports": {
".": {
"internal": "./src/index.mjs",
"default": "./dist/index.mjs"
}
".": "./src/index.mjs"
},
"scripts": {
"cibuild_step1": "node build.mjs",
"build": "node build.mjs",
"testonly": "BABEL_ENV=production ../../node_modules/.bin/_mocha tests/*.test.js --require @babel/register",
"publish": "npm run build && npm publish --access public"
"publish": "npm publish --access public"
},
"peerDependencies": {},
"dependencies": {},
"devDependencies": {},
"files": ["dist/*", "README.md"],
"files": ["src/", "i18n/", "about.json", "README.md"],
"publishConfig": {
"access": "public",
"tag": "next"
"tag": "latest"
},
"engines": {
"node": ">= 18.17.0 <22"
"node": ">= 20"
}
}

View file

@ -2,9 +2,9 @@
"name": "{{pluginName}}",
"version": "0.0.1",
"description": "{{description}}",
"author": "Joost De Cock <joost@joost.at> (https://github.com/joostdecock)",
"homepage": "https://freesewing.org/",
"repository": "github:freesewing/freesewing",
"author": "Joost De Cock <joost@joost.at> (https://codeberg.org/joostdecock)",
"homepage": "https://freesewing.eu/",
"repository": "https://codeberg.org/freesewing/freesewing",
"license": "MIT",
"main": "dist/index.mjs",
"module": "dist/index.mjs",

View file

@ -14,7 +14,7 @@
> FreeSewing is an open source project maintained by Joost De Cock and financially supported by the FreeSewing patrons.
>
> If you feel FreeSewing is worthwhile, and you can spend a few coins without
hardship, then you should [join us and become a patron](https://freesewing.org/community/join).
hardship, then you should [join us and become a patron](https://freesewing.eu/patrons/join).
## What am I looking at? 🤔
@ -31,7 +31,7 @@ npm run tips
> [!NOTE]
> If you don't want to set up a dev environment, you can run it in your browser:
>
> [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/freesewing/freesewing)
> [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://codeberg.org/freesewing/freesewing)
>
> We recommend that you fork our repository and then
> put `gitpod.io/#<entire-url-of-your-fork` into a browser
@ -41,7 +41,7 @@ npm run tips
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
If you're a maker, checkout [freesewing.eu](https://freesewing.eu/) 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/).
@ -53,7 +53,7 @@ functionality of the platform.
If you have NodeJS installed, you can try it right now by running:
```bash
npx @freesewing/new-design
npx @freesewing/studio
```
Getting started guides are available for:
@ -69,49 +69,45 @@ show you how to create your first parametric design.
To get started with FreeSewing, you can spin up our development environment with:
```bash
npx @freesewing/new-design
npx @freesewing/studio
```
To work with FreeSewing's monorepo, you'll need [NodeJS v18](https://nodejs.org), [lerna](https://lerna.js.org/) and [yarn](https://yarnpkg.com/) on your system.
Once you have those, clone (or fork) this repo and run `yarn kickstart`:
To work with FreeSewing's monorepo, you'll need [NodeJS v20](https://nodejs.org) on your system.
Once you have that, clone (or fork) this repo and run `npm run kickstart`:
```bash
git clone git@github.com:freesewing/freesewing.git
git clone git@codeberg.org:freesewing/freesewing.git
cd freesewing
yarn kickstart
npm run kickstart
```
## Links 👩‍💻
**Official channels**
- 💻 Makers website: [FreeSewing.org](https://freesewing.org)
- 💻 Developers website: [FreeSewing.dev](https://freesewing.dev)
- ✅ [Support](https://github.com/freesewing/freesewing/issues/new/choose),
[Issues](https://github.com/freesewing/freesewing/issues) &
[Discussions](https://github.com/freesewing/freesewing/discussions) on
[GitHub](https://github.com/freesewing/freesewing)
- 💻 Makers website: [FreeSewing.eu](https://freesewing.eu/)
- 💻 Developers website: [FreeSewing.dev](https://freesewing.dev/)
- ✅ [Support](https://forum.freesewing.eu/),
[Issues](https://codeberg.org/freesewing/freesewing/issues) &
[Codeberg](https://codeberg.org/freesewing/freesewing)
**Social media**
- 🐦 Twitter: [@freesewing_org](https://twitter.com/freesewing_org)
- 📷 Instagram: [@freesewing_org](https://instagram.com/freesewing_org)
- 🐘 Mastodon: [@freesewing](https://freesewing.social/@freesewing) on [FreeSewing.social](https://freesewing.social/)
- 🐘 Mastodon: [@joost](https://freesewing.social/@joost) on [FreeSewing.social](https://freesewing.social/)
**Places the FreeSewing community hangs out**
- 💬 [Forum](https://forum.freesewing.eu/)
- 💬 [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.
© [Joost De Cock](https://codeberg.org/joostdecock).
See [the license file](https://codeberg.org/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).
For [Support](https://freesewing.eu/support), please use the [forum](https://forum.freesewing.eu).

View file

@ -24,11 +24,6 @@
><img src="https://img.shields.io/badge/all_contributors-{{ allcontributors }}-pink.svg"
alt="All Contributors"/>
</a></p><p align='center'><a
href="https://twitter.com/freesewing_org"
title="Follow @freesewing_org on Twitter"
><img src="https://img.shields.io/badge/%F3%A0%80%A0-Follow%20us-blue.svg?logo=twitter&logoColor=white&logoWidth=15"
alt="Follow @freesewing_org on Twitter"/>
</a><a
href="https://discord.freesewing.org"
title="Chat with us on Discord"
><img src="https://img.shields.io/discord/698854858052075530?label=Chat%20on%20Discord"
@ -38,11 +33,6 @@
title="Become a FreeSewing Patron"
><img src="https://img.shields.io/badge/%F3%A0%80%A0-Support%20us-blueviolet.svg?logo=cash-app&logoColor=white&logoWidth=15"
alt="Become a FreeSewing Patron"/>
</a><a
href="https://instagram.com/freesewing_org"
title="Follow @freesewing_org on Twitter"
><img src="https://img.shields.io/badge/%F3%A0%80%A0-Follow%20us-E4405F.svg?logo=instagram&logoColor=white&logoWidth=15"
alt="Follow @freesewing_org on Twitter"/>
</a></p>
# FreeSewing
@ -54,7 +44,7 @@
> FreeSewing is an open source project maintained by Joost De Cock and financially supported by the FreeSewing patrons.
>
> If you feel FreeSewing is worthwhile, and you can spend a few coins without
hardship, then you should [join us and become a patron](https://freesewing.org/community/join).
hardship, then you should [join us and become a patron](https://freesewing.eu/patrons/join).
## What am I looking at? 🤔
@ -64,7 +54,7 @@ This repository is the FreeSewing *monorepo* holding all FreeSewing's websites,
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
If you're a maker, checkout [freesewing.eu](https://freesewing.eu/) 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/).
@ -76,7 +66,7 @@ functionality of the platform.
If you have NodeJS installed, you can try it right now by running:
```bash
npx @freesewing/new-design
npx @freesewing/studio
```
Getting started guides are available for:
@ -92,44 +82,42 @@ show you how to create your first parametric design.
To get started with FreeSewing, you can spin up our development environment with:
```bash
npx @freesewing/new-design
npx @freesewing/studio
```
To work with FreeSewing's monorepo, you'll need [NodeJS v18](https://nodejs.org), [lerna](https://lerna.js.org/) and [yarn](https://yarnpkg.com/) on your system.
Once you have those, clone (or fork) this repo and run `yarn kickstart`:
To work with FreeSewing's monorepo, you'll need [NodeJS v20](https://nodejs.org) and [lerna](https://lerna.js.org/) on your system.
Once you have those, clone (or fork) this repo and run `npm run kickstart`:
```bash
git clone git@github.com:freesewing/freesewing.git
git clone git@codeberg.org:freesewing/freesewing.git
cd freesewing
yarn kickstart
npm run kickstart
```
## Links 👩‍💻
**Official channels**
- 🪡 Makers website: [FreeSewing.org](https://freesewing.org)
- 🪡 Makers website: [FreeSewing.eu](https://freesewing.eu)
- 💻 Developers website: [FreeSewing.dev](https://freesewing.dev)
**Social media**
- 📷 Instagram: [@freesewing_org](https://instagram.com/freesewing_org)
- 🐘 Mastodon: [freesewing.social](https://freesewing.social/)
- 🐘 Mastodon: [@freesewing](https://freesewing.social/@freesewing) on [FreeSewing.social](https://freesewing.social/)
- 🐘 Mastodon: [@joost](https://freesewing.social/@joost) on [FreeSewing.social](https://freesewing.social/)
**Places the FreeSewing community hangs out**
- 💬 [Forum](https://forum.freesewing.eu/)
- 💬 [Discord](https://discord.freesewing.org/)
- 💬 [Facebook](https://www.facebook.com/groups/627769821272714/)
- 💬 [Reddit](https://www.reddit.com/r/freesewing/)
## Where to get help 🤯
Check our [support page](https://freesewing.org/support), or use
the [Issues](https://github.com/freesewing/freesewing/issues) &
[Discussions](https://github.com/freesewing/freesewing/discussions) on
[GitHub](https://github.com/freesewing/freesewing).
For [Support](https://freesewing.eu/support), please use the [forum](https://forum.freesewing.eu).
## License: MIT 🤓
© [Joost De Cock](https://github.com/joostdecock).
See [the license file](https://github.com/freesewing/freesewing/blob/develop/LICENSE) for details.

View file

@ -1,17 +0,0 @@
/*
* This file is auto-generated.
* Any manual changes will be overwritten.
*/
{{#designs}}
import { {{ Name }} as {{ name }} } from '@freesewing/{{ name }}'
{{/designs}}
export const designs = {
{{#designs}}
{{ name }},
{{/designs}}
}
export const useDesign = (design) => (designs[design] ? designs[design] : false)
export const collection = Object.keys(designs)

View file

@ -1,35 +0,0 @@
/*
* This defines the FreeSewing web of trust
* See: https://FreeSewing.dev/reference/trust
*/
export const trustees = {
1: {
x: 1306,
y: 319,
title: 'joost',
in: 'Antwerp',
},
132: {
x: 457,
y: 345,
title: 'woutervdub',
in: 'Seattle',
},
13050: {
x: 668,
y: 399,
title: 'karen',
in: 'Chicago',
},
}
/*
* These are the connections between the trustees
* See: https://FreeSewing.dev/reference/trust
*/
export const connections = [
[1, 132],
[1, 13050],
]
export const lastUpdate = '20240402'

View file

@ -1,19 +0,0 @@
content_segmentation: 0
commit_message: skip-build
pull_request_assignees:
- joostdecock
pull_request_title: 'New Crowdin Translations [skip build]'
pull_request_labels:
- crowdin
- i18n
files:
- source: /markdown/org/**/en.md
translation: /markdown/org/**/%two_letters_code%.md
- source: /sites/**/en.yaml
translation: /sites/**/%two_letters_code%.yaml
- source: /sites/shared/jargon/en.json
translation: /sites/shared/jargon/%two_letters_code%.json
- source: /designs/*/i18n/en.json
translation: /designs/*/i18n/%two_letters_code%.json
- source: /packages/new-design/i18n/en.json
translation: /packages/new-design/i18n/%two_letters_code%.json

View file

@ -9,24 +9,14 @@
><img src="https://img.shields.io/npm/l/@freesewing/aaron.svg?label=License"
alt="License: MIT"/>
</a><a
href="https://deepscan.io/dashboard#view=project&tid=2114&pid=2993&bid=23256"
title="Code quality on DeepScan"
><img src="https://deepscan.io/api/teams/2114/projects/2993/branches/23256/badge/grade.svg"
alt="Code quality on DeepScan"/>
</a><a
href="https://github.com/freesewing/freesewing/issues?q=is%3Aissue+is%3Aopen+label%3Apkg%3Aaaron"
title="Open issues tagged pkg:aaron"
><img src="https://img.shields.io/github/issues/freesewing/freesewing/pkg:aaron.svg?label=Issues"
alt="Open issues tagged pkg:aaron"/>
</a><a
href="#contributors-"
title="All Contributors"
><img src="https://img.shields.io/badge/all_contributors-131-pink.svg"
alt="All Contributors"/>
</a></p><p align='center'><a
href="https://twitter.com/freesewing_org"
href="https://forum.freesewing.org"
title="Follow @freesewing_org on Twitter"
><img src="https://img.shields.io/badge/%F3%A0%80%A0-Follow%20us-blue.svg?logo=twitter&logoColor=white&logoWidth=15"
><img src="https://img.shields.io/badge/%F3%A0%80%A0-Forum-E4405F.svg?logo=discourse&logoColor=white&logoWidth=15"
alt="Follow @freesewing_org on Twitter"/>
</a><a
href="https://chat.freesewing.org"
@ -38,11 +28,6 @@
title="Become a FreeSewing Patron"
><img src="https://img.shields.io/badge/%F3%A0%80%A0-Support%20us-blueviolet.svg?logo=cash-app&logoColor=white&logoWidth=15"
alt="Become a FreeSewing Patron"/>
</a><a
href="https://instagram.com/freesewing_org"
title="Follow @freesewing_org on Twitter"
><img src="https://img.shields.io/badge/%F3%A0%80%A0-Follow%20us-E4405F.svg?logo=instagram&logoColor=white&logoWidth=15"
alt="Follow @freesewing_org on Twitter"/>
</a></p>
# @freesewing/aaron
@ -59,7 +44,7 @@ A FreeSewing pattern for a A-shirt or tank top
> FreeSewing is an open source project maintained by Joost De Cock and financially supported by the FreeSewing patrons.
>
> If you feel FreeSewing is worthwhile, and you can spend a few coins without
hardship, then you should [join us and become a patron](https://freesewing.org/community/join).
hardship, then you should [join us and become a patron](https://freesewing.eu/patrons/join).
## What am I looking at? 🤔
@ -76,7 +61,7 @@ npm run tips
> [!NOTE]
> If you don't want to set up a dev environment, you can run it in your browser:
>
> [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/freesewing/freesewing)
> [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://codeberg.org/freesewing/freesewing)
>
> We recommend that you fork our repository and then
> put `gitpod.io/#<entire-url-of-your-fork` into a browser
@ -86,7 +71,7 @@ npm run tips
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
If you're a maker, checkout [freesewing.eu](https://freesewing.eu/) 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/).
@ -98,7 +83,7 @@ functionality of the platform.
If you have NodeJS installed, you can try it right now by running:
```bash
npx @freesewing/new-design
npx @freesewing/studio
```
Getting started guides are available for:
@ -114,49 +99,45 @@ show you how to create your first parametric design.
To get started with FreeSewing, you can spin up our development environment with:
```bash
npx @freesewing/new-design
npx @freesewing/studio
```
To work with FreeSewing's monorepo, you'll need [NodeJS v18](https://nodejs.org), [lerna](https://lerna.js.org/) and [yarn](https://yarnpkg.com/) on your system.
Once you have those, clone (or fork) this repo and run `yarn kickstart`:
To work with FreeSewing's monorepo, you'll need [NodeJS v20](https://nodejs.org) on your system.
Once you have that, clone (or fork) this repo and run `npm run kickstart`:
```bash
git clone git@github.com:freesewing/freesewing.git
git clone git@codeberg.org:freesewing/freesewing.git
cd freesewing
yarn kickstart
npm run kickstart
```
## Links 👩‍💻
**Official channels**
- 💻 Makers website: [FreeSewing.org](https://freesewing.org)
- 💻 Developers website: [FreeSewing.dev](https://freesewing.dev)
- ✅ [Support](https://github.com/freesewing/freesewing/issues/new/choose),
[Issues](https://github.com/freesewing/freesewing/issues) &
[Discussions](https://github.com/freesewing/freesewing/discussions) on
[GitHub](https://github.com/freesewing/freesewing)
- 💻 Makers website: [FreeSewing.eu](https://freesewing.eu/)
- 💻 Developers website: [FreeSewing.dev](https://freesewing.dev/)
- ✅ [Support](https://forum.freesewing.eu/),
[Issues](https://codeberg.org/freesewing/freesewing/issues) &
[Codeberg](https://codeberg.org/freesewing/freesewing)
**Social media**
- 🐦 Twitter: [@freesewing_org](https://twitter.com/freesewing_org)
- 📷 Instagram: [@freesewing_org](https://instagram.com/freesewing_org)
- 🐘 Mastodon: [@freesewing](https://freesewing.social/@freesewing) on [FreeSewing.social](https://freesewing.social/)
- 🐘 Mastodon: [@joost](https://freesewing.social/@joost) on [FreeSewing.social](https://freesewing.social/)
**Places the FreeSewing community hangs out**
- 💬 [Forum](https://forum.freesewing.eu/)
- 💬 [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.
© [Joost De Cock](https://codeberg.org/joostdecock).
See [the license file](https://codeberg.org/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).
For [Support](https://freesewing.eu/support), please use the [forum](https://forum.freesewing.eu).

20
designs/aaron/about.json Normal file
View file

@ -0,0 +1,20 @@
{
"id": "aaron",
"code": "Joost De Cock",
"name": "Aaron A-shirt",
"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",
"pkg": "@freesewing/aaron"
}

View file

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

View file

@ -1,45 +0,0 @@
{
"t": "Aaron A-Shirt",
"d": "Aaron is an athletic shirt or tank top.",
"s": {
"cutOneStripToFinishTheNeckOpening": "Cut one strip to finish the neck opening",
"cutTwoStripsToFinishTheArmholes": "Cut two strips to finish the armholes",
"length": "Length",
"width": "Width"
},
"o": {
"armholeDrop": {
"t": "Armlochabsenkung",
"d": "Senkt das Armloch um diesen Wert. Negative Werte erhöhen es."
},
"backlineBend": {
"t": "Hintere Armlochform",
"d": "Bestimmt die Form / Krümmung der Rückseite der Armlöcher."
},
"hipsEase": {
"t": "Bequemlichkeitszugabe Hüfte",
"d": "Die Menge an Bequemlichkeits-/Bewegungszugabe an deinen Hüften."
},
"necklineBend": {
"t": "Ausschnittsform",
"d": "Bestimmt die Form / Krümmung des Halsausschnitts vorne."
},
"necklineDrop": {
"t": "Ausschnitt Tiefe",
"d": "Wie tief der Ausschnitt vorne geht."
},
"shoulderStrapPlacement": {
"t": "Platzierung der Schulterträger",
"d": "Bestimmt, ob der Schulterträger näher am Hals (niedrigere Zahlen), oder näher an der Schulter (höhere Zahlen) liegt."
},
"shoulderStrapWidth": {
"t": "Breite der Schulterträger",
"d": "Die Breite der Schulterträger."
},
"stretchFactor": {
"t": "Dehnung",
"d": "Bestimmt die horizontale negative Bewegungszugabe."
}
},
"p": {}
}

View file

@ -1,45 +0,0 @@
{
"t": "Aaron A-Shirt",
"d": "Aaron is an athletic shirt or tank top.",
"s": {
"cutOneStripToFinishTheNeckOpening": "Cut one strip to finish the neck opening",
"cutTwoStripsToFinishTheArmholes": "Cut two strips to finish the armholes",
"length": "Length",
"width": "Width"
},
"o": {
"armholeDrop": {
"t": "Caída de la sisa",
"d": "Baja la sisa esta cantidad. Valores negativos la elevan."
},
"backlineBend": {
"t": "Forma posterior de la sisa",
"d": "Determina la forma/curva de la parte posterior de la sisa."
},
"hipsEase": {
"t": "Holgura de cadera",
"d": "La cantidad de holgura en la cadera."
},
"necklineBend": {
"t": "Forma del cuello",
"d": "Determina la forma/curva del cuello en el frente."
},
"necklineDrop": {
"t": "Caída del escote",
"d": "La cantidad de cuello que se corta en el frente."
},
"shoulderStrapPlacement": {
"t": "Posición de los tirantes",
"d": "Determina si los tirantes se colocan cerca del cuello (números más bajos) o del hombro (números más altos)."
},
"shoulderStrapWidth": {
"t": "Anchura de los tirantes",
"d": "La anchura de los tirantes."
},
"stretchFactor": {
"t": "Extensión",
"d": "Determina la holgura negativa horizontal."
}
},
"p": {}
}

View file

@ -1,45 +0,0 @@
{
"t": "Aaron A-Shirt",
"d": "Aaron is an athletic shirt or tank top.",
"s": {
"cutOneStripToFinishTheNeckOpening": "Cut one strip to finish the neck opening",
"cutTwoStripsToFinishTheArmholes": "Cut two strips to finish the armholes",
"length": "Length",
"width": "Width"
},
"o": {
"armholeDrop": {
"t": "Abaissement d'emmanchure",
"d": "Il s'agit d'abaisser l'emmanchure avec cette valeur. Les valeurs négatives la remonteront."
},
"backlineBend": {
"t": "Forme de l'arrière des emmanchures",
"d": "Détermine la forme/courbure de l'arrière des emmanchures."
},
"hipsEase": {
"t": "Aisance des hanches",
"d": "La marge d'aisance aux hanches."
},
"necklineBend": {
"t": "Forme de l'encolure",
"d": "Détermine la forme/courbure du devant de l'encolure."
},
"necklineDrop": {
"t": "Profondeur d'encolure",
"d": "Détermine de combien abaisser lencolure l'avant."
},
"shoulderStrapPlacement": {
"t": "Position de la bretelle",
"d": "Détermine si la bretelle est placée plus près du cou (chiffres les plus bas) ou de lépaule (chiffres les plus élevés)."
},
"shoulderStrapWidth": {
"t": "Largeur de la bretelle",
"d": "Détermine la largeur des bretelles."
},
"stretchFactor": {
"t": "Élasticité",
"d": "Détermine a quantité d'aisance négative en largeur."
}
},
"p": {}
}

View file

@ -1,8 +1,3 @@
import en from './en.json' with { type: 'json' }
import de from './de.json' with { type: 'json' }
import es from './es.json' with { type: 'json' }
import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk }
export const i18n = { en }

View file

@ -1,45 +0,0 @@
{
"t": "Aaron A-Shirt",
"d": "Aaron is an athletic shirt or tank top.",
"s": {
"cutOneStripToFinishTheNeckOpening": "Cut one strip to finish the neck opening",
"cutTwoStripsToFinishTheArmholes": "Cut two strips to finish the armholes",
"length": "Length",
"width": "Width"
},
"o": {
"armholeDrop": {
"t": "Diepte armsgat",
"d": "Verlaag het armsgat met deze hoeveelheid. Een negatieve waarde maakt het hoger."
},
"backlineBend": {
"t": "Vorm armsgat achteraan",
"d": "Bepaalt de vorm/curve van de achterkant van het armsgat."
},
"hipsEase": {
"t": "Overwijdte heup",
"d": "De hoeveelheid overwijdte aan je heupen."
},
"necklineBend": {
"t": "Vorm halslijn",
"d": "Bepaalt de vorm/kromming van de halslijn aan het middenvoor."
},
"necklineDrop": {
"t": "Diepte halslijn",
"d": "De hoeveelheid waarmee de halslijn vooraan weggesneden wordt."
},
"shoulderStrapPlacement": {
"t": "Plaatsing schouderbandjes",
"d": "Bepaalt of de schouderbandjes dichter bij de nek (lager cijfer) of dichter bij de schouder (hoger cijfer) geplaatst worden."
},
"shoulderStrapWidth": {
"t": "Breedte schouderband",
"d": "De breedte van de schouderbandjes."
},
"stretchFactor": {
"t": "Rek",
"d": "Bepaalt hoeveel kleiner de horizontale omtrek is dan je lichaamsmaten. In andere woorden, hoe strak alles zit."
}
},
"p": {}
}

View file

@ -1,45 +0,0 @@
{
"t": "Aaron A-Shirt",
"d": "Aaron is an athletic shirt or tank top.",
"s": {
"cutOneStripToFinishTheNeckOpening": "Cut one strip to finish the neck opening",
"cutTwoStripsToFinishTheArmholes": "Cut two strips to finish the armholes",
"length": "Length",
"width": "Width"
},
"o": {
"armholeDrop": {
"t": "Armhole drop",
"d": "Lower the armhole by this amount. Negative values will raise it."
},
"backlineBend": {
"t": "Back armhole shape",
"d": "Determines the shape/bend of the back of the armholes."
},
"hipsEase": {
"t": "Hips ease",
"d": "The amount of ease at your hips."
},
"necklineBend": {
"t": "Neckline shape",
"d": "Determines the shape/bend of the neckline at the front."
},
"necklineDrop": {
"t": "Neckline drop",
"d": "The amount the neck is cutout at the front."
},
"shoulderStrapPlacement": {
"t": "Shoulderstrap placement",
"d": "Determines whether the shoulder strap is placed closer to the neck (lower numbers) or the shoulder (higher numbers)."
},
"shoulderStrapWidth": {
"t": "Shoulderstrap width",
"d": "The width of the shoulder straps."
},
"stretchFactor": {
"t": "Stretch",
"d": "Determines the horizontal negative ease."
}
},
"p": {}
}

View file

@ -1,6 +1,6 @@
{
"name": "@freesewing/aaron",
"version": "3.3.0-rc.1",
"version": "4.0.0",
"description": "A FreeSewing pattern for a A-shirt or tank top",
"author": "Joost De Cock <joost@joost.at> (https://github.com/joostdecock)",
"homepage": "https://freesewing.org/",
@ -25,50 +25,41 @@
"sewing pattern"
],
"type": "module",
"module": "dist/index.mjs",
"module": "src/index.mjs",
"exports": {
".": {
"internal": "./src/index.mjs",
"default": "./dist/index.mjs"
}
".": "./src/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"
"testci": "NODE_OPTIONS=\"--conditions=internal\" npx mocha tests/*.test.mjs --reporter ../../tests/reporters/terse.js"
},
"peerDependencies": {
"@freesewing/core": "3.3.0-rc.1",
"@freesewing/brian": "3.3.0-rc.1",
"@freesewing/plugin-bust": "3.3.0-rc.1"
"@freesewing/core": "4.0.0",
"@freesewing/brian": "4.0.0",
"@freesewing/plugin-bust": "4.0.0"
},
"dependencies": {},
"devDependencies": {
"mocha": "10.4.0",
"chai": "5.1.1",
"@freesewing/models": "3.3.0-rc.1",
"@freesewing/plugin-timing": "3.3.0-rc.1"
"@freesewing/models": "4.0.0",
"@freesewing/plugin-timing": "4.0.0"
},
"files": [
"dist/*",
"src/",
"i18n/",
"about.json",
"README.md"
],
"publishConfig": {
"access": "public",
"tag": "next"
"tag": "latest"
},
"engines": {
"node": ">= 18.17.0 <22"
"node": ">= 20"
}
}

View file

@ -18,7 +18,7 @@ export const front = {
shoulderSlopeReduction: 0,
chestEase: { pct: 8, min: 0, max: 20, ...pctBasedOn('chest'), menu: 'fit' },
draftForHighBust: { bool: false, menu: 'fit' },
hipsEase: { pct: 8, min: 0, max: 20, menu: 'fit' },
hipsEase: { pct: 8, min: 0, max: 20, ...pctBasedOn('hips'), menu: 'fit' },
stretchFactor: { pct: 5, min: 0, max: 15, menu: 'fit' },
armholeDrop: { pct: 10, min: 0, max: 75, menu: 'style' },
lengthBonus: { pct: 10, min: -20, max: 60, menu: 'style' },

View file

@ -1,7 +1,7 @@
import { Design, mergeI18n } from '@freesewing/core'
import { i18n as brianI18n } from '@freesewing/brian'
import { i18n as aaronI18n } from '../i18n/index.mjs'
import { data } from '../data.mjs'
import about from '../about.json' with { type: 'json' }
import { back } from './back.mjs'
import { front } from './front.mjs'
import { armBinding } from './arm-binding.mjs'
@ -9,7 +9,7 @@ import { neckBinding } from './neck-binding.mjs'
// Setup our new design
const Aaron = new Design({
data,
data: about,
parts: [back, front, armBinding, neckBinding],
})
@ -27,10 +27,12 @@ const i18n = mergeI18n([brianI18n, aaronI18n], {
'legacyArmholeDepthNo',
'legacyArmholeDepthYes',
'armholeDepth',
'draftForHighBustNo',
'draftForHighBustYes',
],
},
s: { drop: [] },
})
// Named exports
export { back, front, Aaron, i18n }
export { back, front, Aaron, i18n, about }

View file

@ -1,5 +1,5 @@
// This file is auto-generated | Any changes you make will be overwritten.
import { Aaron, i18n } from '../src/index.mjs'
import { Aaron, about, i18n } from '../src/index.mjs'
// Shared tests
import { testPatternConfig } from '../../../tests/designs/config.mjs'
@ -8,7 +8,7 @@ import { testPatternDrafting } from '../../../tests/designs/drafting.mjs'
import { testPatternSampling } from '../../../tests/designs/sampling.mjs'
// Test config
testPatternConfig(Aaron)
testPatternConfig(Aaron, about)
// Test translation
testPatternI18n(Aaron, i18n)

View file

@ -9,24 +9,14 @@
><img src="https://img.shields.io/npm/l/@freesewing/albert.svg?label=License"
alt="License: MIT"/>
</a><a
href="https://deepscan.io/dashboard#view=project&tid=2114&pid=2993&bid=23256"
title="Code quality on DeepScan"
><img src="https://deepscan.io/api/teams/2114/projects/2993/branches/23256/badge/grade.svg"
alt="Code quality on DeepScan"/>
</a><a
href="https://github.com/freesewing/freesewing/issues?q=is%3Aissue+is%3Aopen+label%3Apkg%3Aalbert"
title="Open issues tagged pkg:albert"
><img src="https://img.shields.io/github/issues/freesewing/freesewing/pkg:albert.svg?label=Issues"
alt="Open issues tagged pkg:albert"/>
</a><a
href="#contributors-"
title="All Contributors"
><img src="https://img.shields.io/badge/all_contributors-131-pink.svg"
alt="All Contributors"/>
</a></p><p align='center'><a
href="https://twitter.com/freesewing_org"
href="https://forum.freesewing.org"
title="Follow @freesewing_org on Twitter"
><img src="https://img.shields.io/badge/%F3%A0%80%A0-Follow%20us-blue.svg?logo=twitter&logoColor=white&logoWidth=15"
><img src="https://img.shields.io/badge/%F3%A0%80%A0-Forum-E4405F.svg?logo=discourse&logoColor=white&logoWidth=15"
alt="Follow @freesewing_org on Twitter"/>
</a><a
href="https://chat.freesewing.org"
@ -38,11 +28,6 @@
title="Become a FreeSewing Patron"
><img src="https://img.shields.io/badge/%F3%A0%80%A0-Support%20us-blueviolet.svg?logo=cash-app&logoColor=white&logoWidth=15"
alt="Become a FreeSewing Patron"/>
</a><a
href="https://instagram.com/freesewing_org"
title="Follow @freesewing_org on Twitter"
><img src="https://img.shields.io/badge/%F3%A0%80%A0-Follow%20us-E4405F.svg?logo=instagram&logoColor=white&logoWidth=15"
alt="Follow @freesewing_org on Twitter"/>
</a></p>
# @freesewing/albert
@ -59,7 +44,7 @@ A FreeSewing pattern for an apron
> FreeSewing is an open source project maintained by Joost De Cock and financially supported by the FreeSewing patrons.
>
> If you feel FreeSewing is worthwhile, and you can spend a few coins without
hardship, then you should [join us and become a patron](https://freesewing.org/community/join).
hardship, then you should [join us and become a patron](https://freesewing.eu/patrons/join).
## What am I looking at? 🤔
@ -76,7 +61,7 @@ npm run tips
> [!NOTE]
> If you don't want to set up a dev environment, you can run it in your browser:
>
> [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/freesewing/freesewing)
> [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://codeberg.org/freesewing/freesewing)
>
> We recommend that you fork our repository and then
> put `gitpod.io/#<entire-url-of-your-fork` into a browser
@ -86,7 +71,7 @@ npm run tips
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
If you're a maker, checkout [freesewing.eu](https://freesewing.eu/) 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/).
@ -98,7 +83,7 @@ functionality of the platform.
If you have NodeJS installed, you can try it right now by running:
```bash
npx @freesewing/new-design
npx @freesewing/studio
```
Getting started guides are available for:
@ -114,49 +99,45 @@ show you how to create your first parametric design.
To get started with FreeSewing, you can spin up our development environment with:
```bash
npx @freesewing/new-design
npx @freesewing/studio
```
To work with FreeSewing's monorepo, you'll need [NodeJS v18](https://nodejs.org), [lerna](https://lerna.js.org/) and [yarn](https://yarnpkg.com/) on your system.
Once you have those, clone (or fork) this repo and run `yarn kickstart`:
To work with FreeSewing's monorepo, you'll need [NodeJS v20](https://nodejs.org) on your system.
Once you have that, clone (or fork) this repo and run `npm run kickstart`:
```bash
git clone git@github.com:freesewing/freesewing.git
git clone git@codeberg.org:freesewing/freesewing.git
cd freesewing
yarn kickstart
npm run kickstart
```
## Links 👩‍💻
**Official channels**
- 💻 Makers website: [FreeSewing.org](https://freesewing.org)
- 💻 Developers website: [FreeSewing.dev](https://freesewing.dev)
- ✅ [Support](https://github.com/freesewing/freesewing/issues/new/choose),
[Issues](https://github.com/freesewing/freesewing/issues) &
[Discussions](https://github.com/freesewing/freesewing/discussions) on
[GitHub](https://github.com/freesewing/freesewing)
- 💻 Makers website: [FreeSewing.eu](https://freesewing.eu/)
- 💻 Developers website: [FreeSewing.dev](https://freesewing.dev/)
- ✅ [Support](https://forum.freesewing.eu/),
[Issues](https://codeberg.org/freesewing/freesewing/issues) &
[Codeberg](https://codeberg.org/freesewing/freesewing)
**Social media**
- 🐦 Twitter: [@freesewing_org](https://twitter.com/freesewing_org)
- 📷 Instagram: [@freesewing_org](https://instagram.com/freesewing_org)
- 🐘 Mastodon: [@freesewing](https://freesewing.social/@freesewing) on [FreeSewing.social](https://freesewing.social/)
- 🐘 Mastodon: [@joost](https://freesewing.social/@joost) on [FreeSewing.social](https://freesewing.social/)
**Places the FreeSewing community hangs out**
- 💬 [Forum](https://forum.freesewing.eu/)
- 💬 [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.
© [Joost De Cock](https://codeberg.org/joostdecock).
See [the license file](https://codeberg.org/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).
For [Support](https://freesewing.eu/support), please use the [forum](https://forum.freesewing.eu).

19
designs/albert/about.json Normal file
View file

@ -0,0 +1,19 @@
{
"id": "albert",
"name": "Albert apron",
"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"
],
"version": "4.0.0",
"pkg": "@freesewing/albert"
}

View file

@ -1,35 +0,0 @@
/* 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()

View file

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

View file

@ -1,36 +0,0 @@
{
"t": "Albert, die Schürze",
"d": "Albert ist eine Schürze.",
"p": {
"front": "Vorderseite",
"pocket": "Tasche",
"strap": "Strap"
},
"s": {},
"o": {
"backOpening": {
"t": "Hintere Öffnung",
"d": "Steuert die Öffnung an der Rückseite der Schürze"
},
"chestDepth": {
"t": "Länge des Riemens",
"d": "Steuert die Länge der Riemen"
},
"lengthBonus": {
"t": "Längenzugabe",
"d": "Steuert die Länge der Schürze"
},
"bibLength": {
"t": "Latzlänge",
"d": "Steuert die Länge des Latzes"
},
"bibWidth": {
"t": "Latzbreite",
"d": "Steuert die Breite des Latzes"
},
"strapWidth": {
"t": "Riemenbreite",
"d": "Steuert die Breite des Riemens"
}
}
}

View file

@ -1,36 +0,0 @@
{
"t": "Albert, delantal",
"d": "Albert es un delantal.",
"p": {
"front": "Frente",
"pocket": "Bolsillo",
"strap": "Strap"
},
"s": {},
"o": {
"backOpening": {
"t": "Abertura de la espalda",
"d": "Controla la apertura en la parte trasera del Profeta"
},
"chestDepth": {
"t": "Longitud del Strp",
"d": "Controla la longitud de las correas"
},
"lengthBonus": {
"t": "Bonus de longitud",
"d": "Controla la longitud del buque"
},
"bibLength": {
"t": "Longitud de bib",
"d": "Controla la longitud de la bib"
},
"bibWidth": {
"t": "Ancho bib",
"d": "Controla el ancho de la bib"
},
"strapWidth": {
"t": "Strap width",
"d": "Controla el ancho de la correa"
}
}
}

View file

@ -1,36 +0,0 @@
{
"t": "Tablier Albert",
"d": "Albert est un tablier.",
"p": {
"front": "Avant",
"pocket": "Poche",
"strap": "Strap"
},
"s": {},
"o": {
"backOpening": {
"t": "Ouverture arrière",
"d": "Contrôle l'ouverture à l'arrière du tablier"
},
"chestDepth": {
"t": "Longueur de l'anse",
"d": "Contrôle la longueur des liens"
},
"lengthBonus": {
"t": "Supplément de longueur",
"d": "Contrôle la longueur du tablier"
},
"bibLength": {
"t": "Longueur du plastron",
"d": "Contrôle la longueur du plastron"
},
"bibWidth": {
"t": "Largeur du plastron",
"d": "Contrôle la largeur du plastron"
},
"strapWidth": {
"t": "Largeur du lien",
"d": "Contrôle la largeur des liens"
}
}
}

View file

@ -1,8 +1,3 @@
import en from './en.json' with { type: 'json' }
import de from './de.json' with { type: 'json' }
import es from './es.json' with { type: 'json' }
import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk }
export const i18n = { en }

View file

@ -1,90 +0,0 @@
{
"t": "Albert schort",
"d": "Albert is een vork.",
"p": {
"back": "Achterzijde",
"backBase": "Basis rug",
"backPocketWelt": "Back pocket welt",
"base": "Basis",
"bentBack": "Achterzijde Bent",
"bentBase": "Basis Bent",
"bentFront": "Voorzijde Bent",
"bentSleeve": "Mouw Bent",
"bentTopSleeve": "Bovenmouw Bent",
"bentUnderSleeve": "Ondermouw Bent",
"buttonholePlacket": "Knoopsgatenpat",
"buttonPlacket": "Knopenpat",
"collar": "Kraag",
"collarStand": "Kraagstaander",
"cuff": "Manchet",
"fabricTail": "Stof staart",
"fabricTip": "Stof tip",
"frontBase": "Basis voorzijde",
"frontFacing": "Beleg vooraan",
"front": "Voorzijde",
"frontLeft": "Voorzijde links",
"frontLining": "Voering vooraan",
"frontRight": "Voorzijde rechts",
"gusset": "Gusset",
"hoodCenter": "Midden kap",
"hood": "Capuchon",
"hoodSide": "Zijkant kap",
"inset": "Inzet",
"interfacingTail": "Interfacing staart",
"interfacingTip": "Interfacing tip",
"liningTail": "Voering staart",
"liningTip": "Voering tip",
"loop": "Lus",
"panel1": "Deel 1",
"panel2": "Deel 2",
"panel3": "Deel 3",
"panel4": "Deel 4",
"panel5": "Deel 5",
"panel6": "Deel 6",
"panels": "Panelen",
"pocketBag": "Binnenzak",
"pocketFacing": "Zak beleg",
"pocketInterfacing": "Tussenvoering zak",
"pocket": "Zak",
"pocketWelt": "Paspel zak",
"side": "Zijkant",
"sleeveBase": "Basis mouw",
"sleevecap": "Mouwkop",
"sleevePlacketOverlap": "Mouwsplit boven",
"sleevePlacketUnderlap": "Mouwsplit onder",
"sleeve": "Mouw",
"topSleeve": "Bovenmouw",
"top": "Top",
"underCollar": "Onderkraag",
"underSleeve": "Ondermouw",
"waistband": "Tailleband",
"yoke": "Schouderpas"
},
"s": {},
"o": {
"backOpening": {
"t": "Rugopening",
"d": "Bepaalt de opening aan de achterkant van de schort"
},
"chestDepth": {
"t": "Lengte van de badjes",
"d": "Bepaalt de lengte van de bandjes"
},
"lengthBonus": {
"t": "Lengtebonus",
"d": "Bepaalt de lengte van de schort"
},
"bibLength": {
"t": "Lengte slabbetje",
"d": "Bepaalt de lengte van het slabbetje"
},
"bibWidth": {
"t": "Breedte slabbetje",
"d": "Bepaalt de breedte van het slabbetje"
},
"strapWidth": {
"t": "Breedte bandjes",
"d": "Bepaalt de breedte van de bandjes"
}
}
}

View file

@ -1,36 +0,0 @@
{
"t": "Albert apron",
"d": "Albert is an apron.",
"p": {
"front": "Front",
"pocket": "Pocket",
"strap": "Strap"
},
"s": {},
"o": {
"backOpening": {
"t": "Back opening",
"d": "Controls the opening at the back of the apron"
},
"chestDepth": {
"t": "Strap length",
"d": "Controls the length of the straps"
},
"lengthBonus": {
"t": "Length bonus",
"d": "Controls the length of the apron"
},
"bibLength": {
"t": "Bib length",
"d": "Controls the length of the bib"
},
"bibWidth": {
"t": "Bib width",
"d": "Controls the width of the bib"
},
"strapWidth": {
"t": "Strap width",
"d": "Controls the width of the strap"
}
}
}

View file

@ -1,6 +1,6 @@
{
"name": "@freesewing/albert",
"version": "3.3.0-rc.1",
"version": "4.0.0",
"description": "A FreeSewing pattern for an apron",
"author": "Joost De Cock <joost@joost.at> (https://github.com/joostdecock)",
"homepage": "https://freesewing.org/",
@ -25,48 +25,39 @@
"sewing pattern"
],
"type": "module",
"module": "dist/index.mjs",
"module": "src/index.mjs",
"exports": {
".": {
"internal": "./src/index.mjs",
"default": "./dist/index.mjs"
}
".": "./src/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"
"testci": "NODE_OPTIONS=\"--conditions=internal\" npx mocha tests/*.test.mjs --reporter ../../tests/reporters/terse.js"
},
"peerDependencies": {
"@freesewing/core": "3.3.0-rc.1"
"@freesewing/core": "4.0.0"
},
"dependencies": {},
"devDependencies": {
"mocha": "10.4.0",
"chai": "5.1.1",
"@freesewing/models": "3.3.0-rc.1",
"@freesewing/plugin-timing": "3.3.0-rc.1"
"@freesewing/models": "4.0.0",
"@freesewing/plugin-timing": "4.0.0"
},
"files": [
"dist/*",
"src/",
"i18n/",
"about.json",
"README.md"
],
"publishConfig": {
"access": "public",
"tag": "next"
"tag": "latest"
},
"engines": {
"node": ">= 18.17.0 <22"
"node": ">= 20"
}
}

View file

@ -106,16 +106,23 @@ export const front = {
if (sa) {
const saBase = new Path()
.move(points.bottomLeft.shift(-90, sa))
.line(points.bottomRight.shift(-90, sa))
.line(points.topRightBack)
.move(points.bottomLeft.shift(-90, strapWidth - sa))
.line(points.bottomRight.shift(-90, strapWidth - sa).shift(0, strapWidth - sa))
.line(points.topRightBack.shift(0, strapWidth - sa))
.curve(points.topRightBackCPfront, points.topRightCPdown, points.topRightHem)
.line(points.topRight.shift(90, sa))
.line(points.topLeft.shift(90, sa))
.line(points.topRight.shift(90, strapWidth - sa))
.line(points.topLeft.shift(90, strapWidth - sa))
paths.sa = saBase
.clone()
.offset(sa * 2)
.addClass('fabric sa')
paths.sa = new Path()
.move(points.bottomLeft)
.line(paths.sa.start())
.join(paths.sa)
.line(points.topLeft)
.attr('class', 'fabric sa')
if (complete) {
paths.hemHint = saBase.clone().offset(sa).addClass('note help')
macro('banner', {
@ -127,6 +134,24 @@ export const front = {
classes: 'fill-note center',
})
}
macro('hd', {
from: points.bottomRight,
to: points.bottomRight.shift(0, strapWidth),
y: points.bottomLeft.y + sa + (sa ? strapWidth : 0) + 15,
id: 'wBottomHem',
})
macro('vd', {
from: points.topLeft,
to: points.topLeft.shift(90, strapWidth),
x: points.topLeftHem.x - 15,
id: 'foldoverTop',
})
macro('vd', {
from: points.bottomLeft.shift(270, strapWidth),
to: points.bottomLeft,
x: points.topLeftHem.x - 15,
id: 'hLeftToFoldover',
})
}
/*
@ -178,52 +203,33 @@ export const front = {
macro('hd', {
from: points.bottomLeft,
to: points.bottomRight,
y: points.bottomLeft.y + sa + 15,
y: points.bottomLeft.y + sa + (sa ? strapWidth : 0) + 15,
id: 'wBottom',
})
macro('hd', {
from: points.topLeft,
to: points.topRight,
y: points.topLeft.y - sa - 15,
y: points.topLeft.y - sa - (sa ? strapWidth : 0) - 15,
id: 'wTop',
})
macro('vd', {
from: points.bottomLeft,
to: points.topLeft,
x: points.topLeft.x - 30,
x: points.topLeft.x - 15,
id: 'hLeft',
})
macro('vd', {
from: points.bottomRight,
to: points.topRightBack,
x: points.topRightBack.x + sa + 15,
x: points.topRightBack.x + sa + (sa ? strapWidth : 0) + 15,
id: 'hRightBottom',
})
macro('vd', {
from: points.topRightBack,
to: points.topRight,
x: points.topRightBack.x + sa + 15,
x: points.topRightBack.x + sa + (sa ? strapWidth : 0) + 15,
id: 'hRightTop',
})
macro('vd', {
from: points.topLeftHem,
to: points.topLeft,
x: points.topLeftHem.x - 15,
id: 'foldoverTop',
})
macro('vd', {
from: points.bottomLeftHem,
to: points.topLeftHem,
x: points.topLeftHem.x - 15,
id: 'hLeftToFoldover',
})
macro('vd', {
from: points.bottomLeft,
to: points.bottomLeftHem,
x: points.bottomLeftHem.x + sa + 15,
id: 'hBottomHem',
})
return part
},
}

View file

@ -1,5 +1,5 @@
import { Design } from '@freesewing/core'
import { data } from '../data.mjs'
import about from '../about.json' with { type: 'json' }
import { front } from './front.mjs'
import { pocket } from './pocket.mjs'
import { strap } from './strap.mjs'
@ -7,9 +7,9 @@ import { i18n } from '../i18n/index.mjs'
// Setup our new design
const Albert = new Design({
data,
data: about,
parts: [front, pocket, strap],
})
// Named exports
export { front, pocket, strap, Albert, i18n }
export { front, pocket, strap, Albert, i18n, about }

View file

@ -16,6 +16,7 @@ export const pocket = {
units,
store,
part,
complete,
}) => {
const pocketSize = store.get('pocketSize')
@ -53,11 +54,11 @@ export const pocket = {
.line(points.bottomRight)
.line(points.topRight)
.line(points.topLeft)
.move(points.bottomLeft)
.line(points.bottomLeft)
.close()
.attr('class', 'fabric')
if (sa)
if (sa) {
paths.sa = new Path()
.move(points.bottomLeft)
.line(points.bottomRight)
@ -65,7 +66,46 @@ export const pocket = {
.line(points.topLeft.shift(90, store.get('strapWidth')))
.offset(sa)
.attr('class', 'fabric sa')
paths.sa = new Path()
.move(points.bottomLeft)
.line(paths.sa.start())
.join(paths.sa)
.line(points.topLeft)
.attr('class', 'fabric sa')
if (complete) {
paths.SAhemHint = new Path()
.move(points.topRight.shift(90, store.get('strapWidth')).shift(0, sa))
.line(points.topLeft.shift(90, store.get('strapWidth')))
.addClass('note help')
macro('banner', {
id: 'SAfoldHere',
path: paths.SAhemHint.reverse(),
text: 'albert:foldHere',
repeat: 60,
spaces: 30,
classes: 'fill-note center',
})
paths.hemHint = new Path()
.move(points.topRight.shift(0, sa))
.line(points.topLeft)
.setHidden(true)
macro('banner', {
id: 'foldHere',
path: paths.hemHint.reverse(),
text: 'albert:foldHere',
repeat: 60,
spaces: 30,
classes: 'fill-note center',
})
macro('vd', {
from: points.topLeft,
to: points.topLeft.shift(90, store.get('strapWidth')),
x: points.topLeft.x - 15,
id: 'heightHem',
})
}
}
/*
* Annotations
*/

View file

@ -1,5 +1,5 @@
// This file is auto-generated | Any changes you make will be overwritten.
import { Albert, i18n } from '../src/index.mjs'
import { Albert, about, i18n } from '../src/index.mjs'
// Shared tests
import { testPatternConfig } from '../../../tests/designs/config.mjs'
@ -8,7 +8,7 @@ import { testPatternDrafting } from '../../../tests/designs/drafting.mjs'
import { testPatternSampling } from '../../../tests/designs/sampling.mjs'
// Test config
testPatternConfig(Albert)
testPatternConfig(Albert, about)
// Test translation
testPatternI18n(Albert, i18n)

View file

@ -9,24 +9,14 @@
><img src="https://img.shields.io/npm/l/@freesewing/bee.svg?label=License"
alt="License: MIT"/>
</a><a
href="https://deepscan.io/dashboard#view=project&tid=2114&pid=2993&bid=23256"
title="Code quality on DeepScan"
><img src="https://deepscan.io/api/teams/2114/projects/2993/branches/23256/badge/grade.svg"
alt="Code quality on DeepScan"/>
</a><a
href="https://github.com/freesewing/freesewing/issues?q=is%3Aissue+is%3Aopen+label%3Apkg%3Abee"
title="Open issues tagged pkg:bee"
><img src="https://img.shields.io/github/issues/freesewing/freesewing/pkg:bee.svg?label=Issues"
alt="Open issues tagged pkg:bee"/>
</a><a
href="#contributors-"
title="All Contributors"
><img src="https://img.shields.io/badge/all_contributors-131-pink.svg"
alt="All Contributors"/>
</a></p><p align='center'><a
href="https://twitter.com/freesewing_org"
href="https://forum.freesewing.org"
title="Follow @freesewing_org on Twitter"
><img src="https://img.shields.io/badge/%F3%A0%80%A0-Follow%20us-blue.svg?logo=twitter&logoColor=white&logoWidth=15"
><img src="https://img.shields.io/badge/%F3%A0%80%A0-Forum-E4405F.svg?logo=discourse&logoColor=white&logoWidth=15"
alt="Follow @freesewing_org on Twitter"/>
</a><a
href="https://chat.freesewing.org"
@ -38,11 +28,6 @@
title="Become a FreeSewing Patron"
><img src="https://img.shields.io/badge/%F3%A0%80%A0-Support%20us-blueviolet.svg?logo=cash-app&logoColor=white&logoWidth=15"
alt="Become a FreeSewing Patron"/>
</a><a
href="https://instagram.com/freesewing_org"
title="Follow @freesewing_org on Twitter"
><img src="https://img.shields.io/badge/%F3%A0%80%A0-Follow%20us-E4405F.svg?logo=instagram&logoColor=white&logoWidth=15"
alt="Follow @freesewing_org on Twitter"/>
</a></p>
# @freesewing/bee
@ -59,7 +44,7 @@ A FreeSewing pattern for a bikini top
> FreeSewing is an open source project maintained by Joost De Cock and financially supported by the FreeSewing patrons.
>
> If you feel FreeSewing is worthwhile, and you can spend a few coins without
hardship, then you should [join us and become a patron](https://freesewing.org/community/join).
hardship, then you should [join us and become a patron](https://freesewing.eu/patrons/join).
## What am I looking at? 🤔
@ -76,7 +61,7 @@ npm run tips
> [!NOTE]
> If you don't want to set up a dev environment, you can run it in your browser:
>
> [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/freesewing/freesewing)
> [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://codeberg.org/freesewing/freesewing)
>
> We recommend that you fork our repository and then
> put `gitpod.io/#<entire-url-of-your-fork` into a browser
@ -86,7 +71,7 @@ npm run tips
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
If you're a maker, checkout [freesewing.eu](https://freesewing.eu/) 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/).
@ -98,7 +83,7 @@ functionality of the platform.
If you have NodeJS installed, you can try it right now by running:
```bash
npx @freesewing/new-design
npx @freesewing/studio
```
Getting started guides are available for:
@ -114,49 +99,45 @@ show you how to create your first parametric design.
To get started with FreeSewing, you can spin up our development environment with:
```bash
npx @freesewing/new-design
npx @freesewing/studio
```
To work with FreeSewing's monorepo, you'll need [NodeJS v18](https://nodejs.org), [lerna](https://lerna.js.org/) and [yarn](https://yarnpkg.com/) on your system.
Once you have those, clone (or fork) this repo and run `yarn kickstart`:
To work with FreeSewing's monorepo, you'll need [NodeJS v20](https://nodejs.org) on your system.
Once you have that, clone (or fork) this repo and run `npm run kickstart`:
```bash
git clone git@github.com:freesewing/freesewing.git
git clone git@codeberg.org:freesewing/freesewing.git
cd freesewing
yarn kickstart
npm run kickstart
```
## Links 👩‍💻
**Official channels**
- 💻 Makers website: [FreeSewing.org](https://freesewing.org)
- 💻 Developers website: [FreeSewing.dev](https://freesewing.dev)
- ✅ [Support](https://github.com/freesewing/freesewing/issues/new/choose),
[Issues](https://github.com/freesewing/freesewing/issues) &
[Discussions](https://github.com/freesewing/freesewing/discussions) on
[GitHub](https://github.com/freesewing/freesewing)
- 💻 Makers website: [FreeSewing.eu](https://freesewing.eu/)
- 💻 Developers website: [FreeSewing.dev](https://freesewing.dev/)
- ✅ [Support](https://forum.freesewing.eu/),
[Issues](https://codeberg.org/freesewing/freesewing/issues) &
[Codeberg](https://codeberg.org/freesewing/freesewing)
**Social media**
- 🐦 Twitter: [@freesewing_org](https://twitter.com/freesewing_org)
- 📷 Instagram: [@freesewing_org](https://instagram.com/freesewing_org)
- 🐘 Mastodon: [@freesewing](https://freesewing.social/@freesewing) on [FreeSewing.social](https://freesewing.social/)
- 🐘 Mastodon: [@joost](https://freesewing.social/@joost) on [FreeSewing.social](https://freesewing.social/)
**Places the FreeSewing community hangs out**
- 💬 [Forum](https://forum.freesewing.eu/)
- 💬 [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.
© [Joost De Cock](https://codeberg.org/joostdecock).
See [the license file](https://codeberg.org/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).
For [Support](https://freesewing.eu/support), please use the [forum](https://forum.freesewing.eu).

20
designs/bee/about.json Normal file
View file

@ -0,0 +1,20 @@
{
"id": "bee",
"name": "Bee bikini top",
"code": "bobgeorgethe3rd",
"description": "A FreeSewing pattern for a bikini top",
"design": "PrudenceRabbit",
"difficulty": 3,
"tags": [
"tops",
"swimwear"
],
"techniques": [
"hem",
"stretch",
"curved-seam",
"precision"
],
"version": "4.0.0",
"pkg": "@freesewing/bee"
}

View file

@ -1,35 +0,0 @@
/* 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()

View file

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

View file

@ -1,120 +0,0 @@
{
"t": "Bee, das Bikini-Oberteil",
"d": "Bee ist ein Bikini-Oberteil",
"p": {
"bandTie": "Band Tie",
"cup": "Cup",
"neckTie": "Neck Tie"
},
"s": {},
"o": {
"chestEase": {
"t": "Brustzugabe",
"d": "Kontrolliert die Brustzugabe des zugrunde liegenden Grundschnittes \"Bella\" auf welchem Bee basiert"
},
"waistEase": {
"t": "Taillenzugabe",
"d": "Kontrolliert die Taillenzugabe des zugrunde liegenden Grundschnittes \"Bella\" auf welchem Bee basiert"
},
"bustSpanEase": {
"t": "Zugabe im Abstand der Brustpunkte",
"d": "Kontrolliert die Zugabe des Abstandes der Brustpunkte des zugrunde liegenden Grundschnittes \"Bella\" auf welchem Bee basiert"
},
"topDepth": {
"t": "Obere Tiefe",
"d": "Kontrolliert, wie weit sich der Bikini-Cup nach oben erstreckt"
},
"bottomCupDepth": {
"t": "Untere Tiefe",
"d": "Kontrolliert, wie weit sich der Bikini-Cup nach unten erstreckt"
},
"sideDepth": {
"t": "Seitliche Tiefe",
"d": "Kontrolliert, wie weit sich der Bikini-Cup zur Seite erstreckt"
},
"sideCurve": {
"t": "Seitliche Kurve",
"d": "Kontrolliert die Krümmung der Seite des Bikini-Cups"
},
"frontCurve": {
"t": "Vordere Kurve",
"d": "Kontrolliert die Krümmung der Vorderseite des Bikini-Cups"
},
"bellaGuide": {
"t": "Bella anzeigen",
"d": "Zeigt die Umrisse des Bella-Grundschnittes an, auf dem Bee basiert"
},
"ties": {
"t": "Bänder",
"d": "Sollen Bänder hinzugefügt werden, ja oder nein"
},
"bandTieWidth": {
"t": "Breite des Brustbandes",
"d": "Kontrolliert die Breite des Bandes um deinen Brustkorb"
},
"bandTieLength": {
"t": "Länge des Brustbandes",
"d": "Kontrolliert die Länge des Bandes um deinen Brustkorb"
},
"bandTieEnds": {
"t": "Enden des Brustbandes",
"d": "Möchtest du gerade oder spitze Enden des Brustbandes?"
},
"bandTieColours": {
"t": "Farben des Brustbandes",
"d": "Möchtest du ein- oder mehrfarbige Brustbänder?"
},
"neckTieWidth": {
"t": "Breite des Nackenträgers",
"d": "Steuert die Breite des Nackenträgers"
},
"neckTieLength": {
"t": "Länge des Nackenträgers",
"d": "Steuert die Länge des Nackenträgers"
},
"neckTieEnds": {
"t": "Enden des Nackenträgers",
"d": "Möchtest du gerade oder spitze Enden des Nackenträgers?"
},
"neckTieColours": {
"t": "Farben des Nackenträgers",
"d": "Möchtest du ein- oder mehrfarbige Nackenträger?"
},
"crossBackTies": {
"t": "Gekreuzte Rückenträger",
"d": "Möchtest du die Version von Bee mit gekreuzten Rückenträgern?"
},
"bandLength": {
"t": "Länge der gekreuzten Rückenträger",
"d": "Kontrolliert die Länge Brustbandes für die Variante von Bee mit gekreuzten Rückenträgern"
},
"backDartHeight": {
"t": "Höhe der Rückenabnäher (Bella)",
"d": "Kontrolliert die Höhe der Rückenabnäher des zugrunde liegenden Grundschnittes \"Bella\" auf welchem Bee basiert"
},
"armholeDepth": {
"t": "Tiefen des Armloches (Bella)",
"d": "Kontrolliert die Tiefe des Armloches des zugrunde liegenden Grundschnittes \"Bella\" auf welchem Bee basiert"
},
"frontArmholePitchDepth": {
"t": "Tiefe des vorderen Armlochdrehpunktes (Bella)",
"d": "Kontrolliert die Tiefe des vorderen Armlochdrehpunktes des zugrunde liegenden Grundschnittes \"Bella\" auf welchem Bee basiert"
},
"frontShoulderWidth": {
"t": "Vordere Schulterbreite (Bella)",
"d": "Kontrolliert die vordere Schulterbreite des zugrunde liegenden Grundschnittes \"Bella\" auf welchem Bee basiert"
},
"fullChestEaseReduction": {
"t": "Full chest reduction (Bella)",
"d": "Controls the full chest reduction in the underlying Bella block Bee is based on"
},
"highBustWidth": {
"t": "Hohe Brustweite (Bella)",
"d": "Kontrolliert die hohe Brustbreite des zugrunde liegenden Grundschnittes \"Bella\" auf welchem Bee basiert"
},
"shoulderToShoulderEase": {
"t": "Shoulder to Shoulder ease (Bella)",
"d": "Controls the shoulder to shoulder ease in the underlying Bella block Bee is based on"
}
}
}

View file

@ -1,120 +0,0 @@
{
"t": "Bee, sujetador de bikini",
"d": "Bee el sujetador de un bikini",
"p": {
"bandTie": "Band Tie",
"cup": "Cup",
"neckTie": "Neck Tie"
},
"s": {},
"o": {
"chestEase": {
"t": "Holgura de pecho",
"d": "Controla la holgura del pecho en el patrón base (Bella) en el que se basa Bee"
},
"waistEase": {
"t": "Holgura de cintura",
"d": "Controla la holgura de cintura en el patrón base (Bella) en el que se basa Bee"
},
"bustSpanEase": {
"t": "Holgura alrededor del busto",
"d": "Controla la holgura de busto en el patrón base (Bella) en el que se basa Bee"
},
"topDepth": {
"t": "Límite superior",
"d": "Controla hasta qué punto la copa de bikini se extiende hacia arriba"
},
"bottomCupDepth": {
"t": "Límite inferior",
"d": "Controla hasta qué punto la copa de bikini se extiende hacia abajo"
},
"sideDepth": {
"t": "Límite lateral",
"d": "Controla hasta qué punto se extiende la copa del bikini hacia el lado"
},
"sideCurve": {
"t": "Curva lateral exterior",
"d": "Controla la curvatura del lado exterior de la copa del bikini"
},
"frontCurve": {
"t": "Curva lateral interior",
"d": "Controla la curvatura de la parte lateral interior de la copa del bikini"
},
"bellaGuide": {
"t": "Mostrar Bella",
"d": "Muestra el contorno del patrón base Bella en el que se basa Bee"
},
"ties": {
"t": "Cintas",
"d": "Sobre si incluir cintas o no"
},
"bandTieWidth": {
"t": "Ancho de la cinta del pecho",
"d": "Controla el ancho de las cintas alrededor del pecho"
},
"bandTieLength": {
"t": "Longitud de la cinta del pecho",
"d": "Controla la longitud de las cintas alrededor del pecho"
},
"bandTieEnds": {
"t": "Puntas de la cinta del pecho",
"d": "Si prefieres que las puntas de la cinta alrededor del pecho sean planas o acaben en punta"
},
"bandTieColours": {
"t": "Colores de la longitud de la cinta del pecho",
"d": "Sobre si quieres cintas de un solo color alrededor del pecho o de dos colores."
},
"neckTieWidth": {
"t": "Ancho de la cinta del cuello",
"d": "Controla el ancho de las cintas alrededor del pecho"
},
"neckTieLength": {
"t": "Longitud de la cinta del cuello",
"d": "Controla la longitud de las cintas alrededor del pecho"
},
"neckTieEnds": {
"t": "Puntas de la cinta del cuello",
"d": "Si prefieres que las puntas de la cinta alrededor del pecho sean planas o acaben en punta"
},
"neckTieColours": {
"t": "Colores de la cinta del cuello",
"d": "Sobre si quieres cintas de un solo color alrededor del pecho o de dos colores."
},
"crossBackTies": {
"t": "Cintas cruzadas",
"d": "Whether you'd like to use the cross back tie variation of Bee"
},
"bandLength": {
"t": "Band Length (Cross back ties)",
"d": "Controla la longitud de la cinta alrededor de tu pecho para la versión de tirantes cruzados de Bee"
},
"backDartHeight": {
"t": "Back dart height (Bella)",
"d": "Controla la altura de la pinza trasera en el patrón base Bella, en el que se basa Bee"
},
"armholeDepth": {
"t": "Armhole depth (Bella)",
"d": "Controla la profundidad de la sisa en el patron de base Bella en el que se basa Bee"
},
"frontArmholePitchDepth": {
"t": "Front armhole pitch depth (Bella)",
"d": "Controls the front armhole pitch depth in the underlying Bella block Bee is based on"
},
"frontShoulderWidth": {
"t": "Front shoulder width (Bella)",
"d": "Controla el ancho de hombros en el patrón de base Bella en el que se basa Bee"
},
"fullChestEaseReduction": {
"t": "Full chest reduction (Bella)",
"d": "Controls the full chest reduction in the underlying Bella block Bee is based on"
},
"highBustWidth": {
"t": "High bust width (Bella)",
"d": "Controls the high bust width in the underlying Bella block Bee is based on"
},
"shoulderToShoulderEase": {
"t": "Ancho de hombros (Bella)",
"d": "Controla el ancho de hombros en el patrón de base Bella en el que se basa Bee"
}
}
}

View file

@ -1,120 +0,0 @@
{
"t": "Haut de bikini Bee",
"d": "Bee est un haut de bikini",
"p": {
"bandTie": "Band Tie",
"cup": "Cup",
"neckTie": "Neck Tie"
},
"s": {},
"o": {
"chestEase": {
"t": "Aisance de poitrine",
"d": "Contrôle l'aisance de la poitrine dans le bloc de Bella sur lequel est basé Bee"
},
"waistEase": {
"t": "Aisance à la taille",
"d": "Contrôle l'aisance de la taille dans le bloc de Bella sur lequel est basé Bee"
},
"bustSpanEase": {
"t": "Aisance de l'écart poitrine",
"d": "Contrôle l'aisance de l'écart de poitrine dans le bloc de Bella sur lequel est basé Bee"
},
"topDepth": {
"t": "Profondeur supérieure",
"d": "Contrôle jusqu'à quel point le bonnet de bikini s'étend vers le haut"
},
"bottomCupDepth": {
"t": "Profondeur inférieure",
"d": "Contrôle jusqu'à quel point le bonnet de bikini s'étend vers le bas"
},
"sideDepth": {
"t": "Profondeur latérale",
"d": "Contrôle jusqu'à quel point le bonnet du bikini se prolonge vers le côté"
},
"sideCurve": {
"t": "Courbe latérale",
"d": "Contrôle la courbure du côté du bonnet du bikini"
},
"frontCurve": {
"t": "Courbe frontale",
"d": "Contrôle la courbure du devant du bonnet du bikini"
},
"bellaGuide": {
"t": "Afficher Bella",
"d": "Affiche le contour du bloc Bella sur lequel est basé Bee"
},
"ties": {
"t": "Liens",
"d": "S'il faut inclure les liens, oui ou non"
},
"bandTieWidth": {
"t": "Largeur de la bande (sous poitrine)",
"d": "Contrôle la largeur des bandes autour de votre poitrine"
},
"bandTieLength": {
"t": "Longueur de la bande (sous poitrine)",
"d": "Contrôle la longueur des bandes autour de votre poitrine"
},
"bandTieEnds": {
"t": "Finition des bouts de bandes (sous poitrine)",
"d": "Choisir si vous voulez que la pointe de la bande autour de votre poitrine se termine droite ou en pointe"
},
"bandTieColours": {
"t": "Couleurs de la bande (sous poitrine)",
"d": "Que vous vouliez une seule couleur autour de votre poitrine, ou des couleurs doubles"
},
"neckTieWidth": {
"t": "Largeur de la bande de cou",
"d": "Contrôle la largeur des bandes autour de votre cou"
},
"neckTieLength": {
"t": "Longueur de la bande",
"d": "Contrôle la longueur des bandes autour de votre cou"
},
"neckTieEnds": {
"t": "Fin de la bande de cou",
"d": "Choisir si vous voulez que la pointe de la bande autour de votre cou se termine droite ou en pointe"
},
"neckTieColours": {
"t": "Couleurs de bande de cou",
"d": "Que vous vouliez une seule couleur autour de votre cou, ou des couleurs doubles"
},
"crossBackTies": {
"t": "Bandes croisées dans le dos",
"d": "Si vous souhaitez utiliser la variation de dos croisé de Bee"
},
"bandLength": {
"t": "Longueur de la bande (bandes croisées dans le dos)",
"d": "Contrôle la longueur de la bande autour de votre buste pour la variation du dos croisé de Bee"
},
"backDartHeight": {
"t": "Hauteur de la pince dos (Bella)",
"d": "Contrôle la hauteur de pince dos dans le bloc de Bella sur lequel est basé Bee"
},
"armholeDepth": {
"t": "Profondeur d'emmanchure (Bella)",
"d": "Contrôle la profondeur de l'emmanchure dans le bloc de Bella sur lequel est basé Bee"
},
"frontArmholePitchDepth": {
"t": "Profondeur du point pivot de l'emmanchure devant (Bella)",
"d": "Contrôle la profondeur du point pivot de l'emmanchure avant dans le bloc Bella sur lequel est basé le patron Bee"
},
"frontShoulderWidth": {
"t": "Largeur de l'épaule devant (Bella)",
"d": "Contrôle la largeur de l'épaule avant dans le bloc de Bella sur lequel est basé le patron Bee"
},
"fullChestEaseReduction": {
"t": "Réduction de la poitrine (Bella)",
"d": "Contrôle la réduction du thorax dans le bloc Bella sur lequel est basé Bee"
},
"highBustWidth": {
"t": "Largeur du tour de buste supérieur (Bella)",
"d": "Contrôle la largeur du buste supérieur dans le bloc de Bella sur lequel est basé Bee"
},
"shoulderToShoulderEase": {
"t": "Aisance d'épaules à épaules (Bella)",
"d": "Contrôle l'aisance d'épaule à épaule dans le bloc Bella sur lequel est basé le patron Bee"
}
}
}

View file

@ -1,8 +1,3 @@
import en from './en.json' with { type: 'json' }
import de from './de.json' with { type: 'json' }
import es from './es.json' with { type: 'json' }
import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk }
export const i18n = { en }

View file

@ -1,120 +0,0 @@
{
"t": "Bee bikini top",
"d": "Bee is a bikini top",
"p": {
"bandTie": "Band Tie",
"cup": "Cup",
"neckTie": "Neck Tie"
},
"s": {},
"o": {
"chestEase": {
"t": "Overwijdte borst",
"d": "Controls the chest ease in the underlying Bella block Bee is based on"
},
"waistEase": {
"t": "Overwijdte taille",
"d": "Controls the waist ease in the underlying Bella block Bee is based on"
},
"bustSpanEase": {
"t": "Overwijdte bustenwijdte",
"d": "Controls the bust span ease in the underlying Bella block Bee is based on"
},
"topDepth": {
"t": "Top Depth",
"d": "Controls how far the bikini cup extends upwards"
},
"bottomCupDepth": {
"t": "Bottom depth",
"d": "Controls how far the bikini cup extends downwards"
},
"sideDepth": {
"t": "Side depth",
"d": "Controls how far the bikini cup extends towards the side"
},
"sideCurve": {
"t": "Side curve",
"d": "Controls the curvature of the side of the bikini cup"
},
"frontCurve": {
"t": "Front curve",
"d": "Controls the curvature of the front of the bikini cup"
},
"bellaGuide": {
"t": "Show Bella",
"d": "Shows the outline of the Bella block Bee is based on"
},
"ties": {
"t": "Ties",
"d": "Whether to includes ties, yes or no"
},
"bandTieWidth": {
"t": "Band (chest) tie width",
"d": "Controls the width of the ties around your chest"
},
"bandTieLength": {
"t": "Band (chest) tie length",
"d": "Controls the length of the ties around your chest"
},
"bandTieEnds": {
"t": "Band (chest) tie ends",
"d": "Whether you like straight or pointy ends on the ties around your chest"
},
"bandTieColours": {
"t": "Band (chest) tie length colours",
"d": "Whether you want single color ties around your chest, or dual-coloured ones"
},
"neckTieWidth": {
"t": "Neck tie width",
"d": "Controls the width of the ties around your chest"
},
"neckTieLength": {
"t": "Neck tie length",
"d": "Controls the length of the ties around your chest"
},
"neckTieEnds": {
"t": "Neck tie ends",
"d": "Whether you like straight or pointy ends on the ties around your chest"
},
"neckTieColours": {
"t": "Neck tie colours",
"d": "Whether you want single color ties around your chest, or dual-coloured ones"
},
"crossBackTies": {
"t": "Cross back ties",
"d": "Whether you'd like to use the cross back tie variation of Bee"
},
"bandLength": {
"t": "Band Length (Cross back ties)",
"d": "Controls the length of the band around your chest for the cross back ties variation of Bee"
},
"backDartHeight": {
"t": "Back dart height (Bella)",
"d": "Controls the back dart height in the underlying Bella block Bee is based on"
},
"armholeDepth": {
"t": "Armhole depth (Bella)",
"d": "Controls the armhole depth in the underlying Bella block Bee is based on"
},
"frontArmholePitchDepth": {
"t": "Front armhole pitch depth (Bella)",
"d": "Controls the front armhole pitch depth in the underlying Bella block Bee is based on"
},
"frontShoulderWidth": {
"t": "Front shoulder width (Bella)",
"d": "Controls the front shoulder width in the underlying Bella block Bee is based on"
},
"fullChestEaseReduction": {
"t": "Full chest reduction (Bella)",
"d": "Controls the full chest reduction in the underlying Bella block Bee is based on"
},
"highBustWidth": {
"t": "High bust width (Bella)",
"d": "Controls the high bust width in the underlying Bella block Bee is based on"
},
"shoulderToShoulderEase": {
"t": "Shoulder to Shoulder ease (Bella)",
"d": "Controls the shoulder to shoulder ease in the underlying Bella block Bee is based on"
}
}
}

View file

@ -1,120 +0,0 @@
{
"t": "Bee bikini top",
"d": "Bee is a bikini top",
"p": {
"bandTie": "Band Tie",
"cup": "Cup",
"neckTie": "Neck Tie"
},
"s": {},
"o": {
"chestEase": {
"t": "Chest ease",
"d": "Controls the chest ease in the underlying Bella block Bee is based on"
},
"waistEase": {
"t": "Waist ease",
"d": "Controls the waist ease in the underlying Bella block Bee is based on"
},
"bustSpanEase": {
"t": "Bust span ease",
"d": "Controls the bust span ease in the underlying Bella block Bee is based on"
},
"topDepth": {
"t": "Top Depth",
"d": "Controls how far the bikini cup extends upwards"
},
"bottomCupDepth": {
"t": "Bottom depth",
"d": "Controls how far the bikini cup extends downwards"
},
"sideDepth": {
"t": "Side depth",
"d": "Controls how far the bikini cup extends towards the side"
},
"sideCurve": {
"t": "Side curve",
"d": "Controls the curvature of the side of the bikini cup"
},
"frontCurve": {
"t": "Front curve",
"d": "Controls the curvature of the front of the bikini cup"
},
"bellaGuide": {
"t": "Show Bella",
"d": "Shows the outline of the Bella block Bee is based on"
},
"ties": {
"t": "Ties",
"d": "Whether to includes ties, yes or no"
},
"bandTieWidth": {
"t": "Band (chest) tie width",
"d": "Controls the width of the ties around your chest"
},
"bandTieLength": {
"t": "Band (chest) tie length",
"d": "Controls the length of the ties around your chest"
},
"bandTieEnds": {
"t": "Band (chest) tie ends",
"d": "Whether you like straight or pointy ends on the ties around your chest"
},
"bandTieColours": {
"t": "Band (chest) tie length colours",
"d": "Whether you want single color ties around your chest, or dual-coloured ones"
},
"neckTieWidth": {
"t": "Neck tie width",
"d": "Controls the width of the ties around your chest"
},
"neckTieLength": {
"t": "Neck tie length",
"d": "Controls the length of the ties around your chest"
},
"neckTieEnds": {
"t": "Neck tie ends",
"d": "Whether you like straight or pointy ends on the ties around your chest"
},
"neckTieColours": {
"t": "Neck tie colours",
"d": "Whether you want single color ties around your chest, or dual-coloured ones"
},
"crossBackTies": {
"t": "Cross back ties",
"d": "Whether you'd like to use the cross back tie variation of Bee"
},
"bandLength": {
"t": "Band Length (Cross back ties)",
"d": "Controls the length of the band around your chest for the cross back ties variation of Bee"
},
"backDartHeight": {
"t": "Back dart height (Bella)",
"d": "Controls the back dart height in the underlying Bella block Bee is based on"
},
"armholeDepth": {
"t": "Armhole depth (Bella)",
"d": "Controls the armhole depth in the underlying Bella block Bee is based on"
},
"frontArmholePitchDepth": {
"t": "Front armhole pitch depth (Bella)",
"d": "Controls the front armhole pitch depth in the underlying Bella block Bee is based on"
},
"frontShoulderWidth": {
"t": "Front shoulder width (Bella)",
"d": "Controls the front shoulder width in the underlying Bella block Bee is based on"
},
"fullChestEaseReduction": {
"t": "Full chest reduction (Bella)",
"d": "Controls the full chest reduction in the underlying Bella block Bee is based on"
},
"highBustWidth": {
"t": "High bust width (Bella)",
"d": "Controls the high bust width in the underlying Bella block Bee is based on"
},
"shoulderToShoulderEase": {
"t": "Shoulder to Shoulder ease (Bella)",
"d": "Controls the shoulder to shoulder ease in the underlying Bella block Bee is based on"
}
}
}

View file

@ -1,6 +1,6 @@
{
"name": "@freesewing/bee",
"version": "3.3.0-rc.1",
"version": "4.0.0",
"description": "A FreeSewing pattern for a bikini top",
"author": "bobgeorgethe3rd (https://github.com/bobgeorgethe3rd)",
"homepage": "https://freesewing.org/",
@ -25,49 +25,40 @@
"sewing pattern"
],
"type": "module",
"module": "dist/index.mjs",
"module": "src/index.mjs",
"exports": {
".": {
"internal": "./src/index.mjs",
"default": "./dist/index.mjs"
}
".": "./src/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"
"testci": "NODE_OPTIONS=\"--conditions=internal\" npx mocha tests/*.test.mjs --reporter ../../tests/reporters/terse.js"
},
"peerDependencies": {
"@freesewing/core": "3.3.0-rc.1",
"@freesewing/bella": "3.3.0-rc.1"
"@freesewing/core": "4.0.0",
"@freesewing/bella": "4.0.0"
},
"dependencies": {},
"devDependencies": {
"mocha": "10.4.0",
"chai": "5.1.1",
"@freesewing/models": "3.3.0-rc.1",
"@freesewing/plugin-timing": "3.3.0-rc.1"
"@freesewing/models": "4.0.0",
"@freesewing/plugin-timing": "4.0.0"
},
"files": [
"dist/*",
"src/",
"i18n/",
"about.json",
"README.md"
],
"publishConfig": {
"access": "public",
"tag": "next"
"tag": "latest"
},
"engines": {
"node": ">= 18.17.0 <22"
"node": ">= 20"
}
}

View file

@ -1,5 +1,5 @@
import { Design, mergeI18n } from '@freesewing/core'
import { data } from '../data.mjs'
import about from '../about.json' with { type: 'json' }
import { cup } from './cup.mjs'
import { neckTie } from './neck-tie.mjs'
import { bandTie } from './band-tie.mjs'
@ -7,7 +7,7 @@ import { i18n as beeI18n } from '../i18n/index.mjs'
import { i18n as bellaI18n } from '@freesewing/bella'
const Bee = new Design({
data,
data: about,
parts: [cup, neckTie, bandTie],
})
@ -50,4 +50,4 @@ const i18n = mergeI18n([bellaI18n, beeI18n], {
o: { keep: i18nKeepOptions },
})
export { cup, neckTie, bandTie, Bee, i18n }
export { cup, neckTie, bandTie, Bee, i18n, about }

View file

@ -1,5 +1,5 @@
// This file is auto-generated | Any changes you make will be overwritten.
import { Bee, i18n } from '../src/index.mjs'
import { Bee, about, i18n } from '../src/index.mjs'
// Shared tests
import { testPatternConfig } from '../../../tests/designs/config.mjs'
@ -8,7 +8,7 @@ import { testPatternDrafting } from '../../../tests/designs/drafting.mjs'
import { testPatternSampling } from '../../../tests/designs/sampling.mjs'
// Test config
testPatternConfig(Bee)
testPatternConfig(Bee, about)
// Test translation
testPatternI18n(Bee, i18n)

View file

@ -9,24 +9,14 @@
><img src="https://img.shields.io/npm/l/@freesewing/bella.svg?label=License"
alt="License: MIT"/>
</a><a
href="https://deepscan.io/dashboard#view=project&tid=2114&pid=2993&bid=23256"
title="Code quality on DeepScan"
><img src="https://deepscan.io/api/teams/2114/projects/2993/branches/23256/badge/grade.svg"
alt="Code quality on DeepScan"/>
</a><a
href="https://github.com/freesewing/freesewing/issues?q=is%3Aissue+is%3Aopen+label%3Apkg%3Abella"
title="Open issues tagged pkg:bella"
><img src="https://img.shields.io/github/issues/freesewing/freesewing/pkg:bella.svg?label=Issues"
alt="Open issues tagged pkg:bella"/>
</a><a
href="#contributors-"
title="All Contributors"
><img src="https://img.shields.io/badge/all_contributors-131-pink.svg"
alt="All Contributors"/>
</a></p><p align='center'><a
href="https://twitter.com/freesewing_org"
href="https://forum.freesewing.org"
title="Follow @freesewing_org on Twitter"
><img src="https://img.shields.io/badge/%F3%A0%80%A0-Follow%20us-blue.svg?logo=twitter&logoColor=white&logoWidth=15"
><img src="https://img.shields.io/badge/%F3%A0%80%A0-Forum-E4405F.svg?logo=discourse&logoColor=white&logoWidth=15"
alt="Follow @freesewing_org on Twitter"/>
</a><a
href="https://chat.freesewing.org"
@ -38,11 +28,6 @@
title="Become a FreeSewing Patron"
><img src="https://img.shields.io/badge/%F3%A0%80%A0-Support%20us-blueviolet.svg?logo=cash-app&logoColor=white&logoWidth=15"
alt="Become a FreeSewing Patron"/>
</a><a
href="https://instagram.com/freesewing_org"
title="Follow @freesewing_org on Twitter"
><img src="https://img.shields.io/badge/%F3%A0%80%A0-Follow%20us-E4405F.svg?logo=instagram&logoColor=white&logoWidth=15"
alt="Follow @freesewing_org on Twitter"/>
</a></p>
# @freesewing/bella
@ -59,7 +44,7 @@ A FreeSewing pattern for a womenswear bodice block
> FreeSewing is an open source project maintained by Joost De Cock and financially supported by the FreeSewing patrons.
>
> If you feel FreeSewing is worthwhile, and you can spend a few coins without
hardship, then you should [join us and become a patron](https://freesewing.org/community/join).
hardship, then you should [join us and become a patron](https://freesewing.eu/patrons/join).
## What am I looking at? 🤔
@ -76,7 +61,7 @@ npm run tips
> [!NOTE]
> If you don't want to set up a dev environment, you can run it in your browser:
>
> [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/freesewing/freesewing)
> [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://codeberg.org/freesewing/freesewing)
>
> We recommend that you fork our repository and then
> put `gitpod.io/#<entire-url-of-your-fork` into a browser
@ -86,7 +71,7 @@ npm run tips
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
If you're a maker, checkout [freesewing.eu](https://freesewing.eu/) 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/).
@ -98,7 +83,7 @@ functionality of the platform.
If you have NodeJS installed, you can try it right now by running:
```bash
npx @freesewing/new-design
npx @freesewing/studio
```
Getting started guides are available for:
@ -114,49 +99,45 @@ show you how to create your first parametric design.
To get started with FreeSewing, you can spin up our development environment with:
```bash
npx @freesewing/new-design
npx @freesewing/studio
```
To work with FreeSewing's monorepo, you'll need [NodeJS v18](https://nodejs.org), [lerna](https://lerna.js.org/) and [yarn](https://yarnpkg.com/) on your system.
Once you have those, clone (or fork) this repo and run `yarn kickstart`:
To work with FreeSewing's monorepo, you'll need [NodeJS v20](https://nodejs.org) on your system.
Once you have that, clone (or fork) this repo and run `npm run kickstart`:
```bash
git clone git@github.com:freesewing/freesewing.git
git clone git@codeberg.org:freesewing/freesewing.git
cd freesewing
yarn kickstart
npm run kickstart
```
## Links 👩‍💻
**Official channels**
- 💻 Makers website: [FreeSewing.org](https://freesewing.org)
- 💻 Developers website: [FreeSewing.dev](https://freesewing.dev)
- ✅ [Support](https://github.com/freesewing/freesewing/issues/new/choose),
[Issues](https://github.com/freesewing/freesewing/issues) &
[Discussions](https://github.com/freesewing/freesewing/discussions) on
[GitHub](https://github.com/freesewing/freesewing)
- 💻 Makers website: [FreeSewing.eu](https://freesewing.eu/)
- 💻 Developers website: [FreeSewing.dev](https://freesewing.dev/)
- ✅ [Support](https://forum.freesewing.eu/),
[Issues](https://codeberg.org/freesewing/freesewing/issues) &
[Codeberg](https://codeberg.org/freesewing/freesewing)
**Social media**
- 🐦 Twitter: [@freesewing_org](https://twitter.com/freesewing_org)
- 📷 Instagram: [@freesewing_org](https://instagram.com/freesewing_org)
- 🐘 Mastodon: [@freesewing](https://freesewing.social/@freesewing) on [FreeSewing.social](https://freesewing.social/)
- 🐘 Mastodon: [@joost](https://freesewing.social/@joost) on [FreeSewing.social](https://freesewing.social/)
**Places the FreeSewing community hangs out**
- 💬 [Forum](https://forum.freesewing.eu/)
- 💬 [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.
© [Joost De Cock](https://codeberg.org/joostdecock).
See [the license file](https://codeberg.org/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).
For [Support](https://freesewing.eu/support), please use the [forum](https://forum.freesewing.eu).

21
designs/bella/about.json Normal file
View file

@ -0,0 +1,21 @@
{
"id": "bella",
"name": "Bella body block",
"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"
],
"version": "4.0.0",
"pkg": "@freesewing/bella"
}

View file

@ -1,35 +0,0 @@
/* 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()

View file

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

View file

@ -1,87 +0,0 @@
{
"t": "Bella, ein Grundschnitt",
"d": "Bella ist ein Grundschnitt für Personen mit Brüsten.",
"p": {
"back": "Rückseite",
"frontSideDart": "Vorderseite"
},
"s": {},
"o": {
"chestEase": {
"t": "Brustumfangszugabe",
"d": "Steuert die Größe der Zugabe zum Brustumfang"
},
"waistEase": {
"t": "Taillenzugabe",
"d": "Steuert die Menge an Leichtigkeit in deiner Taille"
},
"bustSpanEase": {
"t": "Zugabe seitlicher Brustbereich",
"d": "Steuert die Größe der (horizontalen) Zugabe, zu deinem seitlichen Brustbereich, \nwenn Brustpunkt berechnet wird."
},
"shoulderToShoulderEase": {
"t": "Zugabe des Schulterabstandes",
"d": "Kontrolliert die Menge an Zugabe zwischen deinen Schultern. Liegt inital bei -0,5%, da Bella ein Grundschnitt erfüllt, welcher in der Branche verwendet wird."
},
"fullChestEaseReduction": {
"t": "Verringerung der Brustumfangszugabe",
"d": "Ermöglicht es dir den Spielraum an der Brust zu verringern, um dort einen engeren Sitz zu ermöglichen"
},
"backDartHeight": {
"t": "Höhe Rückenabnäher",
"d": "Steuert die Höhe des Rückenabnähers"
},
"bustDartLength": {
"t": "Länge des Brustabnähers",
"d": "Steuert die Länge des Brustabnähers"
},
"waistDartLength": {
"t": "Länge des Taillenabnähers",
"d": "Steuert die Länge des Taillenabnähers"
},
"bustDartCurve": {
"t": "Rundung Brustabnäher",
"d": "Steuert die Krümmung des Büstendarts"
},
"armholeDepth": {
"t": "Armlochtiefe",
"d": "Steuert die Tiefe des Armloches"
},
"backArmholeSlant": {
"t": "Hintere Armlochschiebung",
"d": "Dreht das Armloch leicht in seinem Drehpunkt"
},
"frontArmholeCurvature": {
"t": "Vordere Armlochkrümmung",
"d": "Steuert wie tief das Armloch nach vorne unten ausgeschnitten ist"
},
"backArmholeCurvature": {
"t": "Hintere Armlochkrümmung",
"d": "Steuert wie tief das Armloch nach hinten unten ausgeschnitten ist"
},
"frontArmholePitchDepth": {
"t": "Vordere Armlochtiefe",
"d": "Stellt die horizontale Position des Vorderarmlochpunktes fest"
},
"backArmholePitchDepth": {
"t": "Rückenarmloch-Tiefe",
"d": "Stellt die horizontale Position des Rückenlochpunktes fest"
},
"backNeckCutout": {
"t": "Ausschnitt im Nacken",
"d": "Steuert, wie tief der Nackenausschnit am Rücken ausfällt"
},
"backHemSlope": {
"t": "Neigung des hinteren Saumes",
"d": "Steuert den Hang des Saum auf der Rückseite"
},
"frontShoulderWidth": {
"t": "Vordere Schulterbreite",
"d": "Steuert die Schmalheit der vorderen Schultern relativ zum Rücken"
},
"highBustWidth": {
"t": "Oberbrustweite",
"d": "Erlaubt es dir die Oberbrustweite vorne zu optimieren"
}
}
}

View file

@ -1,87 +0,0 @@
{
"t": "Bella, patrón base de torso con pechos",
"d": "Bella es un patrón báse para personas con pechos.",
"p": {
"back": "Atrás",
"frontSideDart": "Frente"
},
"s": {},
"o": {
"chestEase": {
"t": "Holgura de pecho",
"d": "Controla la cantidad de facilidad en la parte más completa de tu cofre"
},
"waistEase": {
"t": "Holgura de cintura",
"d": "Controla la cantidad de facilidad en tu cintura"
},
"bustSpanEase": {
"t": "Facilidad de la expansión del polvo",
"d": "Controla la cantidad de facilidad (horizontal) que se agrega a tu superficie de busto al ubicar el punto de busto."
},
"shoulderToShoulderEase": {
"t": "Shoulder to Shoulder ease",
"d": "Controls the amount of ease between your shoulders. Initially set to -.5% because Bella implements a block that is used in the industry."
},
"fullChestEaseReduction": {
"t": "Full chest ease reduction",
"d": "Allows you to independently reduce the ease around the chest to make it fit tight(er) in that area"
},
"backDartHeight": {
"t": "Altura del dart trasero",
"d": "Controla la altura del dart posterior"
},
"bustDartLength": {
"t": "Longitud del dart del polvo",
"d": "Controla la longitud del polvo"
},
"waistDartLength": {
"t": "Longitud del dart de Waist",
"d": "Controla la longitud del dardo de la cintura"
},
"bustDartCurve": {
"t": "Curva darda de busto",
"d": "Controla la curvatura del polvo"
},
"armholeDepth": {
"t": "Profundidad del orificio",
"d": "Controla la profundidad del orificio"
},
"backArmholeSlant": {
"t": "Slant del orificio trasero",
"d": "Rota ligeramente el orificio alrededor de su punto de zanja"
},
"frontArmholeCurvature": {
"t": "Front armhole curvature",
"d": "Controls how deep the armhole is scooped out at the front bottom"
},
"backArmholeCurvature": {
"t": "Curvatura del orificio trasero",
"d": "Controla la profundidad del agujero de armadura en la parte trasera"
},
"frontArmholePitchDepth": {
"t": "Profundidad del tono del orificio delantero",
"d": "Modifica la posición horizontal del punto de giro del blindaje frontal"
},
"backArmholePitchDepth": {
"t": "Profundidad del tono del orificio trasero",
"d": "Modifica la posición horizontal del punto de giro del orificio trasero"
},
"backNeckCutout": {
"t": "Corte trasero del cuello",
"d": "Controla la profundidad de la apertura del cuello en la espalda"
},
"backHemSlope": {
"t": "Pendiente trasera",
"d": "Controla la pendiente del hem en la espalda"
},
"frontShoulderWidth": {
"t": "Ancho del hombro frontal",
"d": "Controla la estrechez de los hombros delanteros relativos a la parte trasera"
},
"highBustWidth": {
"t": "Ancho de bust alto",
"d": "Le permite ajustar el ancho del polvo alto en la parte frontal"
}
}
}

View file

@ -1,87 +0,0 @@
{
"t": "Buste de base Bella",
"d": "Bella est un bloc corporel de base pour les personnes qui ont le sein.",
"p": {
"back": "Retour",
"frontSideDart": "Avant"
},
"s": {},
"o": {
"chestEase": {
"t": "Aisance de poitrine",
"d": "Contrôle la quantité d'aisance au niveau le plus large de votre buste"
},
"waistEase": {
"t": "Aisance à la taille",
"d": "Contrôle la quantité d'aisance au niveau de la taille"
},
"bustSpanEase": {
"t": "Aisance de l'écart poitrine",
"d": "Contrôle la quantité d'aisance (horizontale) ajoutée à votre poitrine entre les 2 pointes de la poitrine."
},
"shoulderToShoulderEase": {
"t": "Aisance d'épaule à épaule",
"d": "Contrôle la quantité d'aisance entre vos épaules. Initialement réglé sur -.5% parce que Bella implémente un bloc qui est utilisé dans l'industrie."
},
"fullChestEaseReduction": {
"t": "Réduction de l'aisance de la poitrine",
"d": "Vous permet de réduire l'aisance de la poitrine indépendamment pour rendre plus seyant cette zone"
},
"backDartHeight": {
"t": "Hauteur de pince dos",
"d": "Contrôle la hauteur de pince dans le dos"
},
"bustDartLength": {
"t": "Longueur des pinces poitrine",
"d": "Contrôle la longueur de la pince dos"
},
"waistDartLength": {
"t": "Longueur de la pince de taille",
"d": "Contrôle la longueur de la pince de taille"
},
"bustDartCurve": {
"t": "Courbe de la pince poitrine",
"d": "Contrôle la courbure de la pince poitrine"
},
"armholeDepth": {
"t": "Profondeur d'emmanchure",
"d": "Contrôle la profondeur de l'emmanchure"
},
"backArmholeSlant": {
"t": "Inclinaison d'emmanchure dos",
"d": "Modifie légèrement l'inclinaison de courbe de l'emmanchure autour de son point de pivot"
},
"frontArmholeCurvature": {
"t": "Coube de l'emmanchure avant",
"d": "Contrôle la profondeur du bas de la courbure d'emmanchure sur le devant"
},
"backArmholeCurvature": {
"t": "Courbure de l'emmanchure arrière",
"d": "Contrôle la profondeur du bas de la courbure d'emmanchure dans le dos"
},
"frontArmholePitchDepth": {
"t": "Profondeur du point de pivot de l'emmanchure avant",
"d": "Modifie la position horizontale du point de pivot de l'emmanchure avant"
},
"backArmholePitchDepth": {
"t": "Profondeur du point de pivot de l'emmanchure dos",
"d": "Modifie la position horizontale du point de pivot de l'emmanchure dos"
},
"backNeckCutout": {
"t": "Arrondi de l'encolure au dos",
"d": "Contrôle la profondeur de l'encolure à l'arrière du cou"
},
"backHemSlope": {
"t": "Pente de l'ourlet dos",
"d": "Contrôle la pente de l'ourlet à l'arrière"
},
"frontShoulderWidth": {
"t": "Largeur d'épaule devant",
"d": "Contrôle l'étroitesse des longueurs d'épaules de devant par rapport au dos"
},
"highBustWidth": {
"t": "Largeur de buste supérieur",
"d": "Permet de modifier la largeur de buste supérieur à l'avant"
}
}
}

View file

@ -1,8 +1,3 @@
import en from './en.json' with { type: 'json' }
import de from './de.json' with { type: 'json' }
import es from './es.json' with { type: 'json' }
import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk }
export const i18n = { en }

View file

@ -1,87 +0,0 @@
{
"t": "Bella lichaam blok",
"d": "Bella is een basisorgaan voor mensen met borsten.",
"p": {
"back": "Achterzijde",
"frontSideDart": "Voorzijde"
},
"s": {},
"o": {
"chestEase": {
"t": "Overwijdte borst",
"d": "Bepaalt de hoeveelheid overwijdte aan het grootste deel van je borst"
},
"waistEase": {
"t": "Overwijdte taille",
"d": "Bepaalt de hoeveelheid overwijdte aan je taille"
},
"bustSpanEase": {
"t": "Overwijdte bustenwijdte",
"d": "Bepaalt de hoeveelheid (horizontaal) overwijdte die wordt toegevoegd aan uw bustewijdte bij het lokaliseren van het bustepunt."
},
"shoulderToShoulderEase": {
"t": "Shoulder to Shoulder ease",
"d": "Controls the amount of ease between your shoulders. Initially set to -.5% because Bella implements a block that is used in the industry."
},
"fullChestEaseReduction": {
"t": "Full chest ease reduction",
"d": "Allows you to independently reduce the ease around the chest to make it fit tight(er) in that area"
},
"backDartHeight": {
"t": "Hoogte neep rug",
"d": "Bepaalt de hoogte van de achterste neep"
},
"bustDartLength": {
"t": "Lengte busteneep",
"d": "Bepaalt de lengte van de buste-neep"
},
"waistDartLength": {
"t": "Lengte neep taille",
"d": "Bepaalt de lengte van de neep van de taille"
},
"bustDartCurve": {
"t": "Curve busteneep",
"d": "Bepaalt de kromming van de busteneep"
},
"armholeDepth": {
"t": "Diepte armsgat",
"d": "Bepaalt de diepte van het armsgat"
},
"backArmholeSlant": {
"t": "Schuin armsgat achter",
"d": "Het armsgat rond zijn toonhoogte roteert enigszins"
},
"frontArmholeCurvature": {
"t": "Front armhole curvature",
"d": "Controls how deep the armhole is scooped out at the front bottom"
},
"backArmholeCurvature": {
"t": "Kromming armsgat achter",
"d": "Bepaalt hoe diep het armsgat aan de achterste onderkant wordt uitgekoopt"
},
"frontArmholePitchDepth": {
"t": "Diepte armsgat vooraan",
"d": "Aanpassen van de horizontale plaatsing van het pitch voorste armsgat"
},
"backArmholePitchDepth": {
"t": "Diepte armsgat achteraan",
"d": "Aanpassen van de horizontale plaatsing van het armsgat achterin"
},
"backNeckCutout": {
"t": "Hals uitsnijding achteraan",
"d": "Bepaalt hoe diep de halsopening aan de achterkant wordt uitgekoopt"
},
"backHemSlope": {
"t": "Lope zoom achter",
"d": "Bepaalt de richtingscoëfficiënt van de zoom achteraan"
},
"frontShoulderWidth": {
"t": "Schouderbreedte vooraan",
"d": "Bepaalt de smalheid van de schouders vooraan ten opzichte van de achterkant"
},
"highBustWidth": {
"t": "Hoge buste-breedte",
"d": "Stelt je in staat om de breedte van de nachtbust vooraan te wijzigen"
}
}
}

View file

@ -1,87 +0,0 @@
{
"t": "Bella body block",
"d": "Bella is a basic body block for people with breasts.",
"p": {
"back": "Back",
"frontSideDart": "Front"
},
"s": {},
"o": {
"chestEase": {
"t": "Chest ease",
"d": "Controls the amount of ease at the fullest part of your chest"
},
"waistEase": {
"t": "Waist ease",
"d": "Controls the amount of ease at your waist"
},
"bustSpanEase": {
"t": "Bust span ease",
"d": "Controls the amount of (horizontal) ease added to your bust span when locating the bust point."
},
"shoulderToShoulderEase": {
"t": "Shoulder to Shoulder ease",
"d": "Controls the amount of ease between your shoulders. Initially set to -.5% because Bella implements a block that is used in the industry."
},
"fullChestEaseReduction": {
"t": "Full chest ease reduction",
"d": "Allows you to independently reduce the ease around the chest to make it fit tight(er) in that area"
},
"backDartHeight": {
"t": "Back dart height",
"d": "Controls the height of the back dart"
},
"bustDartLength": {
"t": "Bust dart length",
"d": "Controls the length of the bust dart"
},
"waistDartLength": {
"t": "Waist dart length",
"d": "Controls the length of the waist dart"
},
"bustDartCurve": {
"t": "Bust dart curve",
"d": "Controls the curvature of the bust dart"
},
"armholeDepth": {
"t": "Armhole depth",
"d": "Controls the depth of the armhole"
},
"backArmholeSlant": {
"t": "Back armhole slant",
"d": "Slightly rotates the armhole around its pitch point"
},
"frontArmholeCurvature": {
"t": "Front armhole curvature",
"d": "Controls how deep the armhole is scooped out at the front bottom"
},
"backArmholeCurvature": {
"t": "Back armhole curvature",
"d": "Controls how deep the armhole is scooped out at the back bottom"
},
"frontArmholePitchDepth": {
"t": "Front armhole pitch depth",
"d": "Tweaks the horizontal placement of the front armhole pitch point"
},
"backArmholePitchDepth": {
"t": "Back armhole pitch depth",
"d": "Tweaks the horizontal placement of the back armhole pitch point"
},
"backNeckCutout": {
"t": "Back neck cutout",
"d": "Controls how deep the neck opening is scooped out at at the back"
},
"backHemSlope": {
"t": "Back hem slope",
"d": "Controls the slope of the hem at the back"
},
"frontShoulderWidth": {
"t": "Front shoulder width",
"d": "Controls the narrowness of the front shoulders relative to the back"
},
"highBustWidth": {
"t": "High bust width",
"d": "Allows you to tweak the hight bust width at the front"
}
}
}

View file

@ -1,6 +1,6 @@
{
"name": "@freesewing/bella",
"version": "3.3.0-rc.1",
"version": "4.0.0",
"description": "A FreeSewing pattern for a womenswear bodice block",
"author": "Joost De Cock <joost@joost.at> (https://github.com/joostdecock)",
"homepage": "https://freesewing.org/",
@ -25,48 +25,39 @@
"sewing pattern"
],
"type": "module",
"module": "dist/index.mjs",
"module": "src/index.mjs",
"exports": {
".": {
"internal": "./src/index.mjs",
"default": "./dist/index.mjs"
}
".": "./src/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"
"testci": "NODE_OPTIONS=\"--conditions=internal\" npx mocha tests/*.test.mjs --reporter ../../tests/reporters/terse.js"
},
"peerDependencies": {
"@freesewing/core": "3.3.0-rc.1"
"@freesewing/core": "4.0.0"
},
"dependencies": {},
"devDependencies": {
"mocha": "10.4.0",
"chai": "5.1.1",
"@freesewing/models": "3.3.0-rc.1",
"@freesewing/plugin-timing": "3.3.0-rc.1"
"@freesewing/models": "4.0.0",
"@freesewing/plugin-timing": "4.0.0"
},
"files": [
"dist/*",
"src/",
"i18n/",
"about.json",
"README.md"
],
"publishConfig": {
"access": "public",
"tag": "next"
"tag": "latest"
},
"engines": {
"node": ">= 18.17.0 <22"
"node": ">= 20"
}
}

View file

@ -1,3 +1,5 @@
import { pctBasedOn } from '@freesewing/core'
export const back = {
name: 'bella.back',
measurements: [
@ -24,11 +26,17 @@ export const back = {
backCenterWaistReduction: 0.35,
collarFactor: 0.19,
// Fit
bustSpanEase: { pct: 10, min: 0, max: 20, menu: 'fit' },
chestEase: { pct: 11, min: 5, max: 20, menu: 'fit' },
bustSpanEase: { pct: 10, min: 0, max: 20, ...pctBasedOn('bustSpan'), menu: 'fit' },
chestEase: { pct: 11, min: 5, max: 20, ...pctBasedOn('chest'), 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' },
shoulderToShoulderEase: {
pct: -0.5,
min: -1,
max: 5,
...pctBasedOn('shoulderToShoulder'),
menu: 'fit',
},
waistEase: { pct: 5, min: 1, max: 20, ...pctBasedOn('waist'), menu: 'fit' },
// Darts
backDartHeight: { pct: 46, min: 38, max: 54, menu: 'darts' },
bustDartCurve: { pct: 100, min: -100, max: 100, menu: 'darts' },

View file

@ -1,12 +1,12 @@
import { Design } from '@freesewing/core'
import { data } from '../data.mjs'
import about from '../about.json' with { type: 'json' }
import { back } from './back.mjs'
import { frontSideDart } from './front-side-dart.mjs'
import { i18n } from '../i18n/index.mjs'
const Bella = new Design({
data,
data: about,
parts: [back, frontSideDart],
})
export { back, frontSideDart, Bella, i18n }
export { back, frontSideDart, Bella, i18n, about }

View file

@ -1,5 +1,5 @@
// This file is auto-generated | Any changes you make will be overwritten.
import { Bella, i18n } from '../src/index.mjs'
import { Bella, about, i18n } from '../src/index.mjs'
// Shared tests
import { testPatternConfig } from '../../../tests/designs/config.mjs'
@ -8,7 +8,7 @@ import { testPatternDrafting } from '../../../tests/designs/drafting.mjs'
import { testPatternSampling } from '../../../tests/designs/sampling.mjs'
// Test config
testPatternConfig(Bella)
testPatternConfig(Bella, about)
// Test translation
testPatternI18n(Bella, i18n)

View file

@ -9,24 +9,14 @@
><img src="https://img.shields.io/npm/l/@freesewing/benjamin.svg?label=License"
alt="License: MIT"/>
</a><a
href="https://deepscan.io/dashboard#view=project&tid=2114&pid=2993&bid=23256"
title="Code quality on DeepScan"
><img src="https://deepscan.io/api/teams/2114/projects/2993/branches/23256/badge/grade.svg"
alt="Code quality on DeepScan"/>
</a><a
href="https://github.com/freesewing/freesewing/issues?q=is%3Aissue+is%3Aopen+label%3Apkg%3Abenjamin"
title="Open issues tagged pkg:benjamin"
><img src="https://img.shields.io/github/issues/freesewing/freesewing/pkg:benjamin.svg?label=Issues"
alt="Open issues tagged pkg:benjamin"/>
</a><a
href="#contributors-"
title="All Contributors"
><img src="https://img.shields.io/badge/all_contributors-131-pink.svg"
alt="All Contributors"/>
</a></p><p align='center'><a
href="https://twitter.com/freesewing_org"
href="https://forum.freesewing.org"
title="Follow @freesewing_org on Twitter"
><img src="https://img.shields.io/badge/%F3%A0%80%A0-Follow%20us-blue.svg?logo=twitter&logoColor=white&logoWidth=15"
><img src="https://img.shields.io/badge/%F3%A0%80%A0-Forum-E4405F.svg?logo=discourse&logoColor=white&logoWidth=15"
alt="Follow @freesewing_org on Twitter"/>
</a><a
href="https://chat.freesewing.org"
@ -38,11 +28,6 @@
title="Become a FreeSewing Patron"
><img src="https://img.shields.io/badge/%F3%A0%80%A0-Support%20us-blueviolet.svg?logo=cash-app&logoColor=white&logoWidth=15"
alt="Become a FreeSewing Patron"/>
</a><a
href="https://instagram.com/freesewing_org"
title="Follow @freesewing_org on Twitter"
><img src="https://img.shields.io/badge/%F3%A0%80%A0-Follow%20us-E4405F.svg?logo=instagram&logoColor=white&logoWidth=15"
alt="Follow @freesewing_org on Twitter"/>
</a></p>
# @freesewing/benjamin
@ -59,7 +44,7 @@ A FreeSewing pattern for a bow tie
> FreeSewing is an open source project maintained by Joost De Cock and financially supported by the FreeSewing patrons.
>
> If you feel FreeSewing is worthwhile, and you can spend a few coins without
hardship, then you should [join us and become a patron](https://freesewing.org/community/join).
hardship, then you should [join us and become a patron](https://freesewing.eu/patrons/join).
## What am I looking at? 🤔
@ -76,7 +61,7 @@ npm run tips
> [!NOTE]
> If you don't want to set up a dev environment, you can run it in your browser:
>
> [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/freesewing/freesewing)
> [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://codeberg.org/freesewing/freesewing)
>
> We recommend that you fork our repository and then
> put `gitpod.io/#<entire-url-of-your-fork` into a browser
@ -86,7 +71,7 @@ npm run tips
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
If you're a maker, checkout [freesewing.eu](https://freesewing.eu/) 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/).
@ -98,7 +83,7 @@ functionality of the platform.
If you have NodeJS installed, you can try it right now by running:
```bash
npx @freesewing/new-design
npx @freesewing/studio
```
Getting started guides are available for:
@ -114,49 +99,45 @@ show you how to create your first parametric design.
To get started with FreeSewing, you can spin up our development environment with:
```bash
npx @freesewing/new-design
npx @freesewing/studio
```
To work with FreeSewing's monorepo, you'll need [NodeJS v18](https://nodejs.org), [lerna](https://lerna.js.org/) and [yarn](https://yarnpkg.com/) on your system.
Once you have those, clone (or fork) this repo and run `yarn kickstart`:
To work with FreeSewing's monorepo, you'll need [NodeJS v20](https://nodejs.org) on your system.
Once you have that, clone (or fork) this repo and run `npm run kickstart`:
```bash
git clone git@github.com:freesewing/freesewing.git
git clone git@codeberg.org:freesewing/freesewing.git
cd freesewing
yarn kickstart
npm run kickstart
```
## Links 👩‍💻
**Official channels**
- 💻 Makers website: [FreeSewing.org](https://freesewing.org)
- 💻 Developers website: [FreeSewing.dev](https://freesewing.dev)
- ✅ [Support](https://github.com/freesewing/freesewing/issues/new/choose),
[Issues](https://github.com/freesewing/freesewing/issues) &
[Discussions](https://github.com/freesewing/freesewing/discussions) on
[GitHub](https://github.com/freesewing/freesewing)
- 💻 Makers website: [FreeSewing.eu](https://freesewing.eu/)
- 💻 Developers website: [FreeSewing.dev](https://freesewing.dev/)
- ✅ [Support](https://forum.freesewing.eu/),
[Issues](https://codeberg.org/freesewing/freesewing/issues) &
[Codeberg](https://codeberg.org/freesewing/freesewing)
**Social media**
- 🐦 Twitter: [@freesewing_org](https://twitter.com/freesewing_org)
- 📷 Instagram: [@freesewing_org](https://instagram.com/freesewing_org)
- 🐘 Mastodon: [@freesewing](https://freesewing.social/@freesewing) on [FreeSewing.social](https://freesewing.social/)
- 🐘 Mastodon: [@joost](https://freesewing.social/@joost) on [FreeSewing.social](https://freesewing.social/)
**Places the FreeSewing community hangs out**
- 💬 [Forum](https://forum.freesewing.eu/)
- 💬 [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.
© [Joost De Cock](https://codeberg.org/joostdecock).
See [the license file](https://codeberg.org/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).
For [Support](https://freesewing.eu/support), please use the [forum](https://forum.freesewing.eu).

View file

@ -0,0 +1,17 @@
{
"id": "benjamin",
"name": "Benjamin bow tie",
"code": "Wouter Van Wageningen",
"description": "A FreeSewing pattern for a bow tie",
"design": "Wouter Van Wageningen",
"difficulty": 3,
"tags": [
"accessories"
],
"techniques": [
"precision",
"interfacing"
],
"version": "4.0.0",
"pkg": "@freesewing/benjamin"
}

View file

@ -1,35 +0,0 @@
/* 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()

View file

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

View file

@ -1,50 +0,0 @@
{
"t": "Benjamin, die Fliege",
"d": "Benjamin ist eine Schleife - oder Fliege - mit vier unterschiedlichen Formvariationen.",
"p": {
"base": "Base",
"bow1": "Fliege",
"bow2": "Fliege",
"bow3": "Fliege",
"ribbon": "Einstellband"
},
"s": {},
"o": {
"adjustmentRibbon": {
"t": "Einstellband",
"d": "Einstellband verwenden oder nicht"
},
"bandLength": {
"t": "Bandlänge",
"d": "Lände des Bandes"
},
"tipWidth": {
"t": "Spitzenbreite",
"d": "Breite der Spitzen"
},
"knotWidth": {
"t": "Knotenbreite",
"d": "Breite des Knotens"
},
"bowLength": {
"t": "Fliegenlänge",
"d": "Länge der Fliege (wenn geknotet)"
},
"bowStyle": {
"t": "Fliegen-Stil",
"d": "Stil der Fliege"
},
"endStyle": {
"t": "Enden-Stil",
"d": "Stil für die Enden der Fliege"
},
"collarEase": {
"t": "Kragen Zugabe",
"d": "Die Menge an Zugabe an deinem Hals"
},
"ribbonWidth": {
"t": "Bänderbreite",
"d": "Breite des Bandes"
}
}
}

View file

@ -1,50 +0,0 @@
{
"t": "Benjamin, pajarita",
"d": "Benjamin es un patrón de pajarita con cuatro formas a elegir.",
"p": {
"base": "Base",
"bow1": "Pajarita",
"bow2": "Pajarita",
"bow3": "Pajarita",
"ribbon": "Banda"
},
"s": {},
"o": {
"adjustmentRibbon": {
"t": "Cinta de ajuste",
"d": "Incluir o no una cinta de ajuste"
},
"bandLength": {
"t": "Longitud de la banda",
"d": "Longitud de la banda"
},
"tipWidth": {
"t": "Ancho de la punta",
"d": "Ancho de las puntas"
},
"knotWidth": {
"t": "Ancho de nudo",
"d": "Ancho del nudo"
},
"bowLength": {
"t": "Longitud del lazo",
"d": "Longitud del lazo (cuando está anudado)"
},
"bowStyle": {
"t": "Estilo del lazo",
"d": "Estilo del lazo"
},
"endStyle": {
"t": "Estilo de las puntas",
"d": "Estilo de las puntas del lazo"
},
"collarEase": {
"t": "Facilidad de cuello",
"d": "The amount of ease at your neck"
},
"ribbonWidth": {
"t": "Ribbon width",
"d": "Width of the ribbon"
}
}
}

View file

@ -1,50 +0,0 @@
{
"t": "Nœud papillon Benjamin",
"d": "Benjamin est un nœud papillon avec 4 possibilités de styles différents.",
"p": {
"base": "Base",
"bow1": "Nœud",
"bow2": "Nœud",
"bow3": "Nœud",
"ribbon": "Bande"
},
"s": {},
"o": {
"adjustmentRibbon": {
"t": "Ruban d'ajustement",
"d": "Si vous souhaitez inclure ou non un ruban d'ajustement"
},
"bandLength": {
"t": "Longueur de bande",
"d": "Longueur de la bande"
},
"tipWidth": {
"t": "Largeur de pointe",
"d": "Largeur des pointes"
},
"knotWidth": {
"t": "Largeur du noeud",
"d": "Largeur du nœud"
},
"bowLength": {
"t": "Longueur de nœud",
"d": "Longueur du nœud (lorsqu'il est noué)"
},
"bowStyle": {
"t": "Style de nœud",
"d": "Style du nœud"
},
"endStyle": {
"t": "Style de l'extrémité",
"d": "Style des extrémités du noeud"
},
"collarEase": {
"t": "Aisance du col",
"d": "La quantité d'aisance à votre cou"
},
"ribbonWidth": {
"t": "Largeur du ruban d'ajustement",
"d": "Largeur du ruban"
}
}
}

View file

@ -1,8 +1,3 @@
import en from './en.json' with { type: 'json' }
import de from './de.json' with { type: 'json' }
import es from './es.json' with { type: 'json' }
import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk }
export const i18n = { en }

View file

@ -1,50 +0,0 @@
{
"t": "Benjamin vlinderdas",
"d": "Benjamin is een vlinderdas met vier verschillende mogelijke vormen.",
"p": {
"base": "Base",
"bow1": "Vlinderdas",
"bow2": "Vlinderdas",
"bow3": "Vlinderdas",
"ribbon": "Band"
},
"s": {},
"o": {
"adjustmentRibbon": {
"t": "Aanpaslintje",
"d": "Of je wel of geen aanpaslintje wil"
},
"bandLength": {
"t": "Lengte band",
"d": "Lengte van de band"
},
"tipWidth": {
"t": "Tip breedte",
"d": "Breedte van de punten"
},
"knotWidth": {
"t": "Knoop breedte",
"d": "Breedte van de knoop"
},
"bowLength": {
"t": "Lengte strik",
"d": "De lengte van gestrikt (gestrikt)"
},
"bowStyle": {
"t": "Stijl strik",
"d": "Stijl van de strik"
},
"endStyle": {
"t": "Puntvorm",
"d": "Stijl van de puntjes van de strik"
},
"collarEase": {
"t": "Overwijdte kraag",
"d": "The amount of ease at your neck"
},
"ribbonWidth": {
"t": "Ribbon width",
"d": "Width of the ribbon"
}
}
}

View file

@ -1,50 +0,0 @@
{
"t": "Benjamin bow tie",
"d": "Benjamin is a bow tie pattern with four different shape options.",
"p": {
"base": "Base",
"bow1": "Bow",
"bow2": "Bow",
"bow3": "Bow",
"ribbon": "Ribbon"
},
"s": {},
"o": {
"adjustmentRibbon": {
"t": "Adjustment ribbon",
"d": "Whether or not to include an adjustment ribbon"
},
"bandLength": {
"t": "Band length",
"d": "Length of the band"
},
"tipWidth": {
"t": "Tip width",
"d": "Width of the tips"
},
"knotWidth": {
"t": "Knot width",
"d": "Width of the knot"
},
"bowLength": {
"t": "Bow length",
"d": "Length of the bow (when knotted)"
},
"bowStyle": {
"t": "Bow style",
"d": "Style of the bow"
},
"endStyle": {
"t": "End style",
"d": "Style of the bow ends"
},
"collarEase": {
"t": "Collar ease",
"d": "The amount of ease at your neck"
},
"ribbonWidth": {
"t": "Ribbon width",
"d": "Width of the ribbon"
}
}
}

View file

@ -1,6 +1,6 @@
{
"name": "@freesewing/benjamin",
"version": "3.3.0-rc.1",
"version": "4.0.0",
"description": "A FreeSewing pattern for a bow tie",
"author": "woutervdub (https://github.com/woutervdub)",
"homepage": "https://freesewing.org/",
@ -25,48 +25,39 @@
"sewing pattern"
],
"type": "module",
"module": "dist/index.mjs",
"module": "src/index.mjs",
"exports": {
".": {
"internal": "./src/index.mjs",
"default": "./dist/index.mjs"
}
".": "./src/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"
"testci": "NODE_OPTIONS=\"--conditions=internal\" npx mocha tests/*.test.mjs --reporter ../../tests/reporters/terse.js"
},
"peerDependencies": {
"@freesewing/core": "3.3.0-rc.1"
"@freesewing/core": "4.0.0"
},
"dependencies": {},
"devDependencies": {
"mocha": "10.4.0",
"chai": "5.1.1",
"@freesewing/models": "3.3.0-rc.1",
"@freesewing/plugin-timing": "3.3.0-rc.1"
"@freesewing/models": "4.0.0",
"@freesewing/plugin-timing": "4.0.0"
},
"files": [
"dist/*",
"src/",
"i18n/",
"about.json",
"README.md"
],
"publishConfig": {
"access": "public",
"tag": "next"
"tag": "latest"
},
"engines": {
"node": ">= 18.17.0 <22"
"node": ">= 20"
}
}

View file

@ -1,3 +1,5 @@
import { pctBasedOn } from '@freesewing/core'
function draftBenjaminBase({
store,
sa,
@ -236,7 +238,7 @@ export const base = {
bandLength: 0.17,
adjustmentRibbonWidth: 20,
// Fit options
collarEase: { pct: 3, min: 0, max: 6, menu: 'fit' },
collarEase: { pct: 3, min: 0, max: 6, ...pctBasedOn('neck'), menu: 'fit' },
adjustmentRibbon: { bool: false, menu: 'fit' },
// Style options
tipWidth: { pct: 15, min: 0, max: 20, menu: 'style' },

View file

@ -1,5 +1,5 @@
import { Design } from '@freesewing/core'
import { data } from '../data.mjs'
import about from '../about.json' with { type: 'json' }
import { bow1 } from './bow1.mjs'
import { bow2 } from './bow2.mjs'
import { bow3 } from './bow3.mjs'
@ -8,9 +8,9 @@ import { i18n } from '../i18n/index.mjs'
// Setup our new design
const Benjamin = new Design({
data,
data: about,
parts: [bow1, bow2, bow3, collarBand],
})
// Named exports
export { bow1, bow2, bow3, collarBand, Benjamin, i18n }
export { bow1, bow2, bow3, collarBand, Benjamin, i18n, about }

View file

@ -1,5 +1,5 @@
// This file is auto-generated | Any changes you make will be overwritten.
import { Benjamin, i18n } from '../src/index.mjs'
import { Benjamin, about, i18n } from '../src/index.mjs'
// Shared tests
import { testPatternConfig } from '../../../tests/designs/config.mjs'
@ -8,7 +8,7 @@ import { testPatternDrafting } from '../../../tests/designs/drafting.mjs'
import { testPatternSampling } from '../../../tests/designs/sampling.mjs'
// Test config
testPatternConfig(Benjamin)
testPatternConfig(Benjamin, about)
// Test translation
testPatternI18n(Benjamin, i18n)

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