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}`,
`**/prebuild/**/*.${jsSuffixes}`, `**/prebuild/**/*.${jsSuffixes}`,
`**/scripts/**/*.${jsSuffixes}`, `**/scripts/**/*.${jsSuffixes}`,
`packages/new-design/lib/**/*.${jsSuffixes}`, `packages/studio/lib/*.${jsSuffixes}`,
`sites/backend/**/*.${jsSuffixes}`, `sites/backend/**/*.${jsSuffixes}`,
`sites/*/mdx/**/*.${jsSuffixes}`, `sites/*/mdx/**/*.${jsSuffixes}`,
`sites/*/themes/**/*.${jsSuffixes}`, `sites/*/themes/**/*.${jsSuffixes}`,
@ -60,16 +60,6 @@ module.exports = {
'no-console': 'off', 'no-console': 'off',
}, },
}, },
{
files: frontendFiles,
excludedFiles: nodeFiles,
extends: ['next'],
settings: {
next: {
rootDir: 'sites/dev/',
},
},
},
{ {
files: [`**/*.${jsSuffixes}{,.mustache}`], files: [`**/*.${jsSuffixes}{,.mustache}`],
excludedFiles: [].concat(mongoFiles, nodeFiles, frontendFiles), 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. # See https://help.github.com/ignore-files/ for more about ignoring files.
dump dump
production.sqlite production.sqlite
.husky
# .env # .env
.env .env
*.key *.key
*.env
# Plugins # Plugins
plugins/plugin-theme/src/bundle.css.js plugins/plugin-theme/src/bundle.css.js
@ -14,16 +16,17 @@ plugins/plugin-theme/css
packages/core/coverage packages/core/coverage
packages/*/report packages/*/report
# Any NPM or Yarn lock files # Any Yarn lock files
designs/*/package-lock.json designs/*/package-lock.json
designs/*/yarn.lock designs/*/yarn.lock
packages/*/package-lock.json packages/*/package-lock.json
packages/*/yarn.lock packages/*/yarn.lock
plugins/*/package-lock.json plugins/*/package-lock.json
plugins/*/yarn.lock plugins/*/yarn.lock
yarn.lock
# NPM lock files for sites (we use yarn) # Yarn lock files for sites (we use npm)
sites/*/package-lock.json sites/*/yarn.lock
# Nx cache # Nx cache
.nx/cache .nx/cache
@ -42,26 +45,16 @@ packages/new-design/shared/.gitignore
packages/new-design/lib/banner.mjs packages/new-design/lib/banner.mjs
sites/*/public/img/og/* sites/*/public/img/og/*
# Orgdocs prebuild artifacts # Org prebuild artifacts
sites/orgdocs/src/lib/designs.mjs sites/org/src/lib/designs.mjs
sites/orgdocs/src/lib/designinfo.mjs sites/org/src/lib/designinfo.mjs
sites/orgdocs/src/lib/i18n.mjs sites/org/src/lib/i18n.mjs
sites/orgdocs/docs/designs/*/options/readme.mdx sites/org/docs/designs/*/options/readme.mdx
sites/orgdocs/authors.json sites/org/authors.json
sites/orgdocs/showcase-tags.mjs sites/org/showcase-tags.mjs
sites/org/design-examples.mjs
# Lab auto-generated content sites/org/docs/designs/*.mdx
sites/lab/lib sites/org/recent-blog-posts.mjs
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
# sde auto-generated content # sde auto-generated content
sites/sde/public/android-chrome-192x192.png 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/safari-pinned-tab.svg
sites/dev/public/site.webmanifest 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 dependencies
node_modules node_modules
# Build folders # Build folders
dist dist
build build
export
# But don't ignore point/dist reference
!/sites/dev/docs/reference/api/point/dist/
# Prebuild files # Prebuild files
prebuild/*.json prebuild/*.json
@ -147,3 +130,6 @@ scripts/verdaccio.sh
# e2e test results # e2e test results
sites/*/playwright-report 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 .all-contributorsrc
.nvmrc .nvmrc
ansible.cfg 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 ## Unreleased
## 4.0.0 (2024-04-01)
### bibi ### bibi
#### Changed #### Changed
@ -133,8 +136,25 @@
- The `withCondition` named export is deprecated and will always return true. - 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 ### 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 #### Added
- The `Path.rotate()` method was added to the core API. - 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 - 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) ## 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. - 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) ## 3.1.0 (2023-12-26)
@ -424,12 +462,6 @@
- Make Path.split() more robust when handling edge-case. Fixes - Make Path.split() more robust when handling edge-case. Fixes
- Prevent utils.circlesIntersect() from running sqrt on a negative number. 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) ## 3.0.0 (2023-09-30)
@ -675,16 +707,6 @@
- Make generatePartTransform a named export - 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) ## 2.21.2 (2022-06-30)
@ -1092,8 +1114,24 @@
- Migrated from Rollup to Esbuild for all builds - 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. - 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 ### models
#### Changed
- Migrated from Rollup to Esbuild for all builds
### utils
#### Changed #### Changed
- Migrated from Rollup to Esbuild for all builds - Migrated from Rollup to Esbuild for all builds
@ -1202,12 +1240,6 @@
- Fix bug in Svg.escapeText() that only escaped the first quote - 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) ## 2.20.4 (2022-01-28)
@ -1231,6 +1263,12 @@
## 2.20.2 (2022-01-27) ## 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) ## 2.20.1 (2022-01-27)
@ -1559,6 +1597,12 @@
- Added support for `settings.scale` - 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) ## 2.19.9 (2022-01-09)
@ -1991,6 +2035,13 @@
- Pattern.on() is now chainable as it returns the Pattern object - 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 ### snapseries
#### Added #### 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) - 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) ## 2.17.4 (2021-08-20)
@ -2049,6 +2110,18 @@
## 2.17.3 (2021-08-16) ## 2.17.3 (2021-08-16)
### i18n
#### Added
- New translations
### utils
#### Fixed
- Added missing `bustPointToUnderbust` measurement to `neckstimate`
## 2.17.2 (2021-08-15) ## 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) - 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 ### models
#### Added #### 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) - 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) ## 2.16.2 (2021-05-05)
### i18n
#### Changed
- String updates
## 2.16.1 (2021-05-30) ## 2.16.1 (2021-05-30)
@ -2395,6 +2486,19 @@
- Changed `department` setting in config in line with new grouping - 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) ## 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) - 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) ## 2.15.4 (2021-05-08)
@ -2554,6 +2664,13 @@
- Don't round coordinates internally to avoid path.split misses - 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) ## 2.14.0 (2021-03-07)
@ -2569,6 +2686,12 @@
- Replaced grainline indicator on pocket with cut-on-fold indicator - Replaced grainline indicator on pocket with cut-on-fold indicator
### i18n
#### Added
- Added translations for Cornelius
## 2.13.2 (2021-02-21) ## 2.13.2 (2021-02-21)
@ -2617,6 +2740,12 @@
- Added missing sleeve notch on yoke - Added missing sleeve notch on yoke
### utils
#### Added
- Pass pattern handle to tiler
## 2.13.0 (2021-02-13) ## 2.13.0 (2021-02-13)
@ -2670,6 +2799,12 @@
- Make sure roudEnd and roundStart points are always available - Make sure roudEnd and roundStart points are always available
### i18n
#### Added
- Translation for Hortensia
## 2.12.1 (2021-01-27) ## 2.12.1 (2021-01-27)
@ -2794,6 +2929,16 @@
- Removed unused lengthBonus option - Removed unused lengthBonus option
### i18n
#### Changed
- New strings for new features
#### Fixed
- Type in Simon title
## 2.10.7 (2020-11-18) ## 2.10.7 (2020-11-18)
@ -2809,6 +2954,12 @@
## 2.10.5 (2020-11-14) ## 2.10.5 (2020-11-14)
### i18n
#### Fixed
- Added missing `cty.` translations to non-English language files
## 2.10.4 (2020-11-13) ## 2.10.4 (2020-11-13)
@ -2871,6 +3022,18 @@
- Added the `info` type to raised events - Added the `info` type to raised events
- Added support for conditional loading of plugins - 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) ## 2.8.1 (2020-08-16)
@ -2981,6 +3144,12 @@
- Added a new `debug` setting - Added a new `debug` setting
- Shorthand now proxies objects to allow debug and raise - 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) ## 2.7.0 (2020-07-12)
@ -3258,6 +3427,13 @@
- [Properly escape quotes in imperial units](https://github.com/freesewing/freesewing/issues/437) - [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 ### models
#### Changed #### Changed
@ -3266,6 +3442,21 @@
- Ported models to the crotchDepth measurement. See [#425](https://github.com/freesewing/freesewing/issues/425) - Ported models to the crotchDepth measurement. See [#425](https://github.com/freesewing/freesewing/issues/425)
- Removed `Circumference` suffix from measurement names - 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) ## 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 - 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()` - 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) ## 2.5.0 (2020-04-05)
@ -3319,9 +3516,21 @@
- Diana is a top with a draped neck - Diana is a top with a draped neck
### i18n
#### Added
- title, description, and options for Dianna
## 2.4.6 (2020-03-23) ## 2.4.6 (2020-03-23)
### i18n
#### Fixed
- Fixed an bug in the i18n package
## 2.4.5 (2020-03-19) ## 2.4.5 (2020-03-19)
@ -3337,6 +3546,12 @@
- Check whether frontScyeDart option is zero prior to implementing it - 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) ## 2.4.4 (2020-03-15)
@ -3373,12 +3588,30 @@
## 2.4.3 (2020-03-12) ## 2.4.3 (2020-03-12)
### i18n
#### Added
- Added more translations
## 2.4.2 (2020-03-08) ## 2.4.2 (2020-03-08)
### i18n
#### Added
- Added more strings
## 2.4.1 (2020-03-04) ## 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) ## 2.4.0 (2020-02-29)
@ -3542,12 +3775,34 @@
- Added the `Path.noop()` method - Added the `Path.noop()` method
- Added the `Path.insop()` methods - 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 ### models
#### Changed #### Changed
- Extended the menswear size range to have 10 different sizes, just like womenswear - 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) ## 2.1.9 (2020-01-18)
@ -3585,6 +3840,12 @@
## 2.1.6 (2019-11-24) ## 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) ## 2.1.5 (2019-11-19)
@ -3594,12 +3855,40 @@
## 2.1.3 (2019-10-18) ## 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) ## 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) ## 2.1.1 (2019-10-13)
### utils
#### Fixed
- Fixed an issue with the formatMm method not adding units
## 2.1.0 (2019-10-06) ## 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. - 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) ## 2.0.4 (2019-09-27)
@ -3663,6 +3969,12 @@
- [#106](https://github.com/freesewing/freesewing/issues/106): Fix incorrect hem allowance - [#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) ## 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 - [#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 - [#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) ## 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 - [#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) ## 2.0.0 (2019-08-25)
@ -3877,6 +4207,12 @@
### core ### core
#### Added
- Initial release
### i18n
#### Added #### Added
- Initial release - Initial release
@ -3893,4 +4229,10 @@
- Initial release - Initial release
### utils
#### Added
- Initial release

View file

@ -24,11 +24,6 @@
><img src="https://img.shields.io/badge/all_contributors-131-pink.svg" ><img src="https://img.shields.io/badge/all_contributors-131-pink.svg"
alt="All Contributors"/> alt="All Contributors"/>
</a></p><p align='center'><a </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" href="https://discord.freesewing.org"
title="Chat with us on Discord" title="Chat with us on Discord"
><img src="https://img.shields.io/discord/698854858052075530?label=Chat%20on%20Discord" ><img src="https://img.shields.io/discord/698854858052075530?label=Chat%20on%20Discord"
@ -38,11 +33,6 @@
title="Become a FreeSewing Patron" 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" ><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"/> 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> </a></p>
# FreeSewing # FreeSewing
@ -54,7 +44,7 @@
> FreeSewing is an open source project maintained by Joost De Cock and financially supported by the FreeSewing patrons. > 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 > 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? 🤔 ## 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. 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. sewing patterns adapted to your measurements.
If you're a developer, the FreeSewing documentation lives at [freesewing.dev](https://freesewing.dev/). 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: If you have NodeJS installed, you can try it right now by running:
```bash ```bash
npx @freesewing/new-design npx @freesewing/studio
``` ```
Getting started guides are available for: 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: To get started with FreeSewing, you can spin up our development environment with:
```bash ```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. 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 `yarn kickstart`: Once you have those, clone (or fork) this repo and run `npm run kickstart`:
```bash ```bash
git clone git@github.com:freesewing/freesewing.git git clone git@codeberg.org:freesewing/freesewing.git
cd freesewing cd freesewing
yarn kickstart npm run kickstart
``` ```
## Links 👩‍💻 ## Links 👩‍💻
**Official channels** **Official channels**
- 🪡 Makers website: [FreeSewing.org](https://freesewing.org) - 🪡 Makers website: [FreeSewing.eu](https://freesewing.eu)
- 💻 Developers website: [FreeSewing.dev](https://freesewing.dev) - 💻 Developers website: [FreeSewing.dev](https://freesewing.dev)
**Social media** **Social media**
- 📷 Instagram: [@freesewing_org](https://instagram.com/freesewing_org) - 🐘 Mastodon: [@freesewing](https://freesewing.social/@freesewing) on [FreeSewing.social](https://freesewing.social/)
- 🐘 Mastodon: [freesewing.social](https://freesewing.social/) - 🐘 Mastodon: [@joost](https://freesewing.social/@joost) on [FreeSewing.social](https://freesewing.social/)
**Places the FreeSewing community hangs out** **Places the FreeSewing community hangs out**
- 💬 [Forum](https://forum.freesewing.eu/)
- 💬 [Discord](https://discord.freesewing.org/) - 💬 [Discord](https://discord.freesewing.org/)
- 💬 [Facebook](https://www.facebook.com/groups/627769821272714/)
- 💬 [Reddit](https://www.reddit.com/r/freesewing/) - 💬 [Reddit](https://www.reddit.com/r/freesewing/)
## Where to get help 🤯 ## Where to get help 🤯
Check our [support page](https://freesewing.org/support), or use For [Support](https://freesewing.eu/support), please use the [forum](https://forum.freesewing.eu).
the [Issues](https://github.com/freesewing/freesewing/issues) &
[Discussions](https://github.com/freesewing/freesewing/discussions) on
[GitHub](https://github.com/freesewing/freesewing).
## License: MIT 🤓 ## License: MIT 🤓
© [Joost De Cock](https://github.com/joostdecock). © [Joost De Cock](https://github.com/joostdecock).
See [the license file](https://github.com/freesewing/freesewing/blob/develop/LICENSE) for details. See [the license file](https://github.com/freesewing/freesewing/blob/develop/LICENSE) for details.
## Contributors ✨ ## Contributors ✨
Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)): 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' link: 'https://opensource.org/licenses/MIT'
img: 'https://img.shields.io/npm/l/{{{fullname}}}.svg?label=License' img: 'https://img.shields.io/npm/l/{{{fullname}}}.svg?label=License'
alt: 'License: MIT' 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: contributors:
link: '#contributors-' link: '#contributors-'
img: 'https://img.shields.io/badge/all_contributors-{{ name }}-pink.svg' img: 'https://img.shields.io/badge/all_contributors-{{ name }}-pink.svg'
alt: 'All Contributors' alt: 'All Contributors'
_social: _social:
twitter: forum:
link: 'https://twitter.com/freesewing_org' link: 'https://forum.freesewing.org'
img: 'https://img.shields.io/badge/%F3%A0%80%A0-Follow%20us-blue.svg?logo=twitter&logoColor=white&logoWidth=15' 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' alt: 'Follow @freesewing_org on Twitter'
discord: discord:
link: 'https://chat.freesewing.org' link: 'https://chat.freesewing.org'
@ -32,7 +24,3 @@ _social:
link: 'https://freesewing.org/patrons/join' 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' 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' 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: 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: Added:
collection:
- Added a new `@freesewing/collection` package that bundles all our designs
config:
- Added a new `@freesewing/config` package for shared configuration
core: core:
- The `Path.rotate()` method was added to the core API. - The `Path.rotate()` method was added to the core API.
- The `Path.circleSegment()` 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: Changed:
brian: brian:

View file

@ -13,6 +13,9 @@ _types:
dev: dev:
'mocha': *mocha 'mocha': *mocha
'chai': *chai 'chai': *chai
#
# Designs
#
aaron: aaron:
peer: peer:
'@freesewing/brian': *freesewing '@freesewing/brian': *freesewing
@ -45,21 +48,6 @@ charlie:
peer: peer:
'@freesewing/titan': *freesewing '@freesewing/titan': *freesewing
'@freesewing/snapseries': *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: diana:
peer: peer:
'@freesewing/brian': *freesewing '@freesewing/brian': *freesewing
@ -89,15 +77,6 @@ lily:
peer: peer:
'@freesewing/titan': *freesewing '@freesewing/titan': *freesewing
'@freesewing/paco': *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: noble:
peer: peer:
'@freesewing/bella': *freesewing '@freesewing/bella': *freesewing
@ -105,12 +84,6 @@ paco:
peer: peer:
'@freesewing/titan': *freesewing '@freesewing/titan': *freesewing
'@freesewing/snapseries': *freesewing '@freesewing/snapseries': *freesewing
core-plugins:
dev:
'@freesewing/plugin-annotations': *freesewing
'@freesewing/plugin-mirror': *freesewing
'@freesewing/plugin-round': *freesewing
'@freesewing/plugin-sprinkle': *freesewing
plugintest: plugintest:
peer: peer:
'@freesewing/plugin-annotations': *freesewing '@freesewing/plugin-annotations': *freesewing
@ -124,24 +97,9 @@ plugintest:
'@freesewing/plugin-sprinkle': *freesewing '@freesewing/plugin-sprinkle': *freesewing
'@freesewing/plugin-svgattr': *freesewing '@freesewing/plugin-svgattr': *freesewing
'@freesewing/plugin-theme': *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: sandy:
_:
'@freesewing/plugin-ringsector': *freesewing
peer: peer:
'@freesewing/snapseries': *freesewing '@freesewing/snapseries': *freesewing
shin: shin:
@ -184,266 +142,139 @@ yuri:
'@freesewing/brian': *freesewing '@freesewing/brian': *freesewing
'@freesewing/plugin-bust': *freesewing '@freesewing/plugin-bust': *freesewing
# Sites go here #
# Plugins
backend: #
core-plugins:
_: _:
'@aws-sdk/client-sesv2': '3.592.0' '@freesewing/plugin-annotations': *freesewing
'@prisma/client': &prisma '5.15.0' '@freesewing/plugin-measurements': *freesewing
'bcryptjs': '2.4.3' '@freesewing/plugin-mirror': *freesewing
'cors': '2.8.5' '@freesewing/plugin-round': *freesewing
'dotenv': '16.4.5' '@freesewing/plugin-sprinkle': *freesewing
'express': '4.19.2' '@freesewing/plugin-bin-pack': *freesewing
'js-yaml': &jsyaml '4.1.0'
'lodash.get': *_get #
'mustache': *mustache # Packages
'otplib': '12.0.1' #
'passport': '0.7.0' core:
'passport-http': '0.3.0' _:
'passport-jwt': '4.0.1' '@freesewing/core-plugins': *freesewing
'pino': '9.2.0' 'bezier-js': '6.1.4'
'qrcode': '1.5.3' 'hooks': '0.3.2'
'swagger-ui-dist': '5.17.10' 'lodash.get': &_get '4.4.2'
'swagger-ui-express': '5.0.0' 'lodash.set': &_set '4.3.2'
'lodash.unset': &_unset '4.5.2'
'lodash.clonedeep': '^4.5.0'
dev: dev:
'chai': *chai 'eslint': &eslint '8.57.0'
'chai-http': '5.1.1' 'nyc': '17.1.0'
'esbuild': '0.21.3'
'mocha': *mocha 'mocha': *mocha
'mocha-steps': '1.3.0' 'chai': *chai
'nodemon': '3.1.0' 'sinon': &sinon '^18.0.0'
'prisma': *prisma collection:
dev:
_: _:
'@mdx-js/mdx': &mdx '^3.0.0' # Designs
'@mdx-js/react': *mdx '@freesewing/aaron': *freesewing
'@mdx-js/runtime': &mdxRuntime '2.0.0-next.9' '@freesewing/albert': *freesewing
'@next/bundle-analyzer': &next '14.2.3' '@freesewing/bee': *freesewing
'@tailwindcss/typography': &tailwindTypography '0.5.13' '@freesewing/bella': *freesewing
'algoliasearch': &algoliasearch '4.23.3' '@freesewing/benjamin': *freesewing
'daisyui': &daisyui '4.11.1' '@freesewing/bent': *freesewing
'lodash.get': *_get '@freesewing/bibi': *freesewing
'lodash.orderby': &_orderby '4.6.0' '@freesewing/bob': *freesewing
'lodash.set': *_set '@freesewing/bonny': *freesewing
'next': *next '@freesewing/breanna': *freesewing
'react': &react '18.3.1' '@freesewing/brian': *freesewing
'react-copy-to-clipboard': &reactCopyToClipboard '5.1.0' '@freesewing/bruce': *freesewing
'react-dom': *react '@freesewing/carlita': *freesewing
'react-hotkeys-hook': &reactHotkeysHook '4.5.0' '@freesewing/carlton': *freesewing
'react-instantsearch-dom': &reactInstantsearchDom '6.40.4' '@freesewing/cathrin': *freesewing
'react-instantsearch-hooks-web': &reactInstantsearchHooksWeb '6.47.3' '@freesewing/charlie': *freesewing
'react-swipeable': &reactSwipeable '7.0.1' '@freesewing/cornelius': *freesewing
'react-timeago': &reactTimeago '7.2.0' '@freesewing/diana': *freesewing
'rehype-autolink-headings': &rehypeAutolinkHeadings '7.1.0' '@freesewing/florence': *freesewing
'rehype-highlight': &rehypeHighlight '7.0.0' '@freesewing/florent': *freesewing
'rehype-sanitize': &rehypeSanitize '6.0.0' '@freesewing/gozer': *freesewing
'rehype-slug': &rehypeSlug '6.0.0' '@freesewing/hi': *freesewing
'rehype-stringify': &rehypeStringify '10.0.1' '@freesewing/holmes': *freesewing
'remark': &remark 15.0.1 '@freesewing/hortensia': *freesewing
# see: https://github.com/npm/cli/issues/2610#issuecomment-1295371753 '@freesewing/huey': *freesewing
'remark-copy-linked-files': &remarkCopyLinkedFiles 'git+https://git@github.com/joostdecock/remark-copy-linked-files' '@freesewing/hugo': *freesewing
'remark-gfm': &remarkGfm '4.0.0' '@freesewing/jaeger': *freesewing
'strip-markdown': &stripMarkdown 6.0.0 '@freesewing/jane': *freesewing
dev: &nextSiteDevDependencies '@freesewing/lily': *freesewing
'autoprefixer': &autoprefixer '10.4.19' '@freesewing/lucy': *freesewing
'js-yaml': &jsYaml '4.1.0' '@freesewing/lumina': *freesewing
'postcss': &postcss '8.4.38' '@freesewing/lumira': *freesewing
'remark-extract-frontmatter': '3.2.0' '@freesewing/lunetius': *freesewing
'remark-mdx-frontmatter': &mdxfrontmatter '5.0.0' '@freesewing/noble': *freesewing
'tailwindcss': &tailwindcss '3.4.3' '@freesewing/octoplushy': *freesewing
'yaml-loader': '0.8.1' '@freesewing/onyx': *freesewing
'@freesewing/opal': *freesewing
lab: '@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 chalk: "^5.2.0"
'@mdx-js/react': *mdx execa: "^9.5.2"
'@mdx-js/runtime': *mdxRuntime glob: "^11.0.1"
'@tailwindcss/typography': *tailwindTypography ora: "^8.2.0"
'algoliasearch': *algoliasearch prompts: "^2.4.2"
'd3-dispatch': &d3dispatch '3.0.1' react:
'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:
_: _:
'@bugsnag/js': &bugsnag 7.23.0 "@codemirror/lang-yaml": "^6.1.2"
'@bugsnag/plugin-react': 8.1.1 "@uiw/react-codemirror": "^4.23.8"
'@mdx-js/mdx': *mdx d3-drag: "3.0.0"
'@mdx-js/react': *mdx d3-selection: "3.0.0"
'@mdx-js/runtime': *mdxRuntime diff: "^7.0.0"
"@tailwindcss/nesting": &twnesting "^0.0.0-insiders.565cd3e" echarts: "^5.6.0"
'@tailwindcss/typography': *tailwindTypography echarts-for-react: "^3.0.2"
'algoliasearch': *algoliasearch file-saver: "^2.0.5"
'react-copy-to-clipboard': *reactCopyToClipboard "highlight.js": "^11.11.1"
'daisyui': *daisyui html-react-parser: "^5.2.2"
'echarts': &echarts 5.5.0 jotai: "^2.12.1"
'echarts-for-react': &echartsReact 3.0.2 jotai-location: "^0.5.5"
'jotai': &jotai '2.8.3' luxon: "^3.5.0"
'jotai-location': &jotai-location '0.5.5' mustache: "^4.2.0"
'lodash.get': *_get pdfkit: "^0.16.0"
'lodash.orderby': *_orderby react-diff-viewer-continued: "^4.0.5"
'lodash.set': *_set react-dropzone: "^14.3.5"
'luxon': '3.5.0' react-zoom-pan-pinch: "^3.7.0"
'next': *next svg-to-pdfkit: "^0.1.8"
'next-i18next': *nextI18next use-local-storage-state: "^19.5.0"
'ora': *ora web-worker: "^1.5.0"
'react': *react yaml: "^2.7.0"
'react-dom': *react peer:
'react-dropzone': &dropzone '14.2.3' react: &react "^19.0.0"
'react-hotkeys-hook': *reactHotkeysHook utils:
"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:
_: _:
'@next/mdx': *next lodash: "^4.17.21"
'@resvg/resvg-js': '2.6.2' tlds: "^1.255.0"
'@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

View file

@ -1,19 +1,11 @@
noNamespace: noNamespace:
- rehype-jargon - rehype-jargon
- rehype-highlight-lines - rehype-highlight-lines
customBuild:
- i18n
- new-design
- prettier-config
- core-plugins
- react-components
- rehype-jargon
- rehype-highlight-lines
skipTests: skipTests:
- theo - theo
packageJson: packageJson:
backend: backend:
name: backend.freesewing.org name: backend.freesewing.eu
bee: bee:
author: bobgeorgethe3rd (https://github.com/bobgeorgethe3rd) author: bobgeorgethe3rd (https://github.com/bobgeorgethe3rd)
benjamin: benjamin:
@ -30,8 +22,6 @@ packageJson:
author: woutervdub (https://github.com/woutervdub) author: woutervdub (https://github.com/woutervdub)
holmes: holmes:
author: AlfaLyr (https://github.com/alfalyr) author: AlfaLyr (https://github.com/alfalyr)
i18n:
private: true
jane: jane:
author: SeaZeeZee (https://github.com/SeaZeeZee) author: SeaZeeZee (https://github.com/SeaZeeZee)
lab: lab:
@ -44,19 +34,16 @@ packageJson:
author: Starfetch (https://github.com/starfetch) author: Starfetch (https://github.com/starfetch)
magde: magde:
author: clegganator259 (https://github.com/clegganator259) author: clegganator259 (https://github.com/clegganator259)
new-design: studio:
exports: '!' exports: '!'
bin: bin:
new-design: './index.mjs' studio: './index.mjs'
files: files:
- README.md - "lib/"
- package.json - "utils/"
- lib/**/* - "index.mjs"
- shared/**/* - "template/"
- templates/**/* - "template/designs/.base/"
- index.mjs
- package.json
- data.mjs
module: '!' module: '!'
noble: noble:
author: woutervdub (https://github.com/woutervdub) author: woutervdub (https://github.com/woutervdub)
@ -67,26 +54,99 @@ packageJson:
prettier-config: prettier-config:
type: 'module' type: 'module'
exports: { .: './index.json' } exports: { .: './index.json' }
scripts: { build: 'echo "prettier-config: No build required" && exit 0' }
keywords: keywords:
- prettier - prettier
files: files:
- index.json - index.json
- package.json - package.json
react-components: react:
exports: exports:
".": ".":
"internal": "./src/index.mjs" "internal": "./src/index.mjs"
"default": "./dist/index.mjs" "default": "./dist/index.mjs"
# Legacy
"./linedrawings": "./src/linedrawings/index.mjs" "./linedrawings": "./src/linedrawings/index.mjs"
"./pattern": "./src/pattern/index.mjs" "./pattern": "./src/pattern/index.mjs"
"./xray": "./src/pattern-xray/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: rehype-hightlight-lines:
private: true private: true
sandy: sandy:
author: AlfaLyr (https://github.com/alfalyr) author: AlfaLyr (https://github.com/alfalyr)
shelly: shelly:
author: Thrunic (https://github.com/Thrunic) author: Thrunic (https://github.com/Thrunic)
utils:
exports: '!'
module: "./src/index.mjs"
onyx: onyx:
author: Thrunic (https://github.com/Thrunic) author: Thrunic (https://github.com/Thrunic)
opal: 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 -' 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' 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' tips: 'node ../../scripts/help.mjs'
lint: "npx eslint 'src/**' 'tests/*.mjs'" lint: "npx eslint 'src/**' 'tests/*.mjs'"
_types: _types:
@ -27,89 +21,38 @@ core:
jsdoc: 'jsdoc -c jsdoc.json -r src' jsdoc: 'jsdoc -c jsdoc.json -r src'
models: models:
test: 'npx mocha tests/*.test.mjs' test: 'npx mocha tests/*.test.mjs'
new-design: studio:
i18n-only: 'SITE="new-design/shared" node --conditions=internal ../../sites/shared/prebuild/i18n-only.mjs'
wbuild: '!'
lint: "npx eslint 'lib/*.mjs'" lint: "npx eslint 'lib/*.mjs'"
mbuild: '!'
prebuild: 'node --conditions=internal ./prebuild.mjs'
test: '!' test: '!'
testci: '!' testci: '!'
vbuild: '!'
rehype-highlight-lines: rehype-highlight-lines:
build: '!'
mbuild: '!'
vbuild: '!'
'build:all': '!'
lint: "npx eslint 'src/*.mjs'" lint: "npx eslint 'src/*.mjs'"
rehype-jargon: rehype-jargon:
lint: "npx eslint 'src/*.mjs'" lint: "npx eslint 'src/*.mjs'"
snapseries: snapseries:
lint: "npx eslint 'src/*.mjs'" lint: "npx eslint 'src/*.mjs'"
react-components: react:
lint: "eslint 'src/**/*.mjs'" lint: "eslint 'src/**/*.mjs'"
# Sites go here # Sites go here
backend: backend:
build: 'node build.mjs'
clean: 'rimraf dist'
dev: 'nodemon src/index.mjs' dev: 'nodemon src/index.mjs'
initdb: 'npx prisma db push' initdb: 'npx prisma db push'
mbuild: *mbuild
newdb: 'node ./scripts/newdb.mjs' newdb: 'node ./scripts/newdb.mjs'
prettier: "npx prettier --write 'src/*.mjs' 'tests/*.mjs'" prettier: "npx prettier --write 'src/*.mjs' 'tests/*.mjs'"
rmdb: 'node ./scripts/rmdb.mjs' rmdb: 'node ./scripts/rmdb.mjs'
test: 'npx mocha --require mocha-steps tests/index.mjs' test: 'npx mocha --require mocha-steps tests/index.mjs'
vbuild: *vbuild
dev: dev: &docusaurus
build: &nextBuild 'next build' build: 'docusaurus build'
cibuild: 'yarn build && node scripts/algolia.mjs' dev: 'docusaurus start'
clean: &nextClean 'rimraf prebuild/* && rimraf public/locales/*/* && rimraf public/feeds/* && rimraf ../shared/prebuild/data/*' lint: 'docusuaurus lint'
dev: &nextDev 'next dev -p 8000' prebuild: 'node --conditions=internal --experimental-json-modules ./prebuild.mjs'
develop: *nextDev start: 'docusaurus start'
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'
email: email:
build: 'maizzle build production' build: 'maizzle build production'
dev: 'maizzle serve' dev: 'maizzle serve'
lab: org: *docusaurus
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'
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", "description": "A FreeSewing pattern for a A-shirt or tank top",
"design": "Joost De Cock", "design": "Joost De Cock",
"difficulty": 2, "difficulty": 2,
"lab": true,
"org": true,
"tags": [ "tags": [
"tops", "tops",
"underwear" "underwear"
@ -13,8 +11,8 @@
"techniques": [ "techniques": [
"hem", "hem",
"stretch", "stretch",
"knitBinding", "knit-binding",
"curvedSeam" "curved-seam"
] ]
}, },
"albert": { "albert": {
@ -22,15 +20,13 @@
"description": "A FreeSewing pattern for an apron", "description": "A FreeSewing pattern for an apron",
"design": "Wouter Van Wageningen", "design": "Wouter Van Wageningen",
"difficulty": 2, "difficulty": 2,
"lab": true,
"org": true,
"tags": [ "tags": [
"accessories" "accessories"
], ],
"techniques": [ "techniques": [
"hem", "hem",
"knitBinding", "knit-binding",
"curvedSeam", "curved-seam",
"pocket" "pocket"
] ]
}, },
@ -39,8 +35,6 @@
"description": "A FreeSewing pattern for a bikini top", "description": "A FreeSewing pattern for a bikini top",
"design": "PrudenceRabbit", "design": "PrudenceRabbit",
"difficulty": 3, "difficulty": 3,
"lab": true,
"org": true,
"tags": [ "tags": [
"tops", "tops",
"swimwear" "swimwear"
@ -48,7 +42,7 @@
"techniques": [ "techniques": [
"hem", "hem",
"stretch", "stretch",
"curvedSeam", "curved-seam",
"precision" "precision"
] ]
}, },
@ -60,8 +54,6 @@
"Joost De Cock" "Joost De Cock"
], ],
"difficulty": 3, "difficulty": 3,
"lab": true,
"org": true,
"tags": [ "tags": [
"blocks", "blocks",
"tops" "tops"
@ -76,8 +68,6 @@
"description": "A FreeSewing pattern for a bow tie", "description": "A FreeSewing pattern for a bow tie",
"design": "Wouter Van Wageningen", "design": "Wouter Van Wageningen",
"difficulty": 3, "difficulty": 3,
"lab": true,
"org": true,
"tags": [ "tags": [
"accessories" "accessories"
], ],
@ -91,16 +81,14 @@
"description": "A FreeSewing pattern for a menswear body block with a two-part sleeve", "description": "A FreeSewing pattern for a menswear body block with a two-part sleeve",
"design": "Joost De Cock", "design": "Joost De Cock",
"difficulty": 3, "difficulty": 3,
"lab": true,
"org": true,
"tags": [ "tags": [
"blocks", "blocks",
"tops" "tops"
], ],
"techniques": [ "techniques": [
"hem", "hem",
"curvedSeam", "curved-seam",
"setSleeve" "set-sleeve"
] ]
}, },
"bibi": { "bibi": {
@ -108,16 +96,14 @@
"description": "A FreeSewing pattern for a knit top body block", "description": "A FreeSewing pattern for a knit top body block",
"design": "Jonathan Haas", "design": "Jonathan Haas",
"difficulty": 2, "difficulty": 2,
"lab": true,
"org": true,
"tags": [ "tags": [
"blocks", "blocks",
"tops" "tops"
], ],
"techniques": [ "techniques": [
"curvedSeam", "curved-seam",
"hem", "hem",
"flatSleeve" "flat-sleeve"
] ]
}, },
"bob": { "bob": {
@ -125,25 +111,29 @@
"description": "A FreeSewing pattern for a bib", "description": "A FreeSewing pattern for a bib",
"design": "Joost De Cock", "design": "Joost De Cock",
"difficulty": 3, "difficulty": 3,
"lab": true,
"org": true,
"tags": [ "tags": [
"accessories", "accessories",
"infants" "infants"
], ],
"techniques": [ "techniques": [
"biasTape", "bias-tape",
"curvedSeam", "curved-seam",
"snap" "snap"
] ]
}, },
"bonny": {
"code": "Jonathan Haas",
"description": "A FreeSewing pattern that turns measurements into a body outline",
"design": "Jonathan Haas",
"difficulty": 1,
"tags": [],
"techniques": []
},
"breanna": { "breanna": {
"code": "Joost De Cock", "code": "Joost De Cock",
"description": "A FreeSewing pattern for a basic body block for womenswear", "description": "A FreeSewing pattern for a basic body block for womenswear",
"design": "Joost De Cock", "design": "Joost De Cock",
"difficulty": 3, "difficulty": 3,
"lab": true,
"org": true,
"tags": [ "tags": [
"blocks", "blocks",
"tops" "tops"
@ -158,15 +148,13 @@
"description": "A FreeSewing pattern for a basic body block for menswear", "description": "A FreeSewing pattern for a basic body block for menswear",
"design": "Joost De Cock", "design": "Joost De Cock",
"difficulty": 3, "difficulty": 3,
"lab": true,
"org": true,
"tags": [ "tags": [
"blocks", "blocks",
"tops" "tops"
], ],
"techniques": [ "techniques": [
"block", "block",
"flatSleeve" "flat-sleeve"
] ]
}, },
"bruce": { "bruce": {
@ -174,8 +162,6 @@
"description": "A FreeSewing pattern for boxer briefs", "description": "A FreeSewing pattern for boxer briefs",
"design": "Joost De Cock", "design": "Joost De Cock",
"difficulty": 3, "difficulty": 3,
"lab": true,
"org": true,
"tags": [ "tags": [
"bottoms", "bottoms",
"underwear" "underwear"
@ -183,7 +169,7 @@
"techniques": [ "techniques": [
"stretch", "stretch",
"hem", "hem",
"curvedSeam", "curved-seam",
"elastic" "elastic"
] ]
}, },
@ -195,8 +181,6 @@
"Joost De Cock" "Joost De Cock"
], ],
"difficulty": 5, "difficulty": 5,
"lab": true,
"org": true,
"tags": [ "tags": [
"tops", "tops",
"coats" "coats"
@ -204,12 +188,12 @@
"techniques": [ "techniques": [
"hem", "hem",
"pocket", "pocket",
"curvedSeam", "curved-seam",
"precision", "precision",
"setSleeve", "set-sleeve",
"weltPocket", "welt-pocket",
"lining", "lining",
"princessSeam", "princess-seam",
"interfacing", "interfacing",
"button" "button"
] ]
@ -222,8 +206,6 @@
"Joost De Cock" "Joost De Cock"
], ],
"difficulty": 5, "difficulty": 5,
"lab": true,
"org": true,
"tags": [ "tags": [
"tops", "tops",
"coats" "coats"
@ -231,10 +213,10 @@
"techniques": [ "techniques": [
"hem", "hem",
"pocket", "pocket",
"curvedSeam", "curved-seam",
"precision", "precision",
"setSleeve", "set-sleeve",
"weltPocket", "welt-pocket",
"lining", "lining",
"interfacing", "interfacing",
"button" "button"
@ -248,8 +230,6 @@
"Joost De Cock" "Joost De Cock"
], ],
"difficulty": 4, "difficulty": 4,
"lab": true,
"org": true,
"tags": [ "tags": [
"tops", "tops",
"underwear" "underwear"
@ -257,7 +237,7 @@
"techniques": [ "techniques": [
"boning", "boning",
"precision", "precision",
"curvedSeam", "curved-seam",
"interfacing" "interfacing"
] ]
}, },
@ -266,22 +246,20 @@
"description": "A FreeSewing pattern for chino trousers", "description": "A FreeSewing pattern for chino trousers",
"design": "Joost De Cock", "design": "Joost De Cock",
"difficulty": 3, "difficulty": 3,
"lab": true,
"org": true,
"tags": [ "tags": [
"bottoms", "bottoms",
"trousers" "trousers"
], ],
"techniques": [ "techniques": [
"weltPocket", "welt-pocket",
"curvedSeam", "curved-seam",
"interfacing", "interfacing",
"fly", "fly",
"zipper", "zipper",
"button", "button",
"dart", "dart",
"hem", "hem",
"seamPocket" "seam-pocket"
] ]
}, },
"cornelius": { "cornelius": {
@ -289,14 +267,12 @@
"description": "A FreeSewing pattern for cycling breeches, based on the Keystone drafting system", "description": "A FreeSewing pattern for cycling breeches, based on the Keystone drafting system",
"design": "Wouter Van Wageningen", "design": "Wouter Van Wageningen",
"difficulty": 3, "difficulty": 3,
"lab": true,
"org": true,
"tags": [ "tags": [
"bottoms", "bottoms",
"trousers" "trousers"
], ],
"techniques": [ "techniques": [
"curvedSeam", "curved-seam",
"fly", "fly",
"zipper", "zipper",
"button", "button",
@ -308,35 +284,29 @@
"description": "A FreeSewing pattern for a top with a draped neck", "description": "A FreeSewing pattern for a top with a draped neck",
"design": "Erica Alcusa Sáez", "design": "Erica Alcusa Sáez",
"difficulty": 2, "difficulty": 2,
"lab": true,
"org": true,
"tags": [ "tags": [
"tops" "tops"
], ],
"techniques": [ "techniques": [
"curvedSeam", "curved-seam",
"flatSleeve", "flat-sleeve",
"hem" "hem"
] ]
}, },
"examples": { "examples": {
"code": "Joost De Cock", "code": "Joost De Cock",
"description": "A FreeSewing pattern holding examples for our documentation", "description": "A FreeSewing pattern holding examples for our documentation"
"lab": false,
"org": false
}, },
"florence": { "florence": {
"code": "Joost De Cock", "code": "Joost De Cock",
"description": "A FreeSewing pattern for a face mask", "description": "A FreeSewing pattern for a face mask",
"design": "Joost De Cock", "design": "Joost De Cock",
"difficulty": 1, "difficulty": 1,
"lab": true,
"org": true,
"tags": [ "tags": [
"accessories" "accessories"
], ],
"techniques": [ "techniques": [
"curvedSeam" "curved-seam"
] ]
}, },
"florent": { "florent": {
@ -347,14 +317,12 @@
"description": "A FreeSewing pattern for a flat cap", "description": "A FreeSewing pattern for a flat cap",
"design": "Quentin Felix", "design": "Quentin Felix",
"difficulty": 3, "difficulty": 3,
"lab": true,
"org": true,
"tags": [ "tags": [
"accessories", "accessories",
"hats" "hats"
], ],
"techniques": [ "techniques": [
"curvedSeam" "curved-seam"
] ]
}, },
"gozer": { "gozer": {
@ -362,8 +330,6 @@
"description": "A FreeSewing pattern for a ghost costume", "description": "A FreeSewing pattern for a ghost costume",
"design": "Wouter Van Wageningen", "design": "Wouter Van Wageningen",
"difficulty": 1, "difficulty": 1,
"lab": true,
"org": true,
"tags": [ "tags": [
"costumes" "costumes"
], ],
@ -376,14 +342,12 @@
"description": "A FreeSewing pattern for a shark plush toy", "description": "A FreeSewing pattern for a shark plush toy",
"design": "Wouter Van Wageningen", "design": "Wouter Van Wageningen",
"difficulty": 4, "difficulty": 4,
"lab": true,
"org": true,
"tags": [ "tags": [
"accessories", "accessories",
"toys" "toys"
], ],
"techniques": [ "techniques": [
"curvedSeam", "curved-seam",
"dart" "dart"
] ]
}, },
@ -395,14 +359,12 @@
"description": "A FreeSewing pattern for a Sherlock Holmes hat", "description": "A FreeSewing pattern for a Sherlock Holmes hat",
"design": "Erica Alcusa Sáez", "design": "Erica Alcusa Sáez",
"difficulty": 3, "difficulty": 3,
"lab": true,
"org": true,
"tags": [ "tags": [
"accessories", "accessories",
"hats" "hats"
], ],
"techniques": [ "techniques": [
"curvedSeam", "curved-seam",
"lining" "lining"
] ]
}, },
@ -414,14 +376,12 @@
"Wouter Van Wageningen" "Wouter Van Wageningen"
], ],
"difficulty": 3, "difficulty": 3,
"lab": true,
"org": true,
"tags": [ "tags": [
"accessories", "accessories",
"bags" "bags"
], ],
"techniques": [ "techniques": [
"curvedSeam", "curved-seam",
"precision", "precision",
"lining", "lining",
"zipper" "zipper"
@ -432,17 +392,15 @@
"description": "A FreeSewing pattern for a zip-up hoodie", "description": "A FreeSewing pattern for a zip-up hoodie",
"design": "Joost De Cock", "design": "Joost De Cock",
"difficulty": 3, "difficulty": 3,
"lab": true,
"org": true,
"tags": [ "tags": [
"tops" "tops"
], ],
"techniques": [ "techniques": [
"curvedSeam", "curved-seam",
"pocket", "pocket",
"zipper", "zipper",
"ribbing", "ribbing",
"flatSleeve" "flat-sleeve"
] ]
}, },
"hugo": { "hugo": {
@ -450,16 +408,14 @@
"description": "A FreeSewing pattern for a hooded jumper with raglan sleeves", "description": "A FreeSewing pattern for a hooded jumper with raglan sleeves",
"design": "Joost De Cock", "design": "Joost De Cock",
"difficulty": 3, "difficulty": 3,
"lab": true,
"org": true,
"tags": [ "tags": [
"tops" "tops"
], ],
"techniques": [ "techniques": [
"curvedSeam", "curved-seam",
"pocket", "pocket",
"ribbing", "ribbing",
"raglanSleeve" "raglan-sleeve"
] ]
}, },
"jaeger": { "jaeger": {
@ -467,8 +423,6 @@
"description": "A FreeSewing pattern for a sport coat style jacket", "description": "A FreeSewing pattern for a sport coat style jacket",
"design": "Joost De Cock", "design": "Joost De Cock",
"difficulty": 5, "difficulty": 5,
"lab": true,
"org": true,
"tags": [ "tags": [
"tops", "tops",
"coats" "coats"
@ -476,10 +430,10 @@
"techniques": [ "techniques": [
"hem", "hem",
"pocket", "pocket",
"curvedSeam", "curved-seam",
"precision", "precision",
"setSleeve", "set-sleeve",
"weltPocket", "welt-pocket",
"lining", "lining",
"interfacing", "interfacing",
"button" "button"
@ -490,8 +444,6 @@
"description": "A FreeSewing pattern for a 1790s shift", "description": "A FreeSewing pattern for a 1790s shift",
"design": "SeaZeeZee", "design": "SeaZeeZee",
"difficulty": 2, "difficulty": 2,
"lab": true,
"org": true,
"tags": [ "tags": [
"tops", "tops",
"historical", "historical",
@ -503,24 +455,20 @@
}, },
"legend": { "legend": {
"code": "Joost De Cock", "code": "Joost De Cock",
"description": "A FreeSewing pattern to document pattern notation", "description": "A FreeSewing pattern to document pattern notation"
"lab": false,
"org": false
}, },
"lucy": { "lucy": {
"code": "SeaZeeZee", "code": "SeaZeeZee",
"description": "A FreeSewing pattern for a historical tie-on pocket", "description": "A FreeSewing pattern for a historical tie-on pocket",
"design": "SeaZeeZee", "design": "SeaZeeZee",
"difficulty": 2, "difficulty": 2,
"lab": true,
"org": true,
"tags": [ "tags": [
"accessories", "accessories",
"historical", "historical",
"bags" "bags"
], ],
"techniques": [ "techniques": [
"curvedSeam" "curved-seam"
] ]
}, },
"lumina": { "lumina": {
@ -528,15 +476,13 @@
"description": "A FreeSewing pattern for leggings", "description": "A FreeSewing pattern for leggings",
"design": "Wouter Van Wageningen", "design": "Wouter Van Wageningen",
"difficulty": 3, "difficulty": 3,
"lab": true,
"org": true,
"tags": [ "tags": [
"bottoms", "bottoms",
"trousers" "trousers"
], ],
"techniques": [ "techniques": [
"stretch", "stretch",
"curvedSeam", "curved-seam",
"elastic" "elastic"
] ]
}, },
@ -545,15 +491,13 @@
"description": "A FreeSewing pattern for leggings", "description": "A FreeSewing pattern for leggings",
"design": "Wouter Van Wageningen", "design": "Wouter Van Wageningen",
"difficulty": 3, "difficulty": 3,
"lab": true,
"org": true,
"tags": [ "tags": [
"bottoms", "bottoms",
"trousers" "trousers"
], ],
"techniques": [ "techniques": [
"stretch", "stretch",
"curvedSeam", "curved-seam",
"elastic" "elastic"
] ]
}, },
@ -562,8 +506,6 @@
"description": "A FreeSewing pattern for a lacerna, a historical Roman cloak", "description": "A FreeSewing pattern for a lacerna, a historical Roman cloak",
"design": "Rika Tamaike", "design": "Rika Tamaike",
"difficulty": 1, "difficulty": 1,
"lab": true,
"org": true,
"tags": [ "tags": [
"tops", "tops",
"coats", "coats",
@ -578,8 +520,6 @@
"description": "A FreeSewing pattern for a bike messenger bag", "description": "A FreeSewing pattern for a bike messenger bag",
"design": "clegganator259", "design": "clegganator259",
"difficulty": 3, "difficulty": 3,
"lab": true,
"org": false,
"tags": [ "tags": [
"accessories", "accessories",
"bags" "bags"
@ -591,17 +531,15 @@
"description": "A FreeSewing pattern for a princess seam bodice block", "description": "A FreeSewing pattern for a princess seam bodice block",
"design": "Wouter Van Wageningen", "design": "Wouter Van Wageningen",
"difficulty": 3, "difficulty": 3,
"lab": true,
"org": true,
"tags": [ "tags": [
"blocks", "blocks",
"tops" "tops"
], ],
"techniques": [ "techniques": [
"block", "block",
"curvedSeam", "curved-seam",
"precision", "precision",
"princessSeam" "princess-seam"
] ]
}, },
"octoplushy": { "octoplushy": {
@ -609,14 +547,12 @@
"description": "A FreeSewing pattern for an octopus plushy toy", "description": "A FreeSewing pattern for an octopus plushy toy",
"design": "Wouter Van Wageningen", "design": "Wouter Van Wageningen",
"difficulty": 4, "difficulty": 4,
"lab": true,
"org": true,
"tags": [ "tags": [
"accessories", "accessories",
"toys" "toys"
], ],
"techniques": [ "techniques": [
"curvedSeam", "curved-seam",
"precision" "precision"
] ]
}, },
@ -625,8 +561,6 @@
"description": "A FreeSewing pattern for one-piece garments", "description": "A FreeSewing pattern for one-piece garments",
"design": "Thrunic", "design": "Thrunic",
"difficulty": 4, "difficulty": 4,
"lab": true,
"org": true,
"tags": [ "tags": [
"swimwear", "swimwear",
"pajamas", "pajamas",
@ -634,7 +568,7 @@
], ],
"techniques": [ "techniques": [
"hem", "hem",
"curvedSeam", "curved-seam",
"stretch", "stretch",
"lining", "lining",
"zipper", "zipper",
@ -646,16 +580,14 @@
"description": "A FreeSewing pattern for overalls", "description": "A FreeSewing pattern for overalls",
"design": "Thrunic", "design": "Thrunic",
"difficulty": 3, "difficulty": 3,
"lab": true,
"org": true,
"tags": [ "tags": [
"overalls", "overalls",
"onePiece" "onePiece"
], ],
"techniques": [ "techniques": [
"flatFelledSeam", "flat-felled-seam",
"hem", "hem",
"curvedSeam", "curved-seam",
"button", "button",
"pocket" "pocket"
] ]
@ -665,8 +597,6 @@
"description": "A FreeSewing pattern for a baby romper", "description": "A FreeSewing pattern for a baby romper",
"design": "Wouter Van Wageningen", "design": "Wouter Van Wageningen",
"difficulty": 2, "difficulty": 2,
"lab": true,
"org": true,
"tags": [], "tags": [],
"techniques": [] "techniques": []
}, },
@ -675,17 +605,15 @@
"description": "A FreeSewing pattern for summer pants", "description": "A FreeSewing pattern for summer pants",
"design": "Joost De Cock", "design": "Joost De Cock",
"difficulty": 3, "difficulty": 3,
"lab": true,
"org": true,
"tags": [ "tags": [
"bottoms", "bottoms",
"trousers" "trousers"
], ],
"techniques": [ "techniques": [
"elastic", "elastic",
"curvedSeam", "curved-seam",
"pocket", "pocket",
"weltPocket", "welt-pocket",
"hem" "hem"
] ]
}, },
@ -694,30 +622,24 @@
"description": "A FreeSewing pattern for a pencil skirt", "description": "A FreeSewing pattern for a pencil skirt",
"design": "Wouter Van Wageningen", "design": "Wouter Van Wageningen",
"difficulty": 3, "difficulty": 3,
"lab": true,
"org": true,
"tags": [ "tags": [
"bottoms", "bottoms",
"skirts" "skirts"
], ],
"techniques": [ "techniques": [
"hem", "hem",
"curvedSeam", "curved-seam",
"precision", "precision",
"zipper" "zipper"
] ]
}, },
"plugintest": { "plugintest": {
"code": "Joost De Cock", "code": "Joost De Cock",
"description": "A FreeSewing pattern to test (y)our plugins", "description": "A FreeSewing pattern to test (y)our plugins"
"lab": true,
"org": false
}, },
"rendertest": { "rendertest": {
"code": "Joost De Cock", "code": "Joost De Cock",
"description": "A FreeSewing pattern to test (y)our render engine our CSS", "description": "A FreeSewing pattern to test (y)our render engine our CSS"
"lab": true,
"org": false
}, },
"sandy": { "sandy": {
"code": [ "code": [
@ -727,14 +649,12 @@
"description": "A FreeSewing pattern for a circle skirt", "description": "A FreeSewing pattern for a circle skirt",
"design": "Erica Alcusa Sáez", "design": "Erica Alcusa Sáez",
"difficulty": 3, "difficulty": 3,
"lab": true,
"org": true,
"tags": [ "tags": [
"bottoms", "bottoms",
"skirts" "skirts"
], ],
"techniques": [ "techniques": [
"curvedSeam", "curved-seam",
"button", "button",
"hem" "hem"
] ]
@ -744,8 +664,6 @@
"description": "A FreeSewing pattern for a raglan shirt, perfect for swimshirts", "description": "A FreeSewing pattern for a raglan shirt, perfect for swimshirts",
"design": "Thrunic", "design": "Thrunic",
"difficulty": 2, "difficulty": 2,
"lab": true,
"org": true,
"tags": [ "tags": [
"tops", "tops",
"swimwear" "swimwear"
@ -753,8 +671,8 @@
"techniques": [ "techniques": [
"hem", "hem",
"stretch", "stretch",
"curvedSeam", "curved-seam",
"raglanSleeve" "raglan-sleeve"
] ]
}, },
"shin": { "shin": {
@ -762,8 +680,6 @@
"description": "A FreeSewing pattern for swim trunks", "description": "A FreeSewing pattern for swim trunks",
"design": "Joost De Cock", "design": "Joost De Cock",
"difficulty": 2, "difficulty": 2,
"lab": true,
"org": true,
"tags": [ "tags": [
"bottoms", "bottoms",
"swimwear" "swimwear"
@ -771,7 +687,7 @@
"techniques": [ "techniques": [
"hem", "hem",
"stretch", "stretch",
"curvedSeam", "curved-seam",
"elastic" "elastic"
] ]
}, },
@ -780,8 +696,6 @@
"description": "A FreeSewing pattern for a button down shirt", "description": "A FreeSewing pattern for a button down shirt",
"design": "Joost De Cock", "design": "Joost De Cock",
"difficulty": 4, "difficulty": 4,
"lab": true,
"org": true,
"tags": [ "tags": [
"tops" "tops"
], ],
@ -789,9 +703,9 @@
"hem", "hem",
"button", "button",
"interfacing", "interfacing",
"curvedSeam", "curved-seam",
"flatFelledSeam", "flat-felled-seam",
"flatSleeve" "flat-sleeve"
] ]
}, },
"simone": { "simone": {
@ -799,8 +713,6 @@
"description": "A FreeSewing pattern for a button down shirt (Simone = Simon for people with breasts)", "description": "A FreeSewing pattern for a button down shirt (Simone = Simon for people with breasts)",
"design": "Joost De Cock", "design": "Joost De Cock",
"difficulty": 4, "difficulty": 4,
"lab": true,
"org": true,
"tags": [ "tags": [
"tops" "tops"
], ],
@ -808,9 +720,9 @@
"hem", "hem",
"button", "button",
"interfacing", "interfacing",
"curvedSeam", "curved-seam",
"flatFelledSeam", "flat-felled-seam",
"flatSleeve" "flat-sleeve"
] ]
}, },
"skully": { "skully": {
@ -818,14 +730,12 @@
"description": "A FreeSewing pattern for skully, our logo, a plushy toy", "description": "A FreeSewing pattern for skully, our logo, a plushy toy",
"design": "Wouter Van Wageningen", "design": "Wouter Van Wageningen",
"difficulty": 4, "difficulty": 4,
"lab": true,
"org": true,
"tags": [ "tags": [
"accessories", "accessories",
"toys" "toys"
], ],
"techniques": [ "techniques": [
"curvedSeam", "curved-seam",
"precision" "precision"
] ]
}, },
@ -834,14 +744,12 @@
"description": "A FreeSewing pattern for a straightforward sweater", "description": "A FreeSewing pattern for a straightforward sweater",
"design": "Joost De Cock", "design": "Joost De Cock",
"difficulty": 3, "difficulty": 3,
"lab": true,
"org": true,
"tags": [ "tags": [
"tops" "tops"
], ],
"techniques": [ "techniques": [
"curvedSeam", "curved-seam",
"flatSleeve", "flat-sleeve",
"ribbing" "ribbing"
] ]
}, },
@ -850,13 +758,11 @@
"description": "A FreeSewing pattern for a zero-waste top", "description": "A FreeSewing pattern for a zero-waste top",
"design": "Joost De Cock", "design": "Joost De Cock",
"difficulty": 1, "difficulty": 1,
"lab": true,
"org": true,
"tags": [ "tags": [
"tops" "tops"
], ],
"techniques": [ "techniques": [
"curvedSeam" "curved-seam"
] ]
}, },
"teagan": { "teagan": {
@ -864,16 +770,14 @@
"description": "A FreeSewing pattern for a T-shirt", "description": "A FreeSewing pattern for a T-shirt",
"design": "Joost De Cock", "design": "Joost De Cock",
"difficulty": 2, "difficulty": 2,
"lab": true,
"org": true,
"tags": [ "tags": [
"tops" "tops"
], ],
"techniques": [ "techniques": [
"curvedSeam", "curved-seam",
"hem", "hem",
"flatSleeve", "flat-sleeve",
"knitBand" "knit-band"
] ]
}, },
"tiberius": { "tiberius": {
@ -881,8 +785,6 @@
"description": "A FreeSewing pattern for a tunica, a historical Roman tunic", "description": "A FreeSewing pattern for a tunica, a historical Roman tunic",
"design": "Rika Tamaike", "design": "Rika Tamaike",
"difficulty": 1, "difficulty": 1,
"lab": true,
"org": true,
"tags": [ "tags": [
"tops", "tops",
"historical" "historical"
@ -897,8 +799,6 @@
"Joost De Cock" "Joost De Cock"
], ],
"difficulty": 3, "difficulty": 3,
"lab": true,
"org": true,
"tags": [ "tags": [
"blocks", "blocks",
"bottoms" "bottoms"
@ -910,8 +810,6 @@
"description": "A FreeSewing pattern for a tie", "description": "A FreeSewing pattern for a tie",
"design": "Joost De Cock", "design": "Joost De Cock",
"difficulty": 2, "difficulty": 2,
"lab": true,
"org": true,
"tags": [ "tags": [
"accessories" "accessories"
], ],
@ -925,13 +823,11 @@
"description": "A FreeSewing pattern for a fitted top with prince(ss) seams", "description": "A FreeSewing pattern for a fitted top with prince(ss) seams",
"design": "Natalia Sayang", "design": "Natalia Sayang",
"difficulty": 3, "difficulty": 3,
"lab": true,
"org": true,
"tags": [ "tags": [
"tops" "tops"
], ],
"techniques": [ "techniques": [
"curvedSeam", "curved-seam",
"precision" "precision"
] ]
}, },
@ -940,31 +836,27 @@
"description": "A FreeSewing pattern for a basic, highly-customizable underwear pattern", "description": "A FreeSewing pattern for a basic, highly-customizable underwear pattern",
"design": "Joost De Cock", "design": "Joost De Cock",
"difficulty": 2, "difficulty": 2,
"lab": true,
"org": true,
"tags": [ "tags": [
"bottoms", "bottoms",
"underwear" "underwear"
], ],
"techniques": [ "techniques": [
"elastic", "elastic",
"curvedSeam" "curved-seam"
] ]
}, },
"umbra": { "umbra": {
"code": "Joost De Cock, Jonathan Haas", "code": ["Joost De Cock", "Jonathan Haas"],
"description": "A FreeSewing pattern for a basic, highly-customizable underwear pattern", "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, "difficulty": 2,
"lab": true,
"org": true,
"tags": [ "tags": [
"bottoms", "bottoms",
"underwear" "underwear"
], ],
"techniques": [ "techniques": [
"elastic", "elastic",
"curvedSeam" "curved-seam"
] ]
}, },
"wahid": { "wahid": {
@ -972,17 +864,15 @@
"description": "A FreeSewing pattern for a classic fitted waistcoat", "description": "A FreeSewing pattern for a classic fitted waistcoat",
"design": "Joost De Cock", "design": "Joost De Cock",
"difficulty": 4, "difficulty": 4,
"lab": true,
"org": true,
"tags": [ "tags": [
"tops" "tops"
], ],
"techniques": [ "techniques": [
"curvedSeam", "curved-seam",
"hem", "hem",
"interfacing", "interfacing",
"lining", "lining",
"weltPocket", "welt-pocket",
"button" "button"
] ]
}, },
@ -991,8 +881,6 @@
"description": "A FreeSewing pattern for a wappenrock (tabard/surcoat), a historical European/medieval (ish) garment", "description": "A FreeSewing pattern for a wappenrock (tabard/surcoat), a historical European/medieval (ish) garment",
"design": "Rika Tamaike", "design": "Rika Tamaike",
"difficulty": 1, "difficulty": 1,
"lab": true,
"org": true,
"tags": [ "tags": [
"bottoms", "bottoms",
"historical" "historical"
@ -1006,16 +894,14 @@
"description": "A FreeSewing pattern for wrap pants", "description": "A FreeSewing pattern for wrap pants",
"design": "Wouter Van Wageningen", "design": "Wouter Van Wageningen",
"difficulty": 2, "difficulty": 2,
"lab": true,
"org": true,
"tags": [ "tags": [
"bottoms", "bottoms",
"trousers" "trousers"
], ],
"techniques": [ "techniques": [
"curvedSeam", "curved-seam",
"hem", "hem",
"weltPocket" "welt-pocket"
] ]
}, },
"yuri": { "yuri": {
@ -1023,31 +909,27 @@
"description": "A FreeSewing pattern for a fancy zipless sweater based on the Huey hoodie", "description": "A FreeSewing pattern for a fancy zipless sweater based on the Huey hoodie",
"design": "Biou", "design": "Biou",
"difficulty": 3, "difficulty": 3,
"lab": true,
"org": true,
"tags": [ "tags": [
"tops" "tops"
], ],
"techniques": [ "techniques": [
"curvedSeam", "curved-seam",
"flatSleeve", "flat-sleeve",
"hem", "hem",
"button" "button"
] ]
}, },
"lily": { "lily": {
"code": "Anna Puk, Joost De Cock", "code": ["Anna Puk", "Joost De Cock"],
"description": "A FreeSewing pattern for basic leggings", "description": "A FreeSewing pattern for basic leggings",
"design": "Anna Puk", "design": "Anna Puk",
"difficulty": 2, "difficulty": 2,
"lab": true,
"org": true,
"tags": [ "tags": [
"bottoms" "bottoms"
], ],
"techniques": [ "techniques": [
"elastic", "elastic",
"curvedSeam", "curved-seam",
"hem" "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", "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", "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", "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", "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", "utils": "A number of utilities, typically used by FreeSewing frontend code"
"rehype-highlight-lines": "A Rehype plugin to add highlighted lines to code blocks"
} }

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, // Dollar signs are allowed in EcmaScript identifier names,
// which is helpful when running unrendered Mustache templates through eslint. // 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 // Shared tests
import { testPatternConfig } from '../../../tests/designs/config.mjs' 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' import { testPatternSampling } from '../../../tests/designs/sampling.mjs'
// Test config // Test config
testPatternConfig($$Name$$) testPatternConfig($$Name$$, about)
// Test translation // Test translation
testPatternI18n($$Name$$, i18n) testPatternI18n($$Name$$, i18n)

View file

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

View file

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

View file

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

View file

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

View file

@ -2,9 +2,9 @@
"name": "{{pluginName}}", "name": "{{pluginName}}",
"version": "0.0.1", "version": "0.0.1",
"description": "{{description}}", "description": "{{description}}",
"author": "Joost De Cock <joost@joost.at> (https://github.com/joostdecock)", "author": "Joost De Cock <joost@joost.at> (https://codeberg.org/joostdecock)",
"homepage": "https://freesewing.org/", "homepage": "https://freesewing.eu/",
"repository": "github:freesewing/freesewing", "repository": "https://codeberg.org/freesewing/freesewing",
"license": "MIT", "license": "MIT",
"main": "dist/index.mjs", "main": "dist/index.mjs",
"module": "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. > 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 > 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? 🤔 ## What am I looking at? 🤔
@ -31,7 +31,7 @@ npm run tips
> [!NOTE] > [!NOTE]
> If you don't want to set up a dev environment, you can run it in your browser: > 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 > We recommend that you fork our repository and then
> put `gitpod.io/#<entire-url-of-your-fork` into a browser > 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. 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. sewing patterns adapted to your measurements.
If you're a developer, the FreeSewing documentation lives at [freesewing.dev](https://freesewing.dev/). 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: If you have NodeJS installed, you can try it right now by running:
```bash ```bash
npx @freesewing/new-design npx @freesewing/studio
``` ```
Getting started guides are available for: 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: To get started with FreeSewing, you can spin up our development environment with:
```bash ```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. To work with FreeSewing's monorepo, you'll need [NodeJS v20](https://nodejs.org) on your system.
Once you have those, clone (or fork) this repo and run `yarn kickstart`: Once you have that, clone (or fork) this repo and run `npm run kickstart`:
```bash ```bash
git clone git@github.com:freesewing/freesewing.git git clone git@codeberg.org:freesewing/freesewing.git
cd freesewing cd freesewing
yarn kickstart npm run kickstart
``` ```
## Links 👩‍💻 ## Links 👩‍💻
**Official channels** **Official channels**
- 💻 Makers website: [FreeSewing.org](https://freesewing.org) - 💻 Makers website: [FreeSewing.eu](https://freesewing.eu/)
- 💻 Developers website: [FreeSewing.dev](https://freesewing.dev) - 💻 Developers website: [FreeSewing.dev](https://freesewing.dev/)
- ✅ [Support](https://github.com/freesewing/freesewing/issues/new/choose), - ✅ [Support](https://forum.freesewing.eu/),
[Issues](https://github.com/freesewing/freesewing/issues) & [Issues](https://codeberg.org/freesewing/freesewing/issues) &
[Discussions](https://github.com/freesewing/freesewing/discussions) on [Codeberg](https://codeberg.org/freesewing/freesewing)
[GitHub](https://github.com/freesewing/freesewing)
**Social media** **Social media**
- 🐦 Twitter: [@freesewing_org](https://twitter.com/freesewing_org) - 🐘 Mastodon: [@freesewing](https://freesewing.social/@freesewing) on [FreeSewing.social](https://freesewing.social/)
- 📷 Instagram: [@freesewing_org](https://instagram.com/freesewing_org) - 🐘 Mastodon: [@joost](https://freesewing.social/@joost) on [FreeSewing.social](https://freesewing.social/)
**Places the FreeSewing community hangs out** **Places the FreeSewing community hangs out**
- 💬 [Forum](https://forum.freesewing.eu/)
- 💬 [Discord](https://discord.freesewing.org/) - 💬 [Discord](https://discord.freesewing.org/)
- 💬 [Facebook](https://www.facebook.com/groups/627769821272714/)
- 💬 [Reddit](https://www.reddit.com/r/freesewing/) - 💬 [Reddit](https://www.reddit.com/r/freesewing/)
## License: MIT 🤓 ## License: MIT 🤓
© [Joost De Cock](https://github.com/joostdecock). © [Joost De Cock](https://codeberg.org/joostdecock).
See [the license file](https://github.com/freesewing/freesewing/blob/develop/LICENSE) for details. See [the license file](https://codeberg.org/freesewing/freesewing/blob/develop/LICENSE) for details.
## Where to get help 🤯 ## Where to get help 🤯
For [Support](https://github.com/freesewing/freesewing/issues/new/choose), For [Support](https://freesewing.eu/support), please use the [forum](https://forum.freesewing.eu).
please use the [Issues](https://github.com/freesewing/freesewing/issues) &
[Discussions](https://github.com/freesewing/freesewing/discussions) on
[GitHub](https://github.com/freesewing/freesewing).

View file

@ -24,11 +24,6 @@
><img src="https://img.shields.io/badge/all_contributors-{{ allcontributors }}-pink.svg" ><img src="https://img.shields.io/badge/all_contributors-{{ allcontributors }}-pink.svg"
alt="All Contributors"/> alt="All Contributors"/>
</a></p><p align='center'><a </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" href="https://discord.freesewing.org"
title="Chat with us on Discord" title="Chat with us on Discord"
><img src="https://img.shields.io/discord/698854858052075530?label=Chat%20on%20Discord" ><img src="https://img.shields.io/discord/698854858052075530?label=Chat%20on%20Discord"
@ -38,11 +33,6 @@
title="Become a FreeSewing Patron" 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" ><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"/> 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> </a></p>
# FreeSewing # FreeSewing
@ -54,7 +44,7 @@
> FreeSewing is an open source project maintained by Joost De Cock and financially supported by the FreeSewing patrons. > 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 > 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? 🤔 ## 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. 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. sewing patterns adapted to your measurements.
If you're a developer, the FreeSewing documentation lives at [freesewing.dev](https://freesewing.dev/). 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: If you have NodeJS installed, you can try it right now by running:
```bash ```bash
npx @freesewing/new-design npx @freesewing/studio
``` ```
Getting started guides are available for: 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: To get started with FreeSewing, you can spin up our development environment with:
```bash ```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. 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 `yarn kickstart`: Once you have those, clone (or fork) this repo and run `npm run kickstart`:
```bash ```bash
git clone git@github.com:freesewing/freesewing.git git clone git@codeberg.org:freesewing/freesewing.git
cd freesewing cd freesewing
yarn kickstart npm run kickstart
``` ```
## Links 👩‍💻 ## Links 👩‍💻
**Official channels** **Official channels**
- 🪡 Makers website: [FreeSewing.org](https://freesewing.org) - 🪡 Makers website: [FreeSewing.eu](https://freesewing.eu)
- 💻 Developers website: [FreeSewing.dev](https://freesewing.dev) - 💻 Developers website: [FreeSewing.dev](https://freesewing.dev)
**Social media** **Social media**
- 📷 Instagram: [@freesewing_org](https://instagram.com/freesewing_org) - 🐘 Mastodon: [@freesewing](https://freesewing.social/@freesewing) on [FreeSewing.social](https://freesewing.social/)
- 🐘 Mastodon: [freesewing.social](https://freesewing.social/) - 🐘 Mastodon: [@joost](https://freesewing.social/@joost) on [FreeSewing.social](https://freesewing.social/)
**Places the FreeSewing community hangs out** **Places the FreeSewing community hangs out**
- 💬 [Forum](https://forum.freesewing.eu/)
- 💬 [Discord](https://discord.freesewing.org/) - 💬 [Discord](https://discord.freesewing.org/)
- 💬 [Facebook](https://www.facebook.com/groups/627769821272714/)
- 💬 [Reddit](https://www.reddit.com/r/freesewing/) - 💬 [Reddit](https://www.reddit.com/r/freesewing/)
## Where to get help 🤯 ## Where to get help 🤯
Check our [support page](https://freesewing.org/support), or use For [Support](https://freesewing.eu/support), please use the [forum](https://forum.freesewing.eu).
the [Issues](https://github.com/freesewing/freesewing/issues) &
[Discussions](https://github.com/freesewing/freesewing/discussions) on
[GitHub](https://github.com/freesewing/freesewing).
## License: MIT 🤓 ## License: MIT 🤓
© [Joost De Cock](https://github.com/joostdecock). © [Joost De Cock](https://github.com/joostdecock).
See [the license file](https://github.com/freesewing/freesewing/blob/develop/LICENSE) for details. 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" ><img src="https://img.shields.io/npm/l/@freesewing/aaron.svg?label=License"
alt="License: MIT"/> alt="License: MIT"/>
</a><a </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-" href="#contributors-"
title="All Contributors" title="All Contributors"
><img src="https://img.shields.io/badge/all_contributors-131-pink.svg" ><img src="https://img.shields.io/badge/all_contributors-131-pink.svg"
alt="All Contributors"/> alt="All Contributors"/>
</a></p><p align='center'><a </a></p><p align='center'><a
href="https://twitter.com/freesewing_org" href="https://forum.freesewing.org"
title="Follow @freesewing_org on Twitter" 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"/> alt="Follow @freesewing_org on Twitter"/>
</a><a </a><a
href="https://chat.freesewing.org" href="https://chat.freesewing.org"
@ -38,11 +28,6 @@
title="Become a FreeSewing Patron" 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" ><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"/> 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> </a></p>
# @freesewing/aaron # @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. > 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 > 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? 🤔 ## What am I looking at? 🤔
@ -76,7 +61,7 @@ npm run tips
> [!NOTE] > [!NOTE]
> If you don't want to set up a dev environment, you can run it in your browser: > 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 > We recommend that you fork our repository and then
> put `gitpod.io/#<entire-url-of-your-fork` into a browser > 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. 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. sewing patterns adapted to your measurements.
If you're a developer, the FreeSewing documentation lives at [freesewing.dev](https://freesewing.dev/). 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: If you have NodeJS installed, you can try it right now by running:
```bash ```bash
npx @freesewing/new-design npx @freesewing/studio
``` ```
Getting started guides are available for: 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: To get started with FreeSewing, you can spin up our development environment with:
```bash ```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. To work with FreeSewing's monorepo, you'll need [NodeJS v20](https://nodejs.org) on your system.
Once you have those, clone (or fork) this repo and run `yarn kickstart`: Once you have that, clone (or fork) this repo and run `npm run kickstart`:
```bash ```bash
git clone git@github.com:freesewing/freesewing.git git clone git@codeberg.org:freesewing/freesewing.git
cd freesewing cd freesewing
yarn kickstart npm run kickstart
``` ```
## Links 👩‍💻 ## Links 👩‍💻
**Official channels** **Official channels**
- 💻 Makers website: [FreeSewing.org](https://freesewing.org) - 💻 Makers website: [FreeSewing.eu](https://freesewing.eu/)
- 💻 Developers website: [FreeSewing.dev](https://freesewing.dev) - 💻 Developers website: [FreeSewing.dev](https://freesewing.dev/)
- ✅ [Support](https://github.com/freesewing/freesewing/issues/new/choose), - ✅ [Support](https://forum.freesewing.eu/),
[Issues](https://github.com/freesewing/freesewing/issues) & [Issues](https://codeberg.org/freesewing/freesewing/issues) &
[Discussions](https://github.com/freesewing/freesewing/discussions) on [Codeberg](https://codeberg.org/freesewing/freesewing)
[GitHub](https://github.com/freesewing/freesewing)
**Social media** **Social media**
- 🐦 Twitter: [@freesewing_org](https://twitter.com/freesewing_org) - 🐘 Mastodon: [@freesewing](https://freesewing.social/@freesewing) on [FreeSewing.social](https://freesewing.social/)
- 📷 Instagram: [@freesewing_org](https://instagram.com/freesewing_org) - 🐘 Mastodon: [@joost](https://freesewing.social/@joost) on [FreeSewing.social](https://freesewing.social/)
**Places the FreeSewing community hangs out** **Places the FreeSewing community hangs out**
- 💬 [Forum](https://forum.freesewing.eu/)
- 💬 [Discord](https://discord.freesewing.org/) - 💬 [Discord](https://discord.freesewing.org/)
- 💬 [Facebook](https://www.facebook.com/groups/627769821272714/)
- 💬 [Reddit](https://www.reddit.com/r/freesewing/) - 💬 [Reddit](https://www.reddit.com/r/freesewing/)
## License: MIT 🤓 ## License: MIT 🤓
© [Joost De Cock](https://github.com/joostdecock). © [Joost De Cock](https://codeberg.org/joostdecock).
See [the license file](https://github.com/freesewing/freesewing/blob/develop/LICENSE) for details. See [the license file](https://codeberg.org/freesewing/freesewing/blob/develop/LICENSE) for details.
## Where to get help 🤯 ## Where to get help 🤯
For [Support](https://github.com/freesewing/freesewing/issues/new/choose), For [Support](https://freesewing.eu/support), please use the [forum](https://forum.freesewing.eu).
please use the [Issues](https://github.com/freesewing/freesewing/issues) &
[Discussions](https://github.com/freesewing/freesewing/discussions) on
[GitHub](https://github.com/freesewing/freesewing).

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 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", "name": "@freesewing/aaron",
"version": "3.3.0-rc.1", "version": "4.0.0",
"description": "A FreeSewing pattern for a A-shirt or tank top", "description": "A FreeSewing pattern for a A-shirt or tank top",
"author": "Joost De Cock <joost@joost.at> (https://github.com/joostdecock)", "author": "Joost De Cock <joost@joost.at> (https://github.com/joostdecock)",
"homepage": "https://freesewing.org/", "homepage": "https://freesewing.org/",
@ -25,50 +25,41 @@
"sewing pattern" "sewing pattern"
], ],
"type": "module", "type": "module",
"module": "dist/index.mjs", "module": "src/index.mjs",
"exports": { "exports": {
".": { ".": "./src/index.mjs"
"internal": "./src/index.mjs",
"default": "./dist/index.mjs"
}
}, },
"scripts": { "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 -", "symlink": "mkdir -p ./node_modules/@freesewing && cd ./node_modules/@freesewing && ln -s -f ../../../* . && cd -",
"test": "npx mocha tests/*.test.mjs", "test": "npx mocha tests/*.test.mjs",
"vbuild": "VERBOSE=1 node build.mjs",
"lab": "cd ../../sites/lab && yarn start",
"tips": "node ../../scripts/help.mjs", "tips": "node ../../scripts/help.mjs",
"lint": "npx eslint 'src/**' 'tests/*.mjs'", "lint": "npx eslint 'src/**' 'tests/*.mjs'",
"prettier": "npx prettier --write 'src/*.mjs' '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", "testci": "NODE_OPTIONS=\"--conditions=internal\" npx mocha tests/*.test.mjs --reporter ../../tests/reporters/terse.js"
"wbuild": "node build.mjs",
"wbuild:all": "yarn wbuild"
}, },
"peerDependencies": { "peerDependencies": {
"@freesewing/core": "3.3.0-rc.1", "@freesewing/core": "4.0.0",
"@freesewing/brian": "3.3.0-rc.1", "@freesewing/brian": "4.0.0",
"@freesewing/plugin-bust": "3.3.0-rc.1" "@freesewing/plugin-bust": "4.0.0"
}, },
"dependencies": {}, "dependencies": {},
"devDependencies": { "devDependencies": {
"mocha": "10.4.0", "mocha": "10.4.0",
"chai": "5.1.1", "chai": "5.1.1",
"@freesewing/models": "3.3.0-rc.1", "@freesewing/models": "4.0.0",
"@freesewing/plugin-timing": "3.3.0-rc.1" "@freesewing/plugin-timing": "4.0.0"
}, },
"files": [ "files": [
"dist/*", "src/",
"i18n/",
"about.json",
"README.md" "README.md"
], ],
"publishConfig": { "publishConfig": {
"access": "public", "access": "public",
"tag": "next" "tag": "latest"
}, },
"engines": { "engines": {
"node": ">= 18.17.0 <22" "node": ">= 20"
} }
} }

View file

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

View file

@ -1,7 +1,7 @@
import { Design, mergeI18n } from '@freesewing/core' import { Design, mergeI18n } from '@freesewing/core'
import { i18n as brianI18n } from '@freesewing/brian' import { i18n as brianI18n } from '@freesewing/brian'
import { i18n as aaronI18n } from '../i18n/index.mjs' 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 { back } from './back.mjs'
import { front } from './front.mjs' import { front } from './front.mjs'
import { armBinding } from './arm-binding.mjs' import { armBinding } from './arm-binding.mjs'
@ -9,7 +9,7 @@ import { neckBinding } from './neck-binding.mjs'
// Setup our new design // Setup our new design
const Aaron = new Design({ const Aaron = new Design({
data, data: about,
parts: [back, front, armBinding, neckBinding], parts: [back, front, armBinding, neckBinding],
}) })
@ -27,10 +27,12 @@ const i18n = mergeI18n([brianI18n, aaronI18n], {
'legacyArmholeDepthNo', 'legacyArmholeDepthNo',
'legacyArmholeDepthYes', 'legacyArmholeDepthYes',
'armholeDepth', 'armholeDepth',
'draftForHighBustNo',
'draftForHighBustYes',
], ],
}, },
s: { drop: [] }, s: { drop: [] },
}) })
// Named exports // 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. // 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 // Shared tests
import { testPatternConfig } from '../../../tests/designs/config.mjs' 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' import { testPatternSampling } from '../../../tests/designs/sampling.mjs'
// Test config // Test config
testPatternConfig(Aaron) testPatternConfig(Aaron, about)
// Test translation // Test translation
testPatternI18n(Aaron, i18n) testPatternI18n(Aaron, i18n)

View file

@ -9,24 +9,14 @@
><img src="https://img.shields.io/npm/l/@freesewing/albert.svg?label=License" ><img src="https://img.shields.io/npm/l/@freesewing/albert.svg?label=License"
alt="License: MIT"/> alt="License: MIT"/>
</a><a </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-" href="#contributors-"
title="All Contributors" title="All Contributors"
><img src="https://img.shields.io/badge/all_contributors-131-pink.svg" ><img src="https://img.shields.io/badge/all_contributors-131-pink.svg"
alt="All Contributors"/> alt="All Contributors"/>
</a></p><p align='center'><a </a></p><p align='center'><a
href="https://twitter.com/freesewing_org" href="https://forum.freesewing.org"
title="Follow @freesewing_org on Twitter" 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"/> alt="Follow @freesewing_org on Twitter"/>
</a><a </a><a
href="https://chat.freesewing.org" href="https://chat.freesewing.org"
@ -38,11 +28,6 @@
title="Become a FreeSewing Patron" 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" ><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"/> 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> </a></p>
# @freesewing/albert # @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. > 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 > 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? 🤔 ## What am I looking at? 🤔
@ -76,7 +61,7 @@ npm run tips
> [!NOTE] > [!NOTE]
> If you don't want to set up a dev environment, you can run it in your browser: > 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 > We recommend that you fork our repository and then
> put `gitpod.io/#<entire-url-of-your-fork` into a browser > 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. 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. sewing patterns adapted to your measurements.
If you're a developer, the FreeSewing documentation lives at [freesewing.dev](https://freesewing.dev/). 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: If you have NodeJS installed, you can try it right now by running:
```bash ```bash
npx @freesewing/new-design npx @freesewing/studio
``` ```
Getting started guides are available for: 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: To get started with FreeSewing, you can spin up our development environment with:
```bash ```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. To work with FreeSewing's monorepo, you'll need [NodeJS v20](https://nodejs.org) on your system.
Once you have those, clone (or fork) this repo and run `yarn kickstart`: Once you have that, clone (or fork) this repo and run `npm run kickstart`:
```bash ```bash
git clone git@github.com:freesewing/freesewing.git git clone git@codeberg.org:freesewing/freesewing.git
cd freesewing cd freesewing
yarn kickstart npm run kickstart
``` ```
## Links 👩‍💻 ## Links 👩‍💻
**Official channels** **Official channels**
- 💻 Makers website: [FreeSewing.org](https://freesewing.org) - 💻 Makers website: [FreeSewing.eu](https://freesewing.eu/)
- 💻 Developers website: [FreeSewing.dev](https://freesewing.dev) - 💻 Developers website: [FreeSewing.dev](https://freesewing.dev/)
- ✅ [Support](https://github.com/freesewing/freesewing/issues/new/choose), - ✅ [Support](https://forum.freesewing.eu/),
[Issues](https://github.com/freesewing/freesewing/issues) & [Issues](https://codeberg.org/freesewing/freesewing/issues) &
[Discussions](https://github.com/freesewing/freesewing/discussions) on [Codeberg](https://codeberg.org/freesewing/freesewing)
[GitHub](https://github.com/freesewing/freesewing)
**Social media** **Social media**
- 🐦 Twitter: [@freesewing_org](https://twitter.com/freesewing_org) - 🐘 Mastodon: [@freesewing](https://freesewing.social/@freesewing) on [FreeSewing.social](https://freesewing.social/)
- 📷 Instagram: [@freesewing_org](https://instagram.com/freesewing_org) - 🐘 Mastodon: [@joost](https://freesewing.social/@joost) on [FreeSewing.social](https://freesewing.social/)
**Places the FreeSewing community hangs out** **Places the FreeSewing community hangs out**
- 💬 [Forum](https://forum.freesewing.eu/)
- 💬 [Discord](https://discord.freesewing.org/) - 💬 [Discord](https://discord.freesewing.org/)
- 💬 [Facebook](https://www.facebook.com/groups/627769821272714/)
- 💬 [Reddit](https://www.reddit.com/r/freesewing/) - 💬 [Reddit](https://www.reddit.com/r/freesewing/)
## License: MIT 🤓 ## License: MIT 🤓
© [Joost De Cock](https://github.com/joostdecock). © [Joost De Cock](https://codeberg.org/joostdecock).
See [the license file](https://github.com/freesewing/freesewing/blob/develop/LICENSE) for details. See [the license file](https://codeberg.org/freesewing/freesewing/blob/develop/LICENSE) for details.
## Where to get help 🤯 ## Where to get help 🤯
For [Support](https://github.com/freesewing/freesewing/issues/new/choose), For [Support](https://freesewing.eu/support), please use the [forum](https://forum.freesewing.eu).
please use the [Issues](https://github.com/freesewing/freesewing/issues) &
[Discussions](https://github.com/freesewing/freesewing/discussions) on
[GitHub](https://github.com/freesewing/freesewing).

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 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", "name": "@freesewing/albert",
"version": "3.3.0-rc.1", "version": "4.0.0",
"description": "A FreeSewing pattern for an apron", "description": "A FreeSewing pattern for an apron",
"author": "Joost De Cock <joost@joost.at> (https://github.com/joostdecock)", "author": "Joost De Cock <joost@joost.at> (https://github.com/joostdecock)",
"homepage": "https://freesewing.org/", "homepage": "https://freesewing.org/",
@ -25,48 +25,39 @@
"sewing pattern" "sewing pattern"
], ],
"type": "module", "type": "module",
"module": "dist/index.mjs", "module": "src/index.mjs",
"exports": { "exports": {
".": { ".": "./src/index.mjs"
"internal": "./src/index.mjs",
"default": "./dist/index.mjs"
}
}, },
"scripts": { "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 -", "symlink": "mkdir -p ./node_modules/@freesewing && cd ./node_modules/@freesewing && ln -s -f ../../../* . && cd -",
"test": "npx mocha tests/*.test.mjs", "test": "npx mocha tests/*.test.mjs",
"vbuild": "VERBOSE=1 node build.mjs",
"lab": "cd ../../sites/lab && yarn start",
"tips": "node ../../scripts/help.mjs", "tips": "node ../../scripts/help.mjs",
"lint": "npx eslint 'src/**' 'tests/*.mjs'", "lint": "npx eslint 'src/**' 'tests/*.mjs'",
"prettier": "npx prettier --write 'src/*.mjs' '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", "testci": "NODE_OPTIONS=\"--conditions=internal\" npx mocha tests/*.test.mjs --reporter ../../tests/reporters/terse.js"
"wbuild": "node build.mjs",
"wbuild:all": "yarn wbuild"
}, },
"peerDependencies": { "peerDependencies": {
"@freesewing/core": "3.3.0-rc.1" "@freesewing/core": "4.0.0"
}, },
"dependencies": {}, "dependencies": {},
"devDependencies": { "devDependencies": {
"mocha": "10.4.0", "mocha": "10.4.0",
"chai": "5.1.1", "chai": "5.1.1",
"@freesewing/models": "3.3.0-rc.1", "@freesewing/models": "4.0.0",
"@freesewing/plugin-timing": "3.3.0-rc.1" "@freesewing/plugin-timing": "4.0.0"
}, },
"files": [ "files": [
"dist/*", "src/",
"i18n/",
"about.json",
"README.md" "README.md"
], ],
"publishConfig": { "publishConfig": {
"access": "public", "access": "public",
"tag": "next" "tag": "latest"
}, },
"engines": { "engines": {
"node": ">= 18.17.0 <22" "node": ">= 20"
} }
} }

View file

@ -106,16 +106,23 @@ export const front = {
if (sa) { if (sa) {
const saBase = new Path() const saBase = new Path()
.move(points.bottomLeft.shift(-90, sa)) .move(points.bottomLeft.shift(-90, strapWidth - sa))
.line(points.bottomRight.shift(-90, sa)) .line(points.bottomRight.shift(-90, strapWidth - sa).shift(0, strapWidth - sa))
.line(points.topRightBack) .line(points.topRightBack.shift(0, strapWidth - sa))
.curve(points.topRightBackCPfront, points.topRightCPdown, points.topRightHem) .curve(points.topRightBackCPfront, points.topRightCPdown, points.topRightHem)
.line(points.topRight.shift(90, sa)) .line(points.topRight.shift(90, strapWidth - sa))
.line(points.topLeft.shift(90, sa)) .line(points.topLeft.shift(90, strapWidth - sa))
paths.sa = saBase paths.sa = saBase
.clone() .clone()
.offset(sa * 2) .offset(sa * 2)
.addClass('fabric sa') .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) { if (complete) {
paths.hemHint = saBase.clone().offset(sa).addClass('note help') paths.hemHint = saBase.clone().offset(sa).addClass('note help')
macro('banner', { macro('banner', {
@ -127,6 +134,24 @@ export const front = {
classes: 'fill-note center', 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', { macro('hd', {
from: points.bottomLeft, from: points.bottomLeft,
to: points.bottomRight, to: points.bottomRight,
y: points.bottomLeft.y + sa + 15, y: points.bottomLeft.y + sa + (sa ? strapWidth : 0) + 15,
id: 'wBottom', id: 'wBottom',
}) })
macro('hd', { macro('hd', {
from: points.topLeft, from: points.topLeft,
to: points.topRight, to: points.topRight,
y: points.topLeft.y - sa - 15, y: points.topLeft.y - sa - (sa ? strapWidth : 0) - 15,
id: 'wTop', id: 'wTop',
}) })
macro('vd', { macro('vd', {
from: points.bottomLeft, from: points.bottomLeft,
to: points.topLeft, to: points.topLeft,
x: points.topLeft.x - 30, x: points.topLeft.x - 15,
id: 'hLeft', id: 'hLeft',
}) })
macro('vd', { macro('vd', {
from: points.bottomRight, from: points.bottomRight,
to: points.topRightBack, to: points.topRightBack,
x: points.topRightBack.x + sa + 15, x: points.topRightBack.x + sa + (sa ? strapWidth : 0) + 15,
id: 'hRightBottom', id: 'hRightBottom',
}) })
macro('vd', { macro('vd', {
from: points.topRightBack, from: points.topRightBack,
to: points.topRight, to: points.topRight,
x: points.topRightBack.x + sa + 15, x: points.topRightBack.x + sa + (sa ? strapWidth : 0) + 15,
id: 'hRightTop', 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 return part
}, },
} }

View file

@ -1,5 +1,5 @@
import { Design } from '@freesewing/core' import { Design } from '@freesewing/core'
import { data } from '../data.mjs' import about from '../about.json' with { type: 'json' }
import { front } from './front.mjs' import { front } from './front.mjs'
import { pocket } from './pocket.mjs' import { pocket } from './pocket.mjs'
import { strap } from './strap.mjs' import { strap } from './strap.mjs'
@ -7,9 +7,9 @@ import { i18n } from '../i18n/index.mjs'
// Setup our new design // Setup our new design
const Albert = new Design({ const Albert = new Design({
data, data: about,
parts: [front, pocket, strap], parts: [front, pocket, strap],
}) })
// Named exports // 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, units,
store, store,
part, part,
complete,
}) => { }) => {
const pocketSize = store.get('pocketSize') const pocketSize = store.get('pocketSize')
@ -53,11 +54,11 @@ export const pocket = {
.line(points.bottomRight) .line(points.bottomRight)
.line(points.topRight) .line(points.topRight)
.line(points.topLeft) .line(points.topLeft)
.move(points.bottomLeft) .line(points.bottomLeft)
.close() .close()
.attr('class', 'fabric') .attr('class', 'fabric')
if (sa) if (sa) {
paths.sa = new Path() paths.sa = new Path()
.move(points.bottomLeft) .move(points.bottomLeft)
.line(points.bottomRight) .line(points.bottomRight)
@ -65,7 +66,46 @@ export const pocket = {
.line(points.topLeft.shift(90, store.get('strapWidth'))) .line(points.topLeft.shift(90, store.get('strapWidth')))
.offset(sa) .offset(sa)
.attr('class', 'fabric 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 * Annotations
*/ */

View file

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

View file

@ -9,24 +9,14 @@
><img src="https://img.shields.io/npm/l/@freesewing/bee.svg?label=License" ><img src="https://img.shields.io/npm/l/@freesewing/bee.svg?label=License"
alt="License: MIT"/> alt="License: MIT"/>
</a><a </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-" href="#contributors-"
title="All Contributors" title="All Contributors"
><img src="https://img.shields.io/badge/all_contributors-131-pink.svg" ><img src="https://img.shields.io/badge/all_contributors-131-pink.svg"
alt="All Contributors"/> alt="All Contributors"/>
</a></p><p align='center'><a </a></p><p align='center'><a
href="https://twitter.com/freesewing_org" href="https://forum.freesewing.org"
title="Follow @freesewing_org on Twitter" 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"/> alt="Follow @freesewing_org on Twitter"/>
</a><a </a><a
href="https://chat.freesewing.org" href="https://chat.freesewing.org"
@ -38,11 +28,6 @@
title="Become a FreeSewing Patron" 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" ><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"/> 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> </a></p>
# @freesewing/bee # @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. > 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 > 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? 🤔 ## What am I looking at? 🤔
@ -76,7 +61,7 @@ npm run tips
> [!NOTE] > [!NOTE]
> If you don't want to set up a dev environment, you can run it in your browser: > 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 > We recommend that you fork our repository and then
> put `gitpod.io/#<entire-url-of-your-fork` into a browser > 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. 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. sewing patterns adapted to your measurements.
If you're a developer, the FreeSewing documentation lives at [freesewing.dev](https://freesewing.dev/). 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: If you have NodeJS installed, you can try it right now by running:
```bash ```bash
npx @freesewing/new-design npx @freesewing/studio
``` ```
Getting started guides are available for: 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: To get started with FreeSewing, you can spin up our development environment with:
```bash ```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. To work with FreeSewing's monorepo, you'll need [NodeJS v20](https://nodejs.org) on your system.
Once you have those, clone (or fork) this repo and run `yarn kickstart`: Once you have that, clone (or fork) this repo and run `npm run kickstart`:
```bash ```bash
git clone git@github.com:freesewing/freesewing.git git clone git@codeberg.org:freesewing/freesewing.git
cd freesewing cd freesewing
yarn kickstart npm run kickstart
``` ```
## Links 👩‍💻 ## Links 👩‍💻
**Official channels** **Official channels**
- 💻 Makers website: [FreeSewing.org](https://freesewing.org) - 💻 Makers website: [FreeSewing.eu](https://freesewing.eu/)
- 💻 Developers website: [FreeSewing.dev](https://freesewing.dev) - 💻 Developers website: [FreeSewing.dev](https://freesewing.dev/)
- ✅ [Support](https://github.com/freesewing/freesewing/issues/new/choose), - ✅ [Support](https://forum.freesewing.eu/),
[Issues](https://github.com/freesewing/freesewing/issues) & [Issues](https://codeberg.org/freesewing/freesewing/issues) &
[Discussions](https://github.com/freesewing/freesewing/discussions) on [Codeberg](https://codeberg.org/freesewing/freesewing)
[GitHub](https://github.com/freesewing/freesewing)
**Social media** **Social media**
- 🐦 Twitter: [@freesewing_org](https://twitter.com/freesewing_org) - 🐘 Mastodon: [@freesewing](https://freesewing.social/@freesewing) on [FreeSewing.social](https://freesewing.social/)
- 📷 Instagram: [@freesewing_org](https://instagram.com/freesewing_org) - 🐘 Mastodon: [@joost](https://freesewing.social/@joost) on [FreeSewing.social](https://freesewing.social/)
**Places the FreeSewing community hangs out** **Places the FreeSewing community hangs out**
- 💬 [Forum](https://forum.freesewing.eu/)
- 💬 [Discord](https://discord.freesewing.org/) - 💬 [Discord](https://discord.freesewing.org/)
- 💬 [Facebook](https://www.facebook.com/groups/627769821272714/)
- 💬 [Reddit](https://www.reddit.com/r/freesewing/) - 💬 [Reddit](https://www.reddit.com/r/freesewing/)
## License: MIT 🤓 ## License: MIT 🤓
© [Joost De Cock](https://github.com/joostdecock). © [Joost De Cock](https://codeberg.org/joostdecock).
See [the license file](https://github.com/freesewing/freesewing/blob/develop/LICENSE) for details. See [the license file](https://codeberg.org/freesewing/freesewing/blob/develop/LICENSE) for details.
## Where to get help 🤯 ## Where to get help 🤯
For [Support](https://github.com/freesewing/freesewing/issues/new/choose), For [Support](https://freesewing.eu/support), please use the [forum](https://forum.freesewing.eu).
please use the [Issues](https://github.com/freesewing/freesewing/issues) &
[Discussions](https://github.com/freesewing/freesewing/discussions) on
[GitHub](https://github.com/freesewing/freesewing).

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 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", "name": "@freesewing/bee",
"version": "3.3.0-rc.1", "version": "4.0.0",
"description": "A FreeSewing pattern for a bikini top", "description": "A FreeSewing pattern for a bikini top",
"author": "bobgeorgethe3rd (https://github.com/bobgeorgethe3rd)", "author": "bobgeorgethe3rd (https://github.com/bobgeorgethe3rd)",
"homepage": "https://freesewing.org/", "homepage": "https://freesewing.org/",
@ -25,49 +25,40 @@
"sewing pattern" "sewing pattern"
], ],
"type": "module", "type": "module",
"module": "dist/index.mjs", "module": "src/index.mjs",
"exports": { "exports": {
".": { ".": "./src/index.mjs"
"internal": "./src/index.mjs",
"default": "./dist/index.mjs"
}
}, },
"scripts": { "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 -", "symlink": "mkdir -p ./node_modules/@freesewing && cd ./node_modules/@freesewing && ln -s -f ../../../* . && cd -",
"test": "npx mocha tests/*.test.mjs", "test": "npx mocha tests/*.test.mjs",
"vbuild": "VERBOSE=1 node build.mjs",
"lab": "cd ../../sites/lab && yarn start",
"tips": "node ../../scripts/help.mjs", "tips": "node ../../scripts/help.mjs",
"lint": "npx eslint 'src/**' 'tests/*.mjs'", "lint": "npx eslint 'src/**' 'tests/*.mjs'",
"prettier": "npx prettier --write 'src/*.mjs' '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", "testci": "NODE_OPTIONS=\"--conditions=internal\" npx mocha tests/*.test.mjs --reporter ../../tests/reporters/terse.js"
"wbuild": "node build.mjs",
"wbuild:all": "yarn wbuild"
}, },
"peerDependencies": { "peerDependencies": {
"@freesewing/core": "3.3.0-rc.1", "@freesewing/core": "4.0.0",
"@freesewing/bella": "3.3.0-rc.1" "@freesewing/bella": "4.0.0"
}, },
"dependencies": {}, "dependencies": {},
"devDependencies": { "devDependencies": {
"mocha": "10.4.0", "mocha": "10.4.0",
"chai": "5.1.1", "chai": "5.1.1",
"@freesewing/models": "3.3.0-rc.1", "@freesewing/models": "4.0.0",
"@freesewing/plugin-timing": "3.3.0-rc.1" "@freesewing/plugin-timing": "4.0.0"
}, },
"files": [ "files": [
"dist/*", "src/",
"i18n/",
"about.json",
"README.md" "README.md"
], ],
"publishConfig": { "publishConfig": {
"access": "public", "access": "public",
"tag": "next" "tag": "latest"
}, },
"engines": { "engines": {
"node": ">= 18.17.0 <22" "node": ">= 20"
} }
} }

View file

@ -1,5 +1,5 @@
import { Design, mergeI18n } from '@freesewing/core' 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 { cup } from './cup.mjs'
import { neckTie } from './neck-tie.mjs' import { neckTie } from './neck-tie.mjs'
import { bandTie } from './band-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' import { i18n as bellaI18n } from '@freesewing/bella'
const Bee = new Design({ const Bee = new Design({
data, data: about,
parts: [cup, neckTie, bandTie], parts: [cup, neckTie, bandTie],
}) })
@ -50,4 +50,4 @@ const i18n = mergeI18n([bellaI18n, beeI18n], {
o: { keep: i18nKeepOptions }, 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. // 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 // Shared tests
import { testPatternConfig } from '../../../tests/designs/config.mjs' 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' import { testPatternSampling } from '../../../tests/designs/sampling.mjs'
// Test config // Test config
testPatternConfig(Bee) testPatternConfig(Bee, about)
// Test translation // Test translation
testPatternI18n(Bee, i18n) testPatternI18n(Bee, i18n)

View file

@ -9,24 +9,14 @@
><img src="https://img.shields.io/npm/l/@freesewing/bella.svg?label=License" ><img src="https://img.shields.io/npm/l/@freesewing/bella.svg?label=License"
alt="License: MIT"/> alt="License: MIT"/>
</a><a </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-" href="#contributors-"
title="All Contributors" title="All Contributors"
><img src="https://img.shields.io/badge/all_contributors-131-pink.svg" ><img src="https://img.shields.io/badge/all_contributors-131-pink.svg"
alt="All Contributors"/> alt="All Contributors"/>
</a></p><p align='center'><a </a></p><p align='center'><a
href="https://twitter.com/freesewing_org" href="https://forum.freesewing.org"
title="Follow @freesewing_org on Twitter" 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"/> alt="Follow @freesewing_org on Twitter"/>
</a><a </a><a
href="https://chat.freesewing.org" href="https://chat.freesewing.org"
@ -38,11 +28,6 @@
title="Become a FreeSewing Patron" 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" ><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"/> 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> </a></p>
# @freesewing/bella # @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. > 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 > 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? 🤔 ## What am I looking at? 🤔
@ -76,7 +61,7 @@ npm run tips
> [!NOTE] > [!NOTE]
> If you don't want to set up a dev environment, you can run it in your browser: > 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 > We recommend that you fork our repository and then
> put `gitpod.io/#<entire-url-of-your-fork` into a browser > 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. 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. sewing patterns adapted to your measurements.
If you're a developer, the FreeSewing documentation lives at [freesewing.dev](https://freesewing.dev/). 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: If you have NodeJS installed, you can try it right now by running:
```bash ```bash
npx @freesewing/new-design npx @freesewing/studio
``` ```
Getting started guides are available for: 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: To get started with FreeSewing, you can spin up our development environment with:
```bash ```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. To work with FreeSewing's monorepo, you'll need [NodeJS v20](https://nodejs.org) on your system.
Once you have those, clone (or fork) this repo and run `yarn kickstart`: Once you have that, clone (or fork) this repo and run `npm run kickstart`:
```bash ```bash
git clone git@github.com:freesewing/freesewing.git git clone git@codeberg.org:freesewing/freesewing.git
cd freesewing cd freesewing
yarn kickstart npm run kickstart
``` ```
## Links 👩‍💻 ## Links 👩‍💻
**Official channels** **Official channels**
- 💻 Makers website: [FreeSewing.org](https://freesewing.org) - 💻 Makers website: [FreeSewing.eu](https://freesewing.eu/)
- 💻 Developers website: [FreeSewing.dev](https://freesewing.dev) - 💻 Developers website: [FreeSewing.dev](https://freesewing.dev/)
- ✅ [Support](https://github.com/freesewing/freesewing/issues/new/choose), - ✅ [Support](https://forum.freesewing.eu/),
[Issues](https://github.com/freesewing/freesewing/issues) & [Issues](https://codeberg.org/freesewing/freesewing/issues) &
[Discussions](https://github.com/freesewing/freesewing/discussions) on [Codeberg](https://codeberg.org/freesewing/freesewing)
[GitHub](https://github.com/freesewing/freesewing)
**Social media** **Social media**
- 🐦 Twitter: [@freesewing_org](https://twitter.com/freesewing_org) - 🐘 Mastodon: [@freesewing](https://freesewing.social/@freesewing) on [FreeSewing.social](https://freesewing.social/)
- 📷 Instagram: [@freesewing_org](https://instagram.com/freesewing_org) - 🐘 Mastodon: [@joost](https://freesewing.social/@joost) on [FreeSewing.social](https://freesewing.social/)
**Places the FreeSewing community hangs out** **Places the FreeSewing community hangs out**
- 💬 [Forum](https://forum.freesewing.eu/)
- 💬 [Discord](https://discord.freesewing.org/) - 💬 [Discord](https://discord.freesewing.org/)
- 💬 [Facebook](https://www.facebook.com/groups/627769821272714/)
- 💬 [Reddit](https://www.reddit.com/r/freesewing/) - 💬 [Reddit](https://www.reddit.com/r/freesewing/)
## License: MIT 🤓 ## License: MIT 🤓
© [Joost De Cock](https://github.com/joostdecock). © [Joost De Cock](https://codeberg.org/joostdecock).
See [the license file](https://github.com/freesewing/freesewing/blob/develop/LICENSE) for details. See [the license file](https://codeberg.org/freesewing/freesewing/blob/develop/LICENSE) for details.
## Where to get help 🤯 ## Where to get help 🤯
For [Support](https://github.com/freesewing/freesewing/issues/new/choose), For [Support](https://freesewing.eu/support), please use the [forum](https://forum.freesewing.eu).
please use the [Issues](https://github.com/freesewing/freesewing/issues) &
[Discussions](https://github.com/freesewing/freesewing/discussions) on
[GitHub](https://github.com/freesewing/freesewing).

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 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", "name": "@freesewing/bella",
"version": "3.3.0-rc.1", "version": "4.0.0",
"description": "A FreeSewing pattern for a womenswear bodice block", "description": "A FreeSewing pattern for a womenswear bodice block",
"author": "Joost De Cock <joost@joost.at> (https://github.com/joostdecock)", "author": "Joost De Cock <joost@joost.at> (https://github.com/joostdecock)",
"homepage": "https://freesewing.org/", "homepage": "https://freesewing.org/",
@ -25,48 +25,39 @@
"sewing pattern" "sewing pattern"
], ],
"type": "module", "type": "module",
"module": "dist/index.mjs", "module": "src/index.mjs",
"exports": { "exports": {
".": { ".": "./src/index.mjs"
"internal": "./src/index.mjs",
"default": "./dist/index.mjs"
}
}, },
"scripts": { "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 -", "symlink": "mkdir -p ./node_modules/@freesewing && cd ./node_modules/@freesewing && ln -s -f ../../../* . && cd -",
"test": "npx mocha tests/*.test.mjs", "test": "npx mocha tests/*.test.mjs",
"vbuild": "VERBOSE=1 node build.mjs",
"lab": "cd ../../sites/lab && yarn start",
"tips": "node ../../scripts/help.mjs", "tips": "node ../../scripts/help.mjs",
"lint": "npx eslint 'src/**' 'tests/*.mjs'", "lint": "npx eslint 'src/**' 'tests/*.mjs'",
"prettier": "npx prettier --write 'src/*.mjs' '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", "testci": "NODE_OPTIONS=\"--conditions=internal\" npx mocha tests/*.test.mjs --reporter ../../tests/reporters/terse.js"
"wbuild": "node build.mjs",
"wbuild:all": "yarn wbuild"
}, },
"peerDependencies": { "peerDependencies": {
"@freesewing/core": "3.3.0-rc.1" "@freesewing/core": "4.0.0"
}, },
"dependencies": {}, "dependencies": {},
"devDependencies": { "devDependencies": {
"mocha": "10.4.0", "mocha": "10.4.0",
"chai": "5.1.1", "chai": "5.1.1",
"@freesewing/models": "3.3.0-rc.1", "@freesewing/models": "4.0.0",
"@freesewing/plugin-timing": "3.3.0-rc.1" "@freesewing/plugin-timing": "4.0.0"
}, },
"files": [ "files": [
"dist/*", "src/",
"i18n/",
"about.json",
"README.md" "README.md"
], ],
"publishConfig": { "publishConfig": {
"access": "public", "access": "public",
"tag": "next" "tag": "latest"
}, },
"engines": { "engines": {
"node": ">= 18.17.0 <22" "node": ">= 20"
} }
} }

View file

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

View file

@ -1,12 +1,12 @@
import { Design } from '@freesewing/core' import { Design } from '@freesewing/core'
import { data } from '../data.mjs' import about from '../about.json' with { type: 'json' }
import { back } from './back.mjs' import { back } from './back.mjs'
import { frontSideDart } from './front-side-dart.mjs' import { frontSideDart } from './front-side-dart.mjs'
import { i18n } from '../i18n/index.mjs' import { i18n } from '../i18n/index.mjs'
const Bella = new Design({ const Bella = new Design({
data, data: about,
parts: [back, frontSideDart], 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. // 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 // Shared tests
import { testPatternConfig } from '../../../tests/designs/config.mjs' 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' import { testPatternSampling } from '../../../tests/designs/sampling.mjs'
// Test config // Test config
testPatternConfig(Bella) testPatternConfig(Bella, about)
// Test translation // Test translation
testPatternI18n(Bella, i18n) testPatternI18n(Bella, i18n)

View file

@ -9,24 +9,14 @@
><img src="https://img.shields.io/npm/l/@freesewing/benjamin.svg?label=License" ><img src="https://img.shields.io/npm/l/@freesewing/benjamin.svg?label=License"
alt="License: MIT"/> alt="License: MIT"/>
</a><a </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-" href="#contributors-"
title="All Contributors" title="All Contributors"
><img src="https://img.shields.io/badge/all_contributors-131-pink.svg" ><img src="https://img.shields.io/badge/all_contributors-131-pink.svg"
alt="All Contributors"/> alt="All Contributors"/>
</a></p><p align='center'><a </a></p><p align='center'><a
href="https://twitter.com/freesewing_org" href="https://forum.freesewing.org"
title="Follow @freesewing_org on Twitter" 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"/> alt="Follow @freesewing_org on Twitter"/>
</a><a </a><a
href="https://chat.freesewing.org" href="https://chat.freesewing.org"
@ -38,11 +28,6 @@
title="Become a FreeSewing Patron" 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" ><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"/> 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> </a></p>
# @freesewing/benjamin # @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. > 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 > 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? 🤔 ## What am I looking at? 🤔
@ -76,7 +61,7 @@ npm run tips
> [!NOTE] > [!NOTE]
> If you don't want to set up a dev environment, you can run it in your browser: > 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 > We recommend that you fork our repository and then
> put `gitpod.io/#<entire-url-of-your-fork` into a browser > 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. 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. sewing patterns adapted to your measurements.
If you're a developer, the FreeSewing documentation lives at [freesewing.dev](https://freesewing.dev/). 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: If you have NodeJS installed, you can try it right now by running:
```bash ```bash
npx @freesewing/new-design npx @freesewing/studio
``` ```
Getting started guides are available for: 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: To get started with FreeSewing, you can spin up our development environment with:
```bash ```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. To work with FreeSewing's monorepo, you'll need [NodeJS v20](https://nodejs.org) on your system.
Once you have those, clone (or fork) this repo and run `yarn kickstart`: Once you have that, clone (or fork) this repo and run `npm run kickstart`:
```bash ```bash
git clone git@github.com:freesewing/freesewing.git git clone git@codeberg.org:freesewing/freesewing.git
cd freesewing cd freesewing
yarn kickstart npm run kickstart
``` ```
## Links 👩‍💻 ## Links 👩‍💻
**Official channels** **Official channels**
- 💻 Makers website: [FreeSewing.org](https://freesewing.org) - 💻 Makers website: [FreeSewing.eu](https://freesewing.eu/)
- 💻 Developers website: [FreeSewing.dev](https://freesewing.dev) - 💻 Developers website: [FreeSewing.dev](https://freesewing.dev/)
- ✅ [Support](https://github.com/freesewing/freesewing/issues/new/choose), - ✅ [Support](https://forum.freesewing.eu/),
[Issues](https://github.com/freesewing/freesewing/issues) & [Issues](https://codeberg.org/freesewing/freesewing/issues) &
[Discussions](https://github.com/freesewing/freesewing/discussions) on [Codeberg](https://codeberg.org/freesewing/freesewing)
[GitHub](https://github.com/freesewing/freesewing)
**Social media** **Social media**
- 🐦 Twitter: [@freesewing_org](https://twitter.com/freesewing_org) - 🐘 Mastodon: [@freesewing](https://freesewing.social/@freesewing) on [FreeSewing.social](https://freesewing.social/)
- 📷 Instagram: [@freesewing_org](https://instagram.com/freesewing_org) - 🐘 Mastodon: [@joost](https://freesewing.social/@joost) on [FreeSewing.social](https://freesewing.social/)
**Places the FreeSewing community hangs out** **Places the FreeSewing community hangs out**
- 💬 [Forum](https://forum.freesewing.eu/)
- 💬 [Discord](https://discord.freesewing.org/) - 💬 [Discord](https://discord.freesewing.org/)
- 💬 [Facebook](https://www.facebook.com/groups/627769821272714/)
- 💬 [Reddit](https://www.reddit.com/r/freesewing/) - 💬 [Reddit](https://www.reddit.com/r/freesewing/)
## License: MIT 🤓 ## License: MIT 🤓
© [Joost De Cock](https://github.com/joostdecock). © [Joost De Cock](https://codeberg.org/joostdecock).
See [the license file](https://github.com/freesewing/freesewing/blob/develop/LICENSE) for details. See [the license file](https://codeberg.org/freesewing/freesewing/blob/develop/LICENSE) for details.
## Where to get help 🤯 ## Where to get help 🤯
For [Support](https://github.com/freesewing/freesewing/issues/new/choose), For [Support](https://freesewing.eu/support), please use the [forum](https://forum.freesewing.eu).
please use the [Issues](https://github.com/freesewing/freesewing/issues) &
[Discussions](https://github.com/freesewing/freesewing/discussions) on
[GitHub](https://github.com/freesewing/freesewing).

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 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", "name": "@freesewing/benjamin",
"version": "3.3.0-rc.1", "version": "4.0.0",
"description": "A FreeSewing pattern for a bow tie", "description": "A FreeSewing pattern for a bow tie",
"author": "woutervdub (https://github.com/woutervdub)", "author": "woutervdub (https://github.com/woutervdub)",
"homepage": "https://freesewing.org/", "homepage": "https://freesewing.org/",
@ -25,48 +25,39 @@
"sewing pattern" "sewing pattern"
], ],
"type": "module", "type": "module",
"module": "dist/index.mjs", "module": "src/index.mjs",
"exports": { "exports": {
".": { ".": "./src/index.mjs"
"internal": "./src/index.mjs",
"default": "./dist/index.mjs"
}
}, },
"scripts": { "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 -", "symlink": "mkdir -p ./node_modules/@freesewing && cd ./node_modules/@freesewing && ln -s -f ../../../* . && cd -",
"test": "npx mocha tests/*.test.mjs", "test": "npx mocha tests/*.test.mjs",
"vbuild": "VERBOSE=1 node build.mjs",
"lab": "cd ../../sites/lab && yarn start",
"tips": "node ../../scripts/help.mjs", "tips": "node ../../scripts/help.mjs",
"lint": "npx eslint 'src/**' 'tests/*.mjs'", "lint": "npx eslint 'src/**' 'tests/*.mjs'",
"prettier": "npx prettier --write 'src/*.mjs' '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", "testci": "NODE_OPTIONS=\"--conditions=internal\" npx mocha tests/*.test.mjs --reporter ../../tests/reporters/terse.js"
"wbuild": "node build.mjs",
"wbuild:all": "yarn wbuild"
}, },
"peerDependencies": { "peerDependencies": {
"@freesewing/core": "3.3.0-rc.1" "@freesewing/core": "4.0.0"
}, },
"dependencies": {}, "dependencies": {},
"devDependencies": { "devDependencies": {
"mocha": "10.4.0", "mocha": "10.4.0",
"chai": "5.1.1", "chai": "5.1.1",
"@freesewing/models": "3.3.0-rc.1", "@freesewing/models": "4.0.0",
"@freesewing/plugin-timing": "3.3.0-rc.1" "@freesewing/plugin-timing": "4.0.0"
}, },
"files": [ "files": [
"dist/*", "src/",
"i18n/",
"about.json",
"README.md" "README.md"
], ],
"publishConfig": { "publishConfig": {
"access": "public", "access": "public",
"tag": "next" "tag": "latest"
}, },
"engines": { "engines": {
"node": ">= 18.17.0 <22" "node": ">= 20"
} }
} }

View file

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

View file

@ -1,5 +1,5 @@
import { Design } from '@freesewing/core' import { Design } from '@freesewing/core'
import { data } from '../data.mjs' import about from '../about.json' with { type: 'json' }
import { bow1 } from './bow1.mjs' import { bow1 } from './bow1.mjs'
import { bow2 } from './bow2.mjs' import { bow2 } from './bow2.mjs'
import { bow3 } from './bow3.mjs' import { bow3 } from './bow3.mjs'
@ -8,9 +8,9 @@ import { i18n } from '../i18n/index.mjs'
// Setup our new design // Setup our new design
const Benjamin = new Design({ const Benjamin = new Design({
data, data: about,
parts: [bow1, bow2, bow3, collarBand], parts: [bow1, bow2, bow3, collarBand],
}) })
// Named exports // 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. // 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 // Shared tests
import { testPatternConfig } from '../../../tests/designs/config.mjs' 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' import { testPatternSampling } from '../../../tests/designs/sampling.mjs'
// Test config // Test config
testPatternConfig(Benjamin) testPatternConfig(Benjamin, about)
// Test translation // Test translation
testPatternI18n(Benjamin, i18n) testPatternI18n(Benjamin, i18n)

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